# Copyright 2019 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_cc_binary_with_map",
    "pw_cc_blob_info",
    "pw_cc_blob_library",
    "pw_cc_test",
)

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

licenses(["notice"])

config_setting(
    name = "kythe",
    values = {
        "define": "kythe_corpus=pigweed.googlesource.com/pigweed/pigweed",
    },
)

pw_cc_blob_info(
    name = "test_blob_aligned",
    alignas = "512",
    file_path = "test_blob_0123.bin",
    symbol_name = "kFirstBlob0123",
)

pw_cc_blob_info(
    name = "test_blob_unaligned",
    file_path = "test_blob_0123.bin",
    symbol_name = "kSecondBlob0123",
)

pw_cc_blob_library(
    name = "test_blob",
    blobs = [
        ":test_blob_aligned",
        ":test_blob_unaligned",
    ],
    namespace = "test::ns",
    out_header = "pw_build/test_blob.h",
)

pw_cc_test(
    name = "cc_blob_library_test",
    srcs = ["cc_blob_library_test.cc"],
    deps = [":test_blob"],
)

pw_cc_binary_with_map(
    name = "cc_binary_with_map",
    srcs = ["empty_main.cc"],
    # Only enable on platforms that support -Map linker flag
    target_compatible_with = select({
        "@platforms//os:macos": ["@platforms//:incompatible"],
        "@platforms//os:windows": ["@platforms//:incompatible"],
        "//conditions:default": [],
    }),
)

# Bazel produces root-relative file paths without the -ffile-prefix-map option.
pw_cc_test(
    name = "file_prefix_map_test",
    srcs = [
        "file_prefix_map_test.cc",
        "pw_build_private/file_prefix_map_test.h",
    ],
    defines = [
        "PW_BUILD_EXPECTED_HEADER_PATH=\\\"pw_build/pw_build_private/file_prefix_map_test.h\\\"",
        "PW_BUILD_EXPECTED_SOURCE_PATH=\\\"pw_build/file_prefix_map_test.cc\\\"",
    ],
)

label_flag(
    name = "default_module_config",
    # The default module config is empty.
    build_setting_default = ":empty_cc_library",
)

cc_library(
    name = "test_module_config",
    defines = [
        "PW_THREAD_FREERTOS_CONFIG_JOINING_ENABLED=1",
    ],
)

pw_cc_test(
    name = "module_config_test",
    srcs = ["module_config_test.cc"],
    # This test requires a special configuration. It's run in CI, and can be
    # run manually via,
    #
    #   bazel build \
    #     --//pw_thread_freertos:config_override=//pw_build:test_module_config \
    #     --platforms=//pw_build/platforms:testonly_freertos \
    #     //pw_build:module_config_test
    tags = ["manual"],
    deps = ["//pw_thread:thread"],
)

# This empty library is used as a placeholder for label flags that need to
# point to a library of some kind, but don't actually need the dependency to
# amount to anything.
cc_library(
    name = "empty_cc_library",
)

# A special target used instead of a cc_library as the default condition in
# backend multiplexer select statements to signal that a facade is in an
# unconfigured state. This produces better error messages than e.g. using an
# invalid label.
#
# If you're a user whose build errored out because a library transitively
# depended on this target: the platform you're targeting did not specify which
# backend to use for some facade. Look at the previous step in the dependency
# chain (printed with the error) to figure out which one.
cc_library(
    name = "unspecified_backend",
    target_compatible_with = ["@platforms//:incompatible"],
)

# Additional libraries that all binaries using Pigweed should be linked against.
#
# This is analogous to GN's pw_build_LINK_DEPS. See
# https://pigweed.dev/build_system.html#docs-build-system-bazel-link-extra-lib
# for more details.
cc_library(
    name = "default_link_extra_lib",
    deps = [
        "//pw_assert:backend_impl",
        "//pw_log:backend_impl",
    ],
)
