blob: f0e05ff2051d2d7505107c334da621b766376576 [file] [log] [blame]
#
# Copyright 2020, Data61, CSIRO (ABN 41 687 119 230)
#
# SPDX-License-Identifier: BSD-2-Clause
#
function(check_arch_clang)
if("${KernelSel4Arch}" STREQUAL "ia32")
string(
REGEX
MATCH
"^x86_64"
correct_triple
${TRIPLE}
)
elseif("${KernelSel4Arch}" STREQUAL "x86_64")
string(
REGEX
MATCH
"^x86_64"
correct_triple
${TRIPLE}
)
elseif("${KernelSel4Arch}" STREQUAL "aarch32" OR "${KernelSel4Arch}" STREQUAL "arm_hyp")
string(
REGEX
MATCH
"^arm"
correct_triple
${TRIPLE}
)
elseif("${KernelSel4Arch}" STREQUAL "aarch64")
string(
REGEX
MATCH
"^aarch64"
correct_triple
${TRIPLE}
)
elseif("${KernelSel4Arch}" STREQUAL "riscv32")
string(
REGEX
MATCH
"^riscv(32|64)"
correct_triple
${TRIPLE}
)
elseif("${KernelSel4Arch}" STREQUAL "riscv64")
string(
REGEX
MATCH
"^riscv64"
correct_triple
${TRIPLE}
)
else()
message(SEND_ERROR "KernelSel4Arch is not set to a valid arch")
endif()
if(NOT correct_triple)
message(SEND_ERROR "Clang Triple: ${TRIPLE} isn't for seL4_arch: ${KernelSel4Arch}")
endif()
endfunction()
function(check_arch_gcc)
if("${KernelSel4Arch}" STREQUAL "ia32")
set(compiler_variable "defined(__i386)")
elseif("${KernelSel4Arch}" STREQUAL "x86_64")
set(compiler_variable "defined(__x86_64)")
elseif("${KernelSel4Arch}" STREQUAL "aarch32" OR "${KernelSel4Arch}" STREQUAL "arm_hyp")
if(KernelArchArmV7a OR KernelArchArmV7ve)
set(compiler_variable "defined(__ARM_ARCH_7A__)")
elseif(KernelArchArmV8a)
set(compiler_variable "defined(__ARM_ARCH_8A__)")
endif()
elseif("${KernelSel4Arch}" STREQUAL "aarch64")
set(compiler_variable "defined(__aarch64__)")
elseif("${KernelSel4Arch}" STREQUAL "riscv32")
set(compiler_variable "__riscv_xlen == 32")
elseif("${KernelSel4Arch}" STREQUAL "riscv64")
set(compiler_variable "__riscv_xlen == 64")
else()
message(SEND_ERROR "KernelSel4Arch is not set to a valid arch")
endif()
set(arch_test "
#if ${compiler_variable}
int main() {return 0;}
#else
#error Invalid arch
#endif
")
check_c_source_compiles("${arch_test}" compiler_arch_test)
if(NOT compiler_arch_test)
message(SEND_ERROR "Compiler: ${CMAKE_C_COMPILER} isn't for seL4_arch: ${KernelSel4Arch}")
endif()
endfunction()
function(check_arch_compiler)
if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
check_arch_clang()
else()
check_arch_gcc()
endif()
endfunction()