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# Describes ARM clang toolchains for specific targets. 107pw_toolchain_arm_clang = { 108 cortex_m0plus_debug = { 109 name = "arm_clang_cortex_m0plus_debug" 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_debugging" ] 115 } 116 } 117 cortex_m0plus_speed_optimized = { 118 name = "arm_clang_cortex_m0plus_speed_optimized" 119 forward_variables_from(_arm_clang_toolchain, "*") 120 defaults = { 121 forward_variables_from(pigweed_arm_clang_defaults, "*") 122 default_configs = pigweed_default_configs + _cortex_m0plus + 123 [ "$dir_pw_build:optimize_speed" ] 124 } 125 } 126 cortex_m0plus_size_optimized = { 127 name = "arm_clang_cortex_m0plus_size_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_m0plus + 132 [ "$dir_pw_build:optimize_size_clang" ] 133 } 134 } 135 cortex_m3_debug = { 136 name = "arm_clang_cortex_m3_debug" 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_debugging" ] 142 } 143 } 144 cortex_m3_speed_optimized = { 145 name = "arm_clang_cortex_m3_speed_optimized" 146 forward_variables_from(_arm_clang_toolchain, "*") 147 defaults = { 148 forward_variables_from(pigweed_arm_clang_defaults, "*") 149 default_configs = pigweed_default_configs + _cortex_m3 + 150 [ "$dir_pw_build:optimize_speed" ] 151 } 152 } 153 cortex_m3_size_optimized = { 154 name = "arm_clang_cortex_m3_size_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_m3 + 159 [ "$dir_pw_build:optimize_size_clang" ] 160 } 161 } 162 cortex_m4_debug = { 163 name = "arm_clang_cortex_m4_debug" 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_debugging" ] 169 } 170 } 171 cortex_m4_speed_optimized = { 172 name = "arm_clang_cortex_m4_speed_optimized" 173 forward_variables_from(_arm_clang_toolchain, "*") 174 defaults = { 175 forward_variables_from(pigweed_arm_clang_defaults, "*") 176 default_configs = pigweed_default_configs + _cortex_m4 + 177 [ "$dir_pw_build:optimize_speed" ] 178 } 179 } 180 cortex_m4_size_optimized = { 181 name = "arm_clang_cortex_m4_size_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_m4 + 186 [ "$dir_pw_build:optimize_size_clang" ] 187 } 188 } 189 cortex_m4f_debug = { 190 name = "arm_clang_cortex_m4f_debug" 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_debugging" ] 196 } 197 } 198 cortex_m4f_speed_optimized = { 199 name = "arm_clang_cortex_m4f_speed_optimized" 200 forward_variables_from(_arm_clang_toolchain, "*") 201 defaults = { 202 forward_variables_from(pigweed_arm_clang_defaults, "*") 203 default_configs = pigweed_default_configs + _cortex_m4f + 204 [ "$dir_pw_build:optimize_speed" ] 205 } 206 } 207 cortex_m4f_size_optimized = { 208 name = "arm_clang_cortex_m4f_size_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_m4f + 213 [ "$dir_pw_build:optimize_size_clang" ] 214 } 215 } 216 cortex_m7_debug = { 217 name = "arm_clang_cortex_m7_debug" 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_debugging" ] 223 } 224 } 225 cortex_m7_speed_optimized = { 226 name = "arm_clang_cortex_m7_speed_optimized" 227 forward_variables_from(_arm_clang_toolchain, "*") 228 defaults = { 229 forward_variables_from(pigweed_arm_clang_defaults, "*") 230 default_configs = pigweed_default_configs + _cortex_m7 + 231 [ "$dir_pw_build:optimize_speed" ] 232 } 233 } 234 cortex_m7_size_optimized = { 235 name = "arm_clang_cortex_m7_size_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_m7 + 240 [ "$dir_pw_build:optimize_size_clang" ] 241 } 242 } 243 cortex_m7f_debug = { 244 name = "arm_clang_cortex_m7f_debug" 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_debugging" ] 250 } 251 } 252 cortex_m7f_speed_optimized = { 253 name = "arm_clang_cortex_m7f_speed_optimized" 254 forward_variables_from(_arm_clang_toolchain, "*") 255 defaults = { 256 forward_variables_from(pigweed_arm_clang_defaults, "*") 257 default_configs = pigweed_default_configs + _cortex_m7f + 258 [ "$dir_pw_build:optimize_speed" ] 259 } 260 } 261 cortex_m7f_size_optimized = { 262 name = "arm_clang_cortex_m7f_size_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_m7f + 267 [ "$dir_pw_build:optimize_size_clang" ] 268 } 269 } 270 cortex_m33_debug = { 271 name = "arm_clang_cortex_m33_debug" 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_debugging" ] 277 } 278 } 279 cortex_m33_speed_optimized = { 280 name = "arm_clang_cortex_m33_speed_optimized" 281 forward_variables_from(_arm_clang_toolchain, "*") 282 defaults = { 283 forward_variables_from(pigweed_arm_clang_defaults, "*") 284 default_configs = pigweed_default_configs + _cortex_m33 + 285 [ "$dir_pw_build:optimize_speed" ] 286 } 287 } 288 cortex_m33_size_optimized = { 289 name = "arm_clang_cortex_m33_size_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_m33 + 294 [ "$dir_pw_build:optimize_size_clang" ] 295 } 296 } 297 cortex_m33f_debug = { 298 name = "arm_clang_cortex_m33f_debug" 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_debugging" ] 304 } 305 } 306 cortex_m33f_speed_optimized = { 307 name = "arm_clang_cortex_m33f_speed_optimized" 308 forward_variables_from(_arm_clang_toolchain, "*") 309 defaults = { 310 forward_variables_from(pigweed_arm_clang_defaults, "*") 311 default_configs = pigweed_default_configs + _cortex_m33f + 312 [ "$dir_pw_build:optimize_speed" ] 313 } 314 } 315 cortex_m33f_size_optimized = { 316 name = "arm_clang_cortex_m33f_size_optimized" 317 forward_variables_from(_arm_clang_toolchain, "*") 318 defaults = { 319 forward_variables_from(pigweed_arm_clang_defaults, "*") 320 default_configs = pigweed_default_configs + _cortex_m33f + 321 [ "$dir_pw_build:optimize_size_clang" ] 322 } 323 } 324 cortex_m55_debug = { 325 name = "arm_clang_cortex_m55_debug" 326 forward_variables_from(_arm_clang_toolchain, "*") 327 defaults = { 328 forward_variables_from(pigweed_arm_clang_defaults, "*") 329 default_configs = pigweed_default_configs + _cortex_m55 + 330 [ "$dir_pw_build:optimize_debugging" ] 331 } 332 } 333 cortex_m55_speed_optimized = { 334 name = "arm_clang_cortex_m55_speed_optimized" 335 forward_variables_from(_arm_clang_toolchain, "*") 336 defaults = { 337 forward_variables_from(pigweed_arm_clang_defaults, "*") 338 default_configs = pigweed_default_configs + _cortex_m55 + 339 [ "$dir_pw_build:optimize_speed" ] 340 } 341 } 342 cortex_m55_size_optimized = { 343 name = "arm_clang_cortex_m55_size_optimized" 344 forward_variables_from(_arm_clang_toolchain, "*") 345 defaults = { 346 forward_variables_from(pigweed_arm_clang_defaults, "*") 347 default_configs = pigweed_default_configs + _cortex_m55 + 348 [ "$dir_pw_build:optimize_size_clang" ] 349 } 350 } 351} 352 353# This list just contains the members of the above scope for convenience to make 354# it trivial to generate all the toolchains in this file via a 355# `generate_toolchains` target. 356pw_toolchain_arm_clang_list = [ 357 pw_toolchain_arm_clang.cortex_m0plus_debug, 358 pw_toolchain_arm_clang.cortex_m0plus_speed_optimized, 359 pw_toolchain_arm_clang.cortex_m0plus_size_optimized, 360 pw_toolchain_arm_clang.cortex_m3_debug, 361 pw_toolchain_arm_clang.cortex_m3_speed_optimized, 362 pw_toolchain_arm_clang.cortex_m3_size_optimized, 363 pw_toolchain_arm_clang.cortex_m4_debug, 364 pw_toolchain_arm_clang.cortex_m4_speed_optimized, 365 pw_toolchain_arm_clang.cortex_m4_size_optimized, 366 pw_toolchain_arm_clang.cortex_m4f_debug, 367 pw_toolchain_arm_clang.cortex_m4f_speed_optimized, 368 pw_toolchain_arm_clang.cortex_m4f_size_optimized, 369 pw_toolchain_arm_clang.cortex_m7_debug, 370 pw_toolchain_arm_clang.cortex_m7_speed_optimized, 371 pw_toolchain_arm_clang.cortex_m7_size_optimized, 372 pw_toolchain_arm_clang.cortex_m7f_debug, 373 pw_toolchain_arm_clang.cortex_m7f_speed_optimized, 374 pw_toolchain_arm_clang.cortex_m7f_size_optimized, 375 pw_toolchain_arm_clang.cortex_m33_debug, 376 pw_toolchain_arm_clang.cortex_m33_speed_optimized, 377 pw_toolchain_arm_clang.cortex_m33_size_optimized, 378 pw_toolchain_arm_clang.cortex_m33f_debug, 379 pw_toolchain_arm_clang.cortex_m33f_speed_optimized, 380 pw_toolchain_arm_clang.cortex_m33f_size_optimized, 381 pw_toolchain_arm_clang.cortex_m55_debug, 382 pw_toolchain_arm_clang.cortex_m55_speed_optimized, 383 pw_toolchain_arm_clang.cortex_m55_size_optimized, 384] 385