xref: /aosp_15_r20/external/pigweed/pw_toolchain/host_clang/toolchains.gni (revision 61c4878ac05f98d0ceed94b57d316916de578985)
1*61c4878aSAndroid Build Coastguard Worker# Copyright 2020 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/defaults.gni")
18*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_toolchain/clang_tools.gni")
19*61c4878aSAndroid Build Coastguard Worker
20*61c4878aSAndroid Build Coastguard Workerdeclare_args() {
21*61c4878aSAndroid Build Coastguard Worker  # Sets the sanitizer to pass to clang. Valid values are "address", "memory",
22*61c4878aSAndroid Build Coastguard Worker  # "thread", "undefined", "undefined_heuristic".
23*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_SANITIZERS = []
24*61c4878aSAndroid Build Coastguard Worker
25*61c4878aSAndroid Build Coastguard Worker  # Indicates if this toolchain supports generating coverage reports from
26*61c4878aSAndroid Build Coastguard Worker  # pw_test targets.
27*61c4878aSAndroid Build Coastguard Worker  #
28*61c4878aSAndroid Build Coastguard Worker  # For example, the static analysis toolchains that run `clang-tidy` instead
29*61c4878aSAndroid Build Coastguard Worker  # of the test binary itself cannot generate coverage reports.
30*61c4878aSAndroid Build Coastguard Worker  #
31*61c4878aSAndroid Build Coastguard Worker  # This is typically set by individual toolchains and not by GN args.
32*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_COVERAGE_ENABLED = false
33*61c4878aSAndroid Build Coastguard Worker
34*61c4878aSAndroid Build Coastguard Worker  # List of source files to selectively collect coverage.
35*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_PROFILE_SOURCE_FILES = []
36*61c4878aSAndroid Build Coastguard Worker
37*61c4878aSAndroid Build Coastguard Worker  # Indicates if this toolchain supports building fuzzers. This is typically
38*61c4878aSAndroid Build Coastguard Worker  # set by individual toolchains and not by GN args.
39*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_FUZZING_ENABLED = false
40*61c4878aSAndroid Build Coastguard Worker
41*61c4878aSAndroid Build Coastguard Worker  # Indicates if this build is a part of OSS-Fuzz, which needs to be able to
42*61c4878aSAndroid Build Coastguard Worker  # provide its own compiler and flags. This violates the build hermeticisim and
43*61c4878aSAndroid Build Coastguard Worker  # should only be used for OSS-Fuzz.
44*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_OSS_FUZZ_ENABLED = false
45*61c4878aSAndroid Build Coastguard Worker}
46*61c4878aSAndroid Build Coastguard Worker
47*61c4878aSAndroid Build Coastguard Worker# Specifies the tools used by host Clang toolchains.
48*61c4878aSAndroid Build Coastguard Worker_host_clang_toolchain = {
49*61c4878aSAndroid Build Coastguard Worker  forward_variables_from(pw_toolchain_clang_tools, "*")
50*61c4878aSAndroid Build Coastguard Worker  is_host_toolchain = true
51*61c4878aSAndroid Build Coastguard Worker  static_analysis = {
52*61c4878aSAndroid Build Coastguard Worker    # Enable static analysis for host clang based toolchains.
53*61c4878aSAndroid Build Coastguard Worker    enabled = true
54*61c4878aSAndroid Build Coastguard Worker  }
55*61c4878aSAndroid Build Coastguard Worker}
56*61c4878aSAndroid Build Coastguard Worker
57*61c4878aSAndroid Build Coastguard Worker# Common default scope shared by all host Clang toolchains.
58*61c4878aSAndroid Build Coastguard Worker_defaults = {
59*61c4878aSAndroid Build Coastguard Worker  # TODO: b/234888755 - amend toolchain declaration process to
60*61c4878aSAndroid Build Coastguard Worker  # remove this hack.
61*61c4878aSAndroid Build Coastguard Worker  default_configs = []
62*61c4878aSAndroid Build Coastguard Worker  default_configs = pigweed_default_configs + [
63*61c4878aSAndroid Build Coastguard Worker                      "$dir_pw_build:link_with_lld",
64*61c4878aSAndroid Build Coastguard Worker                      "$dir_pw_build:extra_debugging",
65*61c4878aSAndroid Build Coastguard Worker                      "$dir_pw_toolchain/host_clang:no_system_libcpp",
66*61c4878aSAndroid Build Coastguard Worker                      "$dir_pw_toolchain/host_clang:xcode_sysroot",
67*61c4878aSAndroid Build Coastguard Worker                      "$dir_pw_toolchain/host_clang:no_ms_compatibility",
68*61c4878aSAndroid Build Coastguard Worker                    ]
69*61c4878aSAndroid Build Coastguard Worker
70*61c4878aSAndroid Build Coastguard Worker  # OSS-Fuzz uses -stdlib=libc++, which isn't included in the CIPD-provided
71*61c4878aSAndroid Build Coastguard Worker  # Linux sysroot (it instead provides libstdc++).
72*61c4878aSAndroid Build Coastguard Worker  if (!pw_toolchain_OSS_FUZZ_ENABLED) {
73*61c4878aSAndroid Build Coastguard Worker    default_configs += [ "$dir_pw_toolchain/host_clang:linux_sysroot" ]
74*61c4878aSAndroid Build Coastguard Worker  }
75*61c4878aSAndroid Build Coastguard Worker
76*61c4878aSAndroid Build Coastguard Worker  pw_build_LINK_DEPS = [ dir_pw_libc ]
77*61c4878aSAndroid Build Coastguard Worker}
78*61c4878aSAndroid Build Coastguard Worker
79*61c4878aSAndroid Build Coastguard Workerpw_toolchain_host_clang = {
80*61c4878aSAndroid Build Coastguard Worker  debug = {
81*61c4878aSAndroid Build Coastguard Worker    name = "host_clang_debug"
82*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(_host_clang_toolchain, "*")
83*61c4878aSAndroid Build Coastguard Worker    defaults = {
84*61c4878aSAndroid Build Coastguard Worker      forward_variables_from(_defaults, "*")
85*61c4878aSAndroid Build Coastguard Worker      default_configs += [ "$dir_pw_build:optimize_debugging" ]
86*61c4878aSAndroid Build Coastguard Worker      foreach(sanitizer, pw_toolchain_SANITIZERS) {
87*61c4878aSAndroid Build Coastguard Worker        default_configs +=
88*61c4878aSAndroid Build Coastguard Worker            [ "$dir_pw_toolchain/host_clang:sanitize_$sanitizer" ]
89*61c4878aSAndroid Build Coastguard Worker      }
90*61c4878aSAndroid Build Coastguard Worker    }
91*61c4878aSAndroid Build Coastguard Worker  }
92*61c4878aSAndroid Build Coastguard Worker
93*61c4878aSAndroid Build Coastguard Worker  speed_optimized = {
94*61c4878aSAndroid Build Coastguard Worker    name = "host_clang_speed_optimized"
95*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(_host_clang_toolchain, "*")
96*61c4878aSAndroid Build Coastguard Worker    defaults = {
97*61c4878aSAndroid Build Coastguard Worker      forward_variables_from(_defaults, "*")
98*61c4878aSAndroid Build Coastguard Worker      default_configs += [ "$dir_pw_build:optimize_speed" ]
99*61c4878aSAndroid Build Coastguard Worker      foreach(sanitizer, pw_toolchain_SANITIZERS) {
100*61c4878aSAndroid Build Coastguard Worker        default_configs +=
101*61c4878aSAndroid Build Coastguard Worker            [ "$dir_pw_toolchain/host_clang:sanitize_$sanitizer" ]
102*61c4878aSAndroid Build Coastguard Worker      }
103*61c4878aSAndroid Build Coastguard Worker    }
104*61c4878aSAndroid Build Coastguard Worker  }
105*61c4878aSAndroid Build Coastguard Worker
106*61c4878aSAndroid Build Coastguard Worker  size_optimized = {
107*61c4878aSAndroid Build Coastguard Worker    name = "host_clang_size_optimized"
108*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(_host_clang_toolchain, "*")
109*61c4878aSAndroid Build Coastguard Worker    defaults = {
110*61c4878aSAndroid Build Coastguard Worker      forward_variables_from(_defaults, "*")
111*61c4878aSAndroid Build Coastguard Worker      default_configs += [ "$dir_pw_build:optimize_size_clang" ]
112*61c4878aSAndroid Build Coastguard Worker      foreach(sanitizer, pw_toolchain_SANITIZERS) {
113*61c4878aSAndroid Build Coastguard Worker        default_configs +=
114*61c4878aSAndroid Build Coastguard Worker            [ "$dir_pw_toolchain/host_clang:sanitize_$sanitizer" ]
115*61c4878aSAndroid Build Coastguard Worker      }
116*61c4878aSAndroid Build Coastguard Worker    }
117*61c4878aSAndroid Build Coastguard Worker  }
118*61c4878aSAndroid Build Coastguard Worker
119*61c4878aSAndroid Build Coastguard Worker  fuzz = {
120*61c4878aSAndroid Build Coastguard Worker    name = "host_clang_fuzz"
121*61c4878aSAndroid Build Coastguard Worker    cc = ""
122*61c4878aSAndroid Build Coastguard Worker    cxx = ""
123*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(_host_clang_toolchain,
124*61c4878aSAndroid Build Coastguard Worker                           "*",
125*61c4878aSAndroid Build Coastguard Worker                           [
126*61c4878aSAndroid Build Coastguard Worker                             "cc",
127*61c4878aSAndroid Build Coastguard Worker                             "cxx",
128*61c4878aSAndroid Build Coastguard Worker                           ])
129*61c4878aSAndroid Build Coastguard Worker
130*61c4878aSAndroid Build Coastguard Worker    # OSS-Fuzz sets compiler paths. See
131*61c4878aSAndroid Build Coastguard Worker    # google.github.io/oss-fuzz/getting-started/new-project-guide/#Requirements.
132*61c4878aSAndroid Build Coastguard Worker    if (pw_toolchain_OSS_FUZZ_ENABLED) {
133*61c4878aSAndroid Build Coastguard Worker      cc = getenv("CC")
134*61c4878aSAndroid Build Coastguard Worker      cxx = getenv("CXX")
135*61c4878aSAndroid Build Coastguard Worker    }
136*61c4878aSAndroid Build Coastguard Worker    if (cc == "") {
137*61c4878aSAndroid Build Coastguard Worker      cc = _host_clang_toolchain.cc
138*61c4878aSAndroid Build Coastguard Worker    }
139*61c4878aSAndroid Build Coastguard Worker    if (cxx == "") {
140*61c4878aSAndroid Build Coastguard Worker      cxx = _host_clang_toolchain.cxx
141*61c4878aSAndroid Build Coastguard Worker    }
142*61c4878aSAndroid Build Coastguard Worker    defaults = {
143*61c4878aSAndroid Build Coastguard Worker      forward_variables_from(_defaults, "*")
144*61c4878aSAndroid Build Coastguard Worker
145*61c4878aSAndroid Build Coastguard Worker      pw_toolchain_FUZZING_ENABLED = true
146*61c4878aSAndroid Build Coastguard Worker      if (pw_toolchain_OSS_FUZZ_ENABLED) {
147*61c4878aSAndroid Build Coastguard Worker        default_configs += [ "$dir_pw_fuzzer:oss_fuzz_instrumentation" ]
148*61c4878aSAndroid Build Coastguard Worker      } else {
149*61c4878aSAndroid Build Coastguard Worker        default_configs += [ "$dir_pw_fuzzer:instrumentation" ]
150*61c4878aSAndroid Build Coastguard Worker      }
151*61c4878aSAndroid Build Coastguard Worker
152*61c4878aSAndroid Build Coastguard Worker      # Fuzz faster.
153*61c4878aSAndroid Build Coastguard Worker      default_configs += [ "$dir_pw_build:optimize_speed" ]
154*61c4878aSAndroid Build Coastguard Worker
155*61c4878aSAndroid Build Coastguard Worker      # Default to ASan for fuzzing, which is what we typically care about.
156*61c4878aSAndroid Build Coastguard Worker      if (pw_toolchain_SANITIZERS == []) {
157*61c4878aSAndroid Build Coastguard Worker        pw_toolchain_SANITIZERS = [ "address" ]
158*61c4878aSAndroid Build Coastguard Worker      }
159*61c4878aSAndroid Build Coastguard Worker      foreach(sanitizer, pw_toolchain_SANITIZERS) {
160*61c4878aSAndroid Build Coastguard Worker        default_configs +=
161*61c4878aSAndroid Build Coastguard Worker            [ "$dir_pw_toolchain/host_clang:sanitize_$sanitizer" ]
162*61c4878aSAndroid Build Coastguard Worker      }
163*61c4878aSAndroid Build Coastguard Worker    }
164*61c4878aSAndroid Build Coastguard Worker  }
165*61c4878aSAndroid Build Coastguard Worker
166*61c4878aSAndroid Build Coastguard Worker  asan = {
167*61c4878aSAndroid Build Coastguard Worker    name = "host_clang_asan"
168*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(_host_clang_toolchain, "*")
169*61c4878aSAndroid Build Coastguard Worker    defaults = {
170*61c4878aSAndroid Build Coastguard Worker      forward_variables_from(_defaults, "*")
171*61c4878aSAndroid Build Coastguard Worker
172*61c4878aSAndroid Build Coastguard Worker      # Use debug mode to get proper debug information.
173*61c4878aSAndroid Build Coastguard Worker      default_configs += [ "$dir_pw_build:optimize_debugging" ]
174*61c4878aSAndroid Build Coastguard Worker      default_configs += [ "$dir_pw_toolchain/host_clang:sanitize_address" ]
175*61c4878aSAndroid Build Coastguard Worker    }
176*61c4878aSAndroid Build Coastguard Worker  }
177*61c4878aSAndroid Build Coastguard Worker
178*61c4878aSAndroid Build Coastguard Worker  ubsan = {
179*61c4878aSAndroid Build Coastguard Worker    name = "host_clang_ubsan"
180*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(_host_clang_toolchain, "*")
181*61c4878aSAndroid Build Coastguard Worker    defaults = {
182*61c4878aSAndroid Build Coastguard Worker      forward_variables_from(_defaults, "*")
183*61c4878aSAndroid Build Coastguard Worker
184*61c4878aSAndroid Build Coastguard Worker      # Use debug mode to get proper debug information.
185*61c4878aSAndroid Build Coastguard Worker      default_configs += [ "$dir_pw_build:optimize_debugging" ]
186*61c4878aSAndroid Build Coastguard Worker      default_configs += [ "$dir_pw_toolchain/host_clang:sanitize_undefined" ]
187*61c4878aSAndroid Build Coastguard Worker    }
188*61c4878aSAndroid Build Coastguard Worker  }
189*61c4878aSAndroid Build Coastguard Worker
190*61c4878aSAndroid Build Coastguard Worker  ubsan_heuristic = {
191*61c4878aSAndroid Build Coastguard Worker    name = "host_clang_ubsan_heuristic"
192*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(_host_clang_toolchain, "*")
193*61c4878aSAndroid Build Coastguard Worker    defaults = {
194*61c4878aSAndroid Build Coastguard Worker      forward_variables_from(_defaults, "*")
195*61c4878aSAndroid Build Coastguard Worker
196*61c4878aSAndroid Build Coastguard Worker      # Use debug mode to get proper debug information.
197*61c4878aSAndroid Build Coastguard Worker      default_configs += [ "$dir_pw_build:optimize_debugging" ]
198*61c4878aSAndroid Build Coastguard Worker      default_configs +=
199*61c4878aSAndroid Build Coastguard Worker          [ "$dir_pw_toolchain/host_clang:sanitize_undefined_heuristic" ]
200*61c4878aSAndroid Build Coastguard Worker    }
201*61c4878aSAndroid Build Coastguard Worker  }
202*61c4878aSAndroid Build Coastguard Worker
203*61c4878aSAndroid Build Coastguard Worker  msan = {
204*61c4878aSAndroid Build Coastguard Worker    name = "host_clang_msan"
205*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(_host_clang_toolchain, "*")
206*61c4878aSAndroid Build Coastguard Worker    defaults = {
207*61c4878aSAndroid Build Coastguard Worker      forward_variables_from(_defaults, "*")
208*61c4878aSAndroid Build Coastguard Worker
209*61c4878aSAndroid Build Coastguard Worker      # Use debug mode to get proper debug information.
210*61c4878aSAndroid Build Coastguard Worker      default_configs += [ "$dir_pw_build:optimize_debugging" ]
211*61c4878aSAndroid Build Coastguard Worker      default_configs += [ "$dir_pw_toolchain/host_clang:sanitize_memory" ]
212*61c4878aSAndroid Build Coastguard Worker    }
213*61c4878aSAndroid Build Coastguard Worker  }
214*61c4878aSAndroid Build Coastguard Worker
215*61c4878aSAndroid Build Coastguard Worker  tsan = {
216*61c4878aSAndroid Build Coastguard Worker    name = "host_clang_tsan"
217*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(_host_clang_toolchain, "*")
218*61c4878aSAndroid Build Coastguard Worker    defaults = {
219*61c4878aSAndroid Build Coastguard Worker      forward_variables_from(_defaults, "*")
220*61c4878aSAndroid Build Coastguard Worker
221*61c4878aSAndroid Build Coastguard Worker      # Use debug mode to get proper debug information.
222*61c4878aSAndroid Build Coastguard Worker      default_configs += [ "$dir_pw_build:optimize_debugging" ]
223*61c4878aSAndroid Build Coastguard Worker      default_configs += [ "$dir_pw_toolchain/host_clang:sanitize_thread" ]
224*61c4878aSAndroid Build Coastguard Worker    }
225*61c4878aSAndroid Build Coastguard Worker  }
226*61c4878aSAndroid Build Coastguard Worker
227*61c4878aSAndroid Build Coastguard Worker  coverage = {
228*61c4878aSAndroid Build Coastguard Worker    name = "host_clang_coverage"
229*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(_host_clang_toolchain, "*")
230*61c4878aSAndroid Build Coastguard Worker    defaults = {
231*61c4878aSAndroid Build Coastguard Worker      forward_variables_from(_defaults, "*")
232*61c4878aSAndroid Build Coastguard Worker
233*61c4878aSAndroid Build Coastguard Worker      # Use debug mode to get proper debug information.
234*61c4878aSAndroid Build Coastguard Worker      default_configs += [ "$dir_pw_build:optimize_debugging" ]
235*61c4878aSAndroid Build Coastguard Worker      default_configs += [ "$dir_pw_toolchain/host_clang:coverage" ]
236*61c4878aSAndroid Build Coastguard Worker
237*61c4878aSAndroid Build Coastguard Worker      # Enable PW toolchain arguments for coverage. This will only apply to
238*61c4878aSAndroid Build Coastguard Worker      # binaries built using this toolchain.
239*61c4878aSAndroid Build Coastguard Worker      pw_toolchain_COVERAGE_ENABLED = true
240*61c4878aSAndroid Build Coastguard Worker    }
241*61c4878aSAndroid Build Coastguard Worker  }
242*61c4878aSAndroid Build Coastguard Worker}
243*61c4878aSAndroid Build Coastguard Worker
244*61c4878aSAndroid Build Coastguard Worker# Describes host clang toolchains.
245*61c4878aSAndroid Build Coastguard Workerpw_toolchain_host_clang_list = [
246*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_host_clang.debug,
247*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_host_clang.speed_optimized,
248*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_host_clang.size_optimized,
249*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_host_clang.fuzz,
250*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_host_clang.asan,
251*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_host_clang.ubsan,
252*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_host_clang.ubsan_heuristic,
253*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_host_clang.msan,
254*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_host_clang.tsan,
255*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_host_clang.coverage,
256*61c4878aSAndroid Build Coastguard Worker]
257