cmake: rework macro declare_seL4_arch()

Support multiple architectures as parameter.

Signed-off-by: Axel Heider <axelheider@gmx.de>
This commit is contained in:
Axel Heider
2023-03-25 18:35:05 +01:00
committed by Indan Zupancic
parent 7d93471e9c
commit d2027a1fb9
13 changed files with 50 additions and 119 deletions

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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()

View File

@@ -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)

View File

@@ -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(

View File

@@ -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)

View File

@@ -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)

View File

@@ -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")

View File

@@ -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)

View File

@@ -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)