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