xref: /aosp_15_r20/external/pigweed/pw_build_info/BUILD.gn (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2021 The Pigweed Authors
2*61c4878aSAndroid Build Coastguard Worker#
3*61c4878aSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*61c4878aSAndroid Build Coastguard Worker# use this file except in compliance with the License. You may obtain a copy of
5*61c4878aSAndroid Build Coastguard Worker# the License at
6*61c4878aSAndroid Build Coastguard Worker#
7*61c4878aSAndroid Build Coastguard Worker#     https://www.apache.org/licenses/LICENSE-2.0
8*61c4878aSAndroid Build Coastguard Worker#
9*61c4878aSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
10*61c4878aSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*61c4878aSAndroid Build Coastguard Worker# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*61c4878aSAndroid Build Coastguard Worker# License for the specific language governing permissions and limitations under
13*61c4878aSAndroid Build Coastguard Worker# the License.
14*61c4878aSAndroid Build Coastguard Worker
15*61c4878aSAndroid Build Coastguard Workerimport("//build_overrides/pigweed.gni")
16*61c4878aSAndroid Build Coastguard Worker
17*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/target_types.gni")
18*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_docgen/docs.gni")
19*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_unit_test/test.gni")
20*61c4878aSAndroid Build Coastguard Worker
21*61c4878aSAndroid Build Coastguard Workerconfig("linker_script") {
22*61c4878aSAndroid Build Coastguard Worker  inputs = [ "build_id_linker_snippet.ld" ]
23*61c4878aSAndroid Build Coastguard Worker
24*61c4878aSAndroid Build Coastguard Worker  # Automatically add the gnu build ID linker sections when building for Linux.
25*61c4878aSAndroid Build Coastguard Worker  # macOS and Windows executables are not supported, and embedded targets must
26*61c4878aSAndroid Build Coastguard Worker  # manually add the snippet to their linker script in a read-only section.
27*61c4878aSAndroid Build Coastguard Worker  if (current_os == "linux") {
28*61c4878aSAndroid Build Coastguard Worker    # When building for Linux, the linker provides a default linker script.
29*61c4878aSAndroid Build Coastguard Worker    # The add_build_id_to_default_script.ld wrapper includes the
30*61c4878aSAndroid Build Coastguard Worker    # build_id_linker_snippet.ld script in a way that appends to the default
31*61c4878aSAndroid Build Coastguard Worker    # linker script instead of overriding it.
32*61c4878aSAndroid Build Coastguard Worker    ldflags = [
33*61c4878aSAndroid Build Coastguard Worker      "-T",
34*61c4878aSAndroid Build Coastguard Worker      rebase_path("add_build_id_to_default_linker_script.ld", root_build_dir),
35*61c4878aSAndroid Build Coastguard Worker    ]
36*61c4878aSAndroid Build Coastguard Worker    lib_dirs = [ "." ]
37*61c4878aSAndroid Build Coastguard Worker
38*61c4878aSAndroid Build Coastguard Worker    inputs += [ "add_build_id_to_default_linker_script.ld" ]
39*61c4878aSAndroid Build Coastguard Worker  }
40*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ]
41*61c4878aSAndroid Build Coastguard Worker}
42*61c4878aSAndroid Build Coastguard Worker
43*61c4878aSAndroid Build Coastguard Workerconfig("gnu_build_id") {
44*61c4878aSAndroid Build Coastguard Worker  ldflags = [ "-Wl,--build-id=sha1" ]
45*61c4878aSAndroid Build Coastguard Worker}
46*61c4878aSAndroid Build Coastguard Worker
47*61c4878aSAndroid Build Coastguard Workerconfig("public_include_path") {
48*61c4878aSAndroid Build Coastguard Worker  include_dirs = [ "public" ]
49*61c4878aSAndroid Build Coastguard Worker  visibility = [ ":*" ]
50*61c4878aSAndroid Build Coastguard Worker}
51*61c4878aSAndroid Build Coastguard Worker
52*61c4878aSAndroid Build Coastguard Worker# GNU build IDs aren't supported by Windows and macOS.
53*61c4878aSAndroid Build Coastguard Workerif (current_os == "mac" || current_os == "win") {
54*61c4878aSAndroid Build Coastguard Worker  # noop version of the package that allows build_id users to still be built
55*61c4878aSAndroid Build Coastguard Worker  # for unsupported platforms and avoids amplifying downstream complexity. It
56*61c4878aSAndroid Build Coastguard Worker  # provides a noop version of pw::build_info::BuildId() which just returns an
57*61c4878aSAndroid Build Coastguard Worker  # empty span.
58*61c4878aSAndroid Build Coastguard Worker  pw_source_set("build_id_or_noop") {
59*61c4878aSAndroid Build Coastguard Worker    public_configs = [ ":public_include_path" ]
60*61c4878aSAndroid Build Coastguard Worker    public = [
61*61c4878aSAndroid Build Coastguard Worker      "public/pw_build_info/build_id.h",
62*61c4878aSAndroid Build Coastguard Worker      "public/pw_build_info/util.h",
63*61c4878aSAndroid Build Coastguard Worker    ]
64*61c4878aSAndroid Build Coastguard Worker    sources = [
65*61c4878aSAndroid Build Coastguard Worker      "build_id_noop.cc",
66*61c4878aSAndroid Build Coastguard Worker      "util.cc",
67*61c4878aSAndroid Build Coastguard Worker    ]
68*61c4878aSAndroid Build Coastguard Worker    deps = [
69*61c4878aSAndroid Build Coastguard Worker      dir_pw_log,
70*61c4878aSAndroid Build Coastguard Worker      dir_pw_span,
71*61c4878aSAndroid Build Coastguard Worker      dir_pw_string,
72*61c4878aSAndroid Build Coastguard Worker    ]
73*61c4878aSAndroid Build Coastguard Worker  }
74*61c4878aSAndroid Build Coastguard Worker} else {
75*61c4878aSAndroid Build Coastguard Worker  pw_source_set("build_id") {
76*61c4878aSAndroid Build Coastguard Worker    all_dependent_configs = [
77*61c4878aSAndroid Build Coastguard Worker      ":gnu_build_id",
78*61c4878aSAndroid Build Coastguard Worker      ":linker_script",
79*61c4878aSAndroid Build Coastguard Worker    ]
80*61c4878aSAndroid Build Coastguard Worker    public_configs = [ ":public_include_path" ]
81*61c4878aSAndroid Build Coastguard Worker    public = [
82*61c4878aSAndroid Build Coastguard Worker      "public/pw_build_info/build_id.h",
83*61c4878aSAndroid Build Coastguard Worker      "public/pw_build_info/util.h",
84*61c4878aSAndroid Build Coastguard Worker    ]
85*61c4878aSAndroid Build Coastguard Worker    sources = [
86*61c4878aSAndroid Build Coastguard Worker      "build_id.cc",
87*61c4878aSAndroid Build Coastguard Worker      "util.cc",
88*61c4878aSAndroid Build Coastguard Worker    ]
89*61c4878aSAndroid Build Coastguard Worker    deps = [
90*61c4878aSAndroid Build Coastguard Worker      dir_pw_log,
91*61c4878aSAndroid Build Coastguard Worker      dir_pw_preprocessor,
92*61c4878aSAndroid Build Coastguard Worker      dir_pw_span,
93*61c4878aSAndroid Build Coastguard Worker      dir_pw_string,
94*61c4878aSAndroid Build Coastguard Worker    ]
95*61c4878aSAndroid Build Coastguard Worker  }
96*61c4878aSAndroid Build Coastguard Worker
97*61c4878aSAndroid Build Coastguard Worker  pw_source_set("build_id_or_noop") {
98*61c4878aSAndroid Build Coastguard Worker    public_deps = [ ":build_id" ]
99*61c4878aSAndroid Build Coastguard Worker  }
100*61c4878aSAndroid Build Coastguard Worker}
101*61c4878aSAndroid Build Coastguard Worker
102*61c4878aSAndroid Build Coastguard Workerpw_doc_group("docs") {
103*61c4878aSAndroid Build Coastguard Worker  sources = [ "docs.rst" ]
104*61c4878aSAndroid Build Coastguard Worker  inputs = [
105*61c4878aSAndroid Build Coastguard Worker    "add_build_id_to_default_linker_script.ld",
106*61c4878aSAndroid Build Coastguard Worker    "build_id_linker_snippet.ld",
107*61c4878aSAndroid Build Coastguard Worker  ]
108*61c4878aSAndroid Build Coastguard Worker}
109*61c4878aSAndroid Build Coastguard Worker
110*61c4878aSAndroid Build Coastguard Workerpw_test_group("tests") {
111*61c4878aSAndroid Build Coastguard Worker  tests = [ ":build_id_test" ]
112*61c4878aSAndroid Build Coastguard Worker}
113*61c4878aSAndroid Build Coastguard Worker
114*61c4878aSAndroid Build Coastguard Workerpw_test("build_id_test") {
115*61c4878aSAndroid Build Coastguard Worker  enable_if = current_os == "linux"
116*61c4878aSAndroid Build Coastguard Worker  deps = [
117*61c4878aSAndroid Build Coastguard Worker    ":build_id",
118*61c4878aSAndroid Build Coastguard Worker    "$dir_pw_span",
119*61c4878aSAndroid Build Coastguard Worker  ]
120*61c4878aSAndroid Build Coastguard Worker  sources = [ "build_id_test.cc" ]
121*61c4878aSAndroid Build Coastguard Worker}
122*61c4878aSAndroid Build Coastguard Worker
123*61c4878aSAndroid Build Coastguard Worker# git_build_info embedding isn't supported in GN build
124*61c4878aSAndroid Build Coastguard Worker# Reference to satisfy presubmit.
125*61c4878aSAndroid Build Coastguard Workercopy("git_build_info_files") {
126*61c4878aSAndroid Build Coastguard Worker  sources = [
127*61c4878aSAndroid Build Coastguard Worker    "git_build_info_test.cc",
128*61c4878aSAndroid Build Coastguard Worker    "substitute_workspace_status_tool.py",
129*61c4878aSAndroid Build Coastguard Worker  ]
130*61c4878aSAndroid Build Coastguard Worker  outputs = [ "$target_gen_dir/{{source_file_part}}" ]
131*61c4878aSAndroid Build Coastguard Worker}
132