xref: /aosp_15_r20/external/pigweed/pw_toolchain/arm_clang/toolchains.gni (revision 61c4878ac05f98d0ceed94b57d316916de578985)
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# Describes ARM clang toolchains for specific targets.
107pw_toolchain_arm_clang = {
108  cortex_m0plus_debug = {
109    name = "arm_clang_cortex_m0plus_debug"
110    forward_variables_from(_arm_clang_toolchain, "*")
111    defaults = {
112      forward_variables_from(pigweed_arm_clang_defaults, "*")
113      default_configs = pigweed_default_configs + _cortex_m0plus +
114                        [ "$dir_pw_build:optimize_debugging" ]
115    }
116  }
117  cortex_m0plus_speed_optimized = {
118    name = "arm_clang_cortex_m0plus_speed_optimized"
119    forward_variables_from(_arm_clang_toolchain, "*")
120    defaults = {
121      forward_variables_from(pigweed_arm_clang_defaults, "*")
122      default_configs = pigweed_default_configs + _cortex_m0plus +
123                        [ "$dir_pw_build:optimize_speed" ]
124    }
125  }
126  cortex_m0plus_size_optimized = {
127    name = "arm_clang_cortex_m0plus_size_optimized"
128    forward_variables_from(_arm_clang_toolchain, "*")
129    defaults = {
130      forward_variables_from(pigweed_arm_clang_defaults, "*")
131      default_configs = pigweed_default_configs + _cortex_m0plus +
132                        [ "$dir_pw_build:optimize_size_clang" ]
133    }
134  }
135  cortex_m3_debug = {
136    name = "arm_clang_cortex_m3_debug"
137    forward_variables_from(_arm_clang_toolchain, "*")
138    defaults = {
139      forward_variables_from(pigweed_arm_clang_defaults, "*")
140      default_configs = pigweed_default_configs + _cortex_m3 +
141                        [ "$dir_pw_build:optimize_debugging" ]
142    }
143  }
144  cortex_m3_speed_optimized = {
145    name = "arm_clang_cortex_m3_speed_optimized"
146    forward_variables_from(_arm_clang_toolchain, "*")
147    defaults = {
148      forward_variables_from(pigweed_arm_clang_defaults, "*")
149      default_configs = pigweed_default_configs + _cortex_m3 +
150                        [ "$dir_pw_build:optimize_speed" ]
151    }
152  }
153  cortex_m3_size_optimized = {
154    name = "arm_clang_cortex_m3_size_optimized"
155    forward_variables_from(_arm_clang_toolchain, "*")
156    defaults = {
157      forward_variables_from(pigweed_arm_clang_defaults, "*")
158      default_configs = pigweed_default_configs + _cortex_m3 +
159                        [ "$dir_pw_build:optimize_size_clang" ]
160    }
161  }
162  cortex_m4_debug = {
163    name = "arm_clang_cortex_m4_debug"
164    forward_variables_from(_arm_clang_toolchain, "*")
165    defaults = {
166      forward_variables_from(pigweed_arm_clang_defaults, "*")
167      default_configs = pigweed_default_configs + _cortex_m4 +
168                        [ "$dir_pw_build:optimize_debugging" ]
169    }
170  }
171  cortex_m4_speed_optimized = {
172    name = "arm_clang_cortex_m4_speed_optimized"
173    forward_variables_from(_arm_clang_toolchain, "*")
174    defaults = {
175      forward_variables_from(pigweed_arm_clang_defaults, "*")
176      default_configs = pigweed_default_configs + _cortex_m4 +
177                        [ "$dir_pw_build:optimize_speed" ]
178    }
179  }
180  cortex_m4_size_optimized = {
181    name = "arm_clang_cortex_m4_size_optimized"
182    forward_variables_from(_arm_clang_toolchain, "*")
183    defaults = {
184      forward_variables_from(pigweed_arm_clang_defaults, "*")
185      default_configs = pigweed_default_configs + _cortex_m4 +
186                        [ "$dir_pw_build:optimize_size_clang" ]
187    }
188  }
189  cortex_m4f_debug = {
190    name = "arm_clang_cortex_m4f_debug"
191    forward_variables_from(_arm_clang_toolchain, "*")
192    defaults = {
193      forward_variables_from(pigweed_arm_clang_defaults, "*")
194      default_configs = pigweed_default_configs + _cortex_m4f +
195                        [ "$dir_pw_build:optimize_debugging" ]
196    }
197  }
198  cortex_m4f_speed_optimized = {
199    name = "arm_clang_cortex_m4f_speed_optimized"
200    forward_variables_from(_arm_clang_toolchain, "*")
201    defaults = {
202      forward_variables_from(pigweed_arm_clang_defaults, "*")
203      default_configs = pigweed_default_configs + _cortex_m4f +
204                        [ "$dir_pw_build:optimize_speed" ]
205    }
206  }
207  cortex_m4f_size_optimized = {
208    name = "arm_clang_cortex_m4f_size_optimized"
209    forward_variables_from(_arm_clang_toolchain, "*")
210    defaults = {
211      forward_variables_from(pigweed_arm_clang_defaults, "*")
212      default_configs = pigweed_default_configs + _cortex_m4f +
213                        [ "$dir_pw_build:optimize_size_clang" ]
214    }
215  }
216  cortex_m7_debug = {
217    name = "arm_clang_cortex_m7_debug"
218    forward_variables_from(_arm_clang_toolchain, "*")
219    defaults = {
220      forward_variables_from(pigweed_arm_clang_defaults, "*")
221      default_configs = pigweed_default_configs + _cortex_m7 +
222                        [ "$dir_pw_build:optimize_debugging" ]
223    }
224  }
225  cortex_m7_speed_optimized = {
226    name = "arm_clang_cortex_m7_speed_optimized"
227    forward_variables_from(_arm_clang_toolchain, "*")
228    defaults = {
229      forward_variables_from(pigweed_arm_clang_defaults, "*")
230      default_configs = pigweed_default_configs + _cortex_m7 +
231                        [ "$dir_pw_build:optimize_speed" ]
232    }
233  }
234  cortex_m7_size_optimized = {
235    name = "arm_clang_cortex_m7_size_optimized"
236    forward_variables_from(_arm_clang_toolchain, "*")
237    defaults = {
238      forward_variables_from(pigweed_arm_clang_defaults, "*")
239      default_configs = pigweed_default_configs + _cortex_m7 +
240                        [ "$dir_pw_build:optimize_size_clang" ]
241    }
242  }
243  cortex_m7f_debug = {
244    name = "arm_clang_cortex_m7f_debug"
245    forward_variables_from(_arm_clang_toolchain, "*")
246    defaults = {
247      forward_variables_from(pigweed_arm_clang_defaults, "*")
248      default_configs = pigweed_default_configs + _cortex_m7f +
249                        [ "$dir_pw_build:optimize_debugging" ]
250    }
251  }
252  cortex_m7f_speed_optimized = {
253    name = "arm_clang_cortex_m7f_speed_optimized"
254    forward_variables_from(_arm_clang_toolchain, "*")
255    defaults = {
256      forward_variables_from(pigweed_arm_clang_defaults, "*")
257      default_configs = pigweed_default_configs + _cortex_m7f +
258                        [ "$dir_pw_build:optimize_speed" ]
259    }
260  }
261  cortex_m7f_size_optimized = {
262    name = "arm_clang_cortex_m7f_size_optimized"
263    forward_variables_from(_arm_clang_toolchain, "*")
264    defaults = {
265      forward_variables_from(pigweed_arm_clang_defaults, "*")
266      default_configs = pigweed_default_configs + _cortex_m7f +
267                        [ "$dir_pw_build:optimize_size_clang" ]
268    }
269  }
270  cortex_m33_debug = {
271    name = "arm_clang_cortex_m33_debug"
272    forward_variables_from(_arm_clang_toolchain, "*")
273    defaults = {
274      forward_variables_from(pigweed_arm_clang_defaults, "*")
275      default_configs = pigweed_default_configs + _cortex_m33 +
276                        [ "$dir_pw_build:optimize_debugging" ]
277    }
278  }
279  cortex_m33_speed_optimized = {
280    name = "arm_clang_cortex_m33_speed_optimized"
281    forward_variables_from(_arm_clang_toolchain, "*")
282    defaults = {
283      forward_variables_from(pigweed_arm_clang_defaults, "*")
284      default_configs = pigweed_default_configs + _cortex_m33 +
285                        [ "$dir_pw_build:optimize_speed" ]
286    }
287  }
288  cortex_m33_size_optimized = {
289    name = "arm_clang_cortex_m33_size_optimized"
290    forward_variables_from(_arm_clang_toolchain, "*")
291    defaults = {
292      forward_variables_from(pigweed_arm_clang_defaults, "*")
293      default_configs = pigweed_default_configs + _cortex_m33 +
294                        [ "$dir_pw_build:optimize_size_clang" ]
295    }
296  }
297  cortex_m33f_debug = {
298    name = "arm_clang_cortex_m33f_debug"
299    forward_variables_from(_arm_clang_toolchain, "*")
300    defaults = {
301      forward_variables_from(pigweed_arm_clang_defaults, "*")
302      default_configs = pigweed_default_configs + _cortex_m33f +
303                        [ "$dir_pw_build:optimize_debugging" ]
304    }
305  }
306  cortex_m33f_speed_optimized = {
307    name = "arm_clang_cortex_m33f_speed_optimized"
308    forward_variables_from(_arm_clang_toolchain, "*")
309    defaults = {
310      forward_variables_from(pigweed_arm_clang_defaults, "*")
311      default_configs = pigweed_default_configs + _cortex_m33f +
312                        [ "$dir_pw_build:optimize_speed" ]
313    }
314  }
315  cortex_m33f_size_optimized = {
316    name = "arm_clang_cortex_m33f_size_optimized"
317    forward_variables_from(_arm_clang_toolchain, "*")
318    defaults = {
319      forward_variables_from(pigweed_arm_clang_defaults, "*")
320      default_configs = pigweed_default_configs + _cortex_m33f +
321                        [ "$dir_pw_build:optimize_size_clang" ]
322    }
323  }
324  cortex_m55_debug = {
325    name = "arm_clang_cortex_m55_debug"
326    forward_variables_from(_arm_clang_toolchain, "*")
327    defaults = {
328      forward_variables_from(pigweed_arm_clang_defaults, "*")
329      default_configs = pigweed_default_configs + _cortex_m55 +
330                        [ "$dir_pw_build:optimize_debugging" ]
331    }
332  }
333  cortex_m55_speed_optimized = {
334    name = "arm_clang_cortex_m55_speed_optimized"
335    forward_variables_from(_arm_clang_toolchain, "*")
336    defaults = {
337      forward_variables_from(pigweed_arm_clang_defaults, "*")
338      default_configs = pigweed_default_configs + _cortex_m55 +
339                        [ "$dir_pw_build:optimize_speed" ]
340    }
341  }
342  cortex_m55_size_optimized = {
343    name = "arm_clang_cortex_m55_size_optimized"
344    forward_variables_from(_arm_clang_toolchain, "*")
345    defaults = {
346      forward_variables_from(pigweed_arm_clang_defaults, "*")
347      default_configs = pigweed_default_configs + _cortex_m55 +
348                        [ "$dir_pw_build:optimize_size_clang" ]
349    }
350  }
351}
352
353# This list just contains the members of the above scope for convenience to make
354# it trivial to generate all the toolchains in this file via a
355# `generate_toolchains` target.
356pw_toolchain_arm_clang_list = [
357  pw_toolchain_arm_clang.cortex_m0plus_debug,
358  pw_toolchain_arm_clang.cortex_m0plus_speed_optimized,
359  pw_toolchain_arm_clang.cortex_m0plus_size_optimized,
360  pw_toolchain_arm_clang.cortex_m3_debug,
361  pw_toolchain_arm_clang.cortex_m3_speed_optimized,
362  pw_toolchain_arm_clang.cortex_m3_size_optimized,
363  pw_toolchain_arm_clang.cortex_m4_debug,
364  pw_toolchain_arm_clang.cortex_m4_speed_optimized,
365  pw_toolchain_arm_clang.cortex_m4_size_optimized,
366  pw_toolchain_arm_clang.cortex_m4f_debug,
367  pw_toolchain_arm_clang.cortex_m4f_speed_optimized,
368  pw_toolchain_arm_clang.cortex_m4f_size_optimized,
369  pw_toolchain_arm_clang.cortex_m7_debug,
370  pw_toolchain_arm_clang.cortex_m7_speed_optimized,
371  pw_toolchain_arm_clang.cortex_m7_size_optimized,
372  pw_toolchain_arm_clang.cortex_m7f_debug,
373  pw_toolchain_arm_clang.cortex_m7f_speed_optimized,
374  pw_toolchain_arm_clang.cortex_m7f_size_optimized,
375  pw_toolchain_arm_clang.cortex_m33_debug,
376  pw_toolchain_arm_clang.cortex_m33_speed_optimized,
377  pw_toolchain_arm_clang.cortex_m33_size_optimized,
378  pw_toolchain_arm_clang.cortex_m33f_debug,
379  pw_toolchain_arm_clang.cortex_m33f_speed_optimized,
380  pw_toolchain_arm_clang.cortex_m33f_size_optimized,
381  pw_toolchain_arm_clang.cortex_m55_debug,
382  pw_toolchain_arm_clang.cortex_m55_speed_optimized,
383  pw_toolchain_arm_clang.cortex_m55_size_optimized,
384]
385