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