# Copyright 2022 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:binary_tools.bzl", "pw_elf_to_bin", "pw_elf_to_dump")
load("//pw_build:pigweed.bzl", "pw_linker_script")

cc_library(
    name = "header_test",
    hdrs = ["header_test.h"],
    includes = ["."],
)

pw_linker_script(
    name = "linker_script_test",
    defines = [
        "PW_BOOT_FLASH_BEGIN=0x08000200",
        "PW_BOOT_FLASH_SIZE=1024K",
        "PW_BOOT_HEAP_SIZE=112K",
        "PW_BOOT_MIN_STACK_SIZE=1K",
        "PW_BOOT_RAM_BEGIN=0x20000000",
        "PW_BOOT_RAM_SIZE=192K",
        "PW_BOOT_VECTOR_TABLE_BEGIN=0x08000000",
        "PW_BOOT_VECTOR_TABLE_SIZE=1M",
    ],
    linker_script = "linker_script.ld",
    deps = [
        ":header_test",
        "//pw_build:must_place",
    ],
)

# Use cc_binary to build the test to avoid duplicating the linker script in the
# command line via implicit deps in pw_cc_binary.
cc_binary(
    name = "test_linker_script",
    srcs = ["test.cc"],
    copts = ["-Wno-unused-variable"],
    # Only compatible with platforms that support linker scripts.
    # This test and its siblings will not link with asan:
    # ld.lld: error: section '.text' will not fit in region 'VECTOR_TABLE': overflowed by 319296 bytes
    # ld.lld: error: section '.init' will not fit in region 'VECTOR_TABLE': overflowed by 319319 bytes
    # ld.lld: error: section '.fini' will not fit in region 'VECTOR_TABLE': overflowed by 319329 bytes
    # ld.lld: error: section '.plt' will not fit in region 'VECTOR_TABLE': overflowed by 320096 bytes
    # ld.lld: error: section '.bss' will not fit in region 'RAM': overflowed by 10135216 bytes
    features = ["-pic"],
    target_compatible_with = select({
        "//pw_toolchain/host_clang:asan_enabled": ["@platforms//:incompatible"],
        "@platforms//os:linux": [],
        "//conditions:default": ["@platforms//:incompatible"],
    }),
    deps = [":linker_script_test"],
)

# Use cc_library to depend on the linker script, and then use cc_binary to build
# the test, verifying that linker scripts can be included via transitive deps.
cc_library(
    name = "lib_linker_script",
    deps = [":linker_script_test"],
)

cc_binary(
    name = "test_transitive_linker_script",
    srcs = ["test.cc"],
    copts = ["-Wno-unused-variable"],
    features = ["-pic"],
    # Only compatible with platforms that support linker scripts.
    target_compatible_with = select({
        "//pw_toolchain/host_clang:asan_enabled": ["@platforms//:incompatible"],
        "@platforms//os:linux": [],
        "//conditions:default": ["@platforms//:incompatible"],
    }),
    deps = [":lib_linker_script"],
)

# Verify that the linker script can also be specified directly.
cc_binary(
    name = "test_direct_linker_script",
    srcs = ["test.cc"],
    additional_linker_inputs = [":linker_script_test"],
    copts = ["-Wno-unused-variable"],
    features = ["-pic"],
    linkopts = ["-T $(location :linker_script_test)"],
    # Only compatible with platforms that support linker scripts.
    target_compatible_with = select({
        "//pw_toolchain/host_clang:asan_enabled": ["@platforms//:incompatible"],
        "@platforms//os:linux": [],
        "//conditions:default": ["@platforms//:incompatible"],
    }),
)

pw_elf_to_bin(
    name = "test_bin",
    bin_out = "test.bin",
    elf_input = ":test_linker_script",
)

pw_elf_to_dump(
    name = "test_dump",
    dump_out = "test.dump",
    elf_input = ":test_linker_script",
)
