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 17import("$dir_pw_sys_io/backend.gni") 18import("$dir_pw_toolchain/arm_clang/toolchains.gni") 19import("$dir_pw_toolchain/arm_gcc/toolchains.gni") 20 21_test_runner_script = "py/lm3s6965evb_qemu_utils/unit_test_runner.py" 22 23_target_config = { 24 # Use the logging main. 25 pw_unit_test_MAIN = "$dir_pw_unit_test:logging_main" 26 27 # Configuration options for Pigweed executable targets. 28 pw_build_EXECUTABLE_TARGET_TYPE = "lm3s6965evb_executable" 29 30 pw_build_EXECUTABLE_TARGET_TYPE_FILE = 31 get_path_info("lm3s6965evb_executable.gni", "abspath") 32 33 # Path to the bloaty config file for the output binaries. 34 pw_bloat_BLOATY_CONFIG = "$dir_pw_boot_cortex_m/bloaty_config.bloaty" 35 36 pw_unit_test_AUTOMATIC_RUNNER = get_path_info(_test_runner_script, "abspath") 37 38 # Facade backends 39 pw_assert_BACKEND = dir_pw_assert_basic 40 pw_boot_BACKEND = "$dir_pw_boot_cortex_m" 41 pw_log_BACKEND = dir_pw_log_basic 42 pw_sys_io_BACKEND = dir_pw_sys_io_baremetal_lm3s6965evb 43 pw_sync_INTERRUPT_SPIN_LOCK_BACKEND = 44 "$dir_pw_sync_baremetal:interrupt_spin_lock" 45 pw_sync_MUTEX_BACKEND = "$dir_pw_sync_baremetal:mutex" 46 47 # pw_cpu_exception_armv7m tests do not work as expected in QEMU. It does not 48 # appear the divide-by-zero traps as expected when enabled, which prevents the 49 # module from triggering a recoverable exception. Since pw_cpu_exception is 50 # not fully set up on this target, disable it for now. 51 # pw_cpu_exception_ENTRY_BACKEND = 52 # "$dir_pw_cpu_exception_cortex_m:cpu_exception_armv7m 53 54 pw_boot_cortex_m_LINK_CONFIG_DEFINES = [ 55 "PW_BOOT_FLASH_BEGIN=0x00000200", 56 "PW_BOOT_FLASH_SIZE=255K", 57 "PW_BOOT_HEAP_SIZE=0", 58 "PW_BOOT_MIN_STACK_SIZE=1K", 59 "PW_BOOT_RAM_BEGIN=0x20000000", 60 "PW_BOOT_RAM_SIZE=64K", 61 "PW_BOOT_VECTOR_TABLE_BEGIN=0x00000000", 62 "PW_BOOT_VECTOR_TABLE_SIZE=512", 63 ] 64 65 pw_build_LINK_DEPS = [ 66 "$dir_pw_assert:impl", 67 "$dir_pw_log:impl", 68 ] 69 70 current_cpu = "arm" 71 current_os = "" 72} 73 74_gcc_target_default_configs = [ 75 "$dir_pw_build:extra_strict_warnings", 76 "$dir_pw_toolchain/arm_gcc:enable_float_printf", 77] 78 79_clang_target_default_configs = [ 80 "$dir_pw_build:clang_thread_safety_warnings", 81 "$dir_pw_build:extra_strict_warnings", 82 "$dir_pw_toolchain/arm_clang:enable_float_printf", 83] 84 85pw_target_toolchain_lm3s6965evb_qemu = { 86 _excluded_members = [ 87 "defaults", 88 "name", 89 ] 90 91 debug = { 92 name = "lm3s6965evb_qemu_gcc_debug" 93 _toolchain_base = pw_toolchain_arm_gcc.cortex_m3_debug 94 forward_variables_from(_toolchain_base, "*", _excluded_members) 95 defaults = { 96 forward_variables_from(_toolchain_base.defaults, "*") 97 forward_variables_from(_target_config, "*") 98 default_configs += _gcc_target_default_configs 99 } 100 } 101 102 speed_optimized = { 103 name = "lm3s6965evb_qemu_gcc_speed_optimized" 104 _toolchain_base = pw_toolchain_arm_gcc.cortex_m3_speed_optimized 105 forward_variables_from(_toolchain_base, "*", _excluded_members) 106 defaults = { 107 forward_variables_from(_toolchain_base.defaults, "*") 108 forward_variables_from(_target_config, "*") 109 default_configs += _gcc_target_default_configs 110 } 111 } 112 113 size_optimized = { 114 name = "lm3s6965evb_qemu_gcc_size_optimized" 115 _toolchain_base = pw_toolchain_arm_gcc.cortex_m3_size_optimized 116 forward_variables_from(_toolchain_base, "*", _excluded_members) 117 defaults = { 118 forward_variables_from(_toolchain_base.defaults, "*") 119 forward_variables_from(_target_config, "*") 120 default_configs += _gcc_target_default_configs 121 } 122 } 123 124 debug_clang = { 125 name = "lm3s6965evb_qemu_clang_debug" 126 _toolchain_base = pw_toolchain_arm_clang.cortex_m3_debug 127 forward_variables_from(_toolchain_base, "*", _excluded_members) 128 defaults = { 129 forward_variables_from(_toolchain_base.defaults, "*") 130 forward_variables_from(_target_config, "*") 131 default_configs += _clang_target_default_configs 132 } 133 } 134 135 speed_optimized_clang = { 136 name = "lm3s6965evb_qemu_clang_speed_optimized" 137 _toolchain_base = pw_toolchain_arm_clang.cortex_m3_speed_optimized 138 forward_variables_from(_toolchain_base, "*", _excluded_members) 139 defaults = { 140 forward_variables_from(_toolchain_base.defaults, "*") 141 forward_variables_from(_target_config, "*") 142 default_configs += _clang_target_default_configs 143 } 144 } 145 146 size_optimized_clang = { 147 name = "lm3s6965evb_qemu_clang_size_optimized" 148 _toolchain_base = pw_toolchain_arm_clang.cortex_m3_size_optimized 149 forward_variables_from(_toolchain_base, "*", _excluded_members) 150 defaults = { 151 forward_variables_from(_toolchain_base.defaults, "*") 152 forward_variables_from(_target_config, "*") 153 default_configs += _clang_target_default_configs 154 } 155 } 156} 157 158# This list just contains the members of the above scope for convenience to make 159# it trivial to generate all the toolchains in this file via a 160# `generate_toolchains` target. 161pw_target_toolchain_lm3s6965evb_qemu_list = [ 162 pw_target_toolchain_lm3s6965evb_qemu.debug, 163 pw_target_toolchain_lm3s6965evb_qemu.speed_optimized, 164 pw_target_toolchain_lm3s6965evb_qemu.size_optimized, 165 pw_target_toolchain_lm3s6965evb_qemu.debug_clang, 166 pw_target_toolchain_lm3s6965evb_qemu.speed_optimized_clang, 167 pw_target_toolchain_lm3s6965evb_qemu.size_optimized_clang, 168] 169