1#
2# Copyright 2019, Data61
3# Commonwealth Scientific and Industrial Research Organisation (CSIRO)
4# ABN 41 687 119 230.
5#
6# This software may be distributed and modified according to the terms of
7# the BSD 2-Clause license. Note that NO WARRANTY is provided.
8# See "LICENSE_BSD2.txt" for details.
9#
10# @TAG(DATA61_BSD)
11#
12
13cmake_minimum_required(VERSION 3.7.2)
14
15set(project_dir "${CMAKE_CURRENT_LIST_DIR}/../../")
16file(GLOB project_modules ${project_dir}/projects/*)
17list(
18    APPEND
19        CMAKE_MODULE_PATH
20        ${project_dir}/kernel
21        ${project_dir}/tools/seL4/cmake-tool/helpers/
22        ${project_dir}/tools/seL4/elfloader-tool/
23        ${project_modules}
24)
25
26set(NANOPB_SRC_ROOT_FOLDER "${project_dir}/tools/nanopb" CACHE INTERNAL "")
27set(BBL_PATH ${project_dir}/tools/riscv-pk CACHE STRING "BBL Folder location")
28
29set(SEL4_CONFIG_DEFAULT_ADVANCED ON)
30
31include(application_settings)
32
33include(${CMAKE_CURRENT_LIST_DIR}/easy-settings.cmake)
34
35correct_platform_strings()
36
37find_package(seL4 REQUIRED)
38sel4_configure_platform_settings()
39
40set(valid_platforms ${KernelPlatform_all_strings} ${correct_platform_strings_platform_aliases})
41set_property(CACHE PLATFORM PROPERTY STRINGS ${valid_platforms})
42if(NOT "${PLATFORM}" IN_LIST valid_platforms)
43    message(FATAL_ERROR "Invalid PLATFORM selected: \"${PLATFORM}\"
44Valid platforms are: \"${valid_platforms}\"")
45endif()
46
47# Declare a cache variable that enables/disablings the forcing of cache variables to
48# the specific test values. By default it is disabled
49set(Sel4testAllowSettingsOverride OFF CACHE BOOL "Allow user to override configuration settings")
50if(NOT Sel4testAllowSettingsOverride)
51    # We use 'FORCE' when settings these values instead of 'INTERNAL' so that they still appear
52    # in the cmake-gui to prevent excessively confusing users
53    if(ARM_HYP)
54        set(KernelArmHypervisorSupport ON CACHE BOOL "" FORCE)
55    endif()
56
57    if(KernelPlatformQEMUArmVirt)
58        set(SIMULATION ON CACHE BOOL "" FORCE)
59    endif()
60
61    if(SIMULATION)
62        ApplyCommonSimulationSettings(${KernelArch})
63    else()
64        if(KernelArchX86)
65            set(KernelIOMMU ON CACHE BOOL "" FORCE)
66        endif()
67    endif()
68
69    # sel4test specific config settings.
70
71    if(SIMULATION)
72        set(Sel4testHaveCache OFF CACHE BOOL "" FORCE)
73    else()
74        set(Sel4testHaveCache ON CACHE BOOL "" FORCE)
75    endif()
76
77    if(KernelPlatformQEMUArmVirt)
78        if(KernelArmExportPCNTUser AND KernelArmExportPTMRUser)
79            set(Sel4testHaveTimer ON CACHE BOOL "" FORCE)
80        else()
81            set(Sel4testHaveTimer OFF CACHE BOOL "" FORCE)
82        endif()
83    elseif(
84        KernelPlatformZynqmp
85        OR KernelPlatformPolarfire
86        OR (SIMULATION AND (KernelArchRiscV OR KernelArchARM))
87    )
88        # Frequency settings of the ZynqMP make the ltimer tests problematic
89        # Polarfire does not have a complete ltimer implementation
90        set(Sel4testHaveTimer OFF CACHE BOOL "" FORCE)
91    else()
92        set(Sel4testHaveTimer ON CACHE BOOL "" FORCE)
93    endif()
94
95    # Check the hardware debug API non simulated (except for ia32, which can be simulated),
96    # or platforms that don't support it.
97    if(((NOT SIMULATION) OR KernelSel4ArchIA32) AND NOT KernelHardwareDebugAPIUnsupported)
98        set(HardwareDebugAPI ON CACHE BOOL "" FORCE)
99    else()
100        set(HardwareDebugAPI OFF CACHE BOOL "" FORCE)
101    endif()
102
103    ApplyCommonReleaseVerificationSettings(${RELEASE} ${VERIFICATION})
104
105    if(BAMBOO)
106        set(LibSel4TestPrintXML ON CACHE BOOL "" FORCE)
107    else()
108        set(LibSel4TestPrintXML OFF CACHE BOOL "" FORCE)
109    endif()
110
111    if(DOMAINS)
112        set(KernelNumDomains 16 CACHE STRING "" FORCE)
113    else()
114        set(KernelNumDomains 1 CACHE STRING "" FORCE)
115    endif()
116
117    if(SMP)
118        if(NUM_NODES MATCHES "^[0-9]+$")
119            set(KernelMaxNumNodes ${NUM_NODES} CACHE STRING "" FORCE)
120        else()
121            set(KernelMaxNumNodes 4 CACHE STRING "" FORCE)
122        endif()
123    else()
124        set(KernelMaxNumNodes 1 CACHE STRING "" FORCE)
125    endif()
126
127    if(MCS)
128        set(KernelIsMCS ON CACHE BOOL "" FORCE)
129    else()
130        set(KernelIsMCS OFF CACHE BOOL "" FORCE)
131    endif()
132
133endif()
134