# Copyright 2021 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_test", ) package(default_visibility = ["//visibility:public"]) licenses(["notice"]) cc_library( name = "build_id_header", hdrs = [ "public/pw_build_info/build_id.h", "public/pw_build_info/util.h", ], includes = ["public"], deps = [ "//pw_span", ], ) cc_library( name = "build_id", srcs = [ "build_id.cc", "util.cc", ], # Automatically add the gnu build ID linker sections when building for # Linux. macOS and Windows executables are not supported, and embedded # targets must manually add the snippet to their linker script in a # read-only section. linkopts = select({ # When building for Linux, the linker provides a default linker script. # The add_build_id_to_default_script.ld wrapper includes the # build_id_linker_snippet.ld script in a way that appends to the # default linker script instead of overriding it. "@platforms//os:linux": [ "-T$(location add_build_id_to_default_linker_script.ld)", ], "//conditions:default": [], }) + [ "-Lpw_build_info", "-Wl,--build-id=sha1", ], deps = select({ "@platforms//os:linux": [ ":add_build_id_to_default_linker_script.ld", ":build_id_linker_snippet.ld", ], "//conditions:default": [], }) + [ ":build_id_header", "//pw_log", "//pw_preprocessor", "//pw_span", "//pw_string", ], ) cc_library( name = "build_id_noop", srcs = [ "build_id_noop.cc", "util.cc", ], deps = [ ":build_id_header", "//pw_log", "//pw_span", "//pw_string", ], ) cc_library( name = "build_id_or_noop", deps = select({ "@platforms//os:ios": [":build_id_noop"], "@platforms//os:macos": [":build_id_noop"], "@platforms//os:windows": [":build_id_noop"], "//conditions:default": [":build_id"], }), ) pw_cc_test( name = "build_id_test", srcs = ["build_id_test.cc"], # This test is only compatible with linux. macOS and Windows are not # supported, and embedded targets must manually add the snippet to their # linker scripts target_compatible_with = ["@platforms//os:linux"], deps = [ ":build_id", "//pw_span", "//pw_unit_test", ], )