8dc3f85622
This is a squash of the ``collab-hwm`` branch which converts all in-tree boards to hardware model version 2 including build system changes, board updates and soc conversions. This squash is a combination of the following commits: ca214745a1 soc: Remove soc_legacy folder and move ARM Kconfig f12cb0979f scripts: ci: check_compliance: remove HWMv1 checks 1807bcf4d4 boards: mimx8mq_evk: port to HWMv2 3ec2299c62 soc: nxp: port imx8mq SOC to HWMv2 8ea02f4e63 boards: verdin_imx8mp: convert to HVMv2 f2eb7652ce boards: phyboard_pollux: move to HVMv2 ab509a5ee0 boards: nxp: mimx8mp_evk: port M7 core to HWMv2 06ad037f99 soc: nxp: imx8mp: port M7 core to HWMv2 3f9e706859 boards: mimx8mm_phyboard: convert to HVMv2 204372d264 boards: imx8mm_evk: port CM4 core to HWMv2 f82c961a46 soc: nxp: imx8mm: port iMX8MM M4 core to HVMv2 6987b2e305 boards: pico_pi: convert to HVMv2 84484e6707 boards: warp7: convert to HWMv2 ae443d1e3c boards: meerkat96: port to HWMv2 e3629c64e6 boards: colibri_imx7d: port to HWMv2 fc835d893d soc: nxp: convert iMX7 Dual core to HWMv2 29ef2f23eb boards: udoo_neo_full: convert to HWMv2 fd49b1749e soc: nxp: convert iMX6 SoloX core to HWMv2 1e59b7a3fd soc: nxp: imxrt11xx: only set CONFIG_CPU_HAS_FPU_DOUBLE_PRECISION for M7 69bb0eb258 hwmv2: MAINTAINERS: Fix NXP maintainer yaml 1c4458890f boards: firefly: roc_rk3568_pc: Fix SMP configuration 651a4370ad boards: Fix variants and revisions 196cfda66d tests/samples: Drop default revision identifiers 6ec6b1d75a boards: Drop revision from twister identifiers for default revisions b774cdd59f scripts: utils: board_v1_to_v2: drop board_legacy prefix 7aa36e6640 boards: riscv: esp32c3_luatos_core: make usb variant fe25709a9c twister: add unit_testing soc and board f88f211b4e scripts: ci: check_compliance: improve the "not sorted" command b21a455dfb bluetooth: controller: Fix openisa checks fdc76c48a7 workflow: compliance: Add rename limit 14ecafc67d dts: bindings: vendor-prefixes: Sort entries dbc366c3c7 soc: nxp: lpc: Move wrong configurations 8e02c08f96 maintainers: Fix invalid paths b1b85e2495 boards: up: Fix spaces 58cc4013b3 maintainers: Fix xen path 66ce5c0b09 boards/soc: Add missing copyright headers bb47243254 boards: qemu: x86: Remove pointless file 2e816a8a3a samples: tests: update esp32-based board naming 9aeab17139 samples: tests: remove platform_exclude of esp32 boards a4fe97b9de boards: shields: m5stack_core2_ext: update board name 615fcab94a samples: ipm_esp32: fix board labels and skip testing 7752f69b7f boards: legacy: remove index entry for xtensa/riscv boards. 3eba827956 MAINTAINERS: update Espressif entries 914362bbd5 boards: xtensa: yd_esp32: Convert to v2 a62278fd23 boards: xtensa: xiao_esp32s3: Convert to v2 b6a11ccec4 boards: xtensa: olimex_esp32_evb: Convert to v2 c1067c16d2 boards: xtensa: odroid_go: Convert to v2 b8340b0109 boards: xtensa: m5stickc_plus: Convert to v2 9d81e417be boards: xtensa: m5stack_stamps3: Convert to v2 c296672720 boards: xtensa: m5stack_core2: Convert to v2 fada12aa9d boards: xtensa: m5stack_atoms3_lite: Convert to v2 fe37ebac1e boards: xtensa: m5stack_atoms3: Convert to v2 d32828fe6a boards: xtensa: kincony_kc868_a32: Convert to v2 5afba7855b boards: xtensa: heltec_wireless_stick_lite_v3: Convert to v2 ca48c17723 boards: xtensa: heltec_wifi_lora32_v2: Convert to v2 db1fd4d229 boards: xtensa: esp32s3_luatos_core: Convert to v2 a78b2552eb boards: xtensa: esp32s3_devkitm: Convert to v2 cc96061d96 boards: xtensa: esp32s2_saola: Convert to v2 ed854e05d1 boards: xtensa: esp32s2_lolin_mini: Convert to v2 4fa1ae8110 boards: xtensa: esp32s2_franzininho: Convert to v2 5543040a18 boards: xtensa: esp_wrover_kit: Convert to v2 2335ae79b3 boards: xtensa: esp32_ethernet_kit: Convert to v2 f910b7ad4f boards: xtensa: esp32_devkitc_wrover: Convert to v2 32104db555 boards: xtensa: esp32_devkitc_wroom: Convert to v2 e23a41200d boards: riscv: icev_wireless: Convert to v2 3c670e4e53 boards: riscv: xiao_esp32c3: Convert to v2 fc7c6a060b boards: riscv: stamp_c3: Convert to v2 22c2edb89c boards: riscv: esp32c3_luatos_core: Convert to v2 0a96dcb778 boards: riscv: esp32c3_devkitm: Convert to v2 be1ee1c446 vendors: update vendors lists 5e6c62137f soc: espressif_esp32: Port to HWMv2 037a3b52a4 boards: Raspberry Pi pico pwm led adjustment 7277cae6fa samples: blinky_pwm: enable pwm_leds in rpi_pico overlay da3e49d34e boards: nxp: update selection of FLASH_MCUX_FLEXSPI_XIP_MEM_TARGET bc8424dd3b soc: nxp: imxrt: move FLASH_MCUX_FLEXSPI_XIP_MEM_TARGET to SOC level 041cb52939 soc: brcm: bcm_vk: Rename to bcnvk 576b43a95c soc: Fix SOC_FAMILY name mismatches e8f3e6494d hwmv2: boards: intel: adsp: Fix runner after paths renamed 550399e927 boards: weact: stm32g431_core: Add wrongly deleted file back 08708c909e tests: drivers: flash: Renamed missed board rename 06dac41e68 hwmv2: Convert Seagate Faze board to hwmv2 dd8f842b40 hwmv2: nxp: update MAINTAINER paths for hwmv2 b4d1c04978 hwmv2: lpc: updated overlay and conf files in samples and tests 067c69089e boards: nxp: convert lpcxpresso55s69 to hwmv2 097205b40a hwmv2: Global fix of lpc54114_m4 overlay and conf files d8cfa6fb29 boards: nxp: convert lpcxpresso54114 to hwmv2 c29ed228c6 boards: nxp: convert lpcxpresso55s36 to hwmv2 88cfd3d6ac boards: nxp: convert lpcxpresso55s28 to hwmv2 ad30c940ee boards: nxp: convert lpcxpresso55s16 to hwmv2 9e5a10ec80 boards: nxp: convert lpcxpresso55s06 to hwmv2 5650c83268 boards: nxp: convert lpcxpresso51u68 to hwmv2 82cf44be45 boards: nxp: convert lpcxpresso11u68 to hwmv2 1a9c405a6f soc: nxp: convert LPC SOC family to hardware model V2 f2b536d253 boards: intel: doc: hwmv2: Fix some renamed paths 5ee6058710 samples/tests: Use board revisions b76687602f boards: Add yaml files for boards missing revisions 32ae4918d0 boards: nordic: Fix board names cc1dabca65 MAINTAINERS: Update for renamed folders a37ddce659 soc: xilinx: Rename to xlnx a1393a07f6 soc: xenvm: Rename to xen 813ed00f67 soc: raspberry_pi: Rename to raspberrypi 71317d6798 soc: cadence: Rename to cdns 8cb0c51ec6 soc: broadcom: Rename to brcm 2b9db15c69 soc: andes: Rename to andestech 0101216ce1 soc: altera: Rename to altr 4b4c3ca65d boards: wurth_elektronik: Rename to we cdc3ef499f boards: ublox: Rename to u-blox cabdd4ad05 boards: space_cubics: Rename to sc 4b5bd7ae8a boards: seeed_studio: Rename to seeed a992785ceb boards: raspberry_pi: Rename to raspberrypi 3c1cdc20fe boards: laird_connect: Rename to lairdconnect 291c7cde2b boards: cadence: Rename to cdns 95db897526 boards: broadcom: Rename to brcm 0a47b94879 boards: beagleboard: Change to beagle 9f9f221c24 boards: andes: Rename to andestech e7869ca38a boards: altera: Rename to altr bf2fb5eca3 various: Change SOC_FAMILY_NRF to SOC_FAMILY_NORDIC_NRF e25730ba56 modules: tf-m: Rename from nordic_nrf to nordic 9e3466606a boards: nordic_nrf: Rename to nordic 09a398dcc8 soc: nordic_nrf: Rename to nordic cb8ffc74f8 boards: renode: Add documentation index 2291ff4b55 boards: arm: riscv32_virtual: Convert to v2 484b7f1996 soc: riscv_renode_virtual: Port to HWMv2 cc5c2fb0c7 soc: raspberry_pi: Fix SOC_SERIES and SOC mismatch 59cb580513 soc: arm: designstart: Fix SOC_SERIES and SOC mismatch aa9e0de7af samples: Fix invalid links a1480cf1cf maintainers: Fix paths 0d719e004b boards: Update documentation links eb5c3e6f79 boards: wurth_elektronik: Drop duplicate prefix a34a3640b7 boards: waveshare: Drop duplicate prefix cf50e950e7 boards: weact: Drop duplicate prefix 737cfb548f boards: sparkfun: Drop duplicate prefix 505494c97a boards: segger: Drop duplicate prefix 4eaf69f37a boards: ruuvi: Drop duplicate prefix a1335caeae boards: ronoth: Drop duplicate prefix a9f7f30bf6 boards: raytac: Drop duplicate prefix 80db4c81b3 boards: qemu: Drop duplicate prefix 433d7e9976 boards: particle: Drop duplicate prefix 4ea79d19e7 boards: olimex: Drop duplicate prefix fd4ae6f6a8 boards: mikroe: Drop duplicate prefix 36080549bd boards: khados: Drop duplicate prefix 169bf8ae1d boards: intel: Drop duplicate prefix 25f04d5222 boards: holyiot: Drop duplicate prefix 11c2af0de8 boards: google: Drop duplicate prefix d5128f4016 boards: ebyte: Drop duplicate prefix 44fbc68cad boards: dragino: Drop duplicate prefix f7fe431b44 boards: contextual_electronics: Drop duplicate prefix 9094fea63b boards: circuit_dojo: Drop duplicate prefix b632acc1fc boards: blue_clover: Drop duplicate prefix 1a3316ebdc boards: bbc: Drop duplicate prefix 71c0344f8c boards: arduino: Drop duplicate prefix f0176fc25f boards: altera: Drop duplicate prefix 36b920ed0f boards: adi: Drop duplicate prefix 22520368d9 boards: adafruit: Drop duplicate prefix 296acfb2bc boards: actinius: Drop duplicate prefix 55063380b7 boards: 96boards: Drop duplicate prefix 1f93394b55 boards: nxp: convert mimxrt595_evk to hardware model v2 e7a4fd2ec1 soc: nxp: rt5xx: convert RT5xx SOC to HWMv2 01942f1d11 twister: normalize platform name when storing files/data 477c8b84dd twister: tests: test with slashes in platform names 64e3e816c4 soc: Add include guards 3a7aa2fa49 gitignore: update the compliance file list 84e1c17ad9 scripts: ci: check_compliance: add a check for board yml file a90f53ad57 boards: sync up the vendor tags and vendor-list af9aa65299 dts: vendor-prefixes: add keep-sorted markers 50f0bf05a3 dts: vendor-prefixes: sort the vendor list a10b614aa4 dts: vendor-prefixes: ensure all prefixes are lowercase 5abe735e93 manifest: update SOF sha for NXP HWMv2 9ab8f64ca9 modules: rename SOC_FAMILY_IMX 483ff8dd4d modules: mcux: remove SOC_FAMILY_NXP_ADSP f113dd5342 samples: update board name 39b31287d9 boards: nxp: Convert i.MX ADSP boards to hardware model v2 1511e356a2 soc: nxp: Port i.MX ADSP family to hardware model v2 c91e25ab47 soc: mec: rename all mec1501x reference to mec15xx 1c231fd939 hwmv2: boards: Convert IMXRT boards 417cff1e60 hwmv2: soc: Port IMXRT family to HWMV2 28d4e41b1b hwmv2: clean up arm64 soc and board empty directory 2b520f83cb hwmv2: port NXP SoC LS1046A to V2 bf7899c645 hwmv2: port nxp_ls1046ardb board to V2 33f7b61866 samples/tests: Rename numaker boards 8f20ea6e93 boards: nuvoton: numaker_pfm: Split into 2 boards 7cf4ff43a1 drivers: pinctrl: imx: align with hwm v2 c68e1fea4e drivers: clock_control: ccm_rev2: align with hwm v2 update 3b49014a0f hwmv2: move imx8mn EVK board to V2 14f344eeab hwmv2: move imx8mp EVK board to V2 40f3f8f22d hwmv2: move imx8mm EVK board to V2 10bf79ea51 hwmv2: move imx8m soc for a-core to V2 8727d5ca80 hwmv2: move imx93 EVK board to V2 c81ef01563 hwmv2: move imx93 soc to V2 5836c1b699 modules: mcux: introduce CONFIG_MCUX_CORE_SUFFIX 338f6f2bf1 doc: update board porting guide to match new hardware model 9639a1b5dc soc: silabs: drop useless defconfigs 981807444e soc: silabs: introduce SOC_GECKO_SDID 5d07e82485 soc: silabs: SOC_FAMILY_* replace SOC_GECKO_SERIES* 2fd081ac86 soc: silabs: align comments with soc tree 66d425f571 soc: silabs: split in families 5bd38f47a9 arch: arch: kconfig: Fix wrong placement of endmenu 00c6ef25be tests/samples: Rename overlay files for renamed boards 0c639b8378 boards: Fix bools and selections c2ef907d1d drivers: flash: it8xxx2: Add missing Kconfigs 553de2ebc9 soc: ite: ec: it8xxx2: Fix SOC_SERIES being in wrong file b8ec0080c2 boards: Documentation link fixes eb7025e50f tests: Update board names for hwmv2 10ef3d4bd2 boards: silab: Add documentation index file ba9fdaa1d6 boards: arm: efr32_radio: Convert to v2 86c8d4a0ca boards: arm: efm32pg_stk3402a: Convert to v2 575ac5cafb manifest: Update hal_silabs 87b2907304 boards: arm: efr32_thunderboard: Convert to v2 14b30055ab boards: arm: efr32mg_sltb004a: Convert to v2 0012bfc15d boards: arm: efr32xg24_dk2601b: Convert to v2 f526225ead boards: arm: efm32wg_stk3800: Convert to v2 19e7df29df boards: arm: efm32pg_stk3401a: Convert to v2 0bd7d963d6 boards: arm: efm32hg_slstk3400a: Convert to v2 795a90f9bf boards: arm: efm32gg_stk3701a: Convert to v2 43d5540be7 boards: arm: efm32gg_slwstk6121a: Convert to v2 065148d856 boards: arm: efm32gg_sltb009a: Convert to v2 1dc9a8aa17 soc: silabs_exx32: Port to HWMv2 763571e878 tests: Expand names dae301b8a3 boards: xen: xenvm: Expand name 19e60eef36 boards: qemu: qemu_cortex_a53: Expand names a0a7c30f28 soc: intel: intel_adsp: Fix issues df9a4223fe scripts: ci: introduce soc name check in check_compliance ed401abaff soc: emsdsp: align SoC name defined in soc.yml to Kconfig SOC setting fc78e5eaa4 MAINTAINERS: update RISC-V arch area paths 4e586958ff boards: convert QEMU RISC-V 64 bit board to Zephyr HWMv2 f4c31a2b86 boards: convert QEMU RV32E board to Zephyr HWMv2 5b2ffc652b boards: convert QEMU RISC-V 32 bit board to Zephyr HWMv2 5db061a4c6 soc/riscv: convert the QEMU virt RISCV-32 SoC to HWMv2 6547845e9d boards: convert SparkFun RED-V Things Plus to Zephyr HWMv2 95a1f96399 boards: convert SiFive HiFive Unmatched to Zephyr HWMv2 e563eb0a62 soc/sifive/sifive_freedom: add SiFive Freedom FU740 SoC 8914bc58b6 boards: convert SiFive HiFive Unleashed to Zephyr HWMv2 7e8de1e781 soc/sifive/sifive_freedom: add SiFive Freedom U540 SoC bfcc2ed18f boards: convert SiFive HiFive1 Rev. B to Zephyr HWMv2 330fc38f9f boards: convert SiFive HiFive1 to Zephyr HWMv2 b9e06f4c38 soc/sifive/sifive_freedom: add SiFive Freedom E310 SoC 4b90b30b9d scripts: west_commands: completion: Add hwmv2 complete to fish 0f6842e2fa scripts: west_commands: completion: Add hwmv2 complete to zsh b2af1e1737 scripts: west: list_boards: Fix hwmv2 output 686a4b78b8 scripts: west_commands: completion: Add hwmv2 complete to bash 396b6bb856 soc: nxp: fix typo in SoC name 765299c627 soc: broadcom: align SoC names defined in soc.yml to Kconfig SOC setting 7efd46eb41 soc: arm: align SoC names defined in soc.yml to Kconfig SOC setting 505cbc5c42 soc: mec: align SoC names defined in soc.yml to Kconfig SOC setting 951a140701 soc: ti: define SOC name in Kconfig a795d28810 snippets: Initial HWMv2 support f9a957e6f6 boards: nordic: nrf9160dk: Fix missing nrf52840 config df994e7ee8 soc: xilinx: zync7000: Remove xilinx from soc series name 8dfabd56ca soc: cypress: Add protection guard to file 447b951593 tests: kernel: tickless: Remove old board name bad5dfa71f boards: nordic: nrf5340dk: Fix board names ad2e863f39 soc: atmel: Use new family prefix 3f08e714b2 soc: intel_adsp: hwmv2: Align SOC_SERIES_INTEL_ACE name and value 6734597a76 soc: intel_adsp_cavs: hwmv2: Align SOC_SERIES name and value 2908af0bcc boards: nrf51dk/dongle: change SoC to nRF51822 d1ceb29fca soc: align CONFIG_SOC values to match soc.yml names 4768ccaf70 tests: drivers: gpio: gpio_api_1pin: exclude hifive1 ebdb0879ad boards: nxp: s32z2xxdc2: convert to hwmv2 ae82580d08 boards: nxp: mr_canhubk3: convert to hwmv2 c5f0defbae boards: nxp: ucans32k1sic: convert to hwmv2 1e46cabce6 soc: nxp: convert NXP S32 family to hwmv2 f2f85133f2 soc: stm32: Rename series path 86642f4e78 soc: stm32: Rename Kconfig SOC_SERIES symbols c61e807896 soc: stm32: Cleanup Kconfig.defconfig files ca46c8abc9 tests: Fix board names fbfed5f48f maintainers: Update synopsys entries 8cd8b1cc47 boards: synopsys: Add documentation index 6f6cc57a04 boards: arc: hsdk4xd: Convert to v2 c4c14a54ca soc: snps_arc_hsdk4xd: Port to HWMv2 06c2054e5c boards: arc: iotdk: Convert to v2 ff0e0fce1b soc: snps_arc_iot: Port to HWMv2 334264c46a boards: arc: emsdp: Convert to v2 8b947a0e91 soc: snps_emsdp: Port to HWMv2 990417bbde tests: Update board names for hwmv2 e12719154a boards: arc: em_starterkit: Convert to v2 437a430fbe soc: snps_emsk: Port to HWMv2 f93387f968 boards: arc: hsdk: Convert to v2 1cf2498b13 soc: snps_arc_hsdk: Port to HWMv2 47abe81256 boards: arc: nsim: Convert to v2 1e33786dc4 soc: snps_nsim: Port to HWMv2 7f081914db boards: arc: qemu_arc: Convert to v2 bc97349dbd soc: snps_qemu: Port to HWMv2 a9902ff58e boards: Use zephyr_file for file links 126e1a4e72 boards: Fix invalid documentation links 899f0257c3 boards: stm32wb: Restore missing .defconfig files 790c10b1ee soc: x86/atom: imply mmu, do not select it faee62088d boards: x86: remove qemu_x86_tiny_768 c34d186a57 x86: atom: remove soc.h with unused content 1be3a9e9d3 x86: remove legacy ia32, use atom instead 60e6b400f9 boards: qemu: move qemu_x86 -> x86 c4fbac27e8 boards: infineon: Add documentation index b4dd29a9c4 maintainers: Update paths for hwmv2 380f5fdb2b boards: cypress: Add documentation index 9de981be05 boards: arm: xmc47_relax_kit: Convert to v2 6394e8a348 boards: arm: xmc45_relax_kit: Convert to v2 04dbf17e19 soc: xmc_4xxx: Port to HWMv2 c9731f1bce boards: arm: cy8cproto_063_ble: Convert to v2 53d41869d1 boards: arm: cy8cproto_062_4343w: Convert to v2 46c4f01427 boards: arm: cy8ckit_062s4: Convert to v2 d285e19cf2 boards: arm: cy8ckit_062_wifi_bt: Convert to v2 2bebd7298c boards: arm: cy8ckit_062_ble: Convert to v2 af243274c2 soc: psoc6 and psoc_6: Port to HWMv2 105a2bae84 cmake: modules: boards: Fix board deprecation for HWMv2 dca54e000a cmake: modules: boards: Enhance board aliases for HWMv2 fc314e8e3f cmake: modules: boards: Fix BOARD_ALIAS 9a7c2ce6d5 soc: gaisler: Move Kconfig file 1ac56d0501 soc: soc_legacy: mips: Remove out file c054381a7a boards: adjust few boards/ paths 4d93b8d9fd boards: convert all microchip MEC boards to hwmv2 ab2fcb1245 soc: convert microchip_mec to hwmv2 ead4b57a7b soc: arm64: intel_socfpga: hwmv2: Rename SoCs d4c143d306 MAINTAINERS: intel_socfpga: Adjust to HWMv2 move 70a66ac03a boards: arm64: intel_socfpga: Move boards to subdirectories 8a85c07799 boards: arm64: intel_socfpga_agilex5_socdk: move to HWMv2 8c253a99fc boards: arm64: intel_socfpga_agilex_socdk: move to HWMv2 ab883b8019 soc: arm64: intel_socfpga: Move and convert to HWMv2 7c8b7a153b soc: arm: intel_socfpga_std: Rename with HWMv2 8dc2b911f6 soc: board: intel_socfpga_std: Align names to 'Cyclone V' 402366117a soc: arm: intel_socfpga_std: Align board subdirectory f0a8d12745 boards: arm: cyclonev_socdk: Move to HWMv2 2271f17a86 soc: arm: intel_socfpga_std: Move and convert to HWMv2 841c2a9d99 boards: riscv: beaglev_fire: Convert to v2 3b314531ab boards: riscv: mpfs_icicle: Convert to v2 d4ea2bf70b boards: riscv: m2gl025_miv: Convert to v2 5256e9fcc3 soc: microchip_miv: Port to HWMv2 18e5cf1d51 maintainers: Update path for hwmv2 eab8628f98 boards: arm: qemu_cortex_m3: Convert to v2 1532f2fee1 soc: ti_lm3s6965: Port to HWMv2 430ca6a475 maintainers: Update ambiq paths a9b9b41b91 boards: ambiq: Add index db0271ecbb boards: arm: apollo4p_blue_kxr_evb: Convert to v2 957e2b2061 boards: arm: apollo4p_evb: Convert to v2 5a90a44454 soc: ambiq: Port to HWMv2 a20c113fbd boards: nxp: convert ip_k66f to hwmv2 34e3852a54 boards: nxp: convert usb_kw24d512 to hwmv2 20ad604de6 boards: nxp: convert twr_kv58f220m to hwmv2 2e2a7b7656 boards: nxp: twr_ke18f: convert to hwmv2 f7dcc2eb5e boards: nxp: convert rddrone_fmuk66 to hwmv2 b58e90a2e9 boards: nxp: convert hexiwear to hwmv2 aae6e9e454 boards: nxp: frdm_kw41z: convert to hwmv2 1d3baac2d6 boards: nxp: convert frdm_kl25z to hwmv2 3b1d21483f boards: nxp: frdm_k82f: port to hwmv2 6046e6ded9 boards: nxp: port frdm_k64f to hwmv2 0a7bf9fd79 boards: nxp: port frdm_k22f to hwmv2 dce697c823 boards: nxp: add toctree placeholder 666a353409 soc: nxp: kinetis: convert kinetis SOC family to hardware model V2 89f0a6034b maintainers: Update paths for renesas boards/socs 004bd43c48 tests/samples/snippets: Update board names for hwmv2 a6d756923d boards: arm and arm64: rcar_h3ulcb: Convert to v2 3801216b8d boards: arm64: rcar_salvator_xs_m3: Convert to v2 b7cc30aaea boards: arm: rcar_h3_salvatorx_cr7: Convert to v2 866427ea29 boards: arm: arduino_uno_r4: Convert to v2 2689b3f0ee soc: ra: Port to HWMv2 e7ebc727c8 boards: arm: da1469x_dk_pro: Convert to v2 903265b2bb boards: arm: da14695_dk_usb: Convert to v2 529a78ed51 soc: smartbond: Port to HWMv2 97cf636ae0 boards: arm: rcar_spider_cr52: Convert to v2 6d0c53f3a1 soc: rcar: Port to HWMv2 44e0aa0668 soc: renesas: rzt2m: Move folder structure for more SoCs 85238fc205 boards: misc: Fixed STM32 based boards doc links dffc08af56 boards: riscv: niosv_m: move and convert to HWMv2 545093abe4 boards: riscv: niosv_g: move and convert to HWMv2 ecfa192f1b soc: riscv: intel_niosv: move and convert to HWMv2 fd1e8cdc30 hwmv2: sof: intel_adsp: submanifest provisional link 8bf067e625 doc: boards: intel_adsp: Re-order pages 4833275ccd MAINTAINERS: intel_adsp: Adjust to HWMv2 move b9a70e5ea2 soc: intel_adsp: tools: pylint compliance workaround 18c70cc4bf hwmv2: tests: boards: intel_adsp: Adjust board names ca52baf9de hwmv2: boards: intel_adsp: Overhaul board configurations d1b3bcce64 soc: boards: xtensa: intel_adsp_ace: Rename with HWMv2 f362a8ae2c doc: soc: boards: intel_adsp_cavs25: Rename with HWMv2 51dee5da92 tests: samples: boards: intel_adsp_cavs25: Rename with HWMv2 e66c35e0d0 boards: xtensa: intel_adsp_cavs25: Rename board with HWMv2 d1491a4810 soc: boards: xtensa: intel_adsp_cavs25: Rename with HWMv2 fa0fca79c4 scripts: west: runners: intel_adsp: Adjust path to HWMv2 acd18bfaf7 boards: xtensa: intel_adsp_ace20_lnl: move and convert to HWMv2 546c94b958 boards: xtensa: intel_adsp_ace15_mtpm: move and convert to HWMv2 8aab718c3e boards: xtensa: intel_adsp_cavs25_tgph: change to board variant 30f17424a4 boards: xtensa: intel_adsp_cavs25: move and convert to HWMv2 35a97cb524 soc: xtensa: intel_adsp: HWMv2 workaround for SOF config fdc20fdff6 soc: xtensa: intel_adsp: move and convert to HWMv2 22dc2b6391 cmake: improved board handling for revisions 2f1e33a2e6 cmake: improve arch error message for invalid arch selection c47c37d3db sample: basic: blinky_pwm: Exclude rpi_pico w variant 7a788b9a18 boards: raspberry_pi: rpi_pico: Use full name for w variant 7046b92d41 tests: atmel_sam: adc: Fix sam4e_xpro adc build 253ee9638c tests: atmel_sam0: Update platform name ccb4c63324 samples: atmel_sam0: Update platform name 2d4acf9230 boards: arduino_nano_33_iot: Convert to HWMv2 a60d28969a boards: arduino_mkrzero: Convert to HWMv2 0409e51d3f boards: arduino_zero: Convert to HWMv2 1b2528df1b boards: wio_terminal: Convert to HWMv2 af1096e7ca boards: ev11l78a: Convert to HWMv2 0b1db9c53d boards: adafruit_trinket_m0: Convert to HWMv2 e9874671e2 boards: adafruit_itsybitsy_m4_express: Convert to HWMv2 ba6c014071 boards: adafruit_grand_central_m4_express: Convert to HWMv2 33ad4a51ca boards: adafruit_feather_m0_lora: Convert to HWMv2 9812f3d54e boards: adafruit_feather_m0_basic_proto: Convert to HWMv2 c76b1fbeca boards: serpente: Convert to HWMv2 649789e433 boards: seeeduino_xiao: Convert to HWMv2 6b3bdb7364 boards: same54_xpro: Convert to HWMv2 93dda5ee4b boards: samr34_xpro: Convert to HWMv2 e48e1f5d5b boards: samc21n_xpro: Convert to HWMv2 f11cf73df1 boards: saml21_xpro: Convert to HWMv2 ac73ed6dcd boards: samd20_xpro: Convert to HWMv2 0fdbe3552e boards: samd21_xpro: Convert to HWMv2 854cff3905 boards: samr21_xpro: Convert to HWMv2 a87ea5bc0a soc: atmel: sam0: Port to HWMv2 706e5d27cd boards: riscv: neorv32: Convert to v2 d1edcdd088 soc: neorv32: Port to HWMv2 0f7add89ca boards: native_sim/posix: Add 64bit versions as variants b6edad8d68 soc: soc_legacy: remove the arm/st_stm32 folder c58e0822a6 boards: Convert nucleo_f207zg to HWM v2 b987093a80 soc: v2: stm32: Migrate STM32F2 series 2096fd4652 samples: bluetooth: hci_uart: Fix wrongly converted board names 830f9c5a82 MAINTAINERS: Update Atmel entries 527cd9d8cd CODEOWNERS: Update Atmel entries 83af7d0c1c samples: atmel_sam: Update platform name fd9b84d457 tests: atmel_sam: Update platform name 3c72fe863c boards: arduino_due: Convert to HWMv2 37dfacbf9e boards: RoboKit1: Convert to HWMv2 1108d7b0ed boards: sam_v71_xult: Convert to HWMv2 bed44a5c28 boards: sam_e70_xplained: Convert to HWMv2 40448c5a9f boards: sam4s_xplained: Convert to HWMv2 31273692c0 boards: sam4l_ek: Convert to HWMv2 35b5d33ef0 boards: sam4e_xpro: Convert to HWMv2 3b84b9910a soc: atmel: Port SAM family to HWMv2 da00d0e7b9 boards: Convert nucleo_wba55cg to HWM v2 fb2103f89e boards: Convert nucleo_wba52cg to HWM v2 1f9a533fbc soc: st: stm32: Migrate STM32WBA series 3f92f65b28 boards: fix documentation for alientek and blues boards 7646b74aaf boards: stm32l4: doc: add zephyr_file to defconfig path fea54ddcd9 boards: Convert adi_eval_adin2111ebz to HWM v2 d47f1878b1 boards: Convert adi_eval_adin1110ebz to HWM v2 ae42be236b boards: Convert swan_r5 to HWM v2 83bd1a9ecc boards: Convert stm32l4r9i_disco to HWM v2 39c26f09ed boards: Convert stm32l496g_disco to HWM v2 29d03c970b boards: Convert stm32l476g_disco to HWM v2 74acec315c boards: Convert sensortile_box to HWM v2 fee6d8676e boards: Convert pandora_stm32l475 to HWM v2 008b5d9392 boards: Convert nucleo_l4r5zi to HWM v2 24e357d623 boards: Convert nucleo_l4a6zg to HWM v2 2c5f9dcce0 boards: Convert nucleo_l496zg to HWM v2 4da061646f boards: Convert nucleo_l476rg to HWM v2 15956a69b8 tests: drivers: flash: stm32: update platform name 80324f7707 boards: Convert nucleo_l452re_p to HWM v2 9893e0d111 boards: Convert nucleo_l452re to HWM v2 46f92b227b boards: Convert nucleo_l433rc_p to HWM v2 ed5d1bb4cd boards: Convert nucleo_l432kc to HWM v2 325f95ec20 boards: Convert nucleo_l412rb_p to HWM v2 d055676307 boards: Convert disco_l475_iot1 to HWM v2 c7a415d92c boards: Convert b_l4s5i_iot01a to HWM v2 d15144f582 soc: st: stm32: Migrate STM32L4 series a63ff71bcb boards: nrf_bsim: Add new nrf5340 board definitions b53c6f412c boards: nrf_bsim: Remove redundant option setting 83eb4fc069 MAINTAINERS: intel_ish: Adjust to HWMv2 move 715685b19f boards: x86: intel_ish: move and convert intel_ish boards to HWMv2 5b9ef94106 soc: x86: intel_ish: move and convert to HWMv2 12b297707a boards: Convert stm32wb5mmg to HWM v2 cdcea932bc boards: Convert stm32wb5mm_dk to HWM v2 0a3ae2b223 boards: Convert nucleo_wb55rg to HWM v2 20b4ce17d5 soc: st: stm32: Migrate STM32WB series 47c65400d6 soc: st: stm32: fix stm32l0 family 59ec56f9e6 boards: Convert stm32h573i_dk to HWM v2 dc5977dbba boards: Convert nucleo_h563zi to HWM v2 a6e4928543 soc: st: stm32: Migrate STM32H5 series 99f248e048 soc: stm32u5: Fix references after conversion to hw modelv2 15f16834e6 boards: Convert stm32u5a9j_dk to HWM v2 c1ee449ef1 boards: Convert sensortile_box_pro to HWM v2 db4deddf9d boards: Convert nucleo_u5a5zj_q to HWM v2 2fd3ed43d2 boards: Convert nucleo_u575zi_q to HWM v2 902fceb173 boards: Convert b_u585i_iot02a to HWM v2 d716ca1a10 soc: st: Migrate stm32u5 series to new hw model b7abc89428 hwmv2: boards: x86: doc: Adjust common docs to new locations 69b334f54b MAINTAINERS: Change paths to native and nrf*bsim boards 614611a528 boards: nrf*_bsim: Convert to HW model v2 5821b9ec2e board: native_sim/posix: Convert to hwmv2 04cbad174e soc: native: Convert to HWMv2 24ca0febfc boards: nrf_bsim: Fix path to pinctrl_soc.h 9a32559a2d cmake: FindHostTools: Fix for hwmv2 for host based targets c4b11e0251 boards: longan_nano: port to HWMv2 97edd05be3 boards: gd32vf103c_starter: port to HWMv2 9cf624c410 boards: gd32vf103v_eval: port to HWMv2 b40bf25e5e soc: gd_gd32: reorganize folders 71600d7e95 soc: gd_gd32: move pinctrl_soc.h content back to soc folder 2bd84a1bc5 soc: gd_gd32: port gd32vf103 series to HWMv2 9dc342143b boards: doc: fix a bunch of broken reference 10392d693d doc: boards: split out shields b2def8ed3a boards: acrn: fix title bf7d3efe78 boards: riscv: tlsr9518adk80d: Convert to v2 c579770e1d soc: telink_tlsr: Port to HWMv2 9131540109 soc: stm32h7: Couple of tests fixes following migration 2efcefc089 boards: Convert stm32h7b3i_dk to HWM v2 d9b295a85b boards: Convert stm32h750b_dk to HWM v2 a2f56bdcd5 boards: Convert stm32h747i_disco to HWM v2 00314155df boards: Convert stm32h735g_disco to HWM v2 b08819dff7 boards: Convert nucleo_h7a3zi_q to HWM v2 56456c16e5 boards: Convert nucleo_h753zi to HWM v2 91f9198dc4 boards: Convert nucleo_h745zi_q to HWM v2 96f1bafbf9 boards: Convert nucleo_h743zi to HWM v2 b290f25baa boards: Convert nucleo_h723zg to HWM v2 9fbe6bf191 boards: Convert fk7b0m1_vbt6 to HWM v2 44bcfe57c7 boards: Convert arduino_portenta_h7 to HWM v2 4c86af7eae boards: Convert arduino_opta_m4 to HWM v2 b4f852f738 boards: Convert arduino_giga_r1 to HWM v2 bac9789264 soc: st: Migrate stm32h7 series to new hw model a954e1722d boards: stm32l0: Cleanup board _defconfig files after migration 7e8515b241 boards: Convert ronoth_lodev to HWM v2 25246c21ef boards: Convert nucleo_l073rz to HWM v2 09396eb2e6 boards: Convert nucleo_l053r8 to HWM v2 70c004fd83 boards: Convert nucleo_l031k6 to HWM v2 e3daa98e79 boards: Convert nucleo_l011k4 to HWM v2 a2de60c6da boards: Convert dragino_nbsn95 to HWM v2 e877ce9cec boards: Convert dragino_lsn50 to HWM v2 2b50218c23 boards: Convert b_l072z_lrwan1 to HWM v2 4a65f55916 soc: st: Migrate stm32l0 series to new hw model cc6e6be01f boards: fix few leftover ITE board references a837303268 soc: stm32: Protect Kconfig symbols by SOC_FAMILY_STM32 88e5959f17 hwm2: Fix unit_testing: it is also a legacy board by now 95e06e8663 cmake: Fix uses of old SOC path d517d3cc24 soc: set linker script for ra4m1 68f9aeddab soc: ite: add SOC_SERIES_ITE_IT8XXX2 guards around ITE options ccf4f48f01 boards: convert ite boards to hwmv2 4a6e286a3b soc: convert ite_ec to hwmv2 12e375f826 doc: handle arch / soc / board docs in new hardware model b4db917de9 boards: Add documentation index files d6e0d27efe samples: bluetooth: hci_uart: Fix wrong named files bc16a7a727 tests: Update board names for hwmv2 2834883843 boards: riscv: rv32m1_vega: Convert to v2 9c68231ba9 soc: openisa_rv32m1: Port to HWMv2 986e9619fd soc: starfive_jh71xx: Port to HWMv2 e82932e787 boards: riscv: litex_vexriscv: Convert to v2 cb9339f88f soc: litex_vexriscv: Port to HWMv2 1cd4c34654 boards: riscv: opentitan_earlgrey: Convert to v2 92eadf06b8 soc: opentitan: Port to HWMv2 a8659e170b boards: riscv: titanium_ti60_f225: Convert to v2 359133d725 soc: efinix_sapphire: Port to HWMv2 6d466429ed soc: soc_legacy: riscv: litex_vexriscv: Add updated paths a1ff441eb3 boards: riscv: adp_xc7k_ae350: Convert to v2 ef82a8255c soc: ae350: Port to HWMv2 282204758a samples: boards: stm32: ccm: fix include path 8ca9341195 samples: basic: threads: fix broken reference 8a947f446d boards: nrf52840dk: fix rst syntax 324cb41153 boards: nordic_nrf: fix broken references 963c74df1c boards: intel_(ish|adl|ehl|rpl), up_squared: fix include paths 8d518ce504 boards: legacy: drop empty folders 0fef0cef5b boards: mps2: fix table formatting e52ccc244f boards: add HWMv2 board index c7426eca5e boards: arm: add legacy tag 1eba9d8a8f boards: acrn: create vendor folder 8d92edc727 tests: kernel: Adjust qemu_x86_tiny_768 configuration HWMv2 75117d1b2d scripts: ensure posix path is used with --cmakeformat 0b0384b56a maintainers: update paths after HWMv2 changes c1b77b223d boards: arm: pan1783: Convert to v2 91a077b2ab boards: posix: nrf_bsim: Update paths 413b6c2a40 cmake: modules: configuration_files: Add board identifier overlay file 4f572ba24f treewide: Update board names for hwmv2 cb348c7edf boards: arm: nrf54l15pdk_nrf54l15: Convert to v2 811ad90566 boards: arm: nrf54h20pdk_nrf54h20: Convert to v2 d44ef90cf8 soc: nordic_nrf: Migrate nRF54H/nRF54L to v2 and fix nrf c860f205de boards: arm: nrf9151dk_nrf9151: Convert to v2 fba98a1763 soc: nordic_nrf: Migrate nRF9151 to v2 5c156a2d35 boards: arm: 96b_carbon_nrf51: Convert to v2 cfc47a3a4b boards: arm: nrf9161dk_nrf9161: Convert to v2 37129b4e44 boards: arm: nrf9131ek_nrf9131: Convert to v2 a923beba5d boards: arm: bl5340_dvk: Convert to v2 d242b2703b boards: arm: raytac_mdbt53v_db_40_nrf5340: Convert to v2 9c80d4e644 boards: arm: raytac_mdbt53_db_40: Convert to v2 28268c4938 boards: arm: nrf5340_audio_dk_nrf5340: Convert to v2 33ad2b5bc6 boards: arm: thingy53_nrf5340: Convert to v2 40daa94f2d boards: arm: nrf9160_innblue22: Convert to v2 2b0dbb9d51 boards: arm: nrf9160_innblue21: Convert to v2 ee6f7697ac boards: arm: sparkfun_thing_plus_nrf9160: Convert to v2 594e4bad6b boards: arm: circuitdojo_feather_nrf9160: Convert to v2 a5803ba099 boards: arm: actinius_icarus: Convert to v2 db8c275456 boards: arm: actinius_icarus_bee: Convert to v2 30177cf53d boards: arm: actinius_icarus_som: Convert to v2 486504cf24 boards: arm: actinius_icarus_som_dk: Convert to v2 dd0672a64c boards: arm: nrf9160dk_*: Convert to v2 c1565b3d14 boards: arm: xiao_ble: Convert to v2 6dd2723314 boards: arm: qemu_cortex_m0: Convert to v2 ee1ce24a42 boards: arm: bbc_microbit: Convert to v2 1952d559f2 boards: arm: rm1xx_dvk: Convert to v2 9e12c3d8bd boards: arm: nrf51dongle_nrf51422: Convert to v2 0ffbc1da33 boards: arm: nrf51_blenano: Convert to v2 be52dfb7b6 boards: arm: nrf51_vbluno51: Convert to v2 4c29d1827f boards: arm: nrf51_ble400: Convert to v2 5b4a9556fd boards: arm: raytac_mdbt53_db_40_nrf5340: Fix typo 69e5d87a15 boards: arm: contextualelectronics_abc: Convert to v2 5e4ace1bbe boards: arm: degu_evk: Convert to v2 2762460a64 boards: arm: pan1781_evb: Convert to v2 fdc3913e76 boards: arm: ubx_evkninab1_nrf52832: Convert to v2 9c9c3a09a1 boards: arm: holyiot_yj16019: Convert to v2 109edc296f boards: arm: blueclover_plt_demo_v2_nrf52832: Convert to v2 7bfcdbbe8f boards: arm: decawave_dwm1001_dev: Convert to v2 0fbb543983 boards: arm: acn52832: Convert to v2 073e0f8080 boards: arm: we_proteus2ev_nrf52832: Convert to v2 197a19f396 boards: arm: ebyte_e73_tbb_nrf52832: Convert to v2 1616fc8ae5 boards: arm: nrf52_vbluno52: Convert to v2 5622077738 boards: arm: nrf52_sparkfun: Convert to v2 a6289516e4 boards: arm: 96b_nitrogen: Convert to v2 439d836883 boards: arm: nrf52_blenano2: Convert to v2 16e65f09c4 boards: arm: arduino_nicla_sense_me: Convert to v2 862efd5a21 boards: arm: thingy52_nrf52832: Convert to v2 dede0f6cd3 boards: arm: nrf52_adafruit_feather: Convert to v2 91e864ea29 boards: arm: nrf52832_mdk: Convert to v2 47ec3e416b boards: arm: ruuvi_ruuvitag: Convert to v2 52f797a227 boards: arm: pinetime_devkit0: Convert to v2 433db339f9 boards: arm: ubx_evkannab1_nrf52832: Convert to v2 a646d3f2d5 boards: arm: ubx_bmd300eval_nrf52832: Convert to v2 d0d434bf86 cmake: print identifier instead of variant c3f5ed8157 boards: arm: we_proteus3ev_nrf52840: Convert to v2 eecff8ee7a boards: arm: nrf52840_mdk_usb_dongle: Convert to v2 34507614f6 boards: arm: nrf52840_mdk: Convert to v2 f02b56cb96 boards: arm: nrf52840_blip: Convert to v2 600c55c92a boards: arm: nrf52840_papyr: Convert to v2 f294bfc5e4 boards: arm: reel_board: Convert to v2 882524d2a0 boards: arm: nrf21540dk_nrf52840: Convert to v2 4bce0e9b39 boards: arm: nrf52840dongle_nrf52840: Convert to v2 d0229c771f boards: arm: particle_argon: Convert to v2 23a0570e64 boards: arm: particle_boron: Convert to v2 b6d3e1764f boards: arm: particle_xenon: Convert to v2 499f3e7902 boards: arm: rak5010_nrf52840: Convert to v2 9ae6b1804d boards: arm: rak4631_nrf52840: Convert to v2 fe2c90da5c boards: arm: pinnacle_100_dvk: Convert to v2 3d4d46698c boards: arm: ubx_evkninab3_nrf52840: Convert to v2 b1afbf0158 boards: arm: ubx_bmd380eval_nrf52840: Convert to v2 9f9897c872 boards: arm: ubx_bmd345eval_nrf52840: Convert to v2 f7fb2030c7 boards: arm: ubx_bmd340eval_nrf52840: Convert to v2 7186432662 boards: arm: raytac_mdbt50q_db_40_nrf52840: Convert to v2 32c4bdc0c4 boards: arm: pan1780_evb: Convert to v2 7b64c638a8 boards: arm: pan1770_evb: Convert to v2 156ee8ad8a boards: arm: mg100: Convert to v2 3d33dadeb0 boards: arm: arduino_nano_33_ble: Convert to v2 4fee7371d2 boards: arm: adafruit_itsybitsy_nrf52840: Convert to v2 ad37a0c222 boards: arm: adafruit_feather_nrf52840: Convert to v2 cf85b7169f boards: arm: bt510: Convert to v2 44b67ac430 boards: arm: bt610: Convert to v2 7dbb65d371 boards: arm: ubx_evkninab4_nrf52833: Convert to v2 5e79cb957d boards: arm: raytac_mdbt50q_db_33_nrf52833: Convert to v2 12bd83a218 boards: arm: pan1782_evb: Convert to v2 1a135ec352 boards: arm: bbc_microbit_v2: Convert to v2 4dbe97e5ea boards: arm: nrf52833dk: Convert to v2 d632b90043 boards: arm: ubx_bmd360eval_nrf52811: Convert to v2 cc1a30f24b boards: arm: we_ophelia1ev_nrf52805: Convert to v2 df0df9000b boards: arm: ubx_bmd330eval_nrf52810: Convert to v2 d2c7972a9a boards: arm: nrf52dk: Convert to v2 202c2bf447 boards: arm: bl654_sensor_board: Convert to v2 c3e36f2042 boards: arm: bl654_usb: Convert to v2 b9dd58aea1 boards: arm: bl654_dvk: Convert to v2 0e1898b093 boards: arm: bl653_dvk: Convert to v2 286f4a7524 boards: arm: bl652_dvk: Convert to v2 d1709cdb37 boards: update nRF51dk board to board scheme v2. 8f040cff2c boards: Update nrf5340dk_nrf5340 to HWMv2 scheme 8c90fae8e0 boards: update nRF52840dk_nrf52840/nrf52811 board to board scheme v2. c828dcc60e boards: common: openocd-nrf5: Add HWMv2 support c79f1b0d94 kconfig: soc: adopt Nordic SoC series to support hw model v2 scheme 3584b30fc1 tests: Update board names for hwmv2 94024d940e boards: arm: arty_a7: Convert to v2 8053c3a8df boards: arm: scobc_module1: Convert to v2 d5473b76fe soc: designstart: Port to HWMv2 f5792b05e7 boards: arm: fvp_baser_aemv8r_aarch32: Convert to v2 ff202daa8e soc: fvp_aemv8r_aarch32: Port to HWMv2 e66cbc2945 boards: arm: v2m_musca_s1: Convert to v2 33b47b2edb boards: arm: v2m_musca_b1: Convert to v2 baeebd31d2 soc: musca: Port to HWMv2 73b257a3f9 boards: arm: v2m_beetle: Convert to v2 85de0888ec soc: beetle: Port to HWMv2 867960a891 manifest: Update modules 6ca677ed3a boards: arm: mps2: Convert to v2 bcf4ad19d4 twister: build_dir: convert / to _ to support hwmv2 0ac386683f soc: Kconfig.v2: Add SOC_PART_NUMBER 9242c3c78f soc: stm32: soc.yml: reorder series 248d17f160 boards: stm32: cleanup 0a67265e99 boards: stm32: fix for boards with revisions f8d44317ee soc: stm32l5: Rename overlays for nucleo_l552ze_q ns target. 400343d17e soc: stm32: Set default on USE_DT_CODE_PARTITION d783ef549a soc: stm32l5: Update stm32l5 non secure targets in various places 643aeac552 boards: Convert stm32l562e_dk to HWM v2 e601d64344 boards: Convert nucleo_l552ze_q to HWM v2 2f7a387b32 soc: st: Migrate stm32l5 series to new hw model 519752efcd boards: xenvm: doc: Remove reference to deleted file 06263dd717 boards: xenvm: Unset HEAP_MEM_POOL_SIZE in gicv3 variant 66b0df5526 boards: qemu_cortex_a53: Fix Kconfig warnings in SMP variant fa07bd9419 boards: mps3: Fix non-secure variant 8f6f0726dd boards: Move xenvm under xen 7b155a7031 boards: Raspberry Pi vendor fix 804697afa5 boards: Move 96b_aerocore to 96boards d2f001e320 boards: x86: acrn: move and convert to HWMv2 ec7f7b3c30 tests: kernel: qemu_x86: adjust to the HWMv2 89dfcddc7e boards: x86: qemu_x86_tiny@768: change to board variant eb724eb6a7 boards: x86: qemu_x86: optimize default HWMv2 configurations 6f1043cde6 boards: x86: qemu_x86: move and convert to HWMv2 cab924cbfb soc: x86: ia32: move and convert to HWMv2 237fdff918 soc: x86: lakemont: move and convert to HWMv2 03042b7704 boards: move 96b_carbon to 96boards folder 767b94414e boards: rename vendor seeed to seeed_studio 07fa3a3d79 boards: Convert olimex_lora_stm32wl_devkit to HWM v2 ba01d3beca boards: Convert nucleo_wl55jc to HWM v2 7ce84f4041 boards: Convert lora_e5_mini to HWM v2 b988bae576 boards: Convert lora_e5_dev_board to HWM v2 6fbf39c726 soc: v2: stm32: Migrate STM32WL series 4a41878442 soc: st: stm32g4: add missing include 1e79ba15f6 boards: Convert weact_stm32g431_core to HWM v2 ffdcb60185 boards: Convert nucleo_g474re to HWM v2 d6acb08d3e boards: Convert nucleo_g431rb to HWM v2 90e592ffd1 boards: Convert b_g474e_dpow1 to HWM v2 eb8a7e3441 soc: st: stm32: Migrate STM32G4 series ada469f237 tests: Update board names for hwmv2 0342433187 boards: arm: npcx9m6f_evb: Convert to v2 c10248d964 boards: arm: npcx7m6fb_evb: Convert to v2 21ddc5e6a6 boards: arm: npcx4m8f_evb: Convert to v2 5500f3ef21 soc: npcx*: Port to HWMv2 e7baf09ede soc: m48x: Port to HWMv2 5bae4a6480 boards: arm: numaker_pfm_m467: Convert to v2 3b0bd70c8c soc: m46x: Port to HWMv2 d52eab9e83 boards: Convert stm32g081b_eval to HWM v2 6f2835cb11 boards: Convert stm32g071b_disco to HWM v2 ca36d331d2 boards: Convert stm32g0316_disco to HWM v2 662cc4e09b boards: Convert nucleo_g0b1re to HWM v2 dd9bc29769 boards: Convert nucleo_g071rb to HWM v2 353da23ffb boards: Convert nucleo_g070rb to HWM v2 acc932b424 boards: Convert nucleo_g031k8 to HWM v2 cea9b140fd boards: Convert google_twinkie_v2 to HWM v2 52e025943a soc: st: stm32: Migrate STM32G0 series 1c7347686a ci: update check_compliance to not create duplicate lines in Kconfig 9debd98799 hwmv2: boards: up_squared_pro_700: Add missed intel_adl changes adab07c42f boards: Convert msp_exp432p401r_launchxl to HWM v2 642aacdcdf soc: ti_simplelink: Add missing SoC 48637066d3 boards: Fix file paths in documentation e983bc2a23 samples/tests: Fix mps3 board name 61e0f32716 boards: Convert stm32f3_seco_d23 to HWM v2 a1688ff641 boards: Convert stm32f3_disco to HWM v2 35fb228599 boards: Convert stm32373c_eval to HWM v2 10e5d1122b boards: Convert nucleo_f334r8 to HWM v2 c319cb19f0 boards: Convert nucleo_f303re to HWM v2 11725ccac1 boards: Convert nucleo_f303k8 to HWM v2 400f7f6a4f boards: Convert nucleo_f302r8 to HWM v2 8d84861390 soc: v2: stm32: Migrate STM32F3 series 85b9eee7e8 boards: arm: kv260_r5: Convert to v2 dafbd638e4 boards: arm: mercury_xu: Convert to v2 3ecd12f415 boards: arm: qemu_cortex_r5: Convert to v2 5db2390e9d soc: xilinx_zyncmp: Port to HWMv2 9ba8195cdc boards: arm: qemu_cortex_a9: Convert to v2 8e94b85361 boards: arm: zybo: Convert to v2 c970127fc2 soc: xilinx_zynq7000: Port to HWMv2 394c75373c boards: arm: ast1030_evb: Convert to v2 f2a1cc8714 soc: ast10x0: Port to HWMv2 28f3f25945 boards: arm: cc3235sf_launchxl: Convert to v2 c3e480f740 boards: arm: cc3220sf_launchxl: Convert to v2 fd5847123f boards: arm: beagleconnect_freedom: Convert to v2 76ba9a0587 boards: arm: cc1352p1_launchxl: Convert to v2 719baa8850 boards: arm: cc1352r1_launchxl: Convert to v2 5060a61ae1 boards: arm: cc1352r_sensortag: Convert to v2 99584be1c5 boards: arm: cc26x2r1_launchxl: Convert to v2 2dc8933942 soc: ti_simplelink: Port to HWMv2 a5b004663b scripts/utils/board_v1_to_v2.py: couple of fixes 77c2c333e5 boards: move 96b_stm32_sensor_mez to 96boards c14ff98650 boards: stm32f411e_disco: delete obsolete file bcdc268ccf boards: Convert stm32mp157c_dk2 to HWM v2 0c8ba92e1f boards: Convert 96b_avenger96 to HWM v2 b54fe33077 soc: v2: stm32: Migrate STM32MP1 series 2ba3639b2a boards: Convert nucleo_c031c6 to HWM v2 dbc5ed79f5 soc: st: stm32: Migrate STM32C0 series ce6d493aa3 boards: Convert stm32l1_disco to HWM v2 a28086a9ca boards: Convert nucleo_l152re to HWM v2 1b2a511d06 boards: Convert 96b_wistrio to HWM v2 ce281f09ab soc: v2: stm32: Migrate STM32L1 series cdb5364fd7 boards: Convert stm32f769i_disco to HWM v2 768f173dcb boards: Convert stm32f7508_dk to HWM v2 21bbbbd9cb boards: Convert stm32f746g_disco to HWM v2 bab4265693 boards: Convert stm32f723e_disco to HWM v2 58f8fe82ba boards: Convert nucleo_f767zi to HWM v2 37e9084070 boards: Convert nucleo_f756zg to HWM v2 d467e7053a boards: Convert nucleo_f746zg to HWM v2 5f2808d7cc boards: Convert nucleo_f722ze to HWM v2 bbb73e7550 soc: st: Migrate stm32f7 series to new hw model e9094afc4d soc: st: stm32: stm32f4: change SOC_STM32F405XG to SOC_STM32F405XX a1712cdd53 boards: Convert stm32f4_disco to HWM v2 5be404b365 boards: Convert stm32f469i_disco to HWM v2 baaa697ab2 boards: Convert stm32f429i_disc1 to HWM v2 69ecab3c90 boards: Convert stm32f412g_disco to HWM v2 2a572e3fb0 boards: Convert stm32f411e_disco to HWM v2 ecfbf42757 boards: Convert stm32f401_mini to HWM v2 e0191d03bb boards: Convert steval_fcu001v1 to HWM v2 4454648976 boards: Convert segger_trb_stm32f407 to HWM v2 f0ad6ee6b8 boards: Convert olimex_stm32_p405 to HWM v2 1f5e228ec8 boards: Convert olimex_stm32_h407 to HWM v2 834bdb615e boards: Convert olimex_stm32_h405 to HWM v2 8f27fa8de2 boards: Convert olimex_stm32_e407 to HWM v2 f8633a9038 boards: Convert nucleo_f446ze to HWM v2 07e0bd2c07 boards: Convert nucleo_f446re to HWM v2 24d7f625dc boards: Convert nucleo_f429zi to HWM v2 157a8cde53 boards: Convert nucleo_f413zh to HWM v2 4ec99c31b0 boards: Convert nucleo_f412zg to HWM v2 a21546140a boards: Convert nucleo_f411re to HWM v2 43f01ab6de boards: Convert nucleo_f410rb to HWM v2 60c16bcb8b boards: Convert nucleo_f401re to HWM v2 2db228d730 boards: Convert mikroe_mini_m4_for_stm32 to HWM v2 73fc26225c boards: Convert mikroe_clicker_2 to HWM v2 6b62d90114 boards: Convert google_dragonclaw to HWM v2 fa845af309 boards: Convert blackpill_f411ce to HWM v2 5c8c3c3be0 boards: Convert blackpill_f401ce to HWM v2 3c02db1290 boards: Convert blackpill_f401cc to HWM v2 7eeb723cb7 boards: Convert black_f407zg_pro to HWM v2 4f9461d068 boards: Convert black_f407ve to HWM v2 a821de8532 boards: Convert az3166_iotdevkit to HWM v2 ba580c7236 boards: Convert adi_sdp_k1 to HWM v2 eb272ddf19 boards: Convert adafruit_feather_stm32f405 to HWM v2 58ed121c3a boards: Convert 96b_stm32_sensor_mez to HWM v2 b0d70959d3 boards: Convert 96b_neonkey to HWM v2 b1088baadc boards: Convert 96b_carbon to HWM v2 18d867b0a9 boards: Convert 96b_argonkey to HWM v2 ee6ede7119 boards: Convert 96b_aerocore2 to HWM v2 b48e70ead9 soc: v2: stm32: Migrate STM32F4 series 14d2b955da cmake: convert path to CMake style before writing Kconfig files 9c4ac6a202 boards: posix: bsim: Update paths 14b57f56d7 tests: drivers: gpio: gpio_ite_it8xxx2_v2: Temp fix f3b173be18 scripts: board_v1_to_v2: Update following move to boards_legacy 05b50f6691 cmake: CMake soc dir variable improvements for HWMv2 a188e01a12 hwmv2: move all ported boards and socs to their final location 22c53e97b5 hwmv2: move all non-ported legacy boards and socs to legacy folders 53f3b181b0 soc: ti_k3: Port to HWMv2 9f19a2075a soc: rk3568: Port to HWMv2 b8928b1628 soc: rk3399: Port to HWMv2 cda3a74868 boards: arm64: qemu_kvm_arm64: Convert to v2 70d704bd20 soc: x86: atom: move and convert to HWMv2 4789e1068e boards: x86: intel_rpl: move and convert raptor_lake boards to HWMv2 384307e3dc soc: x86: raptor_lake: move and convert to HWMv2 ed025df674 boards: x86: intel_ehl: move and convert elkhart_lake boards to HWMv2 994b6e1731 soc: x86: elkhart_lake: move and convert to HWMv2 73b30a04cf boards: x86: up_squared_pro_7000: move and convert to HWMv2 83b133c207 boards: x86: intel_adl: move and convert alder_lake boards to HWMv2 847a12f1e4 soc: alder_lake: move and convert to HWMv2 67f4c8d2a1 samples: up_squared: adjust gpio_counter to HWMv2 5326b5bfc0 boards: x86: up_squared: move and convert to HWMv2 cfd5e691b4 soc: apollo_lake: move and convert to HWMv2 ac9c235741 boards: xtensa: qemu_xtensa: Convert to v2 f198c3a761 ci: update to osource for soc/Kconfig.defconfig files e438e6cad4 ci: add SOC_SERIES_ as false positive in check_compliance.py 95e34da7c1 soc: v2: Convert st_stm32 to st/stm32 313717df76 soc: mps3: Fix missing family 392c3969ed boards: arm: am62x_m4: Convert to v2 8f245d764d tests: Update board names for hwmv2 8f71bb7b4f boards: arm64: khadas_edgev: Convert to v2 e27d23aad0 soc: rk3399: Port to HWMv2 80823b860e boards: arm64: roc_rk3568_pc: Convert to v2 72e4483dec soc: rk3568: Port to HWMv2 bed94669e3 boards: arm64: phycore_am62x_a53: Convert to v2 c01af5a7b8 soc: ti_k3: Port to HWMv2 1e563b4ca3 boards: arm64: xenvm: Convert to v2 76e484adae soc: xenvm: Port to HWMv2 34412f7fe2 boards: arm64: rpi_4b: Convert to v2 9be50e2ca9 soc: bcm2711: Port to HWMv2 bbbed12c2f boards: arm64: qemu_kvm_arm64: Convert to v2 4f5ec7ff8f soc: qemu_virt_arm64: Port to HWMv2 d8d1b9f200 boards: arm64: qemu_cortex_a53: Convert to v2 30bd34b31e soc: qemu_cortex_a53: Port to HWMv2 c20d0dcbb6 boards: arm64: fvp_baser_aemv8r: Convert to v2 02ed6af463 boards: arm64: fvp_base_revc_2xaemv8a: Convert to v2 1b175003a4 soc: fvp_aemv8*: Port to HWMv2 de231b911d boards: v2: Clean up obsolete comments aa9597f6d9 boards: Convert waveshare_open103z to HWM v2 9644828c81 boards: Convert stm32vl_disco to HWM v2 86ab2bd430 boards: Convert stm32_min_dev to HWM v2 d88d3ddcc4 boards: Convert stm32f103_mini to HWM v2 0ccc0204e1 boards: Convert stm3210c_eval to HWM v2 dd9972d782 boards: Convert olimex_stm32_h103 to HWM v2 a2c2e1406d boards: Convert olimexino_stm32 to HWM v2 2d9c62e118 boards: Convert nucleo_f103rb to HWM v2 e8ba99dc59 soc: v2: stm32: Migrate STM32F1 series 9a93916604 tests: Update board names for hwmv2 9c4d94844d boards: arm: bcm958401m2: Convert to v2 feaf4ffba1 boards: arm: bcm958402m2: Convert to v2 87f0827121 soc: bcm_vk: Port to HWMv2 4526be24a5 boards: arm: quick_feather: Convert to v2 cd921d2b97 boards: arm: qomu: Convert to v2 b3c04051fc soc: quicklogic_eos_s3: Port to HWMv2 a73a9e7533 boards: v2: Clean up obsolete comments 8d87bcc167 boards: Convert stm32f0_disco to HWM v2 1933585785 boards: Convert stm32f072_eval to HWM v2 6f9fe5429d boards: Convert stm32f072b_disco to HWM v2 9dc78e4025 boards: Convert stm32f030_demo to HWM v2 35113e8923 boards: Convert nucleo_f091rc to HWM v2 b276aee9a4 boards: Convert nucleo_f070rb to HWM v2 795f8d611b boards: Convert nucleo_f042k6 to HWM v2 2d82646443 boards: Convert nucleo_f031k6 to HWM v2 959786f12d boards: Convert nucleo_f030r8 to HWM v2 81670db2e9 boards: Convert legend to HWM v2 8980430aad boards: Convert google_kukui to HWM v2 ac020f66e0 dts: stm32f0: fix few warnings 5140e4551a boards: v2: doc: Add vendors 77d640e0c9 soc: v2: stm32: Migrate STM32F0 series 0131e1c159 soc: v2: Add st_stm32 structure and common folder 36b63787a7 boards: v2: Add documentation index for converted boards ae02fc5047 boards: sparc: qemu_leon3: Convert to v2 f38f7bb223 boards: sparc: gr716a: Convert to v2 d3cca3580e soc: gr716a: Port to HWMv2 6a8a0c1647 boards: sparc: generic_leon3: Convert to v2 faf22185ce soc: leon3: Port to HWMv2 e94762ecdc tests: Update board names for hwmv2 9afcc27e05 boards: xtensa: qemu_xtensa: Convert to v2 3e4a17018f soc: dc233c: Port to HWMv2 9188fdcd78 boards: xtensa: xt-sim: Convert to v2 fcaa41cb5d soc: xtensa_sample_controller: Port to HWMv2 dbc413f7f7 scripts: board_v1_to_v2: Fix CONFIG_SOC_SERIES_ exclusion 6be3d4bc80 kconfig: remove Kconfig BOARD_RPI_PICO_W safe guard. f4442fa698 boards: v2: Add documentation index for converted boards ec5fbd67f7 boards: nios2: qemu_nios2: Convert to v2 d3ef220460 soc: nios2-qemu: Port to HWMv2 a223f284b5 boards: nios2: altera_max10: Convert to v2 c381edcb73 soc: nios2f-zephyr: Port to HWMv2 97401c7d2a boards: mips: qemu_malta: Convert to v2 e7a3243a24 soc: qemu_malta: Port to HWMv2 bec82c690d boards: v2: Add documentation index for converted boards 94f6f9b636 boards: arm: w5500_evb_pico: Convert to v2 209235ab6e boards: arm: sparkfun_pro_micro_rp2040: Convert to v2 e5b1885907 boards: arm: adafruit_qt_py_rp2040: Convert to v2 4c750818f9 boards: arm: adafruit_kb2040: Convert to v2 8d3896caa4 boards: arm: rpi_pico: Convert to v2 42cff42c42 soc: rpi_pico: Port to HWMv2 c2df4ca9cb scripts: improve yaml schema and board.yml validation for revisions 3970f90f71 cmake: clear BOARD_CACHE when invalid board identifier is given 3a70ee9ccd cmake: improve board revision handling 3cda715fae scripts: board_v1_to_v2: Don't add select CONFIG_SOC_SERIES_FOO dc56a543f3 scripts: board_v1_to_v2: Add License + copyright 87147f88c4 cmake: prefer cache BOARD_IDENTIFIER over extracting from BOARD 65f5dc5b8c cmake: fail when board identifier is applied in legacy hw model 7db2b6efd8 cmake: cache BOARD_IDENTIFIER to preserve it between CMake invocations 85dddac5a2 scripts: using extend in list_boards for variant list 6ae5c4e7fd scripts: utils: add board v1->v2 conversion utility ef834a12d0 maintainers: update Renesas RZT2M path 3ab7830625 boards: renesas: add documentation entry a0c2ca0491 boards: arm: add documentation entry 27ff3654b7 boards: gigadevice: add documentation entry 6e02f43c0a maintainers: update GD32 paths 1bfcf1d974 boards: gd32l233r_eval: convert to HWMv2 6e621ee43f boards: gd32f470i_eval: convert to HWMv2 219b149768 boards: gd32f450z_eval: convert to HWMv2 91c52b0d39 boards: gd32f450v_start: convert to HWMv2 f0e0a973f6 boards: gd32f407v_start: convert to HWMv2 6f592b64c9 boards: gd32f403z_eval: convert to HWMv2 4bcb4b2ac8 boards: gd32f350r_eval: convert to HWMv2 fdc7ed6eb0 boards: gd32e507z_eval: convert to HWMv2 770376250d boards: gd32e507v_start: convert to HWMv2 a6d8b92e86 boards: gd32e103v_eval: convert to HWMv2 a5f8e5daa1 boards: gd32a503v_eval: convert to HWMv2 5ee799cc5f boards: gd32f450i_eval: convert to HWMv2 8aa8ce4ac8 soc: gigadevice: port to HWMv2 4e203c14c7 cmake: enhanced board entry file handling 312265ee04 scripts: make SoC field mandatory in board.yml c12ae3bcbc boards: update Renesas rzt2m board.yml to contain SoC information c5321c1dbe cmake: make SoC optional for boards containing a single SoC bcc06c60ae scripts: support SoC list output for boards db9e46010c twister: update testcase.yaml and sample.yaml to mps3/an547 identifier a988adee7d boards: update arm mps3 an547 board to HWMv2 scheme 7dc2c9db0c soc: use HWMv2 for arm mps3 SoC c506675b7c boards: update Renesas Starter Kit+ for RZ/T2M board to HWMv2 scheme 3abb792073 soc: use HWMv2 for renesas_rzt2m SoC 4f52bc646e cmake: support hw model v2 in arch/Kconfig tree a712b5005b scripts: extend kconfig compliance to verify board / SoC scheme v2 baa55141a1 twister: update twister testplan.py to handle HWMv2 boards 1f026f70eb boards: extend list_boards.py and update boards CMake module bd854a3af8 cmake: introduce arch and soc cmake modules for hw model v2 c9edefa8fd arch: add existing archs to archs.yml for HWMv2 support 61bbfb5ba2 scripts: introduce list_hardware.py for listing of architectures and SoCs a4d1980c35 build: board/ soc: introduce hw model v2 scheme Signed-off-by: Daniel DeGrasse <daniel.degrasse@nxp.com> Signed-off-by: Declan Snyder <declan.snyder@nxp.com> Signed-off-by: Gerard Marull-Paretas <gerard@teslabs.com> Signed-off-by: Sylvio Alves <sylvio.alves@espressif.com> Signed-off-by: Torsten Rasmussen <Torsten.Rasmussen@nordicsemi.no> Signed-off-by: Fabio Baltieri <fabiobaltieri@google.com> Signed-off-by: Dmitrii Golovanov <dmitrii.golovanov@intel.com> Signed-off-by: David Leach <david.leach@nxp.com> Signed-off-by: Emilio Benavente <emilio.benavente@nxp.com> Signed-off-by: Anas Nashif <anas.nashif@intel.com> Signed-off-by: Iuliana Prodan <iuliana.prodan@nxp.com> Signed-off-by: Jiafei Pan <Jiafei.Pan@nxp.com> Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com> Signed-off-by: Filip Kokosinski <fkokosinski@antmicro.com> Signed-off-by: Grzegorz Swiderski <grzegorz.swiderski@nordicsemi.no> Signed-off-by: Gerson Fernando Budke <nandojve@gmail.com> Signed-off-by: Manuel Argüelles <manuel.arguelles@nxp.com> Signed-off-by: Erwan Gouriou <erwan.gouriou@st.com> Signed-off-by: Mahesh Mahadevan <mahesh.mahadevan@nxp.com> Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no> Signed-off-by: Francois Ramu <francois.ramu@st.com> Signed-off-by: Guillaume Gautier <guillaume.gautier-ext@st.com> Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no> Signed-off-by: Abderrahmane Jarmouni <abderrahmane.jarmouni-ext@st.com> Signed-off-by: Yves Vandervennet <yves.vandervennet@nxp.com> Signed-off-by: Jamie McCrae <jamie.mccrae@nordicsemi.no>
2023 lines
76 KiB
CMake
2023 lines
76 KiB
CMake
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
# *DOCUMENTATION*
|
|
#
|
|
# Note that this is *NOT* the top-level CMakeLists.txt. That's in the
|
|
# application. See the Application Development Primer documentation
|
|
# for details.
|
|
#
|
|
# To see a list of typical targets execute "make usage"
|
|
# More info can be located in ./README.rst
|
|
# Comments in this file are targeted only to the developer, do not
|
|
# expect to learn how to build the kernel reading this file.
|
|
|
|
if(NOT DEFINED ZEPHYR_BINARY_DIR)
|
|
message(FATAL_ERROR "A user error has occurred.
|
|
cmake was invoked with '${CMAKE_CURRENT_LIST_DIR}' specified as the source directory,
|
|
but it must be invoked with an application source directory,
|
|
such as '${CMAKE_CURRENT_LIST_DIR}/samples/hello_world'.
|
|
Debug variables:
|
|
CMAKE_CACHEFILE_DIR: ${CMAKE_CACHEFILE_DIR}
|
|
")
|
|
endif()
|
|
|
|
|
|
# See https://gitlab.kitware.com/cmake/cmake/issues/16228
|
|
# and https://cmake.org/pipermail/cmake/2019-May/thread.html#69496
|
|
if(NOT ZEPHYR_BASE STREQUAL CMAKE_CURRENT_SOURCE_DIR)
|
|
message(WARNING "ZEPHYR_BASE doesn't match CMAKE_CURRENT_SOURCE_DIR
|
|
ZEPHYR_BASE = ${ZEPHYR_BASE}
|
|
PWD = $ENV{PWD}
|
|
CMAKE_CURRENT_SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}
|
|
You may be using a mix of symbolic links and real paths which causes \
|
|
subtle and hard to debug CMake issues.")
|
|
endif()
|
|
# For Zephyr more specifically this breaks (at least)
|
|
# -fmacro-prefix-map=${ZEPHYR_BASE}=
|
|
|
|
|
|
# In some cases the "final" things are not used at all and "_prebuilt"
|
|
# is the last station. See "logical_target_for_zephyr_elf" below for
|
|
# details.
|
|
set(CMAKE_EXECUTABLE_SUFFIX .elf)
|
|
|
|
# Zephyr build system will use a dynamic number of linking stages based on build
|
|
# configuration.
|
|
#
|
|
# Currently up to three linking stages may be executed:
|
|
# zephyr_pre0: First linking stage
|
|
# zephyr_pre1: Second linking stage
|
|
# zephyr_final: Final linking stage
|
|
#
|
|
# There will at minimum be a single linking stage.
|
|
# When only a single linking stage is required, the `zephyr_pre0` will be mapped
|
|
# into the `zephyr_final` target.
|
|
#
|
|
# Multiple linking stages are required in the following cases:
|
|
# - device dependencies structs must be generated (CONFIG_DEVICE_DEPS=y)
|
|
# - ISR tables must be generated (CONFIG_GEN_ISR_TABLES=y)
|
|
# - Kernel objects hash tables (CONFIG_USERSPACE=y)
|
|
# - Application memory partitions (CONFIG_USERSPACE=y)
|
|
#
|
|
# Some generators require that memory locations has been fixed, thus those are
|
|
# placed at the second linking stage.
|
|
#
|
|
# When all three linking stages are active, then the following properties applies:
|
|
# - zephyr_pre0: linker sections may resize / addresses may relocate
|
|
# - zephyr_pre1: All linker section sizes are fixed, addresses cannot change
|
|
# - zephyr_final: Final image.
|
|
#
|
|
set(ZEPHYR_CURRENT_LINKER_PASS 0)
|
|
set(ZEPHYR_CURRENT_LINKER_CMD linker_zephyr_pre${ZEPHYR_CURRENT_LINKER_PASS}.cmd)
|
|
set(ZEPHYR_LINK_STAGE_EXECUTABLE zephyr_pre${ZEPHYR_CURRENT_LINKER_PASS})
|
|
|
|
# ZEPHYR_PREBUILT_EXECUTABLE is used outside of this file, therefore keep the
|
|
# existing variable to allow slowly cleanup of linking stage handling.
|
|
# Three stage linking active: pre0 -> pre1 -> final, this will correspond to `pre1`
|
|
# Two stage linking active: pre0 -> final, this will correspond to `pre0`
|
|
if(CONFIG_USERSPACE OR CONFIG_DEVICE_DEPS)
|
|
set(ZEPHYR_PREBUILT_EXECUTABLE zephyr_pre1)
|
|
else()
|
|
set(ZEPHYR_PREBUILT_EXECUTABLE zephyr_pre0)
|
|
endif()
|
|
set(ZEPHYR_FINAL_EXECUTABLE zephyr_final)
|
|
|
|
# Set some phony targets to collect dependencies
|
|
set(OFFSETS_H_TARGET offsets_h)
|
|
set(SYSCALL_LIST_H_TARGET syscall_list_h_target)
|
|
set(DRIVER_VALIDATION_H_TARGET driver_validation_h_target)
|
|
set(KOBJ_TYPES_H_TARGET kobj_types_h_target)
|
|
set(PARSE_SYSCALLS_TARGET parse_syscalls_target)
|
|
|
|
define_property(GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT BRIEF_DOCS " " FULL_DOCS " ")
|
|
set_property( GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT elf32-little${ARCH}) # BFD format
|
|
|
|
# Contains the list of files with syscall function prototypes.
|
|
add_library(syscalls_interface INTERFACE)
|
|
set(syscalls_file_list_output
|
|
${CMAKE_CURRENT_BINARY_DIR}/misc/generated/syscalls_file_list.txt)
|
|
|
|
# "zephyr_interface" is a source-less library that encapsulates all the global
|
|
# compiler options needed by all source files. All zephyr libraries,
|
|
# including the library named "zephyr" link with this library to
|
|
# obtain these flags.
|
|
# https://cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html#interface-libraries
|
|
add_library(zephyr_interface INTERFACE)
|
|
|
|
# "zephyr" is a catch-all CMake library for source files that can be
|
|
# built purely with the include paths, defines, and other compiler
|
|
# flags that come with zephyr_interface.
|
|
zephyr_library_named(zephyr)
|
|
|
|
zephyr_include_directories(
|
|
include
|
|
${PROJECT_BINARY_DIR}/include/generated
|
|
${USERINCLUDE}
|
|
${STDINCLUDE}
|
|
)
|
|
|
|
include(${ZEPHYR_BASE}/cmake/linker_script/${ARCH}/linker.cmake OPTIONAL)
|
|
|
|
zephyr_include_directories(${SOC_FULL_DIR})
|
|
|
|
# Don't inherit compiler flags from the environment
|
|
foreach(var AFLAGS CFLAGS CXXFLAGS CPPFLAGS LDFLAGS)
|
|
if(DEFINED ENV{${var}})
|
|
message(WARNING "The environment variable '${var}' was set to $ENV{${var}}, "
|
|
"but Zephyr ignores flags from the environment. Use 'cmake "
|
|
"-DEXTRA_${var}=$ENV{${var}}' instead."
|
|
)
|
|
unset(ENV{${var}})
|
|
endif()
|
|
endforeach()
|
|
|
|
zephyr_compile_definitions(
|
|
KERNEL
|
|
__ZEPHYR__=1
|
|
)
|
|
|
|
# Ensure that include/zephyr/toolchain.h includes toolchain/other.h for all off-tree toolchains
|
|
if(TOOLCHAIN_USE_CUSTOM)
|
|
zephyr_compile_definitions(__TOOLCHAIN_CUSTOM__)
|
|
endif()
|
|
|
|
# @Intent: Set compiler specific flag for disabling strict aliasing rule
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:C>:$<TARGET_PROPERTY:compiler,no_strict_aliasing>>)
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:CXX>:$<TARGET_PROPERTY:compiler-cpp,no_strict_aliasing>>)
|
|
|
|
# Extra warnings options for twister run
|
|
if (CONFIG_COMPILER_WARNINGS_AS_ERRORS)
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:C>:$<TARGET_PROPERTY:compiler,warnings_as_errors>>)
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:ASM>:$<TARGET_PROPERTY:asm,warnings_as_errors>>)
|
|
zephyr_link_libraries($<TARGET_PROPERTY:linker,warnings_as_errors>)
|
|
endif()
|
|
|
|
# @Intent: Set compiler flags to enable buffer overflow checks in libc functions
|
|
# @details:
|
|
# Kconfig.zephyr "Detect buffer overflows in libc calls" is a kconfig choice,
|
|
# ensuring at most *one* of CONFIG_FORTIFY_SOURCE_{COMPILE_TIME,RUN_TIME} is
|
|
# set. Refer to Kconfig.zephyr for selection logic and description of these
|
|
# choices. Toolchains set both of the security_fortify_{compile_time,run_time}
|
|
# properties and the Kconfig settings are used here to select between those.
|
|
#
|
|
if(CONFIG_FORTIFY_SOURCE_RUN_TIME)
|
|
zephyr_compile_definitions($<TARGET_PROPERTY:compiler,security_fortify_run_time> )
|
|
elseif(CONFIG_FORTIFY_SOURCE_COMPILE_TIME)
|
|
zephyr_compile_definitions($<TARGET_PROPERTY:compiler,security_fortify_compile_time> )
|
|
endif()
|
|
|
|
# @Intent: Set compiler flags to detect general stack overflows across all functions
|
|
if(CONFIG_STACK_CANARIES)
|
|
zephyr_compile_options($<TARGET_PROPERTY:compiler,security_canaries>)
|
|
endif()
|
|
|
|
# @Intent: Obtain compiler optimizations flags and store in variables
|
|
# @details:
|
|
# Kconfig.zephyr "Optimization level" is a kconfig choice, ensuring
|
|
# only *one* of CONFIG_{NO,DEBUG,SPEED,SIZE}_OPTIMIZATIONS is set.
|
|
# Refer to Kconfig.zephyr for selection logic and description of these choices.
|
|
# toolchain_cc_optimize_*() macros must provide the mapping from these kconfigs
|
|
# to compiler flags. Each macro will store the flags in a CMake variable, whose
|
|
# name is passed as argument (somewhat like by reference).
|
|
#
|
|
# If the user wants to tweak the optimizations, there are two ways:
|
|
# 1) Using EXTRA_CFLAGS which is applied regardless of kconfig choice, or
|
|
# 2) Rely on override support being implemented by your toolchain_cc_optimize_*()
|
|
#
|
|
get_property(OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG TARGET compiler PROPERTY no_optimization)
|
|
get_property(OPTIMIZE_FOR_DEBUG_FLAG TARGET compiler PROPERTY optimization_debug)
|
|
get_property(OPTIMIZE_FOR_SPEED_FLAG TARGET compiler PROPERTY optimization_speed)
|
|
get_property(OPTIMIZE_FOR_SIZE_FLAG TARGET compiler PROPERTY optimization_size)
|
|
|
|
# From kconfig choice, pick the actual OPTIMIZATION_FLAG to use.
|
|
# Kconfig choice ensures only one of these CONFIG_*_OPTIMIZATIONS is set.
|
|
if(CONFIG_NO_OPTIMIZATIONS)
|
|
set(OPTIMIZATION_FLAG ${OPTIMIZE_FOR_NO_OPTIMIZATIONS_FLAG})
|
|
elseif(CONFIG_DEBUG_OPTIMIZATIONS)
|
|
set(OPTIMIZATION_FLAG ${OPTIMIZE_FOR_DEBUG_FLAG})
|
|
elseif(CONFIG_SPEED_OPTIMIZATIONS)
|
|
set(OPTIMIZATION_FLAG ${OPTIMIZE_FOR_SPEED_FLAG})
|
|
elseif(CONFIG_SIZE_OPTIMIZATIONS)
|
|
set(OPTIMIZATION_FLAG ${OPTIMIZE_FOR_SIZE_FLAG}) # Default in kconfig
|
|
else()
|
|
assert(0 "Unreachable code. Expected optimization level to have been chosen. See Kconfig.zephyr")
|
|
endif()
|
|
|
|
if(NOT CONFIG_ARCH_IS_SET)
|
|
message(WARNING "\
|
|
None of the CONFIG_<arch> (e.g. CONFIG_X86) symbols are set. \
|
|
Select one of them from the SOC_SERIES_* symbol or, lacking that, from the \
|
|
SOC_* symbol.")
|
|
endif()
|
|
|
|
# Apply the final optimization flag(s)
|
|
zephyr_compile_options(${OPTIMIZATION_FLAG})
|
|
|
|
if(CONFIG_LTO)
|
|
zephyr_compile_options($<TARGET_PROPERTY:compiler,optimization_lto>)
|
|
add_link_options($<TARGET_PROPERTY:linker,lto_arguments>)
|
|
endif()
|
|
|
|
# @Intent: Obtain compiler specific flags related to C++ that are not influenced by kconfig
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:CXX>:$<TARGET_PROPERTY:compiler-cpp,required>>)
|
|
|
|
# @Intent: Obtain compiler specific flags for compiling under different ISO standards of C++
|
|
if(CONFIG_CPP)
|
|
# From kconfig choice, pick a single dialect.
|
|
# Kconfig choice ensures only one of these CONFIG_STD_CPP* is set.
|
|
if(CONFIG_STD_CPP98)
|
|
set(STD_CPP_DIALECT_FLAGS $<TARGET_PROPERTY:compiler-cpp,dialect_cpp98>)
|
|
list(APPEND CMAKE_CXX_COMPILE_FEATURES ${compile_features_cpp98})
|
|
elseif(CONFIG_STD_CPP11)
|
|
set(STD_CPP_DIALECT_FLAGS $<TARGET_PROPERTY:compiler-cpp,dialect_cpp11>) # Default in kconfig
|
|
list(APPEND CMAKE_CXX_COMPILE_FEATURES ${compile_features_cpp11})
|
|
elseif(CONFIG_STD_CPP14)
|
|
set(STD_CPP_DIALECT_FLAGS $<TARGET_PROPERTY:compiler-cpp,dialect_cpp14>)
|
|
list(APPEND CMAKE_CXX_COMPILE_FEATURES ${compile_features_cpp14})
|
|
elseif(CONFIG_STD_CPP17)
|
|
set(STD_CPP_DIALECT_FLAGS $<TARGET_PROPERTY:compiler-cpp,dialect_cpp17>)
|
|
list(APPEND CMAKE_CXX_COMPILE_FEATURES ${compile_features_cpp17})
|
|
elseif(CONFIG_STD_CPP2A)
|
|
set(STD_CPP_DIALECT_FLAGS $<TARGET_PROPERTY:compiler-cpp,dialect_cpp2a>)
|
|
list(APPEND CMAKE_CXX_COMPILE_FEATURES ${compile_features_cpp20})
|
|
elseif(CONFIG_STD_CPP20)
|
|
set(STD_CPP_DIALECT_FLAGS $<TARGET_PROPERTY:compiler-cpp,dialect_cpp20>)
|
|
list(APPEND CMAKE_CXX_COMPILE_FEATURES ${compile_features_cpp20})
|
|
elseif(CONFIG_STD_CPP2B)
|
|
set(STD_CPP_DIALECT_FLAGS $<TARGET_PROPERTY:compiler-cpp,dialect_cpp2b>)
|
|
list(APPEND CMAKE_CXX_COMPILE_FEATURES ${compile_features_cpp20})
|
|
else()
|
|
assert(0 "Unreachable code. Expected C++ standard to have been chosen. See Kconfig.zephyr.")
|
|
endif()
|
|
set(CMAKE_CXX_COMPILE_FEATURES ${CMAKE_CXX_COMPILE_FEATURES} PARENT_SCOPE)
|
|
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:CXX>:${STD_CPP_DIALECT_FLAGS}>)
|
|
endif()
|
|
|
|
if(NOT CONFIG_CPP_EXCEPTIONS)
|
|
# @Intent: Obtain compiler specific flags related to C++ Exceptions
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:CXX>:$<TARGET_PROPERTY:compiler-cpp,no_exceptions>>)
|
|
endif()
|
|
|
|
if(NOT CONFIG_CPP_RTTI)
|
|
# @Intent: Obtain compiler specific flags related to C++ Run Time Type Information
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:CXX>:$<TARGET_PROPERTY:compiler-cpp,no_rtti>>)
|
|
endif()
|
|
|
|
if(CONFIG_MISRA_SANE)
|
|
# @Intent: Obtain toolchain compiler flags relating to MISRA.
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:C>:$<TARGET_PROPERTY:compiler,warning_error_misra_sane>>)
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:CXX>:$<TARGET_PROPERTY:compiler-cpp,warning_error_misra_sane>>)
|
|
endif()
|
|
|
|
# This is intend to be temporary. Once we have fixed the violations that
|
|
# prevents build Zephyr, these flags shall be part of the default flags.
|
|
if(CONFIG_CODING_GUIDELINE_CHECK)
|
|
# @Intent: Obtain toolchain compiler flags relating to coding guideline
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:C>:$<TARGET_PROPERTY:compiler,warning_error_coding_guideline>>)
|
|
endif()
|
|
|
|
# @Intent: Set compiler specific macro inclusion of AUTOCONF_H
|
|
zephyr_compile_options("SHELL: $<TARGET_PROPERTY:compiler,imacros> ${AUTOCONF_H}")
|
|
|
|
if(CONFIG_COMPILER_FREESTANDING)
|
|
# @Intent: Set compiler specific flag for bare metal freestanding option
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:C>:$<TARGET_PROPERTY:compiler,freestanding>>)
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:ASM>:$<TARGET_PROPERTY:compiler,freestanding>>)
|
|
endif()
|
|
|
|
if (CONFIG_PICOLIBC AND NOT CONFIG_PICOLIBC_IO_FLOAT)
|
|
# @Intent: Set compiler specific flag to disable printf-related optimizations
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:C>:$<TARGET_PROPERTY:compiler,no_printf_return_value>>)
|
|
endif()
|
|
|
|
# @Intent: Set compiler specific flag for tentative definitions, no-common
|
|
zephyr_compile_options($<TARGET_PROPERTY:compiler,no_common>)
|
|
|
|
# @Intent: Set compiler specific flag for production of debug information
|
|
zephyr_compile_options($<TARGET_PROPERTY:compiler,debug>)
|
|
|
|
if(CONFIG_COMPILER_SAVE_TEMPS)
|
|
# @Intent: Set compiler specific flag for saving temporary object files
|
|
zephyr_compile_options($<TARGET_PROPERTY:compiler,save_temps>)
|
|
endif()
|
|
|
|
if(NOT CONFIG_COMPILER_TRACK_MACRO_EXPANSION)
|
|
# @Intent: Set compiler specific flags to not track macro expansion
|
|
zephyr_compile_options($<TARGET_PROPERTY:compiler,no_track_macro_expansion>)
|
|
endif()
|
|
|
|
if(CONFIG_COMPILER_COLOR_DIAGNOSTICS)
|
|
# @Intent: Set compiler specific flag for diagnostic messages
|
|
zephyr_compile_options($<TARGET_PROPERTY:compiler,diagnostic>)
|
|
endif()
|
|
|
|
zephyr_compile_options(
|
|
${TOOLCHAIN_C_FLAGS}
|
|
)
|
|
|
|
# @Intent: Obtain compiler specific flags related to assembly
|
|
# ToDo: Remember to get feedback from Oticon on this, as they might use the `ASM_BASE_FLAG` since this is done this way.
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:ASM>:$<TARGET_PROPERTY:asm,required>>)
|
|
|
|
# @Intent: Enforce standard integer type correspondence to match Zephyr usage.
|
|
# (must be after compiler specific flags)
|
|
if(CONFIG_ENFORCE_ZEPHYR_STDINT)
|
|
zephyr_compile_options("SHELL: $<TARGET_PROPERTY:compiler,imacros> ${ZEPHYR_BASE}/include/zephyr/toolchain/zephyr_stdint.h")
|
|
endif()
|
|
|
|
# Common toolchain-agnostic assembly flags
|
|
zephyr_compile_options(
|
|
$<$<COMPILE_LANGUAGE:ASM>:-D_ASMLANGUAGE>
|
|
)
|
|
|
|
# @Intent: Set fundamental linker specific flags
|
|
toolchain_ld_base()
|
|
|
|
toolchain_ld_force_undefined_symbols(
|
|
_OffsetAbsSyms
|
|
_ConfigAbsSyms
|
|
)
|
|
|
|
if(NOT CONFIG_NATIVE_BUILD)
|
|
# @Intent: Set linker specific flags for bare metal target
|
|
toolchain_ld_baremetal()
|
|
endif()
|
|
|
|
if(CONFIG_CPP AND NOT CONFIG_MINIMAL_LIBCPP AND NOT CONFIG_NATIVE_LIBRARY)
|
|
# @Intent: Set linker specific flags for C++
|
|
toolchain_ld_cpp()
|
|
endif()
|
|
|
|
# @Intent: Add the basic toolchain warning flags
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:C>:$<TARGET_PROPERTY:compiler,warning_base>>)
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:CXX>:$<TARGET_PROPERTY:compiler-cpp,warning_base>>)
|
|
|
|
# ==========================================================================
|
|
#
|
|
# cmake -DW=... settings
|
|
#
|
|
# W=1 - warnings that may be relevant and does not occur too often
|
|
# W=2 - warnings that occur quite often but may still be relevant
|
|
# W=3 - the more obscure warnings, can most likely be ignored
|
|
# ==========================================================================
|
|
# @Intent: Add cmake -DW toolchain supported warnings, if any
|
|
if(W MATCHES "1")
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:C>:$<TARGET_PROPERTY:compiler,warning_dw_1>>)
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:CXX>:$<TARGET_PROPERTY:compiler-cpp,warning_dw_1>>)
|
|
endif()
|
|
|
|
if(W MATCHES "2")
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:C>:$<TARGET_PROPERTY:compiler,warning_dw_2>>)
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:CXX>:$<TARGET_PROPERTY:compiler-cpp,warning_dw_2>>)
|
|
endif()
|
|
|
|
if(W MATCHES "3")
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:C>:$<TARGET_PROPERTY:compiler,warning_dw_3>>)
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:CXX>:$<TARGET_PROPERTY:compiler-cpp,warning_dw_3>>)
|
|
endif()
|
|
|
|
# @Intent: Add extended, more specific, toolchain warning flags
|
|
zephyr_compile_options($<TARGET_PROPERTY:compiler,warning_extended>)
|
|
|
|
# @Intent: Trigger an error when a declaration does not specify a type
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:C>:$<TARGET_PROPERTY:compiler,warning_error_implicit_int>>)
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:CXX>:$<TARGET_PROPERTY:compiler-cpp,warning_error_implicit_int>>)
|
|
|
|
# @Intent: Do not make position independent code / executable
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:C>:$<TARGET_PROPERTY:compiler,no_position_independent>>)
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:CXX>:$<TARGET_PROPERTY:compiler,no_position_independent>>)
|
|
|
|
# In case of CONFIG_NATIVE_LIBRARY we also don't want position independent code,
|
|
# but we cannot tell that to the linker yet as we are first only doing a
|
|
# relocatable link into a static library
|
|
zephyr_link_libraries_ifndef(CONFIG_NATIVE_LIBRARY
|
|
$<TARGET_PROPERTY:linker,no_position_independent>)
|
|
|
|
# Allow the user to inject options when calling cmake, e.g.
|
|
# 'cmake -DEXTRA_CFLAGS="-Werror -Wno-deprecated-declarations" ..'
|
|
include(cmake/extra_flags.cmake)
|
|
|
|
zephyr_cc_option(-fno-asynchronous-unwind-tables)
|
|
|
|
if(CONFIG_USERSPACE)
|
|
zephyr_compile_options($<TARGET_PROPERTY:compiler,no_global_merge>)
|
|
endif()
|
|
|
|
if(CONFIG_THREAD_LOCAL_STORAGE)
|
|
# Only support local exec TLS model at this point.
|
|
zephyr_cc_option(-ftls-model=local-exec)
|
|
endif()
|
|
|
|
if(CONFIG_OVERRIDE_FRAME_POINTER_DEFAULT)
|
|
if(CONFIG_OMIT_FRAME_POINTER)
|
|
zephyr_cc_option(-fomit-frame-pointer)
|
|
else()
|
|
zephyr_cc_option(-fno-omit-frame-pointer)
|
|
endif()
|
|
endif()
|
|
|
|
separate_arguments(COMPILER_OPT_AS_LIST UNIX_COMMAND ${CONFIG_COMPILER_OPT})
|
|
zephyr_compile_options(${COMPILER_OPT_AS_LIST})
|
|
|
|
# TODO: Include arch compiler options at this point.
|
|
|
|
if(NOT CMAKE_C_COMPILER_ID STREQUAL "Clang" AND
|
|
NOT CMAKE_C_COMPILER_ID STREQUAL "IntelLLVM" AND
|
|
NOT CMAKE_C_COMPILER_ID STREQUAL "ARMClang")
|
|
# GCC assumed
|
|
zephyr_cc_option(-fno-reorder-functions)
|
|
|
|
# GCC 11 and above may generate a warning when dereferencing a constant
|
|
# address pointer whose address is below the value specified by the
|
|
# `min-pagesize` parameter (defaults to 0x1000). The `min-pagesize` parameter
|
|
# is set to 0 such that GCC never generates any warnings for the constant
|
|
# address pointers. For more details, refer to the GCC PR99578.
|
|
zephyr_cc_option(--param=min-pagesize=0)
|
|
|
|
if(NOT ${ZEPHYR_TOOLCHAIN_VARIANT} STREQUAL "xcc")
|
|
zephyr_cc_option(-fno-defer-pop)
|
|
endif()
|
|
else()
|
|
# Clang produces false positive vla warnings
|
|
zephyr_cc_option(-Wno-vla)
|
|
endif()
|
|
|
|
zephyr_cc_option_ifdef(CONFIG_STACK_USAGE -fstack-usage)
|
|
|
|
# If the compiler supports it, strip the ${ZEPHYR_BASE} prefix from the
|
|
# __FILE__ macro used in __ASSERT*, in the
|
|
# .noinit."/home/joe/zephyr/fu/bar.c" section names and in any
|
|
# application code. This saves some memory, stops leaking user locations
|
|
# in binaries, makes failure logs more deterministic and most
|
|
# importantly makes builds more deterministic
|
|
if(CONFIG_BUILD_OUTPUT_STRIP_PATHS)
|
|
# If several match then the last one wins. This matters for instances
|
|
# like tests/ and samples/: they're inside all of them! Then let's
|
|
# strip as little as possible.
|
|
zephyr_cc_option(-fmacro-prefix-map=${CMAKE_SOURCE_DIR}=CMAKE_SOURCE_DIR)
|
|
zephyr_cc_option(-fmacro-prefix-map=${ZEPHYR_BASE}=ZEPHYR_BASE)
|
|
if(WEST_TOPDIR)
|
|
zephyr_cc_option(-fmacro-prefix-map=${WEST_TOPDIR}=WEST_TOPDIR)
|
|
endif()
|
|
endif()
|
|
|
|
# TODO: Archiver arguments
|
|
# ar_option(D)
|
|
|
|
# Declare MPU userspace dependencies before the linker scripts to make
|
|
# sure the order of dependencies are met
|
|
if(CONFIG_USERSPACE)
|
|
add_custom_target(app_smem)
|
|
set(APP_SMEM_ALIGNED_DEP app_smem_aligned_linker)
|
|
set(APP_SMEM_UNALIGNED_DEP app_smem_unaligned_linker)
|
|
endif()
|
|
|
|
if(CONFIG_USERSPACE)
|
|
set(KOBJECT_LINKER_DEP kobject_linker)
|
|
endif()
|
|
|
|
if(DEFINED BUILD_VERSION)
|
|
set(build_version_argument "-DBUILD_VERSION=${BUILD_VERSION}")
|
|
elseif(NOT ZEPHYR_GIT_INDEX)
|
|
if(EXISTS ${ZEPHYR_BASE}/.git/index)
|
|
set(ZEPHYR_GIT_INDEX ${ZEPHYR_BASE}/.git/index CACHE PATH
|
|
"Path to Zephyr git repository index file")
|
|
elseif(EXISTS ${ZEPHYR_BASE}/.git)
|
|
# Likely a git-submodule. Let's ask git where the real database is located.
|
|
find_package(Git QUIET)
|
|
if(GIT_FOUND)
|
|
execute_process(
|
|
COMMAND ${GIT_EXECUTABLE} rev-parse --absolute-git-dir
|
|
WORKING_DIRECTORY ${ZEPHYR_BASE}
|
|
OUTPUT_VARIABLE zephyr_git_dir
|
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
ERROR_STRIP_TRAILING_WHITESPACE
|
|
ERROR_VARIABLE stderr
|
|
RESULT_VARIABLE return_code)
|
|
if(return_code)
|
|
message(WARNING "BUILD_VERSION: git rev-parse failed: ${stderr}")
|
|
else()
|
|
if(NOT "${stderr}" STREQUAL "")
|
|
message(WARNING "BUILD_VERSION: git rev-parse warned: ${stderr}")
|
|
endif()
|
|
set(ZEPHYR_GIT_INDEX ${zephyr_git_dir}/index CACHE PATH
|
|
"Path to Zephyr git repository index file")
|
|
endif()
|
|
else()
|
|
message(WARNING "Could not find git installation, "
|
|
"please specify '-DBUILD_VERSION=<version>'")
|
|
endif()
|
|
else()
|
|
message(WARNING "ZEPHYR_BASE=${ZEPHYR_BASE} doesn't appear to be a git "
|
|
"repository, please specify '-DBUILD_VERSION=<version>'")
|
|
endif()
|
|
endif()
|
|
|
|
if(ZEPHYR_GIT_INDEX)
|
|
set(git_dependency ${ZEPHYR_GIT_INDEX})
|
|
endif()
|
|
|
|
add_custom_command(
|
|
OUTPUT ${PROJECT_BINARY_DIR}/include/generated/version.h
|
|
COMMAND ${CMAKE_COMMAND} -DZEPHYR_BASE=${ZEPHYR_BASE}
|
|
-DOUT_FILE=${PROJECT_BINARY_DIR}/include/generated/version.h
|
|
-DVERSION_TYPE=KERNEL
|
|
-DVERSION_FILE=${ZEPHYR_BASE}/VERSION
|
|
-DKERNEL_VERSION_CUSTOMIZATION="$<TARGET_PROPERTY:version_h,KERNEL_VERSION_CUSTOMIZATION>"
|
|
${build_version_argument}
|
|
-P ${ZEPHYR_BASE}/cmake/gen_version_h.cmake
|
|
DEPENDS ${ZEPHYR_BASE}/VERSION ${git_dependency}
|
|
COMMAND_EXPAND_LISTS
|
|
)
|
|
add_custom_target(version_h DEPENDS ${PROJECT_BINARY_DIR}/include/generated/version.h)
|
|
|
|
if(EXISTS ${APPLICATION_SOURCE_DIR}/VERSION)
|
|
add_custom_command(
|
|
OUTPUT ${PROJECT_BINARY_DIR}/include/generated/app_version.h
|
|
COMMAND ${CMAKE_COMMAND} -DZEPHYR_BASE=${ZEPHYR_BASE}
|
|
-DOUT_FILE=${PROJECT_BINARY_DIR}/include/generated/app_version.h
|
|
-DVERSION_TYPE=APP
|
|
-DVERSION_FILE=${APPLICATION_SOURCE_DIR}/VERSION
|
|
-DAPP_VERSION_CUSTOMIZATION="$<TARGET_PROPERTY:app_version_h,APP_VERSION_CUSTOMIZATION>"
|
|
${build_version_argument}
|
|
-P ${ZEPHYR_BASE}/cmake/gen_version_h.cmake
|
|
DEPENDS ${APPLICATION_SOURCE_DIR}/VERSION ${git_dependency}
|
|
COMMAND_EXPAND_LISTS
|
|
)
|
|
add_custom_target(app_version_h DEPENDS ${PROJECT_BINARY_DIR}/include/generated/app_version.h)
|
|
add_dependencies(zephyr_interface app_version_h)
|
|
endif()
|
|
|
|
# Unfortunately, the order in which CMakeLists.txt code is processed
|
|
# matters so we need to be careful about how we order the processing
|
|
# of subdirectories. One example is "Compiler flags added late in the
|
|
# build are not exported to external build systems #5605"; when we
|
|
# integrate with an external build system we read out all compiler
|
|
# flags when the external project is created. So an external project
|
|
# defined in subsys or ext will not get global flags added by drivers/
|
|
# or tests/ as the subdirectories are ordered now.
|
|
#
|
|
# Another example of when the order matters is the reading and writing
|
|
# of global properties such as ZEPHYR_LIBS or
|
|
# GENERATED_KERNEL_OBJECT_FILES.
|
|
#
|
|
# Arch is placed early because it defines important compiler flags
|
|
# that must be exported to external build systems defined in
|
|
# e.g. subsys/.
|
|
add_subdirectory(arch)
|
|
add_subdirectory(lib)
|
|
# We use include instead of add_subdirectory to avoid creating a new directory scope.
|
|
# This is because source file properties are directory scoped, including the GENERATED
|
|
# property which is set implicitly for custom command outputs
|
|
include(misc/generated/CMakeLists.txt)
|
|
|
|
add_subdirectory(soc)
|
|
add_subdirectory(boards)
|
|
add_subdirectory(subsys)
|
|
add_subdirectory(drivers)
|
|
|
|
# Include zephyr modules generated CMake file.
|
|
foreach(module_name ${ZEPHYR_MODULE_NAMES})
|
|
# Note the second, binary_dir parameter requires the added
|
|
# subdirectory to have its own, local cmake target(s). If not then
|
|
# this binary_dir is created but stays empty. Object files land in
|
|
# the main binary dir instead.
|
|
# https://cmake.org/pipermail/cmake/2019-June/069547.html
|
|
zephyr_string(SANITIZE TOUPPER MODULE_NAME_UPPER ${module_name})
|
|
if(NOT ${ZEPHYR_${MODULE_NAME_UPPER}_CMAKE_DIR} STREQUAL "")
|
|
set(ZEPHYR_CURRENT_MODULE_NAME ${ZEPHYR_${MODULE_NAME_UPPER}_MODULE_NAME})
|
|
set(ZEPHYR_CURRENT_MODULE_DIR ${ZEPHYR_${MODULE_NAME_UPPER}_MODULE_DIR})
|
|
set(ZEPHYR_CURRENT_CMAKE_DIR ${ZEPHYR_${MODULE_NAME_UPPER}_CMAKE_DIR})
|
|
add_subdirectory(${ZEPHYR_CURRENT_CMAKE_DIR} ${CMAKE_BINARY_DIR}/modules/${module_name})
|
|
endif()
|
|
endforeach()
|
|
# Done processing modules, clear module variables
|
|
set(ZEPHYR_CURRENT_MODULE_NAME)
|
|
set(ZEPHYR_CURRENT_MODULE_DIR)
|
|
set(ZEPHYR_CURRENT_CMAKE_DIR)
|
|
|
|
get_property(LIBC_LINK_LIBRARIES TARGET zephyr_interface PROPERTY LIBC_LINK_LIBRARIES)
|
|
zephyr_link_libraries(${LIBC_LINK_LIBRARIES})
|
|
|
|
set(syscall_list_h ${CMAKE_CURRENT_BINARY_DIR}/include/generated/syscall_list.h)
|
|
set(syscalls_json ${CMAKE_CURRENT_BINARY_DIR}/misc/generated/syscalls.json)
|
|
set(struct_tags_json ${CMAKE_CURRENT_BINARY_DIR}/misc/generated/struct_tags.json)
|
|
|
|
# The syscalls subdirs txt file is constructed by python containing a list of folders to use for
|
|
# dependency handling, including empty folders.
|
|
# Windows: The list is used to specify DIRECTORY list with CMAKE_CONFIGURE_DEPENDS attribute.
|
|
# Other OS: The list will update whenever a file is added/removed/modified and ensure a re-build.
|
|
set(syscalls_subdirs_txt ${CMAKE_CURRENT_BINARY_DIR}/misc/generated/syscalls_subdirs.txt)
|
|
|
|
# As syscalls_subdirs_txt is updated whenever a file is modified, this file can not be used for
|
|
# monitoring of added / removed folders. A trigger file is thus used for correct dependency
|
|
# handling. The trigger file will update when a folder is added / removed.
|
|
set(syscalls_subdirs_trigger ${CMAKE_CURRENT_BINARY_DIR}/misc/generated/syscalls_subdirs.trigger)
|
|
|
|
if(NOT (${CMAKE_HOST_SYSTEM_NAME} STREQUAL Windows))
|
|
set(syscalls_links --create-links ${CMAKE_CURRENT_BINARY_DIR}/misc/generated/syscalls_links)
|
|
endif()
|
|
|
|
# When running CMake it must be ensured that all dependencies are correctly acquired.
|
|
execute_process(
|
|
COMMAND
|
|
${PYTHON_EXECUTABLE}
|
|
${ZEPHYR_BASE}/scripts/build/subfolder_list.py
|
|
--directory ${ZEPHYR_BASE}/include # Walk this directory
|
|
--out-file ${syscalls_subdirs_txt} # Write file with discovered folder
|
|
--trigger-file ${syscalls_subdirs_trigger} # Trigger file that is used for json generation
|
|
${syscalls_links} # If defined, create symlinks for dependencies
|
|
)
|
|
file(STRINGS ${syscalls_subdirs_txt} PARSE_SYSCALLS_PATHS_DEPENDS ENCODING UTF-8)
|
|
|
|
if(${CMAKE_HOST_SYSTEM_NAME} STREQUAL Windows)
|
|
# On windows only adding/removing files or folders will be reflected in depends.
|
|
# Hence adding a file requires CMake to re-run to add this file to the file list.
|
|
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${PARSE_SYSCALLS_PATHS_DEPENDS})
|
|
|
|
# Also On Windows each header file must be monitored as file modifications are not reflected
|
|
# on directory level.
|
|
file(GLOB_RECURSE PARSE_SYSCALLS_HEADER_DEPENDS ${ZEPHYR_BASE}/include/*.h)
|
|
else()
|
|
# The syscall parsing depends on the folders in order to detect add/removed/modified files.
|
|
# When a folder is removed, CMake will try to find a target that creates that dependency.
|
|
# This command sets up the target for CMake to find.
|
|
# Without this code, CMake will fail with the following error:
|
|
# <folder> needed by '<target>', missing and no known rule to make it
|
|
# when a folder is removed.
|
|
add_custom_command(OUTPUT ${PARSE_SYSCALLS_PATHS_DEPENDS}
|
|
COMMAND ${CMAKE_COMMAND} -E echo ""
|
|
COMMENT "Preparing syscall dependency handling"
|
|
)
|
|
|
|
add_custom_command(
|
|
OUTPUT
|
|
${syscalls_subdirs_trigger}
|
|
COMMAND
|
|
${PYTHON_EXECUTABLE}
|
|
${ZEPHYR_BASE}/scripts/build/subfolder_list.py
|
|
--directory ${ZEPHYR_BASE}/include # Walk this directory
|
|
--out-file ${syscalls_subdirs_txt} # Write file with discovered folder
|
|
--trigger-file ${syscalls_subdirs_trigger} # Trigger file that is used for json generation
|
|
${syscalls_links} # If defined, create symlinks for dependencies
|
|
DEPENDS ${PARSE_SYSCALLS_PATHS_DEPENDS}
|
|
)
|
|
|
|
# Ensure subdir file always exists when specifying CMake dependency.
|
|
if(NOT EXISTS ${syscalls_subdirs_txt})
|
|
file(WRITE ${syscalls_subdirs_txt} "")
|
|
endif()
|
|
|
|
# On other OS'es, modifying a file is reflected on the folder timestamp and hence detected
|
|
# when using depend on directory level.
|
|
# Thus CMake only needs to re-run when sub-directories are added / removed, which is indicated
|
|
# using a trigger file.
|
|
set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${syscalls_subdirs_txt})
|
|
endif()
|
|
|
|
# syscall declarations are searched for in the SYSCALL_INCLUDE_DIRS
|
|
if(CONFIG_APPLICATION_DEFINED_SYSCALL)
|
|
list(APPEND SYSCALL_INCLUDE_DIRS ${APPLICATION_SOURCE_DIR})
|
|
endif()
|
|
|
|
if(CONFIG_ZTEST)
|
|
list(APPEND SYSCALL_INCLUDE_DIRS ${ZEPHYR_BASE}/subsys/testsuite/ztest/include)
|
|
|
|
if(CONFIG_NO_OPTIMIZATIONS AND CONFIG_ZTEST_WARN_NO_OPTIMIZATIONS)
|
|
message(WARNING "Running tests with CONFIG_NO_OPTIMIZATIONS is generally "
|
|
"not supported and known to break in many cases due to stack overflow or "
|
|
"other problems. Please do not file issues about it unless the test is "
|
|
"specifically tuned to run in this configuration. To disable this warning "
|
|
"set CONFIG_ZTEST_WARN_NO_OPTIMIZATIONS=n.")
|
|
endif()
|
|
|
|
endif()
|
|
|
|
foreach(d ${SYSCALL_INCLUDE_DIRS})
|
|
list(APPEND parse_syscalls_include_args
|
|
--include ${d}
|
|
)
|
|
endforeach()
|
|
|
|
add_custom_command(
|
|
OUTPUT
|
|
${syscalls_json}
|
|
${struct_tags_json}
|
|
COMMAND
|
|
${PYTHON_EXECUTABLE}
|
|
${ZEPHYR_BASE}/scripts/build/parse_syscalls.py
|
|
--scan ${ZEPHYR_BASE}/include # Read files from this dir
|
|
--scan ${ZEPHYR_BASE}/drivers # For net sockets
|
|
--scan ${ZEPHYR_BASE}/subsys/net # More net sockets
|
|
${parse_syscalls_include_args} # Read files from these dirs also
|
|
--json-file ${syscalls_json} # Write this file
|
|
--tag-struct-file ${struct_tags_json} # Write subsystem list to this file
|
|
--file-list ${syscalls_file_list_output}
|
|
$<$<BOOL:${CONFIG_EMIT_ALL_SYSCALLS}>:--emit-all-syscalls>
|
|
DEPENDS ${syscalls_subdirs_trigger} ${PARSE_SYSCALLS_HEADER_DEPENDS}
|
|
${syscalls_file_list_output} ${syscalls_interface}
|
|
)
|
|
|
|
# Make sure Picolibc is built before the rest of the system; there's no explicit
|
|
# reference to any of the files as they're all picked up by various compiler
|
|
# settings
|
|
if(CONFIG_PICOLIBC_USE_MODULE)
|
|
set(picolibc_dependency PicolibcBuild)
|
|
endif()
|
|
|
|
add_custom_target(${SYSCALL_LIST_H_TARGET} DEPENDS ${syscall_list_h} ${picolibc_dependency})
|
|
|
|
set_property(TARGET ${SYSCALL_LIST_H_TARGET}
|
|
APPEND PROPERTY
|
|
ADDITIONAL_CLEAN_FILES
|
|
${CMAKE_CURRENT_BINARY_DIR}/include/generated/syscalls
|
|
)
|
|
|
|
add_custom_target(${PARSE_SYSCALLS_TARGET}
|
|
DEPENDS
|
|
${syscalls_json}
|
|
${struct_tags_json}
|
|
)
|
|
|
|
# 64-bit systems do not require special handling of 64-bit system call
|
|
# parameters or return values, indicate this to the system call boilerplate
|
|
# generation script.
|
|
if(CONFIG_64BIT)
|
|
set(SYSCALL_LONG_REGISTERS_ARG --long-registers)
|
|
endif()
|
|
|
|
if(CONFIG_TIMEOUT_64BIT)
|
|
set(SYSCALL_SPLIT_TIMEOUT_ARG --split-type k_timeout_t --split-type k_ticks_t)
|
|
endif()
|
|
|
|
add_custom_command(OUTPUT include/generated/syscall_dispatch.c ${syscall_list_h}
|
|
# Also, some files are written to include/generated/syscalls/
|
|
COMMAND
|
|
${PYTHON_EXECUTABLE}
|
|
${ZEPHYR_BASE}/scripts/build/gen_syscalls.py
|
|
--json-file ${syscalls_json} # Read this file
|
|
--base-output include/generated/syscalls # Write to this dir
|
|
--syscall-dispatch include/generated/syscall_dispatch.c # Write this file
|
|
--syscall-list ${syscall_list_h}
|
|
$<$<BOOL:${CONFIG_USERSPACE}>:--gen-mrsh-files>
|
|
${SYSCALL_LONG_REGISTERS_ARG}
|
|
${SYSCALL_SPLIT_TIMEOUT_ARG}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
DEPENDS ${PARSE_SYSCALLS_TARGET}
|
|
)
|
|
|
|
# This is passed into all calls to the gen_kobject_list.py script.
|
|
set(gen_kobject_list_include_args --include-subsystem-list ${struct_tags_json})
|
|
|
|
set(DRV_VALIDATION ${PROJECT_BINARY_DIR}/include/generated/driver-validation.h)
|
|
add_custom_command(
|
|
OUTPUT ${DRV_VALIDATION}
|
|
COMMAND
|
|
${PYTHON_EXECUTABLE}
|
|
${ZEPHYR_BASE}/scripts/build/gen_kobject_list.py
|
|
--validation-output ${DRV_VALIDATION}
|
|
${gen_kobject_list_include_args}
|
|
$<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:--verbose>
|
|
DEPENDS
|
|
${ZEPHYR_BASE}/scripts/build/gen_kobject_list.py
|
|
${PARSE_SYSCALLS_TARGET}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
)
|
|
add_custom_target(${DRIVER_VALIDATION_H_TARGET} DEPENDS ${DRV_VALIDATION})
|
|
|
|
include(${ZEPHYR_BASE}/cmake/kobj.cmake)
|
|
gen_kobj(KOBJ_INCLUDE_PATH)
|
|
|
|
# Add a pseudo-target that is up-to-date when all generated headers
|
|
# are up-to-date.
|
|
|
|
add_custom_target(zephyr_generated_headers)
|
|
add_dependencies(zephyr_generated_headers
|
|
offsets_h version_h
|
|
)
|
|
|
|
# Generate offsets.c.obj from offsets.c
|
|
# Generate offsets.h from offsets.c.obj
|
|
|
|
set(OFFSETS_LIB offsets)
|
|
|
|
set(OFFSETS_C_PATH ${ARCH_DIR}/${ARCH}/core/offsets/offsets.c)
|
|
set(OFFSETS_H_PATH ${PROJECT_BINARY_DIR}/include/generated/offsets.h)
|
|
|
|
add_library( ${OFFSETS_LIB} OBJECT ${OFFSETS_C_PATH})
|
|
target_include_directories(${OFFSETS_LIB} PRIVATE
|
|
kernel/include
|
|
${ARCH_DIR}/${ARCH}/include
|
|
)
|
|
|
|
# Make sure that LTO will never be enabled when compiling offsets.c
|
|
set_source_files_properties(${OFFSETS_C_PATH} PROPERTIES COMPILE_OPTIONS $<TARGET_PROPERTY:compiler,prohibit_lto>)
|
|
|
|
target_link_libraries(${OFFSETS_LIB} zephyr_interface)
|
|
add_dependencies(zephyr_interface
|
|
${SYSCALL_LIST_H_TARGET}
|
|
${DRIVER_VALIDATION_H_TARGET}
|
|
${KOBJ_TYPES_H_TARGET}
|
|
)
|
|
|
|
add_custom_command(
|
|
OUTPUT ${OFFSETS_H_PATH}
|
|
COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/scripts/build/gen_offset_header.py
|
|
-i $<TARGET_OBJECTS:${OFFSETS_LIB}>
|
|
-o ${OFFSETS_H_PATH}
|
|
DEPENDS
|
|
${OFFSETS_LIB}
|
|
$<TARGET_OBJECTS:${OFFSETS_LIB}>
|
|
)
|
|
add_custom_target(${OFFSETS_H_TARGET} DEPENDS ${OFFSETS_H_PATH})
|
|
|
|
zephyr_get_include_directories_for_lang(C ZEPHYR_INCLUDES)
|
|
|
|
add_subdirectory(kernel)
|
|
|
|
get_property(
|
|
syscalls_file_list
|
|
TARGET syscalls_interface
|
|
PROPERTY INTERFACE_INCLUDE_DIRECTORIES
|
|
)
|
|
file(CONFIGURE OUTPUT ${syscalls_file_list_output}
|
|
CONTENT "@syscalls_file_list@" @ONLY)
|
|
|
|
# Read list content
|
|
get_property(ZEPHYR_LIBS_PROPERTY GLOBAL PROPERTY ZEPHYR_LIBS)
|
|
|
|
foreach(zephyr_lib ${ZEPHYR_LIBS_PROPERTY})
|
|
get_property(lib_type TARGET ${zephyr_lib} PROPERTY TYPE)
|
|
# To prevent CMake failure when a driver is enabled, for example: REGULATOR=y
|
|
# we disable any Zephyr libraries without sources and adds the `empty_file.c`.
|
|
if(${lib_type} STREQUAL STATIC_LIBRARY
|
|
AND NOT ${zephyr_lib} STREQUAL app
|
|
)
|
|
get_property(source_list TARGET ${zephyr_lib} PROPERTY SOURCES)
|
|
get_property(lib_imported TARGET ${zephyr_lib} PROPERTY IMPORTED)
|
|
if(NOT source_list
|
|
AND NOT ${lib_imported}
|
|
)
|
|
get_property(allow_empty TARGET ${zephyr_lib} PROPERTY ALLOW_EMPTY)
|
|
if(NOT "${allow_empty}")
|
|
message(WARNING
|
|
"No SOURCES given to Zephyr library: ${zephyr_lib}\nExcluding target from build."
|
|
)
|
|
endif()
|
|
target_sources(${zephyr_lib} PRIVATE ${ZEPHYR_BASE}/misc/empty_file.c)
|
|
set_property(TARGET ${zephyr_lib} PROPERTY EXCLUDE_FROM_ALL TRUE)
|
|
list(REMOVE_ITEM ZEPHYR_LIBS_PROPERTY ${zephyr_lib})
|
|
continue()
|
|
endif()
|
|
endif()
|
|
|
|
# TODO: Could this become an INTERFACE property of zephyr_interface?
|
|
add_dependencies(${zephyr_lib} zephyr_generated_headers)
|
|
endforeach()
|
|
|
|
get_property(OUTPUT_FORMAT GLOBAL PROPERTY PROPERTY_OUTPUT_FORMAT)
|
|
|
|
if (CONFIG_CODE_DATA_RELOCATION)
|
|
set(CODE_RELOCATION_DEP code_relocation_source_lib)
|
|
endif() # CONFIG_CODE_DATA_RELOCATION
|
|
|
|
# Give the linker script targets all of the include directories so
|
|
# that cmake can successfully find the linker scripts' header
|
|
# dependencies.
|
|
zephyr_get_include_directories_for_lang(C
|
|
ZEPHYR_INCLUDE_DIRS
|
|
STRIP_PREFIX # Don't use a -I prefix
|
|
)
|
|
|
|
if(CONFIG_DEVICE_DEPS)
|
|
if(CONFIG_DEVICE_DEPS_DYNAMIC)
|
|
set(dynamic_deps --dynamic-deps)
|
|
endif()
|
|
|
|
if(CONFIG_PM_DEVICE_POWER_DOMAIN_DYNAMIC)
|
|
set(number_of_dynamic_devices ${CONFIG_PM_DEVICE_POWER_DOMAIN_DYNAMIC_NUM})
|
|
else()
|
|
set(number_of_dynamic_devices 0)
|
|
endif()
|
|
|
|
# device_deps.c is generated from ${ZEPHYR_LINK_STAGE_EXECUTABLE} by
|
|
# gen_device_deps.py
|
|
add_custom_command(
|
|
OUTPUT device_deps.c
|
|
COMMAND
|
|
${PYTHON_EXECUTABLE}
|
|
${ZEPHYR_BASE}/scripts/build/gen_device_deps.py
|
|
--output-source device_deps.c
|
|
--output-graphviz dev_graph.dot
|
|
${dynamic_deps}
|
|
--num-dynamic-devices ${number_of_dynamic_devices}
|
|
--kernel $<TARGET_FILE:${ZEPHYR_LINK_STAGE_EXECUTABLE}>
|
|
--zephyr-base ${ZEPHYR_BASE}
|
|
--start-symbol "$<TARGET_PROPERTY:linker,devices_start_symbol>"
|
|
VERBATIM
|
|
DEPENDS ${ZEPHYR_LINK_STAGE_EXECUTABLE}
|
|
)
|
|
set_property(GLOBAL APPEND PROPERTY GENERATED_APP_SOURCE_FILES device_deps.c)
|
|
|
|
# gen_device_deps runs on `__device_deps_pass1` so pass this info to the linker script generator
|
|
list(APPEND LINKER_PASS_${ZEPHYR_CURRENT_LINKER_PASS}_DEFINE "LINKER_DEVICE_DEPS_PASS1")
|
|
endif()
|
|
|
|
if(CONFIG_CODE_DATA_RELOCATION)
|
|
# @Intent: Linker script to relocate .text, data and .bss sections
|
|
toolchain_ld_relocation()
|
|
endif()
|
|
|
|
if(CONFIG_USERSPACE)
|
|
zephyr_get_compile_options_for_lang_as_string(C compiler_flags_priv)
|
|
string(REPLACE "$<TARGET_PROPERTY:compiler,coverage>" ""
|
|
NO_COVERAGE_FLAGS "${compiler_flags_priv}"
|
|
)
|
|
|
|
set(GEN_KOBJ_LIST ${ZEPHYR_BASE}/scripts/build/gen_kobject_list.py)
|
|
set(PROCESS_GPERF ${ZEPHYR_BASE}/scripts/build/process_gperf.py)
|
|
endif()
|
|
|
|
get_property(CSTD GLOBAL PROPERTY CSTD)
|
|
set_ifndef(CSTD c99)
|
|
|
|
# @Intent: Obtain compiler specific flag for specifying the c standard
|
|
zephyr_compile_options(
|
|
$<$<COMPILE_LANGUAGE:C>:$<TARGET_PROPERTY:compiler,cstd>${CSTD}>
|
|
)
|
|
set(CMAKE_C_COMPILE_FEATURES ${compile_features_${CSTD}} PARENT_SCOPE)
|
|
|
|
# @Intent: Configure linker scripts, i.e. generate linker scripts with variables substituted
|
|
toolchain_ld_configure_files()
|
|
|
|
get_property(TOPT GLOBAL PROPERTY TOPT)
|
|
get_property(COMPILER_TOPT TARGET compiler PROPERTY linker_script)
|
|
set_ifndef( TOPT "${COMPILER_TOPT}")
|
|
set_ifndef( TOPT -Wl,-T) # Use this if the compiler driver doesn't set a value
|
|
|
|
if(CONFIG_HAVE_CUSTOM_LINKER_SCRIPT)
|
|
set(LINKER_SCRIPT ${APPLICATION_SOURCE_DIR}/${CONFIG_CUSTOM_LINKER_SCRIPT})
|
|
if(NOT EXISTS ${LINKER_SCRIPT})
|
|
set(LINKER_SCRIPT ${CONFIG_CUSTOM_LINKER_SCRIPT})
|
|
assert_exists(CONFIG_CUSTOM_LINKER_SCRIPT)
|
|
endif()
|
|
elseif(DEFINED BOARD_LINKER_SCRIPT)
|
|
set(LINKER_SCRIPT ${BOARD_LINKER_SCRIPT})
|
|
elseif(DEFINED SOC_LINKER_SCRIPT)
|
|
set(LINKER_SCRIPT ${SOC_LINKER_SCRIPT})
|
|
else()
|
|
find_package(Deprecated COMPONENTS SEARCHED_LINKER_SCRIPT)
|
|
endif()
|
|
|
|
if(NOT EXISTS ${LINKER_SCRIPT})
|
|
message(FATAL_ERROR "Could not find linker script: '${LINKER_SCRIPT}'. Corrupted configuration?")
|
|
endif()
|
|
|
|
if(CONFIG_USERSPACE)
|
|
set(APP_SMEM_ALIGNED_LD "${PROJECT_BINARY_DIR}/include/generated/app_smem_aligned.ld")
|
|
set(APP_SMEM_UNALIGNED_LD "${PROJECT_BINARY_DIR}/include/generated/app_smem_unaligned.ld")
|
|
|
|
if(CONFIG_LINKER_USE_PINNED_SECTION)
|
|
set(APP_SMEM_PINNED_ALIGNED_LD
|
|
"${PROJECT_BINARY_DIR}/include/generated/app_smem_pinned_aligned.ld")
|
|
set(APP_SMEM_PINNED_UNALIGNED_LD
|
|
"${PROJECT_BINARY_DIR}/include/generated/app_smem_pinned_unaligned.ld")
|
|
|
|
if(NOT CONFIG_LINKER_GENERIC_SECTIONS_PRESENT_AT_BOOT)
|
|
# The libc partition may hold symbols that are required during boot process,
|
|
# for example, stack guard (if enabled). So the libc partition must be pinned
|
|
# if not sections are in physical memory at boot, as the paging mechanism is
|
|
# only initialized post-kernel.
|
|
set_property(TARGET app_smem APPEND PROPERTY pinned_partitions "z_libc_partition")
|
|
endif()
|
|
|
|
get_property(APP_SMEM_PINNED_PARTITION_LIST TARGET app_smem PROPERTY pinned_partitions)
|
|
if(APP_SMEM_PINNED_PARTITION_LIST)
|
|
list(JOIN APP_SMEM_PINNED_PARTITION_LIST "," APP_SMEM_PINNED_PARTITION_LIST_ARG_CSL)
|
|
set(APP_SMEM_PINNED_PARTITION_LIST_ARG "--pinpartitions=${APP_SMEM_PINNED_PARTITION_LIST_ARG_CSL}")
|
|
endif()
|
|
endif()
|
|
|
|
set(OBJ_FILE_DIR "${PROJECT_BINARY_DIR}/../")
|
|
|
|
if(CONFIG_NEWLIB_LIBC)
|
|
set(LIBC_PART -l libc.a z_libc_partition -l libm.a z_libc_partition)
|
|
endif()
|
|
if(CONFIG_NEWLIB_LIBC_NANO)
|
|
set(LIBC_PART -l libc_nano.a z_libc_partition -l libm_nano.a z_libc_partition)
|
|
endif()
|
|
if(CONFIG_PICOLIBC)
|
|
set(LIBC_PART -l libc.a z_libc_partition)
|
|
endif()
|
|
|
|
add_custom_command(
|
|
OUTPUT ${APP_SMEM_UNALIGNED_LD} ${APP_SMEM_PINNED_UNALIGNED_LD}
|
|
COMMAND ${PYTHON_EXECUTABLE}
|
|
${ZEPHYR_BASE}/scripts/build/gen_app_partitions.py
|
|
-f ${CMAKE_BINARY_DIR}/compile_commands.json
|
|
-o ${APP_SMEM_UNALIGNED_LD}
|
|
$<$<BOOL:${APP_SMEM_PINNED_UNALIGNED_LD}>:--pinoutput=${APP_SMEM_PINNED_UNALIGNED_LD}>
|
|
${APP_SMEM_PINNED_PARTITION_LIST_ARG}
|
|
${LIBC_PART}
|
|
$<TARGET_PROPERTY:zephyr_property_target,COMPILE_OPTIONS>
|
|
$<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:--verbose>
|
|
DEPENDS
|
|
kernel
|
|
${CMAKE_BINARY_DIR}/compile_commands.json
|
|
${ZEPHYR_LIBS_PROPERTY}
|
|
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/
|
|
COMMAND_EXPAND_LISTS
|
|
COMMENT "Generating app_smem_unaligned linker section"
|
|
)
|
|
|
|
add_custom_target(
|
|
${APP_SMEM_ALIGNED_DEP}
|
|
DEPENDS
|
|
${APP_SMEM_ALIGNED_LD}
|
|
${APP_SMEM_PINNED_ALIGNED_LD}
|
|
)
|
|
|
|
add_custom_target(
|
|
${APP_SMEM_UNALIGNED_DEP}
|
|
DEPENDS
|
|
${APP_SMEM_UNALIGNED_LD}
|
|
${APP_SMEM_PINNED_UNALIGNED_LD}
|
|
)
|
|
|
|
set(APP_SMEM_UNALIGNED_LIB app_smem_unaligned_output_obj_renamed_lib)
|
|
list(APPEND LINKER_PASS_${ZEPHYR_CURRENT_LINKER_PASS}_DEFINE "LINKER_APP_SMEM_UNALIGNED")
|
|
endif()
|
|
|
|
if (CONFIG_USERSPACE)
|
|
add_custom_command(
|
|
OUTPUT ${APP_SMEM_ALIGNED_LD} ${APP_SMEM_PINNED_ALIGNED_LD}
|
|
COMMAND ${PYTHON_EXECUTABLE}
|
|
${ZEPHYR_BASE}/scripts/build/gen_app_partitions.py
|
|
-e $<TARGET_FILE:${ZEPHYR_LINK_STAGE_EXECUTABLE}>
|
|
-o ${APP_SMEM_ALIGNED_LD}
|
|
$<$<BOOL:${APP_SMEM_PINNED_ALIGNED_LD}>:--pinoutput=${APP_SMEM_PINNED_ALIGNED_LD}>
|
|
${APP_SMEM_PINNED_PARTITION_LIST_ARG}
|
|
${LIBC_PART}
|
|
$<TARGET_PROPERTY:zephyr_property_target,COMPILE_OPTIONS>
|
|
$<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:--verbose>
|
|
DEPENDS
|
|
kernel
|
|
${ZEPHYR_LIBS_PROPERTY}
|
|
${ZEPHYR_LINK_STAGE_EXECUTABLE}
|
|
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/
|
|
COMMAND_EXPAND_LISTS
|
|
COMMENT "Generating app_smem_aligned linker section"
|
|
)
|
|
endif()
|
|
|
|
if(CONFIG_USERSPACE)
|
|
# This CONFIG_USERSPACE block is to create place holders to reserve space
|
|
# for the gperf generated structures for zephyr_prebuilt.elf.
|
|
# These place holders are there so that the placement of kobjects would be
|
|
# the same between linking zephyr_prebuilt.elf and zephyr.elf, as
|
|
# the gperf hash table is hashed on the addresses of kobjects.
|
|
# The placeholders are generated from app_smem_unaligned_prebuilt.elf.
|
|
|
|
set(KOBJECT_PREBUILT_HASH_LIST kobject_prebuilt_hash.gperf)
|
|
set(KOBJECT_PREBUILT_HASH_OUTPUT_SRC_PRE kobject_prebuilt_hash_preprocessed.c)
|
|
set(KOBJECT_PREBUILT_HASH_OUTPUT_SRC kobject_prebuilt_hash.c)
|
|
|
|
add_custom_command(
|
|
OUTPUT ${KOBJECT_PREBUILT_HASH_LIST}
|
|
COMMAND
|
|
${PYTHON_EXECUTABLE}
|
|
${GEN_KOBJ_LIST}
|
|
--kernel $<TARGET_FILE:${ZEPHYR_LINK_STAGE_EXECUTABLE}>
|
|
--gperf-output ${KOBJECT_PREBUILT_HASH_LIST}
|
|
${gen_kobject_list_include_args}
|
|
$<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:--verbose>
|
|
DEPENDS
|
|
${ZEPHYR_LINK_STAGE_EXECUTABLE}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
)
|
|
add_custom_target(
|
|
kobj_prebuilt_hash_list
|
|
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_PREBUILT_HASH_LIST}
|
|
)
|
|
|
|
add_custom_command(
|
|
OUTPUT ${KOBJECT_PREBUILT_HASH_OUTPUT_SRC_PRE}
|
|
COMMAND
|
|
${GPERF}
|
|
--output-file ${KOBJECT_PREBUILT_HASH_OUTPUT_SRC_PRE}
|
|
--multiple-iterations 10
|
|
${KOBJECT_PREBUILT_HASH_LIST}
|
|
DEPENDS kobj_prebuilt_hash_list ${KOBJECT_PREBUILT_HASH_LIST}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
)
|
|
add_custom_target(
|
|
kobj_prebuilt_hash_output_src_pre
|
|
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_PREBUILT_HASH_OUTPUT_SRC_PRE}
|
|
)
|
|
|
|
add_custom_command(
|
|
OUTPUT ${KOBJECT_PREBUILT_HASH_OUTPUT_SRC}
|
|
COMMAND
|
|
${PYTHON_EXECUTABLE}
|
|
${PROCESS_GPERF}
|
|
-i ${KOBJECT_PREBUILT_HASH_OUTPUT_SRC_PRE}
|
|
-o ${KOBJECT_PREBUILT_HASH_OUTPUT_SRC}
|
|
-p "struct k_object"
|
|
$<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:--verbose>
|
|
DEPENDS kobj_prebuilt_hash_output_src_pre ${KOBJECT_PREBUILT_HASH_OUTPUT_SRC_PRE}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
)
|
|
add_custom_target(
|
|
kobj_prebuilt_hash_output_src
|
|
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_PREBUILT_HASH_OUTPUT_SRC}
|
|
)
|
|
|
|
add_library(
|
|
kobj_prebuilt_hash_output_lib
|
|
OBJECT ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_PREBUILT_HASH_OUTPUT_SRC}
|
|
)
|
|
|
|
set_source_files_properties(${KOBJECT_PREBUILT_HASH_OUTPUT_SRC}
|
|
PROPERTIES COMPILE_FLAGS
|
|
"${NO_COVERAGE_FLAGS} -fno-function-sections -fno-data-sections")
|
|
|
|
target_compile_definitions(kobj_prebuilt_hash_output_lib
|
|
PRIVATE $<TARGET_PROPERTY:zephyr_interface,INTERFACE_COMPILE_DEFINITIONS>
|
|
)
|
|
|
|
target_include_directories(kobj_prebuilt_hash_output_lib
|
|
PUBLIC $<TARGET_PROPERTY:zephyr_interface,INTERFACE_INCLUDE_DIRECTORIES>
|
|
)
|
|
|
|
target_include_directories(kobj_prebuilt_hash_output_lib SYSTEM
|
|
PUBLIC $<TARGET_PROPERTY:zephyr_interface,INTERFACE_SYSTEM_INCLUDE_DIRECTORIES>
|
|
)
|
|
|
|
set(KOBJECT_LINKER_HEADER_DATA "${PROJECT_BINARY_DIR}/include/generated/linker-kobject-prebuilt-data.h")
|
|
|
|
add_custom_command(
|
|
OUTPUT ${KOBJECT_LINKER_HEADER_DATA}
|
|
COMMAND
|
|
${PYTHON_EXECUTABLE}
|
|
${ZEPHYR_BASE}/scripts/build/gen_kobject_placeholders.py
|
|
--object $<TARGET_OBJECTS:kobj_prebuilt_hash_output_lib>
|
|
--outdir ${PROJECT_BINARY_DIR}/include/generated
|
|
--datapct ${CONFIG_KOBJECT_DATA_AREA_RESERVE_EXTRA_PERCENT}
|
|
--rodata ${CONFIG_KOBJECT_RODATA_AREA_EXTRA_BYTES}
|
|
$<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:--verbose>
|
|
DEPENDS
|
|
kobj_prebuilt_hash_output_lib $<TARGET_OBJECTS:kobj_prebuilt_hash_output_lib>
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
)
|
|
|
|
add_custom_target(
|
|
${KOBJECT_LINKER_DEP}
|
|
DEPENDS
|
|
${KOBJECT_LINKER_HEADER_DATA}
|
|
)
|
|
endif()
|
|
|
|
if(CONFIG_USERSPACE OR CONFIG_DEVICE_DEPS)
|
|
configure_linker_script(
|
|
${ZEPHYR_CURRENT_LINKER_CMD}
|
|
"${LINKER_PASS_${ZEPHYR_CURRENT_LINKER_PASS}_DEFINE}"
|
|
${CODE_RELOCATION_DEP}
|
|
${APP_SMEM_UNALIGNED_DEP}
|
|
${APP_SMEM_UNALIGNED_LD}
|
|
${APP_SMEM_PINNED_UNALIGNED_LD}
|
|
zephyr_generated_headers
|
|
)
|
|
|
|
add_custom_target(
|
|
linker_zephyr_pre${ZEPHYR_CURRENT_LINKER_PASS}_script
|
|
DEPENDS
|
|
${ZEPHYR_CURRENT_LINKER_CMD}
|
|
)
|
|
|
|
set_property(TARGET
|
|
linker_zephyr_pre${ZEPHYR_CURRENT_LINKER_PASS}_script
|
|
PROPERTY INCLUDE_DIRECTORIES
|
|
${ZEPHYR_INCLUDE_DIRS}
|
|
)
|
|
|
|
add_executable(${ZEPHYR_LINK_STAGE_EXECUTABLE} misc/empty_file.c)
|
|
toolchain_ld_link_elf(
|
|
TARGET_ELF ${ZEPHYR_LINK_STAGE_EXECUTABLE}
|
|
OUTPUT_MAP ${PROJECT_BINARY_DIR}/${ZEPHYR_LINK_STAGE_EXECUTABLE}.map
|
|
LIBRARIES_PRE_SCRIPT ""
|
|
LINKER_SCRIPT ${PROJECT_BINARY_DIR}/${ZEPHYR_CURRENT_LINKER_CMD}
|
|
LIBRARIES_POST_SCRIPT ""
|
|
DEPENDENCIES ${CODE_RELOCATION_DEP}
|
|
)
|
|
target_link_libraries_ifdef(CONFIG_NATIVE_LIBRARY ${ZEPHYR_LINK_STAGE_EXECUTABLE}
|
|
$<TARGET_PROPERTY:linker,no_position_independent>)
|
|
target_byproducts(TARGET ${ZEPHYR_LINK_STAGE_EXECUTABLE}
|
|
BYPRODUCTS ${PROJECT_BINARY_DIR}/${ZEPHYR_LINK_STAGE_EXECUTABLE}.map
|
|
)
|
|
set_property(TARGET ${ZEPHYR_LINK_STAGE_EXECUTABLE} PROPERTY LINK_DEPENDS ${PROJECT_BINARY_DIR}/${ZEPHYR_CURRENT_LINKER_CMD})
|
|
add_dependencies(${ZEPHYR_LINK_STAGE_EXECUTABLE} linker_zephyr_pre${ZEPHYR_CURRENT_LINKER_PASS}_script ${OFFSETS_LIB})
|
|
|
|
math(EXPR ZEPHYR_CURRENT_LINKER_PASS "1 + ${ZEPHYR_CURRENT_LINKER_PASS}")
|
|
endif()
|
|
|
|
set(ZEPHYR_CURRENT_LINKER_CMD linker_zephyr_pre${ZEPHYR_CURRENT_LINKER_PASS}.cmd)
|
|
set(ZEPHYR_LINK_STAGE_EXECUTABLE zephyr_pre${ZEPHYR_CURRENT_LINKER_PASS})
|
|
list(APPEND LINKER_PASS_${ZEPHYR_CURRENT_LINKER_PASS}_DEFINE "LINKER_ZEPHYR_PREBUILT")
|
|
|
|
if(CONFIG_GEN_ISR_TABLES)
|
|
if(CONFIG_GEN_SW_ISR_TABLE)
|
|
list(APPEND GEN_ISR_TABLE_EXTRA_ARG --sw-isr-table)
|
|
endif()
|
|
|
|
if(CONFIG_GEN_IRQ_VECTOR_TABLE)
|
|
list(APPEND GEN_ISR_TABLE_EXTRA_ARG --vector-table)
|
|
endif()
|
|
|
|
# isr_tables.c is generated from ${ZEPHYR_LINK_STAGE_EXECUTABLE} by
|
|
# gen_isr_tables.py
|
|
add_custom_command(
|
|
OUTPUT isr_tables.c isr_tables_vt.ld isr_tables_swi.ld
|
|
COMMAND ${PYTHON_EXECUTABLE}
|
|
${ZEPHYR_BASE}/scripts/build/gen_isr_tables.py
|
|
--output-source isr_tables.c
|
|
--linker-output-files isr_tables_vt.ld isr_tables_swi.ld
|
|
--kernel $<TARGET_FILE:${ZEPHYR_LINK_STAGE_EXECUTABLE}>
|
|
--intlist-section .intList
|
|
--intlist-section intList
|
|
$<$<BOOL:${CONFIG_BIG_ENDIAN}>:--big-endian>
|
|
$<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:--debug>
|
|
${GEN_ISR_TABLE_EXTRA_ARG}
|
|
DEPENDS ${ZEPHYR_LINK_STAGE_EXECUTABLE}
|
|
COMMAND_EXPAND_LISTS
|
|
)
|
|
set_property(GLOBAL APPEND PROPERTY GENERATED_KERNEL_SOURCE_FILES isr_tables.c)
|
|
endif()
|
|
|
|
if(CONFIG_USERSPACE)
|
|
set(KOBJECT_HASH_LIST kobject_hash.gperf)
|
|
set(KOBJECT_HASH_OUTPUT_SRC_PRE kobject_hash_preprocessed.c)
|
|
set(KOBJECT_HASH_OUTPUT_SRC kobject_hash.c)
|
|
set(KOBJECT_HASH_OUTPUT_OBJ_RENAMED kobject_hash_renamed.o)
|
|
|
|
# Essentially what we are doing here is extracting some information
|
|
# out of the nearly finished elf file, generating the source code
|
|
# for a hash table based on that information, and then compiling and
|
|
# linking the hash table back into a now even more nearly finished
|
|
# elf file. More information in gen_kobject_list.py --help.
|
|
|
|
# Use the script GEN_KOBJ_LIST to scan the kernel binary's
|
|
# (${ZEPHYR_LINK_STAGE_EXECUTABLE}) DWARF information to produce a table of kernel
|
|
# objects (KOBJECT_HASH_LIST) which we will then pass to gperf
|
|
add_custom_command(
|
|
OUTPUT ${KOBJECT_HASH_LIST}
|
|
COMMAND
|
|
${PYTHON_EXECUTABLE}
|
|
${GEN_KOBJ_LIST}
|
|
--kernel $<TARGET_FILE:${ZEPHYR_LINK_STAGE_EXECUTABLE}>
|
|
--gperf-output ${KOBJECT_HASH_LIST}
|
|
${gen_kobject_list_include_args}
|
|
$<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:--verbose>
|
|
DEPENDS
|
|
${ZEPHYR_LINK_STAGE_EXECUTABLE}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
)
|
|
add_custom_target(
|
|
kobj_hash_list
|
|
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_HASH_LIST}
|
|
)
|
|
|
|
# Use gperf to generate C code (KOBJECT_HASH_OUTPUT_SRC_PRE) which implements a
|
|
# perfect hashtable based on KOBJECT_HASH_LIST
|
|
add_custom_command(
|
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_HASH_OUTPUT_SRC_PRE}
|
|
COMMAND
|
|
${GPERF}
|
|
--output-file ${KOBJECT_HASH_OUTPUT_SRC_PRE}
|
|
--multiple-iterations 10
|
|
${KOBJECT_HASH_LIST}
|
|
DEPENDS kobj_hash_list ${KOBJECT_HASH_LIST}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
)
|
|
add_custom_target(
|
|
kobj_hash_output_src_pre
|
|
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_HASH_OUTPUT_SRC_PRE}
|
|
)
|
|
|
|
# For our purposes the code/data generated by gperf is not optimal.
|
|
#
|
|
# The script PROCESS_GPERF creates a new c file KOBJECT_HASH_OUTPUT_SRC based on
|
|
# KOBJECT_HASH_OUTPUT_SRC_PRE to greatly reduce the amount of code/data generated
|
|
# since we know we are always working with pointer values
|
|
add_custom_command(
|
|
OUTPUT ${KOBJECT_HASH_OUTPUT_SRC}
|
|
COMMAND
|
|
${PYTHON_EXECUTABLE}
|
|
${PROCESS_GPERF}
|
|
-i ${KOBJECT_HASH_OUTPUT_SRC_PRE}
|
|
-o ${KOBJECT_HASH_OUTPUT_SRC}
|
|
-p "struct k_object"
|
|
$<$<BOOL:${CMAKE_VERBOSE_MAKEFILE}>:--verbose>
|
|
DEPENDS kobj_hash_output_src_pre ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_HASH_OUTPUT_SRC_PRE}
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
)
|
|
add_custom_target(
|
|
kobj_hash_output_src
|
|
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_HASH_OUTPUT_SRC}
|
|
)
|
|
|
|
# We need precise control of where generated text/data ends up in the final
|
|
# kernel image. Disable function/data sections and use objcopy to move
|
|
# generated data into special section names
|
|
add_library(
|
|
kobj_hash_output_lib
|
|
OBJECT ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_HASH_OUTPUT_SRC}
|
|
)
|
|
|
|
set_source_files_properties(${KOBJECT_HASH_OUTPUT_SRC}
|
|
PROPERTIES COMPILE_FLAGS
|
|
"${NO_COVERAGE_FLAGS} -fno-function-sections -fno-data-sections")
|
|
|
|
target_compile_definitions(kobj_hash_output_lib
|
|
PRIVATE $<TARGET_PROPERTY:zephyr_interface,INTERFACE_COMPILE_DEFINITIONS>
|
|
)
|
|
|
|
target_include_directories(kobj_hash_output_lib
|
|
PUBLIC $<TARGET_PROPERTY:zephyr_interface,INTERFACE_INCLUDE_DIRECTORIES>
|
|
)
|
|
|
|
target_include_directories(kobj_hash_output_lib SYSTEM
|
|
PUBLIC $<TARGET_PROPERTY:zephyr_interface,INTERFACE_SYSTEM_INCLUDE_DIRECTORIES>
|
|
)
|
|
|
|
add_custom_command(
|
|
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_HASH_OUTPUT_OBJ_RENAMED}
|
|
COMMAND $<TARGET_PROPERTY:bintools,elfconvert_command>
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag>
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_section_rename>.literal=.kobject_data.literal
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_section_rename>.data=.kobject_data.data
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_section_rename>.sdata=.kobject_data.sdata
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_section_rename>.text=.kobject_data.text
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_section_rename>.rodata=.kobject_data.rodata
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_infile>$<TARGET_OBJECTS:kobj_hash_output_lib>
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_outfile>${KOBJECT_HASH_OUTPUT_OBJ_RENAMED}
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_final>
|
|
DEPENDS kobj_hash_output_lib $<TARGET_OBJECTS:kobj_hash_output_lib>
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
COMMAND_EXPAND_LISTS
|
|
)
|
|
add_custom_target(
|
|
kobj_hash_output_obj_renamed
|
|
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_HASH_OUTPUT_OBJ_RENAMED}
|
|
)
|
|
|
|
add_library(kobj_hash_output_obj_renamed_lib STATIC IMPORTED GLOBAL)
|
|
set_property(
|
|
TARGET kobj_hash_output_obj_renamed_lib
|
|
PROPERTY
|
|
IMPORTED_LOCATION ${CMAKE_CURRENT_BINARY_DIR}/${KOBJECT_HASH_OUTPUT_OBJ_RENAMED}
|
|
)
|
|
add_dependencies(
|
|
kobj_hash_output_obj_renamed_lib
|
|
kobj_hash_output_obj_renamed
|
|
)
|
|
|
|
set_property(
|
|
GLOBAL APPEND PROPERTY
|
|
GENERATED_KERNEL_OBJECT_FILES kobj_hash_output_obj_renamed_lib
|
|
)
|
|
endif()
|
|
|
|
configure_linker_script(
|
|
${ZEPHYR_CURRENT_LINKER_CMD}
|
|
"${LINKER_PASS_${ZEPHYR_CURRENT_LINKER_PASS}_DEFINE}"
|
|
${APP_SMEM_ALIGNED_DEP}
|
|
${KOBJECT_LINKER_DEP}
|
|
${CODE_RELOCATION_DEP}
|
|
zephyr_generated_headers
|
|
)
|
|
|
|
add_custom_target(
|
|
linker_zephyr_prebuilt_script_target
|
|
DEPENDS
|
|
${ZEPHYR_CURRENT_LINKER_CMD}
|
|
)
|
|
|
|
set_property(TARGET
|
|
linker_zephyr_prebuilt_script_target
|
|
PROPERTY INCLUDE_DIRECTORIES
|
|
${ZEPHYR_INCLUDE_DIRS}
|
|
)
|
|
|
|
# Read global variables into local variables
|
|
get_property(GASF GLOBAL PROPERTY GENERATED_APP_SOURCE_FILES)
|
|
get_property(GKOF GLOBAL PROPERTY GENERATED_KERNEL_OBJECT_FILES)
|
|
get_property(GKSF GLOBAL PROPERTY GENERATED_KERNEL_SOURCE_FILES)
|
|
|
|
# FIXME: Is there any way to get rid of empty_file.c?
|
|
add_executable( ${ZEPHYR_LINK_STAGE_EXECUTABLE} misc/empty_file.c ${GASF})
|
|
toolchain_ld_link_elf(
|
|
TARGET_ELF ${ZEPHYR_LINK_STAGE_EXECUTABLE}
|
|
OUTPUT_MAP ${PROJECT_BINARY_DIR}/${ZEPHYR_LINK_STAGE_EXECUTABLE}.map
|
|
LIBRARIES_PRE_SCRIPT ""
|
|
LINKER_SCRIPT ${PROJECT_BINARY_DIR}/${ZEPHYR_CURRENT_LINKER_CMD}
|
|
DEPENDENCIES ${CODE_RELOCATION_DEP}
|
|
)
|
|
target_link_libraries_ifdef(CONFIG_NATIVE_LIBRARY ${ZEPHYR_LINK_STAGE_EXECUTABLE}
|
|
$<TARGET_PROPERTY:linker,partial_linking>)
|
|
target_byproducts(TARGET ${ZEPHYR_LINK_STAGE_EXECUTABLE}
|
|
BYPRODUCTS ${PROJECT_BINARY_DIR}/${ZEPHYR_LINK_STAGE_EXECUTABLE}.map
|
|
)
|
|
set(BYPRODUCT_KERNEL_ELF_NAME "${PROJECT_BINARY_DIR}/${KERNEL_ELF_NAME}" CACHE FILEPATH "Kernel elf file" FORCE)
|
|
set_property(TARGET
|
|
${ZEPHYR_LINK_STAGE_EXECUTABLE}
|
|
PROPERTY LINK_DEPENDS ${PROJECT_BINARY_DIR}/${ZEPHYR_CURRENT_LINKER_CMD}
|
|
)
|
|
add_dependencies(
|
|
${ZEPHYR_LINK_STAGE_EXECUTABLE}
|
|
linker_zephyr_prebuilt_script_target
|
|
${OFFSETS_LIB}
|
|
)
|
|
|
|
set(generated_kernel_files ${GKSF} ${GKOF})
|
|
if(NOT generated_kernel_files)
|
|
# Use the prebuilt elf as the final elf since we don't have a
|
|
# generation stage.
|
|
set(logical_target_for_zephyr_elf ${ZEPHYR_LINK_STAGE_EXECUTABLE})
|
|
else()
|
|
# The final linker pass uses the same source linker script of the
|
|
# previous passes, but this time with a different output
|
|
# file and preprocessed with the define LINKER_ZEPHYR_FINAL.
|
|
configure_linker_script(
|
|
linker.cmd
|
|
"LINKER_ZEPHYR_FINAL"
|
|
${CODE_RELOCATION_DEP}
|
|
${ZEPHYR_LINK_STAGE_EXECUTABLE}
|
|
zephyr_generated_headers
|
|
)
|
|
|
|
add_custom_target(
|
|
linker_zephyr_final_script_target
|
|
DEPENDS
|
|
linker.cmd
|
|
)
|
|
set_property(TARGET
|
|
linker_zephyr_final_script_target
|
|
PROPERTY INCLUDE_DIRECTORIES
|
|
${ZEPHYR_INCLUDE_DIRS}
|
|
)
|
|
|
|
add_executable( ${ZEPHYR_FINAL_EXECUTABLE} misc/empty_file.c ${GASF} ${GKSF})
|
|
toolchain_ld_link_elf(
|
|
TARGET_ELF ${ZEPHYR_FINAL_EXECUTABLE}
|
|
OUTPUT_MAP ${PROJECT_BINARY_DIR}/${ZEPHYR_FINAL_EXECUTABLE}.map
|
|
LIBRARIES_PRE_SCRIPT ${GKOF}
|
|
LINKER_SCRIPT ${PROJECT_BINARY_DIR}/linker.cmd
|
|
LIBRARIES_POST_SCRIPT ""
|
|
DEPENDENCIES ${CODE_RELOCATION_DEP}
|
|
)
|
|
set_property(TARGET ${ZEPHYR_FINAL_EXECUTABLE} PROPERTY LINK_DEPENDS ${PROJECT_BINARY_DIR}/linker.cmd)
|
|
add_dependencies( ${ZEPHYR_FINAL_EXECUTABLE} linker_zephyr_final_script_target)
|
|
|
|
# Use the pass2 elf as the final elf
|
|
set(logical_target_for_zephyr_elf ${ZEPHYR_FINAL_EXECUTABLE})
|
|
endif()
|
|
|
|
# Export the variable to the application's scope to allow the
|
|
# application to know what the name of the final elf target is.
|
|
set(logical_target_for_zephyr_elf ${logical_target_for_zephyr_elf} PARENT_SCOPE)
|
|
|
|
# Override the base name of the last, "logical" .elf output (and last .map) so:
|
|
# 1. it doesn't depend on the number of passes above and the
|
|
# post_build_commands below can always find it no matter which is it;
|
|
# 2. it can be defined in Kconfig
|
|
set_target_properties(${logical_target_for_zephyr_elf} PROPERTIES OUTPUT_NAME ${KERNEL_NAME})
|
|
|
|
set(post_build_commands "")
|
|
set(post_build_byproducts "")
|
|
|
|
list(APPEND
|
|
post_build_commands
|
|
COMMAND
|
|
${CMAKE_COMMAND} -E copy ${logical_target_for_zephyr_elf}.map ${KERNEL_MAP_NAME}
|
|
)
|
|
list(APPEND post_build_byproducts ${KERNEL_MAP_NAME})
|
|
|
|
if(NOT CONFIG_BUILD_NO_GAP_FILL)
|
|
# Use ';' as separator to get proper space in resulting command.
|
|
set(GAP_FILL "$<TARGET_PROPERTY:bintools,elfconvert_flag_gapfill>0xff")
|
|
endif()
|
|
|
|
if(CONFIG_OUTPUT_PRINT_MEMORY_USAGE)
|
|
target_link_libraries(${logical_target_for_zephyr_elf} $<TARGET_PROPERTY:linker,memusage>)
|
|
|
|
get_property(memusage_build_command TARGET bintools PROPERTY memusage_command)
|
|
if(memusage_build_command)
|
|
# Note: The use of generator expressions allows downstream extensions to add/change the post build.
|
|
# Unfortunately, the BYPRODUCTS does not allow for generator expression, so question is if we
|
|
# should remove the downstream ability from start.
|
|
# Or fix the output name, by the use of `get_property`
|
|
list(APPEND
|
|
post_build_commands
|
|
COMMAND $<TARGET_PROPERTY:bintools,memusage_command>
|
|
$<TARGET_PROPERTY:bintools,memusage_flag>
|
|
$<TARGET_PROPERTY:bintools,memusage_infile>${KERNEL_ELF_NAME}
|
|
)
|
|
|
|
# For now, the byproduct can only be supported upstream on byproducts name,
|
|
# cause byproduct does not support generator expressions
|
|
get_property(memusage_byproducts TARGET bintools PROPERTY memusage_byproducts)
|
|
list(APPEND
|
|
post_build_byproducts
|
|
${memusage_byproducts}
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
if(CONFIG_BUILD_OUTPUT_ADJUST_LMA)
|
|
math(EXPR adjustment "${CONFIG_BUILD_OUTPUT_ADJUST_LMA}" OUTPUT_FORMAT DECIMAL)
|
|
list(APPEND
|
|
post_build_commands
|
|
COMMAND $<TARGET_PROPERTY:bintools,elfconvert_command>
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_final>
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_lma_adjust>${adjustment}
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_infile>${KERNEL_ELF_NAME}
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_outfile>${KERNEL_ELF_NAME}
|
|
)
|
|
endif()
|
|
|
|
if(NOT CONFIG_CPP_EXCEPTIONS)
|
|
set(eh_frame_section ".eh_frame")
|
|
else()
|
|
set(eh_frame_section "")
|
|
endif()
|
|
set(remove_sections_argument_list "")
|
|
foreach(section .comment COMMON ${eh_frame_section})
|
|
list(APPEND remove_sections_argument_list
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_section_remove>${section})
|
|
endforeach()
|
|
|
|
if(CONFIG_BUILD_OUTPUT_HEX OR BOARD_FLASH_RUNNER STREQUAL openocd)
|
|
get_property(elfconvert_formats TARGET bintools PROPERTY elfconvert_formats)
|
|
if(ihex IN_LIST elfconvert_formats)
|
|
list(APPEND
|
|
post_build_commands
|
|
COMMAND $<TARGET_PROPERTY:bintools,elfconvert_command>
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag>
|
|
${GAP_FILL}
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_outtarget>ihex
|
|
${remove_sections_argument_list}
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_infile>${KERNEL_ELF_NAME}
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_outfile>${KERNEL_HEX_NAME}
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_final>
|
|
)
|
|
list(APPEND
|
|
post_build_byproducts
|
|
${KERNEL_HEX_NAME}
|
|
)
|
|
set(BYPRODUCT_KERNEL_HEX_NAME "${PROJECT_BINARY_DIR}/${KERNEL_HEX_NAME}" CACHE FILEPATH "Kernel hex file" FORCE)
|
|
endif()
|
|
endif()
|
|
|
|
if(CONFIG_BUILD_OUTPUT_BIN)
|
|
get_property(elfconvert_formats TARGET bintools PROPERTY elfconvert_formats)
|
|
if(binary IN_LIST elfconvert_formats)
|
|
list(APPEND
|
|
post_build_commands
|
|
COMMAND $<TARGET_PROPERTY:bintools,elfconvert_command>
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag>
|
|
${GAP_FILL}
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_outtarget>binary
|
|
${remove_sections_argument_list}
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_infile>${KERNEL_ELF_NAME}
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_outfile>${KERNEL_BIN_NAME}
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_final>
|
|
)
|
|
list(APPEND
|
|
post_build_byproducts
|
|
${KERNEL_BIN_NAME}
|
|
)
|
|
set(BYPRODUCT_KERNEL_BIN_NAME "${PROJECT_BINARY_DIR}/${KERNEL_BIN_NAME}" CACHE FILEPATH "Kernel binary file" FORCE)
|
|
endif()
|
|
endif()
|
|
|
|
if(CONFIG_BUILD_OUTPUT_BIN AND CONFIG_BUILD_OUTPUT_UF2)
|
|
if(CONFIG_BUILD_OUTPUT_UF2_USE_FLASH_BASE)
|
|
set(flash_addr "${CONFIG_FLASH_BASE_ADDRESS}")
|
|
else()
|
|
set(flash_addr "${CONFIG_FLASH_LOAD_OFFSET}")
|
|
endif()
|
|
|
|
if(CONFIG_BUILD_OUTPUT_UF2_USE_FLASH_OFFSET)
|
|
# Note, the `+ 0` in formula below avoids errors in cases where a Kconfig
|
|
# variable is undefined and thus expands to nothing.
|
|
math(EXPR flash_addr
|
|
"${flash_addr} + ${CONFIG_FLASH_LOAD_OFFSET} + 0"
|
|
OUTPUT_FORMAT HEXADECIMAL
|
|
)
|
|
endif()
|
|
|
|
list(APPEND
|
|
post_build_commands
|
|
COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/scripts/build/uf2conv.py
|
|
-c
|
|
-f ${CONFIG_BUILD_OUTPUT_UF2_FAMILY_ID}
|
|
-b ${flash_addr}
|
|
-o ${KERNEL_UF2_NAME}
|
|
${KERNEL_BIN_NAME}
|
|
)
|
|
list(APPEND
|
|
post_build_byproducts
|
|
${KERNEL_UF2_NAME}
|
|
)
|
|
set(BYPRODUCT_KERNEL_UF2_NAME "${PROJECT_BINARY_DIR}/${KERNEL_UF2_NAME}" CACHE FILEPATH "Kernel uf2 file" FORCE)
|
|
endif()
|
|
|
|
if(CONFIG_BUILD_OUTPUT_META)
|
|
set(KERNEL_META_PATH ${PROJECT_BINARY_DIR}/${KERNEL_META_NAME} CACHE INTERNAL "")
|
|
|
|
list(APPEND
|
|
post_build_commands
|
|
COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/scripts/zephyr_module.py
|
|
${ZEPHYR_MODULES_ARG}
|
|
${EXTRA_ZEPHYR_MODULES_ARG}
|
|
--meta-out ${KERNEL_META_PATH}
|
|
--zephyr-base=${ZEPHYR_BASE}
|
|
$<$<BOOL:${CONFIG_BUILD_OUTPUT_META_STATE_PROPAGATE}>:--meta-state-propagate>
|
|
)
|
|
list(APPEND
|
|
post_build_byproducts
|
|
${KERNEL_META_PATH}
|
|
)
|
|
endif()
|
|
|
|
# Cleanup intermediate files
|
|
if(CONFIG_CLEANUP_INTERMEDIATE_FILES)
|
|
foreach(index RANGE ${ZEPHYR_CURRENT_LINKER_PASS})
|
|
# Those files can be very large in some cases, delete them as we do not need them.
|
|
list(APPEND
|
|
post_build_commands
|
|
COMMAND
|
|
${CMAKE_COMMAND} -E remove zephyr_pre${index}.elf
|
|
)
|
|
endforeach()
|
|
endif()
|
|
|
|
if(CONFIG_BUILD_OUTPUT_S19)
|
|
get_property(elfconvert_formats TARGET bintools PROPERTY elfconvert_formats)
|
|
if(srec IN_LIST elfconvert_formats)
|
|
# Should we print a warning if case the tools does not support converting to s19 ?
|
|
list(APPEND
|
|
post_build_commands
|
|
COMMAND $<TARGET_PROPERTY:bintools,elfconvert_command>
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag>
|
|
${GAP_FILL}
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_outtarget>srec
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_srec_len>1
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_infile>${KERNEL_ELF_NAME}
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_outfile>${KERNEL_S19_NAME}
|
|
$<TARGET_PROPERTY:bintools,elfconvert_flag_final>
|
|
)
|
|
list(APPEND
|
|
post_build_byproducts
|
|
${KERNEL_S19_NAME}
|
|
)
|
|
set(BYPRODUCT_KERNEL_S19_NAME "${PROJECT_BINARY_DIR}/${KERNEL_S19_NAME}" CACHE FILEPATH "Kernel s19 file" FORCE)
|
|
endif()
|
|
endif()
|
|
|
|
if(CONFIG_OUTPUT_DISASSEMBLY)
|
|
if(CONFIG_OUTPUT_DISASSEMBLE_ALL)
|
|
set(disassembly_type "$<TARGET_PROPERTY:bintools,disassembly_flag_all>")
|
|
else()
|
|
set(disassembly_type "$<TARGET_PROPERTY:bintools,disassembly_flag_inline_source>")
|
|
endif()
|
|
list(APPEND
|
|
post_build_commands
|
|
COMMAND $<TARGET_PROPERTY:bintools,disassembly_command>
|
|
$<TARGET_PROPERTY:bintools,disassembly_flag>
|
|
${disassembly_type}
|
|
$<TARGET_PROPERTY:bintools,disassembly_flag_infile>${KERNEL_ELF_NAME}
|
|
$<TARGET_PROPERTY:bintools,disassembly_flag_outfile>${KERNEL_LST_NAME}
|
|
$<TARGET_PROPERTY:bintools,disassembly_flag_final>
|
|
)
|
|
list(APPEND
|
|
post_build_byproducts
|
|
${KERNEL_LST_NAME}
|
|
)
|
|
endif()
|
|
|
|
if(CONFIG_OUTPUT_SYMBOLS)
|
|
list(APPEND
|
|
post_build_commands
|
|
COMMAND $<TARGET_PROPERTY:bintools,symbols_command>
|
|
$<TARGET_PROPERTY:bintools,symbols_flag>
|
|
$<TARGET_PROPERTY:bintools,symbols_infile>${KERNEL_ELF_NAME}
|
|
$<TARGET_PROPERTY:bintools,symbols_outfile>${KERNEL_SYMBOLS_NAME}
|
|
$<TARGET_PROPERTY:bintools,symbols_final>
|
|
)
|
|
list(APPEND
|
|
post_build_byproducts
|
|
${KERNEL_SYMBOLS_NAME}
|
|
)
|
|
endif()
|
|
|
|
if(CONFIG_OUTPUT_STAT)
|
|
list(APPEND
|
|
post_build_commands
|
|
COMMAND $<TARGET_PROPERTY:bintools,readelf_command>
|
|
$<TARGET_PROPERTY:bintools,readelf_flag>
|
|
$<TARGET_PROPERTY:bintools,readelf_flag_headers>
|
|
$<TARGET_PROPERTY:bintools,readelf_flag_infile>${KERNEL_ELF_NAME}
|
|
$<TARGET_PROPERTY:bintools,readelf_flag_outfile>${KERNEL_STAT_NAME}
|
|
$<TARGET_PROPERTY:bintools,readelf_flag_final>
|
|
)
|
|
list(APPEND
|
|
post_build_byproducts
|
|
${KERNEL_STAT_NAME}
|
|
)
|
|
endif()
|
|
|
|
if(CONFIG_BUILD_OUTPUT_STRIPPED)
|
|
list(APPEND
|
|
post_build_commands
|
|
COMMAND $<TARGET_PROPERTY:bintools,strip_command>
|
|
$<TARGET_PROPERTY:bintools,strip_flag>
|
|
$<TARGET_PROPERTY:bintools,strip_flag_all>
|
|
$<TARGET_PROPERTY:bintools,strip_flag_infile>${KERNEL_ELF_NAME}
|
|
$<TARGET_PROPERTY:bintools,strip_flag_outfile>${KERNEL_STRIP_NAME}
|
|
$<TARGET_PROPERTY:bintools,strip_flag_final>
|
|
)
|
|
list(APPEND
|
|
post_build_byproducts
|
|
${KERNEL_STRIP_NAME}
|
|
)
|
|
endif()
|
|
|
|
if(CONFIG_BUILD_OUTPUT_EXE)
|
|
if (NOT CONFIG_NATIVE_LIBRARY)
|
|
list(APPEND
|
|
post_build_commands
|
|
COMMAND
|
|
${CMAKE_COMMAND} -E copy ${KERNEL_ELF_NAME} ${KERNEL_EXE_NAME}
|
|
)
|
|
list(APPEND
|
|
post_build_byproducts
|
|
${KERNEL_EXE_NAME}
|
|
)
|
|
else()
|
|
if(CMAKE_GENERATOR STREQUAL "Unix Makefiles")
|
|
set(MAKE "${CMAKE_MAKE_PROGRAM}" CACHE FILEPATH "cmake defined make")
|
|
endif()
|
|
find_program(MAKE make REQUIRED)
|
|
add_custom_target(native_runner_executable
|
|
ALL
|
|
COMMENT "Building native simulator runner, and linking final executable"
|
|
COMMAND
|
|
${MAKE} -f ${ZEPHYR_BASE}/scripts/native_simulator/Makefile all --warn-undefined-variables
|
|
-r NSI_CONFIG_FILE=${APPLICATION_BINARY_DIR}/zephyr/NSI/nsi_config
|
|
# nsi_config is created by the board cmake file
|
|
DEPENDS ${logical_target_for_zephyr_elf}
|
|
BYPRODUCTS ${KERNEL_EXE_NAME}
|
|
)
|
|
endif()
|
|
set(BYPRODUCT_KERNEL_EXE_NAME "${PROJECT_BINARY_DIR}/${KERNEL_EXE_NAME}" CACHE FILEPATH "Kernel exe file" FORCE)
|
|
endif()
|
|
|
|
if(CONFIG_BUILD_OUTPUT_INFO_HEADER)
|
|
list(APPEND
|
|
post_build_commands
|
|
COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/scripts/build/gen_image_info.py
|
|
--elf-file=${KERNEL_ELF_NAME}
|
|
--header-file=${PROJECT_BINARY_DIR}/include/public/zephyr_image_info.h
|
|
$<$<BOOL:${adjustment}>:--adjusted-lma=${adjustment}>
|
|
)
|
|
list(APPEND
|
|
post_build_byproducts
|
|
${PROJECT_BINARY_DIR}/include/public/zephyr_image_info.h
|
|
)
|
|
endif()
|
|
|
|
if(NOT CMAKE_C_COMPILER_ID STREQUAL "ARMClang")
|
|
set(check_init_priorities_input
|
|
$<IF:$<TARGET_EXISTS:native_runner_executable>,${BYPRODUCT_KERNEL_EXE_NAME},${BYPRODUCT_KERNEL_ELF_NAME}>
|
|
)
|
|
set(check_init_priorities_command
|
|
${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/scripts/build/check_init_priorities.py
|
|
--elf-file=${check_init_priorities_input}
|
|
)
|
|
set(check_init_priorities_dependencies
|
|
${logical_target_for_zephyr_elf}
|
|
$<$<TARGET_EXISTS:native_runner_executable>:native_runner_executable>
|
|
)
|
|
|
|
if(CONFIG_CHECK_INIT_PRIORITIES)
|
|
add_custom_target(
|
|
check_init_priorities
|
|
ALL
|
|
COMMAND ${check_init_priorities_command}
|
|
DEPENDS ${check_init_priorities_dependencies}
|
|
)
|
|
endif()
|
|
|
|
add_custom_target(
|
|
initlevels
|
|
COMMAND ${check_init_priorities_command} --initlevels
|
|
DEPENDS ${check_init_priorities_dependencies}
|
|
USES_TERMINAL
|
|
)
|
|
endif()
|
|
|
|
# Generate signed (MCUboot or other) related artifacts as needed. Priority is:
|
|
# * Sysbuild (if set)
|
|
# * SIGNING_SCRIPT target property (if set)
|
|
# * MCUboot signing script (if MCUboot is enabled)
|
|
zephyr_get(signing_script VAR SIGNING_SCRIPT SYSBUILD)
|
|
|
|
if(NOT signing_script)
|
|
get_target_property(signing_script zephyr_property_target SIGNING_SCRIPT)
|
|
|
|
if(NOT signing_script AND CONFIG_BOOTLOADER_MCUBOOT)
|
|
set(signing_script ${CMAKE_CURRENT_LIST_DIR}/cmake/mcuboot.cmake)
|
|
endif()
|
|
endif()
|
|
|
|
# Include signing script, if set
|
|
if(signing_script)
|
|
message(STATUS "Including signing script: ${signing_script}")
|
|
|
|
include(${signing_script})
|
|
endif()
|
|
|
|
# Generate USB-C VIF policies in XML format
|
|
if (CONFIG_BUILD_OUTPUT_VIF)
|
|
include(${CMAKE_CURRENT_LIST_DIR}/cmake/vif.cmake)
|
|
endif()
|
|
|
|
get_property(extra_post_build_commands
|
|
GLOBAL PROPERTY
|
|
extra_post_build_commands
|
|
)
|
|
|
|
list(APPEND
|
|
post_build_commands
|
|
${extra_post_build_commands}
|
|
)
|
|
|
|
get_property(extra_post_build_byproducts
|
|
GLOBAL PROPERTY
|
|
extra_post_build_byproducts
|
|
)
|
|
|
|
list(APPEND
|
|
post_build_byproducts
|
|
${extra_post_build_byproducts}
|
|
)
|
|
|
|
if(CONFIG_LOG_DICTIONARY_DB)
|
|
set(log_dict_db_output --json=${PROJECT_BINARY_DIR}/log_dictionary.json)
|
|
elseif(CONFIG_LOG_MIPI_SYST_USE_CATALOG)
|
|
set(log_dict_db_output --syst=${PROJECT_BINARY_DIR}/mipi_syst_collateral.xml)
|
|
endif()
|
|
|
|
if(log_dict_db_output)
|
|
list(APPEND
|
|
post_build_commands
|
|
COMMAND
|
|
${PYTHON_EXECUTABLE}
|
|
${ZEPHYR_BASE}/scripts/logging/dictionary/database_gen.py
|
|
${KERNEL_ELF_NAME}
|
|
${log_dict_db_output}
|
|
--build-header ${PROJECT_BINARY_DIR}/include/generated/version.h
|
|
)
|
|
list(APPEND
|
|
post_build_byproducts
|
|
${LOG_DICT_DB_NAME}
|
|
)
|
|
|
|
unset(log_dict_db_output)
|
|
endif()
|
|
|
|
# Add post_build_commands to post-process the final .elf file produced by
|
|
# either the ZEPHYR_LINK_STAGE_EXECUTABLE or the KERNEL_ELF executable
|
|
# targets above.
|
|
add_custom_command(
|
|
TARGET ${logical_target_for_zephyr_elf}
|
|
POST_BUILD
|
|
COMMAND ${CMAKE_COMMAND} -E echo "Generating files from ${PROJECT_BINARY_DIR}/${KERNEL_ELF_NAME} for board: ${BOARD}"
|
|
${post_build_commands}
|
|
BYPRODUCTS
|
|
${post_build_byproducts}
|
|
COMMAND_EXPAND_LISTS
|
|
)
|
|
|
|
# To populate with hex files to merge, do the following:
|
|
# set_property(GLOBAL APPEND PROPERTY HEX_FILES_TO_MERGE ${my_local_list})
|
|
# Note that the zephyr.hex file will not be included automatically.
|
|
get_property(HEX_FILES_TO_MERGE GLOBAL PROPERTY HEX_FILES_TO_MERGE)
|
|
if(HEX_FILES_TO_MERGE)
|
|
# Merge in out-of-tree hex files.
|
|
set(MERGED_HEX_NAME merged.hex)
|
|
|
|
add_custom_command(
|
|
OUTPUT ${MERGED_HEX_NAME}
|
|
COMMAND
|
|
${PYTHON_EXECUTABLE}
|
|
${ZEPHYR_BASE}/scripts/build/mergehex.py
|
|
-o ${MERGED_HEX_NAME}
|
|
${HEX_FILES_TO_MERGE}
|
|
DEPENDS ${HEX_FILES_TO_MERGE} ${logical_target_for_zephyr_elf}
|
|
)
|
|
|
|
add_custom_target(mergehex ALL DEPENDS ${MERGED_HEX_NAME})
|
|
list(APPEND RUNNERS_DEPS mergehex)
|
|
|
|
message(VERBOSE "Merging hex files: ${HEX_FILES_TO_MERGE}")
|
|
endif()
|
|
|
|
if(SUPPORTED_EMU_PLATFORMS)
|
|
list(GET SUPPORTED_EMU_PLATFORMS 0 default_emu)
|
|
if(EXISTS ${ZEPHYR_BASE}/cmake/emu/${default_emu}.cmake)
|
|
add_custom_target(run DEPENDS run_${default_emu})
|
|
endif()
|
|
|
|
foreach(EMU_PLATFORM ${SUPPORTED_EMU_PLATFORMS})
|
|
if(EXISTS ${ZEPHYR_BASE}/cmake/emu/${EMU_PLATFORM}.cmake)
|
|
include(${ZEPHYR_BASE}/cmake/emu/${EMU_PLATFORM}.cmake)
|
|
endif()
|
|
endforeach()
|
|
|
|
if(TARGET debugserver_${default_emu})
|
|
add_custom_target(debugserver DEPENDS debugserver_${default_emu})
|
|
endif()
|
|
else()
|
|
add_custom_target(run
|
|
COMMAND
|
|
${CMAKE_COMMAND} -E echo
|
|
"==================================================="
|
|
"Emulation/Simulation not supported with this board."
|
|
"==================================================="
|
|
)
|
|
endif()
|
|
|
|
add_subdirectory(cmake/flash)
|
|
add_subdirectory(cmake/usage)
|
|
add_subdirectory(cmake/reports)
|
|
|
|
if(NOT CONFIG_TEST)
|
|
if(CONFIG_ASSERT AND (NOT CONFIG_FORCE_NO_ASSERT))
|
|
message(WARNING "__ASSERT() statements are globally ENABLED")
|
|
endif()
|
|
endif()
|
|
|
|
if(CONFIG_BOARD_DEPRECATED_RELEASE)
|
|
message(WARNING "
|
|
WARNING: The board '${BOARD}' is deprecated and will be
|
|
removed in version ${CONFIG_BOARD_DEPRECATED_RELEASE}"
|
|
)
|
|
endif()
|
|
|
|
if(CONFIG_SOC_DEPRECATED_RELEASE)
|
|
message(WARNING "
|
|
WARNING: The SoC '${SOC_NAME}' is deprecated and will be
|
|
removed in version ${CONFIG_SOC_DEPRECATED_RELEASE}"
|
|
)
|
|
endif()
|
|
|
|
# In CMake projects, 'CMAKE_BUILD_TYPE' usually determines the
|
|
# optimization flag, but in Zephyr it is determined through
|
|
# Kconfig. Here we give a warning when there is a mismatch between the
|
|
# two in case the user is not aware of this.
|
|
set(build_types None Debug Release RelWithDebInfo MinSizeRel)
|
|
|
|
if((CMAKE_BUILD_TYPE IN_LIST build_types) AND (NOT NO_BUILD_TYPE_WARNING))
|
|
string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_uppercase)
|
|
# The CMAKE_C_FLAGS_<build_type> is a string, so we do a regex to see if the
|
|
# optimization flag is present in that string.
|
|
# To avoid false-positive matches, the flag must either be matched first
|
|
# or last in string, or come after / followed by minimum a space.
|
|
if(NOT (CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE_uppercase} MATCHES "(^| )${OPTIMIZATION_FLAG}($| )"))
|
|
message(WARNING "
|
|
The CMake build type was set to '${CMAKE_BUILD_TYPE}', but the optimization flag was set to '${OPTIMIZATION_FLAG}'.
|
|
This may be intentional and the warning can be turned off by setting the CMake variable 'NO_BUILD_TYPE_WARNING'"
|
|
)
|
|
endif()
|
|
endif()
|
|
|
|
# @Intent: Set compiler specific flags for standard C/C++ includes
|
|
# Done at the very end, so any other system includes which may
|
|
# be added by Zephyr components were first in list.
|
|
# Note, the compile flags are moved, but the system include is still present here.
|
|
zephyr_compile_options($<TARGET_PROPERTY:compiler,nostdinc>)
|
|
target_include_directories(zephyr_interface SYSTEM INTERFACE $<TARGET_PROPERTY:compiler,nostdinc_include>)
|
|
|
|
if(CONFIG_MINIMAL_LIBCPP)
|
|
zephyr_compile_options($<$<COMPILE_LANGUAGE:CXX>:$<TARGET_PROPERTY:compiler-cpp,nostdincxx>>)
|
|
endif()
|
|
|
|
# Finally export all build flags from Zephyr
|
|
add_subdirectory_ifdef(
|
|
CONFIG_MAKEFILE_EXPORTS
|
|
cmake/makefile_exports
|
|
)
|