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# Describes ARM GCC toolchains for specific targets. 68pw_toolchain_arm_gcc = { 69 cortex_m0plus_debug = { 70 name = "arm_gcc_cortex_m0plus_debug" 71 forward_variables_from(arm_gcc_toolchain_tools, "*") 72 defaults = { 73 default_configs = 74 _arm_gcc + _cortex_m0plus + [ "$dir_pw_build:optimize_debugging" ] 75 } 76 } 77 cortex_m0plus_speed_optimized = { 78 name = "arm_gcc_cortex_m0plus_speed_optimized" 79 forward_variables_from(arm_gcc_toolchain_tools, "*") 80 defaults = { 81 default_configs = 82 _arm_gcc + _cortex_m0plus + [ "$dir_pw_build:optimize_speed" ] 83 } 84 } 85 cortex_m0plus_size_optimized = { 86 name = "arm_gcc_cortex_m0plus_size_optimized" 87 forward_variables_from(arm_gcc_toolchain_tools, "*") 88 defaults = { 89 default_configs = 90 _arm_gcc + _cortex_m0plus + [ "$dir_pw_build:optimize_size" ] 91 } 92 } 93 cortex_m3_debug = { 94 name = "arm_gcc_cortex_m3_debug" 95 forward_variables_from(arm_gcc_toolchain_tools, "*") 96 defaults = { 97 default_configs = 98 _arm_gcc + _cortex_m3 + [ "$dir_pw_build:optimize_debugging" ] 99 } 100 } 101 cortex_m3_speed_optimized = { 102 name = "arm_gcc_cortex_m3_speed_optimized" 103 forward_variables_from(arm_gcc_toolchain_tools, "*") 104 defaults = { 105 default_configs = 106 _arm_gcc + _cortex_m3 + [ "$dir_pw_build:optimize_speed" ] 107 } 108 } 109 cortex_m3_size_optimized = { 110 name = "arm_gcc_cortex_m3_size_optimized" 111 forward_variables_from(arm_gcc_toolchain_tools, "*") 112 defaults = { 113 default_configs = 114 _arm_gcc + _cortex_m3 + [ "$dir_pw_build:optimize_size" ] 115 } 116 } 117 cortex_m4_debug = { 118 name = "arm_gcc_cortex_m4_debug" 119 forward_variables_from(arm_gcc_toolchain_tools, "*") 120 defaults = { 121 default_configs = 122 _arm_gcc + _cortex_m4 + [ "$dir_pw_build:optimize_debugging" ] 123 } 124 } 125 cortex_m4_speed_optimized = { 126 name = "arm_gcc_cortex_m4_speed_optimized" 127 forward_variables_from(arm_gcc_toolchain_tools, "*") 128 defaults = { 129 default_configs = 130 _arm_gcc + _cortex_m4 + [ "$dir_pw_build:optimize_speed" ] 131 } 132 } 133 cortex_m4_size_optimized = { 134 name = "arm_gcc_cortex_m4_size_optimized" 135 forward_variables_from(arm_gcc_toolchain_tools, "*") 136 defaults = { 137 default_configs = 138 _arm_gcc + _cortex_m4 + [ "$dir_pw_build:optimize_size" ] 139 } 140 } 141 cortex_m4f_debug = { 142 name = "arm_gcc_cortex_m4f_debug" 143 forward_variables_from(arm_gcc_toolchain_tools, "*") 144 defaults = { 145 default_configs = 146 _arm_gcc + _cortex_m4f + [ "$dir_pw_build:optimize_debugging" ] 147 } 148 } 149 cortex_m4f_speed_optimized = { 150 name = "arm_gcc_cortex_m4f_speed_optimized" 151 forward_variables_from(arm_gcc_toolchain_tools, "*") 152 defaults = { 153 default_configs = 154 _arm_gcc + _cortex_m4f + [ "$dir_pw_build:optimize_speed" ] 155 } 156 } 157 cortex_m4f_size_optimized = { 158 name = "arm_gcc_cortex_m4f_size_optimized" 159 forward_variables_from(arm_gcc_toolchain_tools, "*") 160 defaults = { 161 default_configs = 162 _arm_gcc + _cortex_m4f + [ "$dir_pw_build:optimize_size" ] 163 } 164 } 165 cortex_m7_debug = { 166 name = "arm_gcc_cortex_m7_debug" 167 forward_variables_from(arm_gcc_toolchain_tools, "*") 168 defaults = { 169 default_configs = 170 _arm_gcc + _cortex_m7 + [ "$dir_pw_build:optimize_debugging" ] 171 } 172 } 173 cortex_m7_speed_optimized = { 174 name = "arm_gcc_cortex_m7_speed_optimized" 175 forward_variables_from(arm_gcc_toolchain_tools, "*") 176 defaults = { 177 default_configs = 178 _arm_gcc + _cortex_m7 + [ "$dir_pw_build:optimize_speed" ] 179 } 180 } 181 cortex_m7_size_optimized = { 182 name = "arm_gcc_cortex_m7_size_optimized" 183 forward_variables_from(arm_gcc_toolchain_tools, "*") 184 defaults = { 185 default_configs = 186 _arm_gcc + _cortex_m7 + [ "$dir_pw_build:optimize_size" ] 187 } 188 } 189 cortex_m7f_debug = { 190 name = "arm_gcc_cortex_m7f_debug" 191 forward_variables_from(arm_gcc_toolchain_tools, "*") 192 defaults = { 193 default_configs = 194 _arm_gcc + _cortex_m7f + [ "$dir_pw_build:optimize_debugging" ] 195 } 196 } 197 cortex_m7f_speed_optimized = { 198 name = "arm_gcc_cortex_m7f_speed_optimized" 199 forward_variables_from(arm_gcc_toolchain_tools, "*") 200 defaults = { 201 default_configs = 202 _arm_gcc + _cortex_m7f + [ "$dir_pw_build:optimize_speed" ] 203 } 204 } 205 cortex_m7f_size_optimized = { 206 name = "arm_gcc_cortex_m7f_size_optimized" 207 forward_variables_from(arm_gcc_toolchain_tools, "*") 208 defaults = { 209 default_configs = 210 _arm_gcc + _cortex_m7f + [ "$dir_pw_build:optimize_size" ] 211 } 212 } 213} 214 215# This list just contains the members of the above scope for convenience to make 216# it trivial to generate all the toolchains in this file via a 217# `generate_toolchains` target. 218pw_toolchain_arm_gcc_list = [ 219 pw_toolchain_arm_gcc.cortex_m0plus_debug, 220 pw_toolchain_arm_gcc.cortex_m0plus_speed_optimized, 221 pw_toolchain_arm_gcc.cortex_m0plus_size_optimized, 222 pw_toolchain_arm_gcc.cortex_m3_debug, 223 pw_toolchain_arm_gcc.cortex_m3_speed_optimized, 224 pw_toolchain_arm_gcc.cortex_m3_size_optimized, 225 pw_toolchain_arm_gcc.cortex_m4_debug, 226 pw_toolchain_arm_gcc.cortex_m4_speed_optimized, 227 pw_toolchain_arm_gcc.cortex_m4_size_optimized, 228 pw_toolchain_arm_gcc.cortex_m4f_debug, 229 pw_toolchain_arm_gcc.cortex_m4f_speed_optimized, 230 pw_toolchain_arm_gcc.cortex_m4f_size_optimized, 231 pw_toolchain_arm_gcc.cortex_m7_debug, 232 pw_toolchain_arm_gcc.cortex_m7_speed_optimized, 233 pw_toolchain_arm_gcc.cortex_m7_size_optimized, 234 pw_toolchain_arm_gcc.cortex_m7f_debug, 235 pw_toolchain_arm_gcc.cortex_m7f_speed_optimized, 236 pw_toolchain_arm_gcc.cortex_m7f_size_optimized, 237] 238