xref: /aosp_15_r20/external/pigweed/pw_toolchain/arm_gcc/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 Workerimport("//build_overrides/pigweed_environment.gni")
17*61c4878aSAndroid Build Coastguard Worker
18*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_build/defaults.gni")
19*61c4878aSAndroid Build Coastguard Workerimport("$dir_pw_toolchain/rbe.gni")
20*61c4878aSAndroid Build Coastguard Worker
21*61c4878aSAndroid Build Coastguard Worker_default_compiler_prefix = ""
22*61c4878aSAndroid Build Coastguard Workerif (defined(pw_env_setup_CIPD_ARM)) {
23*61c4878aSAndroid Build Coastguard Worker  _default_compiler_prefix = pw_env_setup_CIPD_ARM + "/bin/"
24*61c4878aSAndroid Build Coastguard Worker}
25*61c4878aSAndroid Build Coastguard Worker
26*61c4878aSAndroid Build Coastguard Workerdeclare_args() {
27*61c4878aSAndroid Build Coastguard Worker  # This flag allows you to specify a prefix for ARM GCC tools use when
28*61c4878aSAndroid Build Coastguard Worker  # compiling with an arm-none-eabi toolchain. This is useful for debugging
29*61c4878aSAndroid Build Coastguard Worker  # toolchain-related issues, or for building with an externally-provided
30*61c4878aSAndroid Build Coastguard Worker  # toolchain.
31*61c4878aSAndroid Build Coastguard Worker  #
32*61c4878aSAndroid Build Coastguard Worker  # Pigweed toolchains should NOT override this variable so projects or users
33*61c4878aSAndroid Build Coastguard Worker  # can control it via `.gn` or by setting it as a regular gn argument (e.g.
34*61c4878aSAndroid Build Coastguard Worker  # `gn gen --args='pw_toolchain_ARM_NONE_EABI_PREFIX=/path/to/my-'`).
35*61c4878aSAndroid Build Coastguard Worker  #
36*61c4878aSAndroid Build Coastguard Worker  # Examples:
37*61c4878aSAndroid Build Coastguard Worker  #   pw_toolchain_ARM_NONE_EABI_PREFIX = ""
38*61c4878aSAndroid Build Coastguard Worker  #   command: "arm-none-eabi-gcc" (from PATH)
39*61c4878aSAndroid Build Coastguard Worker  #
40*61c4878aSAndroid Build Coastguard Worker  #   pw_toolchain_ARM_NONE_EABI_PREFIX = "my-"
41*61c4878aSAndroid Build Coastguard Worker  #   command: "my-arm-none-eabi-gcc" (from PATH)
42*61c4878aSAndroid Build Coastguard Worker  #
43*61c4878aSAndroid Build Coastguard Worker  #   pw_toolchain_ARM_NONE_EABI_PREFIX = "/bin/my-"
44*61c4878aSAndroid Build Coastguard Worker  #   command: "/bin/my-arm-none-eabi-gcc" (absolute path)
45*61c4878aSAndroid Build Coastguard Worker  #
46*61c4878aSAndroid Build Coastguard Worker  #   pw_toolchain_ARM_NONE_EABI_PREFIX = "//environment/gcc_next/"
47*61c4878aSAndroid Build Coastguard Worker  #   command: "../environment/gcc_next/arm-none-eabi-gcc" (relative path)
48*61c4878aSAndroid Build Coastguard Worker  #
49*61c4878aSAndroid Build Coastguard Worker  # GN templates should use `arm_gcc_toolchain_tools.*` to get the intended
50*61c4878aSAndroid Build Coastguard Worker  # command string rather than relying directly on
51*61c4878aSAndroid Build Coastguard Worker  # pw_toolchain_ARM_NONE_EABI_PREFIX.
52*61c4878aSAndroid Build Coastguard Worker  #
53*61c4878aSAndroid Build Coastguard Worker  # If the prefix begins with "//", it will be rebased to be relative to the
54*61c4878aSAndroid Build Coastguard Worker  # root build directory.
55*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_ARM_NONE_EABI_PREFIX = _default_compiler_prefix
56*61c4878aSAndroid Build Coastguard Worker}
57*61c4878aSAndroid Build Coastguard Worker
58*61c4878aSAndroid Build Coastguard Worker# Specifies the tools used by ARM GCC toolchains.
59*61c4878aSAndroid Build Coastguard Workerarm_gcc_toolchain_tools = {
60*61c4878aSAndroid Build Coastguard Worker  _rbe_debug_flag = ""
61*61c4878aSAndroid Build Coastguard Worker  _local_tool_name_root = "arm-none-eabi-"
62*61c4878aSAndroid Build Coastguard Worker
63*61c4878aSAndroid Build Coastguard Worker  _toolchain_prefix = pw_toolchain_ARM_NONE_EABI_PREFIX
64*61c4878aSAndroid Build Coastguard Worker  if (_toolchain_prefix != "") {
65*61c4878aSAndroid Build Coastguard Worker    # If the prefix is a GN-absolute path, rebase it so it's relative to the
66*61c4878aSAndroid Build Coastguard Worker    # root of the build directory.
67*61c4878aSAndroid Build Coastguard Worker    _split_prefix = string_split(_toolchain_prefix, "//")
68*61c4878aSAndroid Build Coastguard Worker    if (_split_prefix[0] == "") {
69*61c4878aSAndroid Build Coastguard Worker      _toolchain_prefix = rebase_path(_toolchain_prefix, root_build_dir)
70*61c4878aSAndroid Build Coastguard Worker    }
71*61c4878aSAndroid Build Coastguard Worker    _local_tool_name_root = _toolchain_prefix + _local_tool_name_root
72*61c4878aSAndroid Build Coastguard Worker  }
73*61c4878aSAndroid Build Coastguard Worker  if (host_os == "win") {
74*61c4878aSAndroid Build Coastguard Worker    _local_tool_name_root = string_replace(_local_tool_name_root, "/", "\\")
75*61c4878aSAndroid Build Coastguard Worker  }
76*61c4878aSAndroid Build Coastguard Worker
77*61c4878aSAndroid Build Coastguard Worker  if (pw_toolchain_USE_RBE) {
78*61c4878aSAndroid Build Coastguard Worker    if (pw_toolchain_RBE_DEBUG) {
79*61c4878aSAndroid Build Coastguard Worker      _rbe_debug_flag = " -v "
80*61c4878aSAndroid Build Coastguard Worker    }
81*61c4878aSAndroid Build Coastguard Worker    _exec_root = rebase_path("//")
82*61c4878aSAndroid Build Coastguard Worker    _rewrapper_binary = "rewrapper"
83*61c4878aSAndroid Build Coastguard Worker    _pw_rbe_config = pw_rbe_arm_gcc_config
84*61c4878aSAndroid Build Coastguard Worker    _inputs = rebase_path(pw_env_setup_CIPD_ARM, _exec_root) + "/"
85*61c4878aSAndroid Build Coastguard Worker    _rbe_tool_name_root =
86*61c4878aSAndroid Build Coastguard Worker        _rewrapper_binary +
87*61c4878aSAndroid Build Coastguard Worker        " --labels=type=compile,lang=cpp,compiler=clang --cfg=" +
88*61c4878aSAndroid Build Coastguard Worker        _pw_rbe_config + " --exec_root=" + _exec_root + " --inputs=" + _inputs +
89*61c4878aSAndroid Build Coastguard Worker        " -- " + rebase_path(pw_env_setup_CIPD_ARM, root_build_dir) +
90*61c4878aSAndroid Build Coastguard Worker        "/bin/arm-none-eabi-"
91*61c4878aSAndroid Build Coastguard Worker    cc = _rbe_tool_name_root + "gcc" + _rbe_debug_flag
92*61c4878aSAndroid Build Coastguard Worker    cxx = _rbe_tool_name_root + "g++" + _rbe_debug_flag
93*61c4878aSAndroid Build Coastguard Worker  } else {
94*61c4878aSAndroid Build Coastguard Worker    cc = _local_tool_name_root + "gcc"
95*61c4878aSAndroid Build Coastguard Worker    cxx = _local_tool_name_root + "g++"
96*61c4878aSAndroid Build Coastguard Worker  }
97*61c4878aSAndroid Build Coastguard Worker  ar = _local_tool_name_root + "ar"
98*61c4878aSAndroid Build Coastguard Worker  ld = _local_tool_name_root + "g++"
99*61c4878aSAndroid Build Coastguard Worker
100*61c4878aSAndroid Build Coastguard Worker  link_group = true
101*61c4878aSAndroid Build Coastguard Worker}
102*61c4878aSAndroid Build Coastguard Worker
103*61c4878aSAndroid Build Coastguard Worker# Common configs shared by all ARM GCC toolchains.
104*61c4878aSAndroid Build Coastguard Worker_arm_gcc = [
105*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:disable_psabi_warning",
106*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:disable_rwx_segment_warning",
107*61c4878aSAndroid Build Coastguard Worker]
108*61c4878aSAndroid Build Coastguard Worker
109*61c4878aSAndroid Build Coastguard Worker_cortex_m0plus = [
110*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_common",
111*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_m0plus",
112*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_software_fpu",
113*61c4878aSAndroid Build Coastguard Worker]
114*61c4878aSAndroid Build Coastguard Worker
115*61c4878aSAndroid Build Coastguard Worker# Configs specific to different architectures.
116*61c4878aSAndroid Build Coastguard Worker_cortex_m3 = [
117*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_common",
118*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_m3",
119*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_software_fpu",
120*61c4878aSAndroid Build Coastguard Worker]
121*61c4878aSAndroid Build Coastguard Worker
122*61c4878aSAndroid Build Coastguard Worker_cortex_m4 = [
123*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_common",
124*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_m4",
125*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_software_fpu",
126*61c4878aSAndroid Build Coastguard Worker]
127*61c4878aSAndroid Build Coastguard Worker
128*61c4878aSAndroid Build Coastguard Worker_cortex_m4f = [
129*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_common",
130*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_m4",
131*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_hardware_fpu",
132*61c4878aSAndroid Build Coastguard Worker]
133*61c4878aSAndroid Build Coastguard Worker
134*61c4878aSAndroid Build Coastguard Worker_cortex_m7 = [
135*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_common",
136*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_m7",
137*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_software_fpu",
138*61c4878aSAndroid Build Coastguard Worker]
139*61c4878aSAndroid Build Coastguard Worker
140*61c4878aSAndroid Build Coastguard Worker_cortex_m7f = [
141*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_common",
142*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_m7",
143*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_hardware_fpu_v5",
144*61c4878aSAndroid Build Coastguard Worker]
145*61c4878aSAndroid Build Coastguard Worker
146*61c4878aSAndroid Build Coastguard Worker_cortex_m33 = [
147*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_common",
148*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_m33",
149*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_software_fpu",
150*61c4878aSAndroid Build Coastguard Worker]
151*61c4878aSAndroid Build Coastguard Worker
152*61c4878aSAndroid Build Coastguard Worker_cortex_m33f = [
153*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_common",
154*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_m33",
155*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_hardware_fpu_v5_sp",
156*61c4878aSAndroid Build Coastguard Worker]
157*61c4878aSAndroid Build Coastguard Worker
158*61c4878aSAndroid Build Coastguard Worker_cortex_m55 = [
159*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_common",
160*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_m55",
161*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_software_fpu",
162*61c4878aSAndroid Build Coastguard Worker]
163*61c4878aSAndroid Build Coastguard Worker
164*61c4878aSAndroid Build Coastguard Worker_cortex_m55f = [
165*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_common",
166*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_m55",
167*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_hardware_fpu_auto",
168*61c4878aSAndroid Build Coastguard Worker]
169*61c4878aSAndroid Build Coastguard Worker
170*61c4878aSAndroid Build Coastguard Worker_cortex_a32 = [
171*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_common",
172*61c4878aSAndroid Build Coastguard Worker  "$dir_pw_toolchain/arm_gcc:cortex_a32",
173*61c4878aSAndroid Build Coastguard Worker]
174*61c4878aSAndroid Build Coastguard Worker
175*61c4878aSAndroid Build Coastguard Worker# Describes ARM GCC toolchains for specific targets.
176*61c4878aSAndroid Build Coastguard Workerpw_toolchain_arm_gcc = {
177*61c4878aSAndroid Build Coastguard Worker  cortex_m0plus_debug = {
178*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m0plus_debug"
179*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
180*61c4878aSAndroid Build Coastguard Worker    defaults = {
181*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m0plus +
182*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_debugging" ]
183*61c4878aSAndroid Build Coastguard Worker    }
184*61c4878aSAndroid Build Coastguard Worker  }
185*61c4878aSAndroid Build Coastguard Worker  cortex_m0plus_speed_optimized = {
186*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m0plus_speed_optimized"
187*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
188*61c4878aSAndroid Build Coastguard Worker    defaults = {
189*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m0plus +
190*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_speed" ]
191*61c4878aSAndroid Build Coastguard Worker    }
192*61c4878aSAndroid Build Coastguard Worker  }
193*61c4878aSAndroid Build Coastguard Worker  cortex_m0plus_size_optimized = {
194*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m0plus_size_optimized"
195*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
196*61c4878aSAndroid Build Coastguard Worker    defaults = {
197*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m0plus +
198*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_size" ]
199*61c4878aSAndroid Build Coastguard Worker    }
200*61c4878aSAndroid Build Coastguard Worker  }
201*61c4878aSAndroid Build Coastguard Worker  cortex_m3_debug = {
202*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m3_debug"
203*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
204*61c4878aSAndroid Build Coastguard Worker    defaults = {
205*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m3 +
206*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_debugging" ]
207*61c4878aSAndroid Build Coastguard Worker    }
208*61c4878aSAndroid Build Coastguard Worker  }
209*61c4878aSAndroid Build Coastguard Worker  cortex_m3_speed_optimized = {
210*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m3_speed_optimized"
211*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
212*61c4878aSAndroid Build Coastguard Worker    defaults = {
213*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m3 +
214*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_speed" ]
215*61c4878aSAndroid Build Coastguard Worker    }
216*61c4878aSAndroid Build Coastguard Worker  }
217*61c4878aSAndroid Build Coastguard Worker  cortex_m3_size_optimized = {
218*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m3_size_optimized"
219*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
220*61c4878aSAndroid Build Coastguard Worker    defaults = {
221*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m3 +
222*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_size" ]
223*61c4878aSAndroid Build Coastguard Worker    }
224*61c4878aSAndroid Build Coastguard Worker  }
225*61c4878aSAndroid Build Coastguard Worker  cortex_m4_debug = {
226*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m4_debug"
227*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
228*61c4878aSAndroid Build Coastguard Worker    defaults = {
229*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m4 +
230*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_debugging" ]
231*61c4878aSAndroid Build Coastguard Worker    }
232*61c4878aSAndroid Build Coastguard Worker  }
233*61c4878aSAndroid Build Coastguard Worker  cortex_m4_speed_optimized = {
234*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m4_speed_optimized"
235*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
236*61c4878aSAndroid Build Coastguard Worker    defaults = {
237*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m4 +
238*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_speed" ]
239*61c4878aSAndroid Build Coastguard Worker    }
240*61c4878aSAndroid Build Coastguard Worker  }
241*61c4878aSAndroid Build Coastguard Worker  cortex_m4_size_optimized = {
242*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m4_size_optimized"
243*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
244*61c4878aSAndroid Build Coastguard Worker    defaults = {
245*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m4 +
246*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_size" ]
247*61c4878aSAndroid Build Coastguard Worker    }
248*61c4878aSAndroid Build Coastguard Worker  }
249*61c4878aSAndroid Build Coastguard Worker  cortex_m4f_debug = {
250*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m4f_debug"
251*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
252*61c4878aSAndroid Build Coastguard Worker    defaults = {
253*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m4f +
254*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_debugging" ]
255*61c4878aSAndroid Build Coastguard Worker    }
256*61c4878aSAndroid Build Coastguard Worker  }
257*61c4878aSAndroid Build Coastguard Worker  cortex_m4f_speed_optimized = {
258*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m4f_speed_optimized"
259*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
260*61c4878aSAndroid Build Coastguard Worker    defaults = {
261*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m4f +
262*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_speed" ]
263*61c4878aSAndroid Build Coastguard Worker    }
264*61c4878aSAndroid Build Coastguard Worker  }
265*61c4878aSAndroid Build Coastguard Worker  cortex_m4f_size_optimized = {
266*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m4f_size_optimized"
267*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
268*61c4878aSAndroid Build Coastguard Worker    defaults = {
269*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m4f +
270*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_size" ]
271*61c4878aSAndroid Build Coastguard Worker    }
272*61c4878aSAndroid Build Coastguard Worker  }
273*61c4878aSAndroid Build Coastguard Worker  cortex_m7_debug = {
274*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m7_debug"
275*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
276*61c4878aSAndroid Build Coastguard Worker    defaults = {
277*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m7 +
278*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_debugging" ]
279*61c4878aSAndroid Build Coastguard Worker    }
280*61c4878aSAndroid Build Coastguard Worker  }
281*61c4878aSAndroid Build Coastguard Worker  cortex_m7_speed_optimized = {
282*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m7_speed_optimized"
283*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
284*61c4878aSAndroid Build Coastguard Worker    defaults = {
285*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m7 +
286*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_speed" ]
287*61c4878aSAndroid Build Coastguard Worker    }
288*61c4878aSAndroid Build Coastguard Worker  }
289*61c4878aSAndroid Build Coastguard Worker  cortex_m7_size_optimized = {
290*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m7_size_optimized"
291*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
292*61c4878aSAndroid Build Coastguard Worker    defaults = {
293*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m7 +
294*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_size" ]
295*61c4878aSAndroid Build Coastguard Worker    }
296*61c4878aSAndroid Build Coastguard Worker  }
297*61c4878aSAndroid Build Coastguard Worker  cortex_m7f_debug = {
298*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m7f_debug"
299*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
300*61c4878aSAndroid Build Coastguard Worker    defaults = {
301*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m7f +
302*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_debugging" ]
303*61c4878aSAndroid Build Coastguard Worker    }
304*61c4878aSAndroid Build Coastguard Worker  }
305*61c4878aSAndroid Build Coastguard Worker  cortex_m7f_speed_optimized = {
306*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m7f_speed_optimized"
307*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
308*61c4878aSAndroid Build Coastguard Worker    defaults = {
309*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m7f +
310*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_speed" ]
311*61c4878aSAndroid Build Coastguard Worker    }
312*61c4878aSAndroid Build Coastguard Worker  }
313*61c4878aSAndroid Build Coastguard Worker  cortex_m7f_size_optimized = {
314*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m7f_size_optimized"
315*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
316*61c4878aSAndroid Build Coastguard Worker    defaults = {
317*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m7f +
318*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_size" ]
319*61c4878aSAndroid Build Coastguard Worker    }
320*61c4878aSAndroid Build Coastguard Worker  }
321*61c4878aSAndroid Build Coastguard Worker  cortex_m33_debug = {
322*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m33_debug"
323*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
324*61c4878aSAndroid Build Coastguard Worker    defaults = {
325*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m33 +
326*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_debugging" ]
327*61c4878aSAndroid Build Coastguard Worker    }
328*61c4878aSAndroid Build Coastguard Worker  }
329*61c4878aSAndroid Build Coastguard Worker  cortex_m33_speed_optimized = {
330*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m33_speed_optimized"
331*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
332*61c4878aSAndroid Build Coastguard Worker    defaults = {
333*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m33 +
334*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_speed" ]
335*61c4878aSAndroid Build Coastguard Worker    }
336*61c4878aSAndroid Build Coastguard Worker  }
337*61c4878aSAndroid Build Coastguard Worker  cortex_m33_size_optimized = {
338*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m33_size_optimized"
339*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
340*61c4878aSAndroid Build Coastguard Worker    defaults = {
341*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m33 +
342*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_size" ]
343*61c4878aSAndroid Build Coastguard Worker    }
344*61c4878aSAndroid Build Coastguard Worker  }
345*61c4878aSAndroid Build Coastguard Worker  cortex_m33f_debug = {
346*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m33f_debug"
347*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
348*61c4878aSAndroid Build Coastguard Worker    defaults = {
349*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m33f +
350*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_debugging" ]
351*61c4878aSAndroid Build Coastguard Worker    }
352*61c4878aSAndroid Build Coastguard Worker  }
353*61c4878aSAndroid Build Coastguard Worker  cortex_m33f_speed_optimized = {
354*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m33f_speed_optimized"
355*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
356*61c4878aSAndroid Build Coastguard Worker    defaults = {
357*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m33f +
358*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_speed" ]
359*61c4878aSAndroid Build Coastguard Worker    }
360*61c4878aSAndroid Build Coastguard Worker  }
361*61c4878aSAndroid Build Coastguard Worker  cortex_m33f_size_optimized = {
362*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m33f_size_optimized"
363*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
364*61c4878aSAndroid Build Coastguard Worker    defaults = {
365*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m33f +
366*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_size" ]
367*61c4878aSAndroid Build Coastguard Worker    }
368*61c4878aSAndroid Build Coastguard Worker  }
369*61c4878aSAndroid Build Coastguard Worker
370*61c4878aSAndroid Build Coastguard Worker  cortex_m55_debug = {
371*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m55_debug"
372*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
373*61c4878aSAndroid Build Coastguard Worker    defaults = {
374*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m55 +
375*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_debugging" ]
376*61c4878aSAndroid Build Coastguard Worker    }
377*61c4878aSAndroid Build Coastguard Worker  }
378*61c4878aSAndroid Build Coastguard Worker  cortex_m55_speed_optimized = {
379*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m55_speed_optimized"
380*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
381*61c4878aSAndroid Build Coastguard Worker    defaults = {
382*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m55 +
383*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_speed" ]
384*61c4878aSAndroid Build Coastguard Worker    }
385*61c4878aSAndroid Build Coastguard Worker  }
386*61c4878aSAndroid Build Coastguard Worker  cortex_m55_size_optimized = {
387*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m55_size_optimized"
388*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
389*61c4878aSAndroid Build Coastguard Worker    defaults = {
390*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m55 +
391*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_size" ]
392*61c4878aSAndroid Build Coastguard Worker    }
393*61c4878aSAndroid Build Coastguard Worker  }
394*61c4878aSAndroid Build Coastguard Worker  cortex_m55f_debug = {
395*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m55f_debug"
396*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
397*61c4878aSAndroid Build Coastguard Worker    defaults = {
398*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m55f +
399*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_debugging" ]
400*61c4878aSAndroid Build Coastguard Worker    }
401*61c4878aSAndroid Build Coastguard Worker  }
402*61c4878aSAndroid Build Coastguard Worker  cortex_m55f_speed_optimized = {
403*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m55f_speed_optimized"
404*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
405*61c4878aSAndroid Build Coastguard Worker    defaults = {
406*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m55f +
407*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_speed" ]
408*61c4878aSAndroid Build Coastguard Worker    }
409*61c4878aSAndroid Build Coastguard Worker  }
410*61c4878aSAndroid Build Coastguard Worker
411*61c4878aSAndroid Build Coastguard Worker  cortex_m55f_size_optimized = {
412*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_m55f_size_optimized"
413*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
414*61c4878aSAndroid Build Coastguard Worker    defaults = {
415*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_m55f +
416*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_size" ]
417*61c4878aSAndroid Build Coastguard Worker    }
418*61c4878aSAndroid Build Coastguard Worker  }
419*61c4878aSAndroid Build Coastguard Worker
420*61c4878aSAndroid Build Coastguard Worker  cortex_a32_debug = {
421*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_a32_debug"
422*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
423*61c4878aSAndroid Build Coastguard Worker    defaults = {
424*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_a32 +
425*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_debugging" ]
426*61c4878aSAndroid Build Coastguard Worker    }
427*61c4878aSAndroid Build Coastguard Worker  }
428*61c4878aSAndroid Build Coastguard Worker  cortex_a32_speed_optimized = {
429*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_a32_speed_optimized"
430*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
431*61c4878aSAndroid Build Coastguard Worker    defaults = {
432*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_a32 +
433*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_speed" ]
434*61c4878aSAndroid Build Coastguard Worker    }
435*61c4878aSAndroid Build Coastguard Worker  }
436*61c4878aSAndroid Build Coastguard Worker  cortex_a32_size_optimized = {
437*61c4878aSAndroid Build Coastguard Worker    name = "arm_gcc_cortex_a32_size_optimized"
438*61c4878aSAndroid Build Coastguard Worker    forward_variables_from(arm_gcc_toolchain_tools, "*")
439*61c4878aSAndroid Build Coastguard Worker    defaults = {
440*61c4878aSAndroid Build Coastguard Worker      default_configs = pigweed_default_configs + _arm_gcc + _cortex_a32 +
441*61c4878aSAndroid Build Coastguard Worker                        [ "$dir_pw_build:optimize_size" ]
442*61c4878aSAndroid Build Coastguard Worker    }
443*61c4878aSAndroid Build Coastguard Worker  }
444*61c4878aSAndroid Build Coastguard Worker}
445*61c4878aSAndroid Build Coastguard Worker
446*61c4878aSAndroid Build Coastguard Worker# This list just contains the members of the above scope for convenience to make
447*61c4878aSAndroid Build Coastguard Worker# it trivial to generate all the toolchains in this file via a
448*61c4878aSAndroid Build Coastguard Worker# `generate_toolchains` target.
449*61c4878aSAndroid Build Coastguard Workerpw_toolchain_arm_gcc_list = [
450*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m0plus_debug,
451*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m0plus_speed_optimized,
452*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m0plus_size_optimized,
453*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m3_debug,
454*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m3_speed_optimized,
455*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m3_size_optimized,
456*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m4_debug,
457*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m4_speed_optimized,
458*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m4_size_optimized,
459*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m4f_debug,
460*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m4f_speed_optimized,
461*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m4f_size_optimized,
462*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m7_debug,
463*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m7_speed_optimized,
464*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m7_size_optimized,
465*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m7f_debug,
466*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m7f_speed_optimized,
467*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m7f_size_optimized,
468*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m33_debug,
469*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m33_speed_optimized,
470*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m33_size_optimized,
471*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m33f_debug,
472*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m33f_speed_optimized,
473*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m33f_size_optimized,
474*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m55_debug,
475*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m55_speed_optimized,
476*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m55_size_optimized,
477*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m55f_debug,
478*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m55f_speed_optimized,
479*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_m55f_size_optimized,
480*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_a32_debug,
481*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_a32_speed_optimized,
482*61c4878aSAndroid Build Coastguard Worker  pw_toolchain_arm_gcc.cortex_a32_size_optimized,
483*61c4878aSAndroid Build Coastguard Worker]
484*61c4878aSAndroid Build Coastguard Worker
485*61c4878aSAndroid Build Coastguard Worker# Configs that require Arm GCC 12 or newer to use. Downstream projects that use
486*61c4878aSAndroid Build Coastguard Worker# older compilers should remove these from default_configs.
487*61c4878aSAndroid Build Coastguard Workerpw_toolchain_arm_gcc_12_configs =
488*61c4878aSAndroid Build Coastguard Worker    [ "$dir_pw_toolchain/arm_gcc:disable_rwx_segment_warning" ]
489