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 32# These are the defaults automatically applied to every pw_toolchain_arm_clang* 33# toolchain. 34pigweed_arm_clang_defaults = { 35 # Add LLVM libc++ library as a dependency to all targets. 36 # If `dir_pw_third_party_llvm_libcxx` is not configured, this library will be 37 # empty. 38 default_public_deps = [ dir_pw_libcxx ] 39 40 # Build LLVM builtins library from sources and link against it for each 41 # target. 42 # If `dir_pw_third_party_llvm_builtins` is not configured, this library will 43 # be empty. 44 pw_build_TOOLCHAIN_LINK_DEPS = [ "$dir_pw_toolchain:builtins" ] 45} 46 47# Configs specific to different architectures. 48_cortex_m0plus = [ 49 "$dir_pw_toolchain/arm_clang:nosys", 50 "$dir_pw_toolchain/arm_clang:cortex_m0plus", 51] 52 53_cortex_m3 = [ 54 "$dir_pw_toolchain/arm_clang:nosys", 55 "$dir_pw_toolchain/arm_clang:cortex_m3", 56] 57 58_cortex_m4 = [ 59 "$dir_pw_toolchain/arm_clang:nosys", 60 "$dir_pw_toolchain/arm_clang:cortex_m4", 61] 62 63_cortex_m4f = [ 64 "$dir_pw_toolchain/arm_clang:nosys", 65 "$dir_pw_toolchain/arm_clang:cortex_m4f", 66] 67 68_cortex_m7 = [ 69 "$dir_pw_toolchain/arm_clang:nosys", 70 "$dir_pw_toolchain/arm_clang:cortex_m7", 71] 72 73_cortex_m7f = [ 74 "$dir_pw_toolchain/arm_clang:nosys", 75 "$dir_pw_toolchain/arm_clang:cortex_m7f", 76] 77 78_cortex_m33 = [ 79 "$dir_pw_toolchain/arm_clang:nosys", 80 "$dir_pw_toolchain/arm_clang:cortex_m33", 81] 82 83_cortex_m33f = [ 84 "$dir_pw_toolchain/arm_clang:nosys", 85 "$dir_pw_toolchain/arm_clang:cortex_m33f", 86] 87 88# Describes ARM clang toolchains for specific targets. 89pw_toolchain_arm_clang = { 90 cortex_m0plus_debug = { 91 name = "arm_clang_cortex_m0plus_debug" 92 forward_variables_from(_arm_clang_toolchain, "*") 93 defaults = { 94 forward_variables_from(pigweed_arm_clang_defaults, "*") 95 default_configs = pigweed_default_configs + _cortex_m0plus + 96 [ "$dir_pw_build:optimize_debugging" ] 97 } 98 } 99 cortex_m0plus_speed_optimized = { 100 name = "arm_clang_cortex_m0plus_speed_optimized" 101 forward_variables_from(_arm_clang_toolchain, "*") 102 defaults = { 103 forward_variables_from(pigweed_arm_clang_defaults, "*") 104 default_configs = pigweed_default_configs + _cortex_m0plus + 105 [ "$dir_pw_build:optimize_speed" ] 106 } 107 } 108 cortex_m0plus_size_optimized = { 109 name = "arm_clang_cortex_m0plus_size_optimized" 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_size_clang" ] 115 } 116 } 117 cortex_m3_debug = { 118 name = "arm_clang_cortex_m3_debug" 119 forward_variables_from(_arm_clang_toolchain, "*") 120 defaults = { 121 forward_variables_from(pigweed_arm_clang_defaults, "*") 122 default_configs = pigweed_default_configs + _cortex_m3 + 123 [ "$dir_pw_build:optimize_debugging" ] 124 } 125 } 126 cortex_m3_speed_optimized = { 127 name = "arm_clang_cortex_m3_speed_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_m3 + 132 [ "$dir_pw_build:optimize_speed" ] 133 } 134 } 135 cortex_m3_size_optimized = { 136 name = "arm_clang_cortex_m3_size_optimized" 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_size_clang" ] 142 } 143 } 144 cortex_m4_debug = { 145 name = "arm_clang_cortex_m4_debug" 146 forward_variables_from(_arm_clang_toolchain, "*") 147 defaults = { 148 forward_variables_from(pigweed_arm_clang_defaults, "*") 149 default_configs = pigweed_default_configs + _cortex_m4 + 150 [ "$dir_pw_build:optimize_debugging" ] 151 } 152 } 153 cortex_m4_speed_optimized = { 154 name = "arm_clang_cortex_m4_speed_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_m4 + 159 [ "$dir_pw_build:optimize_speed" ] 160 } 161 } 162 cortex_m4_size_optimized = { 163 name = "arm_clang_cortex_m4_size_optimized" 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_size_clang" ] 169 } 170 } 171 cortex_m4f_debug = { 172 name = "arm_clang_cortex_m4f_debug" 173 forward_variables_from(_arm_clang_toolchain, "*") 174 defaults = { 175 forward_variables_from(pigweed_arm_clang_defaults, "*") 176 default_configs = pigweed_default_configs + _cortex_m4f + 177 [ "$dir_pw_build:optimize_debugging" ] 178 } 179 } 180 cortex_m4f_speed_optimized = { 181 name = "arm_clang_cortex_m4f_speed_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_m4f + 186 [ "$dir_pw_build:optimize_speed" ] 187 } 188 } 189 cortex_m4f_size_optimized = { 190 name = "arm_clang_cortex_m4f_size_optimized" 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_size_clang" ] 196 } 197 } 198 cortex_m7_debug = { 199 name = "arm_clang_cortex_m7_debug" 200 forward_variables_from(_arm_clang_toolchain, "*") 201 defaults = { 202 forward_variables_from(pigweed_arm_clang_defaults, "*") 203 default_configs = pigweed_default_configs + _cortex_m7 + 204 [ "$dir_pw_build:optimize_debugging" ] 205 } 206 } 207 cortex_m7_speed_optimized = { 208 name = "arm_clang_cortex_m7_speed_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_m7 + 213 [ "$dir_pw_build:optimize_speed" ] 214 } 215 } 216 cortex_m7_size_optimized = { 217 name = "arm_clang_cortex_m7_size_optimized" 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_size_clang" ] 223 } 224 } 225 cortex_m7f_debug = { 226 name = "arm_clang_cortex_m7f_debug" 227 forward_variables_from(_arm_clang_toolchain, "*") 228 defaults = { 229 forward_variables_from(pigweed_arm_clang_defaults, "*") 230 default_configs = pigweed_default_configs + _cortex_m7f + 231 [ "$dir_pw_build:optimize_debugging" ] 232 } 233 } 234 cortex_m7f_speed_optimized = { 235 name = "arm_clang_cortex_m7f_speed_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_m7f + 240 [ "$dir_pw_build:optimize_speed" ] 241 } 242 } 243 cortex_m7f_size_optimized = { 244 name = "arm_clang_cortex_m7f_size_optimized" 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_size_clang" ] 250 } 251 } 252 cortex_m33_debug = { 253 name = "arm_clang_cortex_m33_debug" 254 forward_variables_from(_arm_clang_toolchain, "*") 255 defaults = { 256 forward_variables_from(pigweed_arm_clang_defaults, "*") 257 default_configs = pigweed_default_configs + _cortex_m33 + 258 [ "$dir_pw_build:optimize_debugging" ] 259 } 260 } 261 cortex_m33_speed_optimized = { 262 name = "arm_clang_cortex_m33_speed_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_m33 + 267 [ "$dir_pw_build:optimize_speed" ] 268 } 269 } 270 cortex_m33_size_optimized = { 271 name = "arm_clang_cortex_m33_size_optimized" 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_size_clang" ] 277 } 278 } 279 cortex_m33f_debug = { 280 name = "arm_clang_cortex_m33f_debug" 281 forward_variables_from(_arm_clang_toolchain, "*") 282 defaults = { 283 forward_variables_from(pigweed_arm_clang_defaults, "*") 284 default_configs = pigweed_default_configs + _cortex_m33f + 285 [ "$dir_pw_build:optimize_debugging" ] 286 } 287 } 288 cortex_m33f_speed_optimized = { 289 name = "arm_clang_cortex_m33f_speed_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_m33f + 294 [ "$dir_pw_build:optimize_speed" ] 295 } 296 } 297 cortex_m33f_size_optimized = { 298 name = "arm_clang_cortex_m33f_size_optimized" 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_size_clang" ] 304 } 305 } 306} 307 308# This list just contains the members of the above scope for convenience to make 309# it trivial to generate all the toolchains in this file via a 310# `generate_toolchains` target. 311pw_toolchain_arm_clang_list = [ 312 pw_toolchain_arm_clang.cortex_m0plus_debug, 313 pw_toolchain_arm_clang.cortex_m0plus_speed_optimized, 314 pw_toolchain_arm_clang.cortex_m0plus_size_optimized, 315 pw_toolchain_arm_clang.cortex_m3_debug, 316 pw_toolchain_arm_clang.cortex_m3_speed_optimized, 317 pw_toolchain_arm_clang.cortex_m3_size_optimized, 318 pw_toolchain_arm_clang.cortex_m4_debug, 319 pw_toolchain_arm_clang.cortex_m4_speed_optimized, 320 pw_toolchain_arm_clang.cortex_m4_size_optimized, 321 pw_toolchain_arm_clang.cortex_m4f_debug, 322 pw_toolchain_arm_clang.cortex_m4f_speed_optimized, 323 pw_toolchain_arm_clang.cortex_m4f_size_optimized, 324 pw_toolchain_arm_clang.cortex_m7_debug, 325 pw_toolchain_arm_clang.cortex_m7_speed_optimized, 326 pw_toolchain_arm_clang.cortex_m7_size_optimized, 327 pw_toolchain_arm_clang.cortex_m7f_debug, 328 pw_toolchain_arm_clang.cortex_m7f_speed_optimized, 329 pw_toolchain_arm_clang.cortex_m7f_size_optimized, 330 pw_toolchain_arm_clang.cortex_m33_debug, 331 pw_toolchain_arm_clang.cortex_m33_speed_optimized, 332 pw_toolchain_arm_clang.cortex_m33_size_optimized, 333 pw_toolchain_arm_clang.cortex_m33f_debug, 334 pw_toolchain_arm_clang.cortex_m33f_speed_optimized, 335 pw_toolchain_arm_clang.cortex_m33f_size_optimized, 336] 337