# Copyright 2020 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

import("//build_overrides/pigweed.gni")

import("$dir_pw_build/facade.gni")
import("$dir_pw_build/target_types.gni")
import("$dir_pw_docgen/docs.gni")
import("$dir_pw_malloc/backend.gni")
import("$dir_pw_unit_test/test.gni")

config("default_config") {
  include_dirs = [ "public" ]
}

config("pw_malloc_wrapper_config") {
  # Link options that provides replace dynamic memory operations in standard
  # library with the pigweed malloc.
  ldflags = [
    # memory allocation -- these must be re-entrant and do locking
    "-Wl,--wrap=malloc",
    "-Wl,--wrap=free",
    "-Wl,--wrap=realloc",
    "-Wl,--wrap=calloc",

    # Wrap these in case internal newlib call them (e.g. strdup will)
    # directly call _malloc_r)
    "-Wl,--wrap=_malloc_r",
    "-Wl,--wrap=_realloc_r",
    "-Wl,--wrap=_free_r",
    "-Wl,--wrap=_calloc_r",
  ]
}

pw_facade("pw_malloc") {
  public_configs = [ ":default_config" ]
  public = [ "public/pw_malloc/malloc.h" ]
  backend = pw_malloc_BACKEND
}

pw_doc_group("docs") {
  sources = [ "docs.rst" ]
}
