• 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
32# These are the defaults automatically applied to every pw_toolchain_arm_clang*
33# toolchain.
34pigweed_arm_clang_defaults = {
35  # Add LLVM libc++ library as a dependency to all targets.
36  # If `dir_pw_third_party_llvm_libcxx` is not configured, this library will be
37  # empty.
38  default_public_deps = [ dir_pw_libcxx ]
39
40  # Build LLVM builtins library from sources and link against it for each
41  # target.
42  # If `dir_pw_third_party_llvm_builtins` is not configured, this library will
43  # be empty.
44  pw_build_TOOLCHAIN_LINK_DEPS = [ "$dir_pw_toolchain:builtins" ]
45}
46
47# Configs specific to different architectures.
48_cortex_m0plus = [
49  "$dir_pw_toolchain/arm_clang:nosys",
50  "$dir_pw_toolchain/arm_clang:cortex_m0plus",
51]
52
53_cortex_m3 = [
54  "$dir_pw_toolchain/arm_clang:nosys",
55  "$dir_pw_toolchain/arm_clang:cortex_m3",
56]
57
58_cortex_m4 = [
59  "$dir_pw_toolchain/arm_clang:nosys",
60  "$dir_pw_toolchain/arm_clang:cortex_m4",
61]
62
63_cortex_m4f = [
64  "$dir_pw_toolchain/arm_clang:nosys",
65  "$dir_pw_toolchain/arm_clang:cortex_m4f",
66]
67
68_cortex_m7 = [
69  "$dir_pw_toolchain/arm_clang:nosys",
70  "$dir_pw_toolchain/arm_clang:cortex_m7",
71]
72
73_cortex_m7f = [
74  "$dir_pw_toolchain/arm_clang:nosys",
75  "$dir_pw_toolchain/arm_clang:cortex_m7f",
76]
77
78_cortex_m33 = [
79  "$dir_pw_toolchain/arm_clang:nosys",
80  "$dir_pw_toolchain/arm_clang:cortex_m33",
81]
82
83_cortex_m33f = [
84  "$dir_pw_toolchain/arm_clang:nosys",
85  "$dir_pw_toolchain/arm_clang:cortex_m33f",
86]
87
88# Describes ARM clang toolchains for specific targets.
89pw_toolchain_arm_clang = {
90  cortex_m0plus_debug = {
91    name = "arm_clang_cortex_m0plus_debug"
92    forward_variables_from(_arm_clang_toolchain, "*")
93    defaults = {
94      forward_variables_from(pigweed_arm_clang_defaults, "*")
95      default_configs = pigweed_default_configs + _cortex_m0plus +
96                        [ "$dir_pw_build:optimize_debugging" ]
97    }
98  }
99  cortex_m0plus_speed_optimized = {
100    name = "arm_clang_cortex_m0plus_speed_optimized"
101    forward_variables_from(_arm_clang_toolchain, "*")
102    defaults = {
103      forward_variables_from(pigweed_arm_clang_defaults, "*")
104      default_configs = pigweed_default_configs + _cortex_m0plus +
105                        [ "$dir_pw_build:optimize_speed" ]
106    }
107  }
108  cortex_m0plus_size_optimized = {
109    name = "arm_clang_cortex_m0plus_size_optimized"
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_size_clang" ]
115    }
116  }
117  cortex_m3_debug = {
118    name = "arm_clang_cortex_m3_debug"
119    forward_variables_from(_arm_clang_toolchain, "*")
120    defaults = {
121      forward_variables_from(pigweed_arm_clang_defaults, "*")
122      default_configs = pigweed_default_configs + _cortex_m3 +
123                        [ "$dir_pw_build:optimize_debugging" ]
124    }
125  }
126  cortex_m3_speed_optimized = {
127    name = "arm_clang_cortex_m3_speed_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_m3 +
132                        [ "$dir_pw_build:optimize_speed" ]
133    }
134  }
135  cortex_m3_size_optimized = {
136    name = "arm_clang_cortex_m3_size_optimized"
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_size_clang" ]
142    }
143  }
144  cortex_m4_debug = {
145    name = "arm_clang_cortex_m4_debug"
146    forward_variables_from(_arm_clang_toolchain, "*")
147    defaults = {
148      forward_variables_from(pigweed_arm_clang_defaults, "*")
149      default_configs = pigweed_default_configs + _cortex_m4 +
150                        [ "$dir_pw_build:optimize_debugging" ]
151    }
152  }
153  cortex_m4_speed_optimized = {
154    name = "arm_clang_cortex_m4_speed_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_m4 +
159                        [ "$dir_pw_build:optimize_speed" ]
160    }
161  }
162  cortex_m4_size_optimized = {
163    name = "arm_clang_cortex_m4_size_optimized"
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_size_clang" ]
169    }
170  }
171  cortex_m4f_debug = {
172    name = "arm_clang_cortex_m4f_debug"
173    forward_variables_from(_arm_clang_toolchain, "*")
174    defaults = {
175      forward_variables_from(pigweed_arm_clang_defaults, "*")
176      default_configs = pigweed_default_configs + _cortex_m4f +
177                        [ "$dir_pw_build:optimize_debugging" ]
178    }
179  }
180  cortex_m4f_speed_optimized = {
181    name = "arm_clang_cortex_m4f_speed_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_m4f +
186                        [ "$dir_pw_build:optimize_speed" ]
187    }
188  }
189  cortex_m4f_size_optimized = {
190    name = "arm_clang_cortex_m4f_size_optimized"
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_size_clang" ]
196    }
197  }
198  cortex_m7_debug = {
199    name = "arm_clang_cortex_m7_debug"
200    forward_variables_from(_arm_clang_toolchain, "*")
201    defaults = {
202      forward_variables_from(pigweed_arm_clang_defaults, "*")
203      default_configs = pigweed_default_configs + _cortex_m7 +
204                        [ "$dir_pw_build:optimize_debugging" ]
205    }
206  }
207  cortex_m7_speed_optimized = {
208    name = "arm_clang_cortex_m7_speed_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_m7 +
213                        [ "$dir_pw_build:optimize_speed" ]
214    }
215  }
216  cortex_m7_size_optimized = {
217    name = "arm_clang_cortex_m7_size_optimized"
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_size_clang" ]
223    }
224  }
225  cortex_m7f_debug = {
226    name = "arm_clang_cortex_m7f_debug"
227    forward_variables_from(_arm_clang_toolchain, "*")
228    defaults = {
229      forward_variables_from(pigweed_arm_clang_defaults, "*")
230      default_configs = pigweed_default_configs + _cortex_m7f +
231                        [ "$dir_pw_build:optimize_debugging" ]
232    }
233  }
234  cortex_m7f_speed_optimized = {
235    name = "arm_clang_cortex_m7f_speed_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_m7f +
240                        [ "$dir_pw_build:optimize_speed" ]
241    }
242  }
243  cortex_m7f_size_optimized = {
244    name = "arm_clang_cortex_m7f_size_optimized"
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_size_clang" ]
250    }
251  }
252  cortex_m33_debug = {
253    name = "arm_clang_cortex_m33_debug"
254    forward_variables_from(_arm_clang_toolchain, "*")
255    defaults = {
256      forward_variables_from(pigweed_arm_clang_defaults, "*")
257      default_configs = pigweed_default_configs + _cortex_m33 +
258                        [ "$dir_pw_build:optimize_debugging" ]
259    }
260  }
261  cortex_m33_speed_optimized = {
262    name = "arm_clang_cortex_m33_speed_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_m33 +
267                        [ "$dir_pw_build:optimize_speed" ]
268    }
269  }
270  cortex_m33_size_optimized = {
271    name = "arm_clang_cortex_m33_size_optimized"
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_size_clang" ]
277    }
278  }
279  cortex_m33f_debug = {
280    name = "arm_clang_cortex_m33f_debug"
281    forward_variables_from(_arm_clang_toolchain, "*")
282    defaults = {
283      forward_variables_from(pigweed_arm_clang_defaults, "*")
284      default_configs = pigweed_default_configs + _cortex_m33f +
285                        [ "$dir_pw_build:optimize_debugging" ]
286    }
287  }
288  cortex_m33f_speed_optimized = {
289    name = "arm_clang_cortex_m33f_speed_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_m33f +
294                        [ "$dir_pw_build:optimize_speed" ]
295    }
296  }
297  cortex_m33f_size_optimized = {
298    name = "arm_clang_cortex_m33f_size_optimized"
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_size_clang" ]
304    }
305  }
306}
307
308# This list just contains the members of the above scope for convenience to make
309# it trivial to generate all the toolchains in this file via a
310# `generate_toolchains` target.
311pw_toolchain_arm_clang_list = [
312  pw_toolchain_arm_clang.cortex_m0plus_debug,
313  pw_toolchain_arm_clang.cortex_m0plus_speed_optimized,
314  pw_toolchain_arm_clang.cortex_m0plus_size_optimized,
315  pw_toolchain_arm_clang.cortex_m3_debug,
316  pw_toolchain_arm_clang.cortex_m3_speed_optimized,
317  pw_toolchain_arm_clang.cortex_m3_size_optimized,
318  pw_toolchain_arm_clang.cortex_m4_debug,
319  pw_toolchain_arm_clang.cortex_m4_speed_optimized,
320  pw_toolchain_arm_clang.cortex_m4_size_optimized,
321  pw_toolchain_arm_clang.cortex_m4f_debug,
322  pw_toolchain_arm_clang.cortex_m4f_speed_optimized,
323  pw_toolchain_arm_clang.cortex_m4f_size_optimized,
324  pw_toolchain_arm_clang.cortex_m7_debug,
325  pw_toolchain_arm_clang.cortex_m7_speed_optimized,
326  pw_toolchain_arm_clang.cortex_m7_size_optimized,
327  pw_toolchain_arm_clang.cortex_m7f_debug,
328  pw_toolchain_arm_clang.cortex_m7f_speed_optimized,
329  pw_toolchain_arm_clang.cortex_m7f_size_optimized,
330  pw_toolchain_arm_clang.cortex_m33_debug,
331  pw_toolchain_arm_clang.cortex_m33_speed_optimized,
332  pw_toolchain_arm_clang.cortex_m33_size_optimized,
333  pw_toolchain_arm_clang.cortex_m33f_debug,
334  pw_toolchain_arm_clang.cortex_m33f_speed_optimized,
335  pw_toolchain_arm_clang.cortex_m33f_size_optimized,
336]
337