diff --git a/configs/seL4Config.cmake b/configs/seL4Config.cmake index 182d73e83..c3a4d5df9 100644 --- a/configs/seL4Config.cmake +++ b/configs/seL4Config.cmake @@ -18,12 +18,31 @@ set(KernelDTSList "") include(${KERNEL_ROOT_DIR}/tools/internal.cmake) include(${KERNEL_ROOT_DIR}/tools/helpers.cmake) -# Create and set all of the Kernel config options that can be derived from the -# seL4 arch which is one of the following: -# aarch32, aarch64, arm_hyp, riscv32, riscv64, x86_64, ia32 -# This macro is intended to be called from within a platform config. -macro(declare_seL4_arch sel4_arch) - set(KernelSel4Arch "${sel4_arch}" CACHE STRING "" FORCE) +# helper macro to unify messages printed output +# Usage example: print_message_multiple_options_helper("architectures" aarch32) +macro(print_message_multiple_options_helper str_type default_str) + message(STATUS "platform ${KernelPlatform} supports multiple ${str_type}, none was given") + message(STATUS " defaulting to: ${default_str}") +endmacro() + +# This macro is used by platforms to declare which seL4 architecture(s) they +# support. It takes a list and sets up the one selected by KernelSel4Arch. If +# KernelSel4Arch is not set, the architecture specified by the first list +# element is used. +# Usage example: declare_seL4_arch("aarch64" "aarch32") +macro(declare_seL4_arch) + # Since this is a macro and not a function, ARGV is not a real variable. One + # must be created to be able iterate over it. + set(_arch_list "${ARGV}") + if(NOT KernelSel4Arch) + # Use first architecture from list as default. + list(GET _arch_list 0 _default_KernelSel4Arch) + print_message_multiple_options_helper("architectures" "${_default_KernelSel4Arch}") + set(KernelSel4Arch "${_default_KernelSel4Arch}" CACHE STRING "" FORCE) + elseif(NOT "${KernelSel4Arch}" IN_LIST _arch_list) + message(FATAL_ERROR "KernelSel4Arch '${KernelSel4Arch}' not in '${_arch_list}'") + endif() + config_choice( KernelSel4Arch SEL4_ARCH @@ -63,16 +82,8 @@ macro(declare_seL4_arch sel4_arch) set(Kernel64 ON CACHE INTERNAL "") set(Kernel32 OFF CACHE INTERNAL "") else() - message(FATAL_ERROR "unsupported seL4 architecture: '${sel4_arch}'") + message(FATAL_ERROR "unsupported seL4 architecture: '${KernelSel4Arch}'") endif() - -endmacro() - -# helper macro to unify messages printed output -# Usage example: print_message_multiple_options_helper("architectures" aarch32) -macro(print_message_multiple_options_helper str_type default_str) - message(STATUS "platform ${KernelPlatform} supports multiple ${str_type}, none was given") - message(STATUS " defaulting to: ${default_str}") endmacro() # Register a platform's config options to be set if it is selected. @@ -105,14 +116,6 @@ macro(check_platform_and_fallback_to_default var_cmake_kernel_plat default_sub_p endif() endmacro() -# helper macro that prints a message that no architecture is specified and -# the default architecture will be used -# Usage example: fallback_declare_seL4_arch_default(aarch32) -macro(fallback_declare_seL4_arch_default default_arch) - print_message_multiple_options_helper("architectures" ${default_arch}) - declare_seL4_arch(${default_arch}) -endmacro() - # CLK_SHIFT and CLK_MAGIC are generated from tools/reciprocal.py # based on the TIMER_CLK_HZ to simulate division. # This could be moved to a cmake function diff --git a/src/plat/bcm2711/config.cmake b/src/plat/bcm2711/config.cmake index 544a3acf0..d66df9de9 100644 --- a/src/plat/bcm2711/config.cmake +++ b/src/plat/bcm2711/config.cmake @@ -10,14 +10,7 @@ cmake_minimum_required(VERSION 3.7.2) declare_platform(bcm2711 KernelPlatformRpi4 PLAT_BCM2711 KernelArchARM) if(KernelPlatformRpi4) - if("${KernelSel4Arch}" STREQUAL aarch32) - declare_seL4_arch(aarch32) - elseif("${KernelSel4Arch}" STREQUAL aarch64) - declare_seL4_arch(aarch64) - else() - # set aarch64 as default for RPi4 - fallback_declare_seL4_arch_default(aarch64) - endif() + declare_seL4_arch(aarch64 aarch32) set(KernelArmCortexA72 ON) set(KernelArchArmV8a ON) config_set(KernelARMPlatform ARM_PLAT rpi4) diff --git a/src/plat/bcm2837/config.cmake b/src/plat/bcm2837/config.cmake index cb5879e0e..56d0098ed 100644 --- a/src/plat/bcm2837/config.cmake +++ b/src/plat/bcm2837/config.cmake @@ -9,13 +9,8 @@ cmake_minimum_required(VERSION 3.7.2) declare_platform(bcm2837 KernelPlatformRpi3 PLAT_BCM2837 KernelArchARM) if(KernelPlatformRpi3) - if("${KernelSel4Arch}" STREQUAL aarch32) - declare_seL4_arch(aarch32) - elseif("${KernelSel4Arch}" STREQUAL aarch64) - declare_seL4_arch(aarch64) - else() - fallback_declare_seL4_arch_default(aarch32) - endif() + # For historical reasons, RasPi3 defaults to aarch32. + declare_seL4_arch(aarch32 aarch64) set(KernelArmCortexA53 ON) set(KernelArchArmV8a ON) config_set(KernelARMPlatform ARM_PLAT rpi3) diff --git a/src/plat/exynos5/config.cmake b/src/plat/exynos5/config.cmake index d6214ca3e..dbb6ec02e 100644 --- a/src/plat/exynos5/config.cmake +++ b/src/plat/exynos5/config.cmake @@ -23,13 +23,7 @@ foreach(config IN LISTS cmake_configs) endforeach() unset(KernelPlatExynos54xx CACHE) if(KernelPlatExynos5) - if("${KernelSel4Arch}" STREQUAL aarch32) - declare_seL4_arch(aarch32) - elseif("${KernelSel4Arch}" STREQUAL arm_hyp) - declare_seL4_arch(arm_hyp) - else() - fallback_declare_seL4_arch_default(aarch32) - endif() + declare_seL4_arch(aarch32 arm_hyp) set(KernelArmCortexA15 ON) set(KernelArchArmV7ve ON) # v7ve is a superset of v7a, so we enable that as well diff --git a/src/plat/hikey/config.cmake b/src/plat/hikey/config.cmake index 666ca8093..3eff84c5d 100644 --- a/src/plat/hikey/config.cmake +++ b/src/plat/hikey/config.cmake @@ -9,13 +9,8 @@ cmake_minimum_required(VERSION 3.7.2) declare_platform(hikey KernelPlatformHikey PLAT_HIKEY KernelArchARM) if(KernelPlatformHikey) - if("${KernelSel4Arch}" STREQUAL aarch32) - declare_seL4_arch(aarch32) - elseif("${KernelSel4Arch}" STREQUAL aarch64) - declare_seL4_arch(aarch64) - else() - fallback_declare_seL4_arch_default(aarch32) - endif() + # For historical reasons, Hikey defaults to aarch32 + declare_seL4_arch(aarch32 aarch64) set(KernelArmCortexA53 ON) set(KernelArchArmV8a ON) config_set(KernelARMPlatform ARM_PLAT hikey) diff --git a/src/plat/imx8m-evk/config.cmake b/src/plat/imx8m-evk/config.cmake index 2105d43a7..fb08fa96e 100644 --- a/src/plat/imx8m-evk/config.cmake +++ b/src/plat/imx8m-evk/config.cmake @@ -11,13 +11,7 @@ declare_platform(imx8mq-evk KernelPlatformImx8mq-evk PLAT_IMX8MQ_EVK KernelArchA declare_platform(imx8mm-evk KernelPlatformImx8mm-evk PLAT_IMX8MM_EVK KernelArchARM) if(KernelPlatformImx8mq-evk OR KernelPlatformImx8mm-evk) - if("${KernelSel4Arch}" STREQUAL aarch32) - declare_seL4_arch(aarch32) - elseif("${KernelSel4Arch}" STREQUAL aarch64) - declare_seL4_arch(aarch64) - else() - fallback_declare_seL4_arch_default(aarch64) - endif() + declare_seL4_arch(aarch64 aarch32) if(KernelPlatformImx8mq-evk) config_set(KernelPlatImx8mq PLAT_IMX8MQ ON) endif() diff --git a/src/plat/maaxboard/config.cmake b/src/plat/maaxboard/config.cmake index ac076edea..32b1f17e0 100644 --- a/src/plat/maaxboard/config.cmake +++ b/src/plat/maaxboard/config.cmake @@ -10,14 +10,7 @@ cmake_minimum_required(VERSION 3.7.2) declare_platform(maaxboard KernelPlatformMaaxboard PLAT_MAAXBOARD KernelArchARM) if(KernelPlatformMaaxboard) - if("${KernelSel4Arch}" STREQUAL aarch32) - declare_seL4_arch(aarch32) - elseif("${KernelSel4Arch}" STREQUAL aarch64) - declare_seL4_arch(aarch64) - else() - fallback_declare_seL4_arch_default(aarch64) - endif() - + declare_seL4_arch(aarch64 aarch32) config_set(KernelPlatImx8mq PLAT_IMX8MQ ON) set(KernelArmCortexA53 ON) diff --git a/src/plat/pc99/config.cmake b/src/plat/pc99/config.cmake index c07def378..aebdbe94e 100644 --- a/src/plat/pc99/config.cmake +++ b/src/plat/pc99/config.cmake @@ -9,14 +9,7 @@ cmake_minimum_required(VERSION 3.7.2) declare_platform(pc99 KernelPlatPC99 PLAT_PC99 KernelArchX86) if(KernelPlatPC99) - if("${KernelSel4Arch}" STREQUAL ia32) - declare_seL4_arch(ia32) - elseif("${KernelSel4Arch}" STREQUAL x86_64) - declare_seL4_arch(x86_64) - else() - fallback_declare_seL4_arch_default(x86_64) - endif() - + declare_seL4_arch(x86_64 ia32) endif() add_sources( diff --git a/src/plat/qemu-arm-virt/config.cmake b/src/plat/qemu-arm-virt/config.cmake index ff8a6f08f..0e106d488 100644 --- a/src/plat/qemu-arm-virt/config.cmake +++ b/src/plat/qemu-arm-virt/config.cmake @@ -12,18 +12,18 @@ declare_platform(qemu-arm-virt KernelPlatformQEMUArmVirt PLAT_QEMU_ARM_VIRT Kern set(qemu_user_top 0xa0000000) macro(setup_qemu_armv7) - if("${KernelSel4Arch}" STREQUAL aarch32) - declare_seL4_arch(aarch32) - elseif("${KernelSel4Arch}" STREQUAL arm_hyp) - declare_seL4_arch(arm_hyp) - else() - fallback_declare_seL4_arch_default(aarch32) - endif() - if(KernelSel4ArchArmHyp) - set(qemu_user_top 0xe0000000) - endif() + cmake_parse_arguments(ARMV7_OPTIONS "ve" "" "") set(QEMU_ARCH "arm") set(KernelArchArmV7a ON) + if(ARMV7_OPTIONS_ve) + declare_seL4_arch(aarch32 arm_hyp) + set(KernelArchArmV7ve ON) + if(KernelSel4ArchArmHyp) + set(qemu_user_top 0xe0000000) + endif() + else() + declare_seL4_arch(aarch32) + endif() endmacro() macro(setup_qemu_armv8) @@ -43,9 +43,8 @@ if(KernelPlatformQEMUArmVirt) setup_qemu_armv7() set(KernelArmCortexA7 ON) elseif("${ARM_CPU}" STREQUAL "cortex-a15") - setup_qemu_armv7() + setup_qemu_armv7(ve) set(KernelArmCortexA15 ON) - set(KernelArchArmV7ve ON) elseif("${ARM_CPU}" STREQUAL "cortex-a53") setup_qemu_armv8() set(KernelArmCortexA53 ON) diff --git a/src/plat/qemu-riscv-virt/config.cmake b/src/plat/qemu-riscv-virt/config.cmake index 282f7e955..f8fcf5fc4 100644 --- a/src/plat/qemu-riscv-virt/config.cmake +++ b/src/plat/qemu-riscv-virt/config.cmake @@ -11,14 +11,7 @@ declare_platform(qemu-riscv-virt KernelPlatformQEMURiscVVirt PLAT_QEMU_RISCV_VIR if(KernelPlatformQEMURiscVVirt) - if("${KernelSel4Arch}" STREQUAL riscv64) - declare_seL4_arch(riscv64) - elseif("${KernelSel4Arch}" STREQUAL riscv32) - declare_seL4_arch(riscv32) # This is still untested - else() - fallback_declare_seL4_arch_default(riscv64) - endif() - + declare_seL4_arch(riscv64 riscv32) config_set(KernelOpenSBIPlatform OPENSBI_PLATFORM "generic") config_set(KernelPlatformFirstHartID FIRST_HART_ID 0) set(KernelRiscvUseClintMtime ON) diff --git a/src/plat/spike/config.cmake b/src/plat/spike/config.cmake index 33c3213dd..ad7e030af 100644 --- a/src/plat/spike/config.cmake +++ b/src/plat/spike/config.cmake @@ -11,13 +11,7 @@ cmake_minimum_required(VERSION 3.7.2) declare_platform(spike KernelPlatformSpike PLAT_SPIKE KernelArchRiscV) if(KernelPlatformSpike) - if("${KernelSel4Arch}" STREQUAL riscv32) - declare_seL4_arch(riscv32) - elseif("${KernelSel4Arch}" STREQUAL riscv64) - declare_seL4_arch(riscv64) - else() - fallback_declare_seL4_arch_default(riscv64) - endif() + declare_seL4_arch(riscv64 riscv32) config_set(KernelRiscVPlatform RISCV_PLAT "spike") config_set(KernelPlatformFirstHartID FIRST_HART_ID 0) config_set(KernelOpenSBIPlatform OPENSBI_PLATFORM "generic") diff --git a/src/plat/tk1/config.cmake b/src/plat/tk1/config.cmake index 21d1219ac..85b0fed67 100644 --- a/src/plat/tk1/config.cmake +++ b/src/plat/tk1/config.cmake @@ -9,13 +9,7 @@ cmake_minimum_required(VERSION 3.7.2) declare_platform(tk1 KernelPlatformTK1 PLAT_TK1 "KernelSel4ArchAarch32 OR KernelSel4ArchArmHyp") if(KernelPlatformTK1) - if("${KernelSel4Arch}" STREQUAL aarch32) - declare_seL4_arch(aarch32) - elseif("${KernelSel4Arch}" STREQUAL arm_hyp) - declare_seL4_arch(arm_hyp) - else() - fallback_declare_seL4_arch_default(aarch32) - endif() + declare_seL4_arch(aarch32 arm_hyp) set(KernelArmCortexA15 ON) set(KernelArchArmV7a ON) set(KernelArchArmV7ve ON) diff --git a/src/plat/zynqmp/config.cmake b/src/plat/zynqmp/config.cmake index e18be05a9..67d839e55 100644 --- a/src/plat/zynqmp/config.cmake +++ b/src/plat/zynqmp/config.cmake @@ -22,16 +22,7 @@ endforeach() if(KernelPlatformZynqmp) set(KernelHardwareDebugAPIUnsupported ON CACHE INTERNAL "") - if("${KernelSel4Arch}" STREQUAL aarch32) - declare_seL4_arch(aarch32) - elseif("${KernelSel4Arch}" STREQUAL aarch64) - declare_seL4_arch(aarch64) - elseif("${KernelSel4Arch}" STREQUAL arm_hyp) - declare_seL4_arch(arm_hyp) - else() - fallback_declare_seL4_arch_default(aarch64) - endif() - + declare_seL4_arch(aarch64 aarch32 arm_hyp) check_platform_and_fallback_to_default(KernelARMPlatform "zcu102") list(FIND plat_lists ${KernelARMPlatform} index)