• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2021 The Pigweed Authors
2#
3# Licensed under the Apache License, Version 2.0 (the "License"); you may not
4# use this file except in compliance with the License. You may obtain a copy of
5# the License at
6#
7#     https://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12# License for the specific language governing permissions and limitations under
13# the License.
14
15import("//build_overrides/pigweed.gni")
16
17import("$dir_pw_build/defaults.gni")
18import("$dir_pw_toolchain/clang_tools.gni")
19
20# Specifies the tools used by host Clang toolchains.
21_arm_clang_toolchain = {
22  forward_variables_from(pw_toolchain_clang_tools, "*")
23
24  link_group = true
25
26  # Enable static analysis for arm clang based toolchains.
27  static_analysis = {
28    enabled = true
29  }
30
31  # Rust macro compiles to code runs on host, and not included in device target.
32  # Always use speed optimized for less compilation time.
33  rustc_macro_toolchain_name =
34      "$dir_pigweed/targets/host:host_clang_speed_optimized"
35}
36
37# These are the defaults automatically applied to every pw_toolchain_arm_clang*
38# toolchain.
39pigweed_arm_clang_defaults = {
40  # Add LLVM libc++ library as a dependency to all targets.
41  # If `dir_pw_third_party_llvm_libcxx` is not configured, this library will be
42  # empty.
43  default_public_deps = [ dir_pw_libcxx ]
44
45  # Build LLVM builtins library from sources and link against it for each
46  # target.
47  # If `dir_pw_third_party_llvm_builtins` is not configured, this library will
48  # be empty.
49  pw_build_TOOLCHAIN_LINK_DEPS = [ "$dir_pw_toolchain:builtins" ]
50}
51
52# Configs specific to different architectures.
53_cortex_m0plus = [
54  "$dir_pw_build:link_with_lld",
55  "$dir_pw_toolchain/arm_clang:nosys",
56  "$dir_pw_toolchain/arm_clang:cortex_m0plus",
57]
58
59_cortex_m3 = [
60  "$dir_pw_build:link_with_lld",
61  "$dir_pw_toolchain/arm_clang:nosys",
62  "$dir_pw_toolchain/arm_clang:cortex_m3",
63]
64
65_cortex_m4 = [
66  "$dir_pw_build:link_with_lld",
67  "$dir_pw_toolchain/arm_clang:nosys",
68  "$dir_pw_toolchain/arm_clang:cortex_m4",
69]
70
71_cortex_m4f = [
72  "$dir_pw_toolchain/arm_clang:nosys",
73  "$dir_pw_toolchain/arm_clang:cortex_m4f",
74]
75
76_cortex_m7 = [
77  "$dir_pw_build:link_with_lld",
78  "$dir_pw_toolchain/arm_clang:nosys",
79  "$dir_pw_toolchain/arm_clang:cortex_m7",
80]
81
82_cortex_m7f = [
83  "$dir_pw_build:link_with_lld",
84  "$dir_pw_toolchain/arm_clang:nosys",
85  "$dir_pw_toolchain/arm_clang:cortex_m7f",
86]
87
88_cortex_m33 = [
89  "$dir_pw_build:link_with_lld",
90  "$dir_pw_toolchain/arm_clang:nosys",
91  "$dir_pw_toolchain/arm_clang:cortex_m33",
92]
93
94_cortex_m33f = [
95  "$dir_pw_build:link_with_lld",
96  "$dir_pw_toolchain/arm_clang:nosys",
97  "$dir_pw_toolchain/arm_clang:cortex_m33f",
98]
99
100_cortex_m55 = [
101  "$dir_pw_build:link_with_lld",
102  "$dir_pw_toolchain/arm_clang:nosys",
103  "$dir_pw_toolchain/arm_clang:cortex_m55",
104]
105
106_cortex_m55f = [
107  "$dir_pw_build:link_with_lld",
108  "$dir_pw_toolchain/arm_clang:nosys",
109  "$dir_pw_toolchain/arm_clang:cortex_m55f",
110]
111
112# Describes ARM clang toolchains for specific targets.
113pw_toolchain_arm_clang = {
114  cortex_m0plus_debug = {
115    name = "arm_clang_cortex_m0plus_debug"
116    forward_variables_from(_arm_clang_toolchain, "*")
117    defaults = {
118      forward_variables_from(pigweed_arm_clang_defaults, "*")
119      default_configs = pigweed_default_configs + _cortex_m0plus +
120                        [ "$dir_pw_build:optimize_debugging" ]
121    }
122  }
123  cortex_m0plus_speed_optimized = {
124    name = "arm_clang_cortex_m0plus_speed_optimized"
125    forward_variables_from(_arm_clang_toolchain, "*")
126    defaults = {
127      forward_variables_from(pigweed_arm_clang_defaults, "*")
128      default_configs = pigweed_default_configs + _cortex_m0plus +
129                        [ "$dir_pw_build:optimize_speed" ]
130    }
131  }
132  cortex_m0plus_size_optimized = {
133    name = "arm_clang_cortex_m0plus_size_optimized"
134    forward_variables_from(_arm_clang_toolchain, "*")
135    defaults = {
136      forward_variables_from(pigweed_arm_clang_defaults, "*")
137      default_configs = pigweed_default_configs + _cortex_m0plus +
138                        [ "$dir_pw_build:optimize_size_clang" ]
139    }
140  }
141  cortex_m3_debug = {
142    name = "arm_clang_cortex_m3_debug"
143    forward_variables_from(_arm_clang_toolchain, "*")
144    defaults = {
145      forward_variables_from(pigweed_arm_clang_defaults, "*")
146      default_configs = pigweed_default_configs + _cortex_m3 +
147                        [ "$dir_pw_build:optimize_debugging" ]
148    }
149  }
150  cortex_m3_speed_optimized = {
151    name = "arm_clang_cortex_m3_speed_optimized"
152    forward_variables_from(_arm_clang_toolchain, "*")
153    defaults = {
154      forward_variables_from(pigweed_arm_clang_defaults, "*")
155      default_configs = pigweed_default_configs + _cortex_m3 +
156                        [ "$dir_pw_build:optimize_speed" ]
157    }
158  }
159  cortex_m3_size_optimized = {
160    name = "arm_clang_cortex_m3_size_optimized"
161    forward_variables_from(_arm_clang_toolchain, "*")
162    defaults = {
163      forward_variables_from(pigweed_arm_clang_defaults, "*")
164      default_configs = pigweed_default_configs + _cortex_m3 +
165                        [ "$dir_pw_build:optimize_size_clang" ]
166    }
167  }
168  cortex_m4_debug = {
169    name = "arm_clang_cortex_m4_debug"
170    forward_variables_from(_arm_clang_toolchain, "*")
171    defaults = {
172      forward_variables_from(pigweed_arm_clang_defaults, "*")
173      default_configs = pigweed_default_configs + _cortex_m4 +
174                        [ "$dir_pw_build:optimize_debugging" ]
175    }
176  }
177  cortex_m4_speed_optimized = {
178    name = "arm_clang_cortex_m4_speed_optimized"
179    forward_variables_from(_arm_clang_toolchain, "*")
180    defaults = {
181      forward_variables_from(pigweed_arm_clang_defaults, "*")
182      default_configs = pigweed_default_configs + _cortex_m4 +
183                        [ "$dir_pw_build:optimize_speed" ]
184    }
185  }
186  cortex_m4_size_optimized = {
187    name = "arm_clang_cortex_m4_size_optimized"
188    forward_variables_from(_arm_clang_toolchain, "*")
189    defaults = {
190      forward_variables_from(pigweed_arm_clang_defaults, "*")
191      default_configs = pigweed_default_configs + _cortex_m4 +
192                        [ "$dir_pw_build:optimize_size_clang" ]
193    }
194  }
195  cortex_m4f_debug = {
196    name = "arm_clang_cortex_m4f_debug"
197    forward_variables_from(_arm_clang_toolchain, "*")
198    defaults = {
199      forward_variables_from(pigweed_arm_clang_defaults, "*")
200      default_configs = pigweed_default_configs + _cortex_m4f +
201                        [ "$dir_pw_build:optimize_debugging" ]
202    }
203  }
204  cortex_m4f_speed_optimized = {
205    name = "arm_clang_cortex_m4f_speed_optimized"
206    forward_variables_from(_arm_clang_toolchain, "*")
207    defaults = {
208      forward_variables_from(pigweed_arm_clang_defaults, "*")
209      default_configs = pigweed_default_configs + _cortex_m4f +
210                        [ "$dir_pw_build:optimize_speed" ]
211    }
212  }
213  cortex_m4f_size_optimized = {
214    name = "arm_clang_cortex_m4f_size_optimized"
215    forward_variables_from(_arm_clang_toolchain, "*")
216    defaults = {
217      forward_variables_from(pigweed_arm_clang_defaults, "*")
218      default_configs = pigweed_default_configs + _cortex_m4f +
219                        [ "$dir_pw_build:optimize_size_clang" ]
220    }
221  }
222  cortex_m7_debug = {
223    name = "arm_clang_cortex_m7_debug"
224    forward_variables_from(_arm_clang_toolchain, "*")
225    defaults = {
226      forward_variables_from(pigweed_arm_clang_defaults, "*")
227      default_configs = pigweed_default_configs + _cortex_m7 +
228                        [ "$dir_pw_build:optimize_debugging" ]
229    }
230  }
231  cortex_m7_speed_optimized = {
232    name = "arm_clang_cortex_m7_speed_optimized"
233    forward_variables_from(_arm_clang_toolchain, "*")
234    defaults = {
235      forward_variables_from(pigweed_arm_clang_defaults, "*")
236      default_configs = pigweed_default_configs + _cortex_m7 +
237                        [ "$dir_pw_build:optimize_speed" ]
238    }
239  }
240  cortex_m7_size_optimized = {
241    name = "arm_clang_cortex_m7_size_optimized"
242    forward_variables_from(_arm_clang_toolchain, "*")
243    defaults = {
244      forward_variables_from(pigweed_arm_clang_defaults, "*")
245      default_configs = pigweed_default_configs + _cortex_m7 +
246                        [ "$dir_pw_build:optimize_size_clang" ]
247    }
248  }
249  cortex_m7f_debug = {
250    name = "arm_clang_cortex_m7f_debug"
251    forward_variables_from(_arm_clang_toolchain, "*")
252    defaults = {
253      forward_variables_from(pigweed_arm_clang_defaults, "*")
254      default_configs = pigweed_default_configs + _cortex_m7f +
255                        [ "$dir_pw_build:optimize_debugging" ]
256    }
257  }
258  cortex_m7f_speed_optimized = {
259    name = "arm_clang_cortex_m7f_speed_optimized"
260    forward_variables_from(_arm_clang_toolchain, "*")
261    defaults = {
262      forward_variables_from(pigweed_arm_clang_defaults, "*")
263      default_configs = pigweed_default_configs + _cortex_m7f +
264                        [ "$dir_pw_build:optimize_speed" ]
265    }
266  }
267  cortex_m7f_size_optimized = {
268    name = "arm_clang_cortex_m7f_size_optimized"
269    forward_variables_from(_arm_clang_toolchain, "*")
270    defaults = {
271      forward_variables_from(pigweed_arm_clang_defaults, "*")
272      default_configs = pigweed_default_configs + _cortex_m7f +
273                        [ "$dir_pw_build:optimize_size_clang" ]
274    }
275  }
276  cortex_m33_debug = {
277    name = "arm_clang_cortex_m33_debug"
278    forward_variables_from(_arm_clang_toolchain, "*")
279    defaults = {
280      forward_variables_from(pigweed_arm_clang_defaults, "*")
281      default_configs = pigweed_default_configs + _cortex_m33 +
282                        [ "$dir_pw_build:optimize_debugging" ]
283    }
284  }
285  cortex_m33_speed_optimized = {
286    name = "arm_clang_cortex_m33_speed_optimized"
287    forward_variables_from(_arm_clang_toolchain, "*")
288    defaults = {
289      forward_variables_from(pigweed_arm_clang_defaults, "*")
290      default_configs = pigweed_default_configs + _cortex_m33 +
291                        [ "$dir_pw_build:optimize_speed" ]
292    }
293  }
294  cortex_m33_size_optimized = {
295    name = "arm_clang_cortex_m33_size_optimized"
296    forward_variables_from(_arm_clang_toolchain, "*")
297    defaults = {
298      forward_variables_from(pigweed_arm_clang_defaults, "*")
299      default_configs = pigweed_default_configs + _cortex_m33 +
300                        [ "$dir_pw_build:optimize_size_clang" ]
301    }
302  }
303  cortex_m33f_debug = {
304    name = "arm_clang_cortex_m33f_debug"
305    forward_variables_from(_arm_clang_toolchain, "*")
306    defaults = {
307      forward_variables_from(pigweed_arm_clang_defaults, "*")
308      default_configs = pigweed_default_configs + _cortex_m33f +
309                        [ "$dir_pw_build:optimize_debugging" ]
310    }
311  }
312  cortex_m33f_speed_optimized = {
313    name = "arm_clang_cortex_m33f_speed_optimized"
314    forward_variables_from(_arm_clang_toolchain, "*")
315    defaults = {
316      forward_variables_from(pigweed_arm_clang_defaults, "*")
317      default_configs = pigweed_default_configs + _cortex_m33f +
318                        [ "$dir_pw_build:optimize_speed" ]
319    }
320  }
321  cortex_m33f_size_optimized = {
322    name = "arm_clang_cortex_m33f_size_optimized"
323    forward_variables_from(_arm_clang_toolchain, "*")
324    defaults = {
325      forward_variables_from(pigweed_arm_clang_defaults, "*")
326      default_configs = pigweed_default_configs + _cortex_m33f +
327                        [ "$dir_pw_build:optimize_size_clang" ]
328    }
329  }
330  cortex_m55_debug = {
331    name = "arm_clang_cortex_m55_debug"
332    forward_variables_from(_arm_clang_toolchain, "*")
333    defaults = {
334      forward_variables_from(pigweed_arm_clang_defaults, "*")
335      default_configs = pigweed_default_configs + _cortex_m55 +
336                        [ "$dir_pw_build:optimize_debugging" ]
337    }
338  }
339  cortex_m55_speed_optimized = {
340    name = "arm_clang_cortex_m55_speed_optimized"
341    forward_variables_from(_arm_clang_toolchain, "*")
342    defaults = {
343      forward_variables_from(pigweed_arm_clang_defaults, "*")
344      default_configs = pigweed_default_configs + _cortex_m55 +
345                        [ "$dir_pw_build:optimize_speed" ]
346    }
347  }
348  cortex_m55_size_optimized = {
349    name = "arm_clang_cortex_m55_size_optimized"
350    forward_variables_from(_arm_clang_toolchain, "*")
351    defaults = {
352      forward_variables_from(pigweed_arm_clang_defaults, "*")
353      default_configs = pigweed_default_configs + _cortex_m55 +
354                        [ "$dir_pw_build:optimize_size_clang" ]
355    }
356  }
357  cortex_m55f_debug = {
358    name = "arm_clang_cortex_m55f_debug"
359    forward_variables_from(_arm_clang_toolchain, "*")
360    defaults = {
361      forward_variables_from(pigweed_arm_clang_defaults, "*")
362      default_configs = pigweed_default_configs + _cortex_m55f +
363                        [ "$dir_pw_build:optimize_debugging" ]
364    }
365  }
366  cortex_m55f_speed_optimized = {
367    name = "arm_clang_cortex_m55f_speed_optimized"
368    forward_variables_from(_arm_clang_toolchain, "*")
369    defaults = {
370      forward_variables_from(pigweed_arm_clang_defaults, "*")
371      default_configs = pigweed_default_configs + _cortex_m55f +
372                        [ "$dir_pw_build:optimize_speed" ]
373    }
374  }
375  cortex_m55f_size_optimized = {
376    name = "arm_clang_cortex_m55f_size_optimized"
377    forward_variables_from(_arm_clang_toolchain, "*")
378    defaults = {
379      forward_variables_from(pigweed_arm_clang_defaults, "*")
380      default_configs = pigweed_default_configs + _cortex_m55f +
381                        [ "$dir_pw_build:optimize_size_clang" ]
382    }
383  }
384}
385
386# This list just contains the members of the above scope for convenience to make
387# it trivial to generate all the toolchains in this file via a
388# `generate_toolchains` target.
389pw_toolchain_arm_clang_list = [
390  pw_toolchain_arm_clang.cortex_m0plus_debug,
391  pw_toolchain_arm_clang.cortex_m0plus_speed_optimized,
392  pw_toolchain_arm_clang.cortex_m0plus_size_optimized,
393  pw_toolchain_arm_clang.cortex_m3_debug,
394  pw_toolchain_arm_clang.cortex_m3_speed_optimized,
395  pw_toolchain_arm_clang.cortex_m3_size_optimized,
396  pw_toolchain_arm_clang.cortex_m4_debug,
397  pw_toolchain_arm_clang.cortex_m4_speed_optimized,
398  pw_toolchain_arm_clang.cortex_m4_size_optimized,
399  pw_toolchain_arm_clang.cortex_m4f_debug,
400  pw_toolchain_arm_clang.cortex_m4f_speed_optimized,
401  pw_toolchain_arm_clang.cortex_m4f_size_optimized,
402  pw_toolchain_arm_clang.cortex_m7_debug,
403  pw_toolchain_arm_clang.cortex_m7_speed_optimized,
404  pw_toolchain_arm_clang.cortex_m7_size_optimized,
405  pw_toolchain_arm_clang.cortex_m7f_debug,
406  pw_toolchain_arm_clang.cortex_m7f_speed_optimized,
407  pw_toolchain_arm_clang.cortex_m7f_size_optimized,
408  pw_toolchain_arm_clang.cortex_m33_debug,
409  pw_toolchain_arm_clang.cortex_m33_speed_optimized,
410  pw_toolchain_arm_clang.cortex_m33_size_optimized,
411  pw_toolchain_arm_clang.cortex_m33f_debug,
412  pw_toolchain_arm_clang.cortex_m33f_speed_optimized,
413  pw_toolchain_arm_clang.cortex_m33f_size_optimized,
414  pw_toolchain_arm_clang.cortex_m55_debug,
415  pw_toolchain_arm_clang.cortex_m55_speed_optimized,
416  pw_toolchain_arm_clang.cortex_m55_size_optimized,
417  pw_toolchain_arm_clang.cortex_m55f_debug,
418  pw_toolchain_arm_clang.cortex_m55f_speed_optimized,
419  pw_toolchain_arm_clang.cortex_m55f_size_optimized,
420]
421