forked from Imagelibrary/seL4
cmake: rework macro declare_seL4_arch()
Support multiple architectures as parameter. Signed-off-by: Axel Heider <axelheider@gmx.de>
This commit is contained in:
committed by
Indan Zupancic
parent
7d93471e9c
commit
d2027a1fb9
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user