# 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.

load(
    "//pw_build:pigweed.bzl",
    "pw_facade",
)

package(default_visibility = ["//visibility:public"])

licenses(["notice"])

constraint_setting(
    name = "backend_constraint_setting",
)

# TODO: pwbug.dev/328679085 - Remove this alias once no-one uses it.
alias(
    name = "facade",
    actual = "pw_malloc.facade",
)

COMMON_LINKOPTS = [
    # Link options that replace dynamic memory operations in standard
    # library with the pigweed malloc.
    "-Wl,--wrap=malloc",
    "-Wl,--wrap=free",
    "-Wl,--wrap=realloc",
    "-Wl,--wrap=calloc",
    "-Wl,--wrap=_malloc_r",
    "-Wl,--wrap=_realloc_r",
    "-Wl,--wrap=_free_r",
    "-Wl,--wrap=_calloc_r",
]

pw_facade(
    name = "pw_malloc",
    srcs = ["malloc.cc"],
    hdrs = [
        "public/pw_malloc/config.h",
        "public/pw_malloc/malloc.h",
    ],
    backend = ":backend",
    includes = ["public"],
    linkopts = COMMON_LINKOPTS,
    deps = [
        ":config_override",
        "//pw_allocator:allocator",
        "//pw_allocator:synchronized_allocator",
        "//pw_allocator:tracking_allocator",
        "//pw_assert",
        "//pw_bytes",
        "//pw_preprocessor",
    ],
)

label_flag(
    name = "config_override",
    build_setting_default = "//pw_build:default_module_config",
)

label_flag(
    name = "backend",
    build_setting_default = ":backend_multiplexer",
)

constraint_value(
    name = "best_fit_block_allocator_backend",
    constraint_setting = "//pw_malloc:backend_constraint_setting",
)

constraint_value(
    name = "bucket_block_allocator_backend",
    constraint_setting = "//pw_malloc:backend_constraint_setting",
)

constraint_value(
    name = "dual_first_fit_block_allocator_backend",
    constraint_setting = "//pw_malloc:backend_constraint_setting",
)

constraint_value(
    name = "first_fit_block_allocator_backend",
    constraint_setting = "//pw_malloc:backend_constraint_setting",
)

constraint_value(
    name = "freelist_backend",
    constraint_setting = "//pw_malloc:backend_constraint_setting",
)

constraint_value(
    name = "last_fit_block_allocator_backend",
    constraint_setting = "//pw_malloc:backend_constraint_setting",
)

constraint_value(
    name = "worst_fit_block_allocator_backend",
    constraint_setting = "//pw_malloc:backend_constraint_setting",
)

alias(
    name = "backend_multiplexer",
    actual = select({
        "//pw_malloc:best_fit_block_allocator_backend": "//pw_malloc:best_fit_block_allocator",
        "//pw_malloc:bucket_block_allocator_backend": "//pw_malloc:bucket_block_allocator",
        "//pw_malloc:dual_first_fit_block_allocator_backend": "//pw_malloc:dual_first_fit_block_allocator",
        "//pw_malloc:first_fit_block_allocator_backend": "//pw_malloc:first_fit_block_allocator",
        "//pw_malloc:last_fit_block_allocator_backend": "//pw_malloc:last_fit_block_allocator",
        "//pw_malloc:worst_fit_block_allocator_backend": "//pw_malloc:worst_fit_block_allocator",
        "//pw_malloc_freelist:backend": "//pw_malloc:bucket_block_allocator",
        "//pw_malloc_freertos:backend": "//pw_malloc_freertos",
        "//conditions:default": "//pw_build:unspecified_backend",
    }),
    visibility = ["@pigweed//targets:__pkg__"],
)

cc_library(
    name = "best_fit_block_allocator",
    srcs = ["best_fit_block_allocator.cc"],
    deps = [
        ":pw_malloc.facade",
        "//pw_allocator:best_fit_block_allocator",
    ],
)

cc_library(
    name = "bucket_block_allocator",
    srcs = ["bucket_block_allocator.cc"],
    deps = [
        "//pw_allocator:bucket_block_allocator",
        "//pw_malloc:facade",
    ],
)

cc_library(
    name = "dual_first_fit_block_allocator",
    srcs = ["dual_first_fit_block_allocator.cc"],
    deps = [
        "//pw_allocator:dual_first_fit_block_allocator",
        "//pw_malloc:facade",
    ],
)

cc_library(
    name = "first_fit_block_allocator",
    srcs = ["first_fit_block_allocator.cc"],
    deps = [
        "//pw_allocator:first_fit_block_allocator",
        "//pw_malloc:facade",
    ],
)

cc_library(
    name = "last_fit_block_allocator",
    srcs = ["last_fit_block_allocator.cc"],
    deps = [
        "//pw_allocator:last_fit_block_allocator",
        "//pw_malloc:facade",
    ],
)

cc_library(
    name = "worst_fit_block_allocator",
    srcs = ["worst_fit_block_allocator.cc"],
    deps = [
        "//pw_allocator:worst_fit_block_allocator",
        "//pw_malloc:facade",
    ],
)

# TODO(b/343531095): Add unit tests to Bazel build whenever the following
# conditions are met:
# * The backend is not set.
# * The host is not "mac", due to missing linker support.
# * No sanitizer is configured, due to conflicts with interceptors.
# * pico_malloc is not in use.
# * gtest is not in use, since it dynamically allocates before calling SetUp().
filegroup(
    name = "malloc_test",
    srcs = [
        "malloc_test.cc",
        "pw_malloc_private/test_config_overrides.h",
    ],
)
