| # Copyright 2022 The Pigweed Authors |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| # use this file except in compliance with the License. You may obtain a copy of |
| # the License at |
| # |
| # https://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| # License for the specific language governing permissions and limitations under |
| # the License. |
| |
| import("//build_overrides/pigweed.gni") |
| |
| import("$dir_pw_build/linker_script.gni") |
| import("$dir_pw_build/target_types.gni") |
| import("$dir_pw_docgen/docs.gni") |
| import("$dir_pw_malloc/backend.gni") |
| import("$dir_pw_system/system_target.gni") |
| import("$dir_pw_third_party/smartfusion_mss/mss.gni") |
| import("$dir_pw_tokenizer/backend.gni") |
| import("$dir_pw_toolchain/generate_toolchain.gni") |
| |
| config("pw_malloc_active") { |
| if (pw_malloc_BACKEND != "") { |
| defines = [ "PW_MALLOC_ACTIVE=1" ] |
| } |
| } |
| |
| config("emcraft_ddr_init") { |
| # Emcraft's DDR config must be manually set by a custom init function. This |
| # conflicts with the built-in MSS init function. I have not looked into this |
| # myself to see if it's absoutely needed or not. |
| defines = [ "MSS_SYS_MDDR_CONFIG_BY_CORTEX=0" ] |
| } |
| |
| if (current_toolchain != default_toolchain) { |
| pw_linker_script("mddr_debug_linker_script") { |
| defines = [ |
| "PW_BOOT_CODE_BEGIN=0x00000200", # After vector table. |
| |
| # TODO(skeys) Bootloader is capable of loading 16M of uncompressed code |
| # from SPI flash to external RAM. For now use the allocated eNVM flash |
| # (256K - Bootloader - InSystemProgrammer = 192K) |
| "PW_BOOT_CODE_SIZE=0x30000", |
| |
| # TODO(b/235348465): Currently "pw_tokenizer/detokenize_test" requires at |
| # least 6K bytes in heap when using pw_malloc_freelist. The heap size |
| # required for tests should be investigated. |
| "PW_BOOT_HEAP_SIZE=4M", |
| |
| # With external RAM remapped, we use the entire internal ram for the |
| # stack (64K). |
| "PW_BOOT_MIN_STACK_SIZE=64K", |
| |
| # Using external DDR RAM, we just need to make sure we go past our ROM |
| # sections. |
| "PW_BOOT_RAM_BEGIN=0xA1000000", |
| |
| # We assume that the bootloader loaded all 16M of text. |
| "PW_BOOT_RAM_SIZE=48M", |
| "PW_BOOT_VECTOR_TABLE_BEGIN=0x00000000", |
| "PW_BOOT_VECTOR_TABLE_SIZE=512", |
| ] |
| linker_script = "emcraft_sf2_som_mddr_debug.ld" |
| } |
| pw_linker_script("mddr_production_linker_script") { |
| defines = [ |
| "PW_BOOT_FLASH_BEGIN=0x00000200", # After vector table. |
| |
| # TODO(skeys) Bootloader is capable of loading 16M of uncompressed code |
| # from SPI flash to external RAM. For now use the allocated eNVM flash |
| # (256K - Bootloader - InSystemProgrammer = 192K) |
| "PW_BOOT_FLASH_SIZE=0x30000", |
| |
| # TODO(b/235348465): Currently "pw_tokenizer/detokenize_test" requires at |
| # least 6K bytes in heap when using pw_malloc_freelist. The heap size |
| # required for tests should be investigated. |
| "PW_BOOT_HEAP_SIZE=4M", |
| |
| # With external RAM remapped, we use the entire internal ram for the |
| # stack (64K). |
| "PW_BOOT_MIN_STACK_SIZE=1024K", |
| |
| # Using external DDR RAM, we just need to make sure we go past our ROM |
| # sections. |
| "PW_BOOT_RAM_BEGIN=0xA1000000", |
| |
| # We assume that the bootloader loaded all 16M of text. |
| "PW_BOOT_RAM_SIZE=48M", |
| "PW_BOOT_VECTOR_TABLE_BEGIN=0x00000000", |
| "PW_BOOT_VECTOR_TABLE_SIZE=512", |
| ] |
| linker_script = "$dir_pw_boot_cortex_m/basic_cortex_m.ld" |
| } |
| |
| pw_source_set("pre_init") { |
| configs = [ ":pw_malloc_active" ] |
| deps = [ |
| "$dir_pw_boot", |
| "$dir_pw_boot_cortex_m", |
| "$dir_pw_malloc", |
| "$dir_pw_preprocessor", |
| "$dir_pw_string", |
| "$dir_pw_sys_io_emcraft_sf2", |
| "$dir_pw_system", |
| "$dir_pw_third_party/freertos", |
| ] |
| sources = [ |
| "boot.cc", |
| "vector_table.c", |
| ] |
| } |
| |
| config("config_includes") { |
| include_dirs = [ "config" ] |
| configs = [ ":emcraft_ddr_init" ] |
| } |
| |
| pw_source_set("sf2_mss_hal_config") { |
| public_configs = [ ":config_includes" ] |
| public = |
| [ "config/sf2_mss_hal_conf.h" ] # SKEYS likely want to put the MDDR |
| # config by cortex etc stuff here |
| } |
| |
| pw_source_set("sf2_freertos_config") { |
| public_configs = [ ":config_includes" ] |
| public_deps = [ "$dir_pw_third_party/freertos:config_assert" ] |
| public = [ "config/FreeRTOSConfig.h" ] |
| } |
| } |
| |
| # Configured for use with a first stage boot loader to configure DDR and |
| # perform memory remapping. |
| pw_system_target("emcraft_sf2_som") { |
| cpu = PW_SYSTEM_CPU.CORTEX_M3 |
| scheduler = PW_SYSTEM_SCHEDULER.FREERTOS |
| link_deps = [ "$dir_pigweed/targets/emcraft_sf2_som:pre_init" ] |
| |
| build_args = { |
| pw_log_BACKEND = dir_pw_log_tokenized |
| pw_tokenizer_GLOBAL_HANDLER_WITH_PAYLOAD_BACKEND = |
| "$dir_pw_system:log_backend.impl" |
| pw_third_party_freertos_CONFIG = |
| "$dir_pigweed/targets/emcraft_sf2_som:sf2_freertos_config" |
| pw_third_party_freertos_PORT = "$dir_pw_third_party/freertos:arm_cm3" |
| pw_sys_io_BACKEND = dir_pw_sys_io_emcraft_sf2 |
| |
| pw_boot_cortex_m_LINKER_SCRIPT = |
| "//targets/emcraft_sf2_som:mddr_production_linker_script" |
| } |
| } |
| |
| # Debug target configured to work with MSS linker script and startup code. |
| # TODO(skeys) Add linker script and config for debug builds using SoftConsole. |
| pw_system_target("emcraft_sf2_som_debug") { |
| cpu = PW_SYSTEM_CPU.CORTEX_M3 |
| scheduler = PW_SYSTEM_SCHEDULER.FREERTOS |
| link_deps = [ "$dir_pigweed/targets/emcraft_sf2_som:pre_init" ] |
| |
| build_args = { |
| pw_log_BACKEND = dir_pw_log_tokenized |
| pw_tokenizer_GLOBAL_HANDLER_WITH_PAYLOAD_BACKEND = |
| "$dir_pw_system:log_backend.impl" |
| pw_third_party_freertos_CONFIG = |
| "$dir_pigweed/targets/emcraft_sf2_som:sf2_freertos_config" |
| pw_third_party_freertos_PORT = "$dir_pw_third_party/freertos:arm_cm3" |
| pw_sys_io_BACKEND = dir_pw_sys_io_emcraft_sf2 |
| |
| # Override the default pw_boot_cortex_m linker script and set the memory |
| # regions for the target. |
| pw_boot_cortex_m_LINKER_SCRIPT = |
| "//targets/emcraft_sf2_som:mddr_debug_linker_script" |
| pw_third_party_smartfusion_mss_CONFIG = "debug" |
| } |
| } |
| |
| pw_doc_group("docs") { |
| sources = [ "target_docs.rst" ] |
| } |