• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright 2020 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
17# Specifies the tools used by ARM GCC toolchains.
18arm_gcc_toolchain_tools = {
19  _tool_name_root = "arm-none-eabi-"
20  ar = _tool_name_root + "ar"
21  cc = _tool_name_root + "gcc"
22  cxx = _tool_name_root + "g++"
23
24  link_whole_archive = true
25}
26
27# Common configs shared by all ARM GCC toolchains.
28_arm_gcc = [ "$dir_pw_toolchain/arm_gcc:disable_psabi_warning" ]
29
30_cortex_m0plus = [
31  "$dir_pw_toolchain/arm_gcc:cortex_common",
32  "$dir_pw_toolchain/arm_gcc:cortex_m0plus",
33  "$dir_pw_toolchain/arm_gcc:cortex_software_fpu",
34]
35
36# Configs specific to different architectures.
37_cortex_m3 = [
38  "$dir_pw_toolchain/arm_gcc:cortex_common",
39  "$dir_pw_toolchain/arm_gcc:cortex_m3",
40  "$dir_pw_toolchain/arm_gcc:cortex_software_fpu",
41]
42
43_cortex_m4 = [
44  "$dir_pw_toolchain/arm_gcc:cortex_common",
45  "$dir_pw_toolchain/arm_gcc:cortex_m4",
46  "$dir_pw_toolchain/arm_gcc:cortex_software_fpu",
47]
48
49_cortex_m4f = [
50  "$dir_pw_toolchain/arm_gcc:cortex_common",
51  "$dir_pw_toolchain/arm_gcc:cortex_m4",
52  "$dir_pw_toolchain/arm_gcc:cortex_hardware_fpu",
53]
54
55_cortex_m7 = [
56  "$dir_pw_toolchain/arm_gcc:cortex_common",
57  "$dir_pw_toolchain/arm_gcc:cortex_m7",
58  "$dir_pw_toolchain/arm_gcc:cortex_software_fpu",
59]
60
61_cortex_m7f = [
62  "$dir_pw_toolchain/arm_gcc:cortex_common",
63  "$dir_pw_toolchain/arm_gcc:cortex_m7",
64  "$dir_pw_toolchain/arm_gcc:cortex_hardware_fpu_v5",
65]
66
67_cortex_m33 = [
68  "$dir_pw_toolchain/arm_gcc:cortex_common",
69  "$dir_pw_toolchain/arm_gcc:cortex_m33",
70  "$dir_pw_toolchain/arm_gcc:cortex_software_fpu",
71]
72
73_cortex_m33f = [
74  "$dir_pw_toolchain/arm_gcc:cortex_common",
75  "$dir_pw_toolchain/arm_gcc:cortex_m33",
76  "$dir_pw_toolchain/arm_gcc:cortex_hardware_fpu_v5_sp",
77]
78
79# Describes ARM GCC toolchains for specific targets.
80pw_toolchain_arm_gcc = {
81  cortex_m0plus_debug = {
82    name = "arm_gcc_cortex_m0plus_debug"
83    forward_variables_from(arm_gcc_toolchain_tools, "*")
84    defaults = {
85      default_configs =
86          _arm_gcc + _cortex_m0plus + [ "$dir_pw_build:optimize_debugging" ]
87    }
88  }
89  cortex_m0plus_speed_optimized = {
90    name = "arm_gcc_cortex_m0plus_speed_optimized"
91    forward_variables_from(arm_gcc_toolchain_tools, "*")
92    defaults = {
93      default_configs =
94          _arm_gcc + _cortex_m0plus + [ "$dir_pw_build:optimize_speed" ]
95    }
96  }
97  cortex_m0plus_size_optimized = {
98    name = "arm_gcc_cortex_m0plus_size_optimized"
99    forward_variables_from(arm_gcc_toolchain_tools, "*")
100    defaults = {
101      default_configs =
102          _arm_gcc + _cortex_m0plus + [ "$dir_pw_build:optimize_size" ]
103    }
104  }
105  cortex_m3_debug = {
106    name = "arm_gcc_cortex_m3_debug"
107    forward_variables_from(arm_gcc_toolchain_tools, "*")
108    defaults = {
109      default_configs =
110          _arm_gcc + _cortex_m3 + [ "$dir_pw_build:optimize_debugging" ]
111    }
112  }
113  cortex_m3_speed_optimized = {
114    name = "arm_gcc_cortex_m3_speed_optimized"
115    forward_variables_from(arm_gcc_toolchain_tools, "*")
116    defaults = {
117      default_configs =
118          _arm_gcc + _cortex_m3 + [ "$dir_pw_build:optimize_speed" ]
119    }
120  }
121  cortex_m3_size_optimized = {
122    name = "arm_gcc_cortex_m3_size_optimized"
123    forward_variables_from(arm_gcc_toolchain_tools, "*")
124    defaults = {
125      default_configs =
126          _arm_gcc + _cortex_m3 + [ "$dir_pw_build:optimize_size" ]
127    }
128  }
129  cortex_m4_debug = {
130    name = "arm_gcc_cortex_m4_debug"
131    forward_variables_from(arm_gcc_toolchain_tools, "*")
132    defaults = {
133      default_configs =
134          _arm_gcc + _cortex_m4 + [ "$dir_pw_build:optimize_debugging" ]
135    }
136  }
137  cortex_m4_speed_optimized = {
138    name = "arm_gcc_cortex_m4_speed_optimized"
139    forward_variables_from(arm_gcc_toolchain_tools, "*")
140    defaults = {
141      default_configs =
142          _arm_gcc + _cortex_m4 + [ "$dir_pw_build:optimize_speed" ]
143    }
144  }
145  cortex_m4_size_optimized = {
146    name = "arm_gcc_cortex_m4_size_optimized"
147    forward_variables_from(arm_gcc_toolchain_tools, "*")
148    defaults = {
149      default_configs =
150          _arm_gcc + _cortex_m4 + [ "$dir_pw_build:optimize_size" ]
151    }
152  }
153  cortex_m4f_debug = {
154    name = "arm_gcc_cortex_m4f_debug"
155    forward_variables_from(arm_gcc_toolchain_tools, "*")
156    defaults = {
157      default_configs =
158          _arm_gcc + _cortex_m4f + [ "$dir_pw_build:optimize_debugging" ]
159    }
160  }
161  cortex_m4f_speed_optimized = {
162    name = "arm_gcc_cortex_m4f_speed_optimized"
163    forward_variables_from(arm_gcc_toolchain_tools, "*")
164    defaults = {
165      default_configs =
166          _arm_gcc + _cortex_m4f + [ "$dir_pw_build:optimize_speed" ]
167    }
168  }
169  cortex_m4f_size_optimized = {
170    name = "arm_gcc_cortex_m4f_size_optimized"
171    forward_variables_from(arm_gcc_toolchain_tools, "*")
172    defaults = {
173      default_configs =
174          _arm_gcc + _cortex_m4f + [ "$dir_pw_build:optimize_size" ]
175    }
176  }
177  cortex_m7_debug = {
178    name = "arm_gcc_cortex_m7_debug"
179    forward_variables_from(arm_gcc_toolchain_tools, "*")
180    defaults = {
181      default_configs =
182          _arm_gcc + _cortex_m7 + [ "$dir_pw_build:optimize_debugging" ]
183    }
184  }
185  cortex_m7_speed_optimized = {
186    name = "arm_gcc_cortex_m7_speed_optimized"
187    forward_variables_from(arm_gcc_toolchain_tools, "*")
188    defaults = {
189      default_configs =
190          _arm_gcc + _cortex_m7 + [ "$dir_pw_build:optimize_speed" ]
191    }
192  }
193  cortex_m7_size_optimized = {
194    name = "arm_gcc_cortex_m7_size_optimized"
195    forward_variables_from(arm_gcc_toolchain_tools, "*")
196    defaults = {
197      default_configs =
198          _arm_gcc + _cortex_m7 + [ "$dir_pw_build:optimize_size" ]
199    }
200  }
201  cortex_m7f_debug = {
202    name = "arm_gcc_cortex_m7f_debug"
203    forward_variables_from(arm_gcc_toolchain_tools, "*")
204    defaults = {
205      default_configs =
206          _arm_gcc + _cortex_m7f + [ "$dir_pw_build:optimize_debugging" ]
207    }
208  }
209  cortex_m7f_speed_optimized = {
210    name = "arm_gcc_cortex_m7f_speed_optimized"
211    forward_variables_from(arm_gcc_toolchain_tools, "*")
212    defaults = {
213      default_configs =
214          _arm_gcc + _cortex_m7f + [ "$dir_pw_build:optimize_speed" ]
215    }
216  }
217  cortex_m7f_size_optimized = {
218    name = "arm_gcc_cortex_m7f_size_optimized"
219    forward_variables_from(arm_gcc_toolchain_tools, "*")
220    defaults = {
221      default_configs =
222          _arm_gcc + _cortex_m7f + [ "$dir_pw_build:optimize_size" ]
223    }
224  }
225  cortex_m33_debug = {
226    name = "arm_gcc_cortex_m33_debug"
227    forward_variables_from(arm_gcc_toolchain_tools, "*")
228    defaults = {
229      default_configs =
230          _arm_gcc + _cortex_m33 + [ "$dir_pw_build:optimize_debugging" ]
231    }
232  }
233  cortex_m33_speed_optimized = {
234    name = "arm_gcc_cortex_m33_speed_optimized"
235    forward_variables_from(arm_gcc_toolchain_tools, "*")
236    defaults = {
237      default_configs =
238          _arm_gcc + _cortex_m33 + [ "$dir_pw_build:optimize_speed" ]
239    }
240  }
241  cortex_m33_size_optimized = {
242    name = "arm_gcc_cortex_m33_size_optimized"
243    forward_variables_from(arm_gcc_toolchain_tools, "*")
244    defaults = {
245      default_configs =
246          _arm_gcc + _cortex_m33 + [ "$dir_pw_build:optimize_size" ]
247    }
248  }
249  cortex_m33f_debug = {
250    name = "arm_gcc_cortex_m33f_debug"
251    forward_variables_from(arm_gcc_toolchain_tools, "*")
252    defaults = {
253      default_configs =
254          _arm_gcc + _cortex_m33f + [ "$dir_pw_build:optimize_debugging" ]
255    }
256  }
257  cortex_m33f_speed_optimized = {
258    name = "arm_gcc_cortex_m33f_speed_optimized"
259    forward_variables_from(arm_gcc_toolchain_tools, "*")
260    defaults = {
261      default_configs =
262          _arm_gcc + _cortex_m33f + [ "$dir_pw_build:optimize_speed" ]
263    }
264  }
265  cortex_m33f_size_optimized = {
266    name = "arm_gcc_cortex_m33f_size_optimized"
267    forward_variables_from(arm_gcc_toolchain_tools, "*")
268    defaults = {
269      default_configs =
270          _arm_gcc + _cortex_m33f + [ "$dir_pw_build:optimize_size" ]
271    }
272  }
273}
274
275# This list just contains the members of the above scope for convenience to make
276# it trivial to generate all the toolchains in this file via a
277# `generate_toolchains` target.
278pw_toolchain_arm_gcc_list = [
279  pw_toolchain_arm_gcc.cortex_m0plus_debug,
280  pw_toolchain_arm_gcc.cortex_m0plus_speed_optimized,
281  pw_toolchain_arm_gcc.cortex_m0plus_size_optimized,
282  pw_toolchain_arm_gcc.cortex_m3_debug,
283  pw_toolchain_arm_gcc.cortex_m3_speed_optimized,
284  pw_toolchain_arm_gcc.cortex_m3_size_optimized,
285  pw_toolchain_arm_gcc.cortex_m4_debug,
286  pw_toolchain_arm_gcc.cortex_m4_speed_optimized,
287  pw_toolchain_arm_gcc.cortex_m4_size_optimized,
288  pw_toolchain_arm_gcc.cortex_m4f_debug,
289  pw_toolchain_arm_gcc.cortex_m4f_speed_optimized,
290  pw_toolchain_arm_gcc.cortex_m4f_size_optimized,
291  pw_toolchain_arm_gcc.cortex_m7_debug,
292  pw_toolchain_arm_gcc.cortex_m7_speed_optimized,
293  pw_toolchain_arm_gcc.cortex_m7_size_optimized,
294  pw_toolchain_arm_gcc.cortex_m7f_debug,
295  pw_toolchain_arm_gcc.cortex_m7f_speed_optimized,
296  pw_toolchain_arm_gcc.cortex_m7f_size_optimized,
297  pw_toolchain_arm_gcc.cortex_m33_debug,
298  pw_toolchain_arm_gcc.cortex_m33_speed_optimized,
299  pw_toolchain_arm_gcc.cortex_m33_size_optimized,
300  pw_toolchain_arm_gcc.cortex_m33f_debug,
301  pw_toolchain_arm_gcc.cortex_m33f_speed_optimized,
302  pw_toolchain_arm_gcc.cortex_m33f_size_optimized,
303]
304