# # SPDX-License-Identifier: BSD-3-Clause # SPDX-FileCopyrightText: Copyright TF-RMM Contributors. # # # Common config options # arm_config_option( NAME MAX_CPUS HELP "Maximum number of CPUs supported by RMM" TYPE STRING DEFAULT 16) # # The RMM is mapped with 4K pages, and all RMM APIs use the same granularity. # arm_config_option( NAME GRANULE_SHIFT HELP "The shift value of granule size. i.e: GRANULE_SIZE == 1 << GRANULE_SHIFT" TYPE STRING DEFAULT 12) # # RMM_MAX_GRANULES. Maximum number of memory granules supported. # arm_config_option( NAME RMM_MAX_GRANULES HELP "Maximum number of memory granules supported" TYPE STRING DEFAULT 0x0) # # RMM_MAX_COH_GRANULES. Maximum number of coherent device granules supported. # arm_config_option( NAME RMM_MAX_COH_GRANULES HELP "Maximum number of coherent device granules supported" TYPE STRING DEFAULT 1) # # RMM_MAX_NCOH_GRANULES. Maximum number of non-coherent device granules supported. # arm_config_option( NAME RMM_MAX_NCOH_GRANULES HELP "Maximum number of non-coherent device granules supported" TYPE STRING DEFAULT 1) arm_config_option( NAME RMM_NUM_PAGES_PER_STACK HELP "Number of pages to use per CPU stack" TYPE STRING DEFAULT 5 ADVANCED) arm_config_option( NAME RMM_DOCS HELP "RMM Documentation build" TYPE BOOL DEFAULT OFF) # TODO: Move to lib/arch once MbedTLS compilation is moved to build phase. arm_config_option( NAME RMM_FPU_USE_AT_REL2 HELP "Enable Advanced SIMD support in RMM" TYPE BOOL DEFAULT OFF) # # The number of 4K pages allocated for attestation buffer. # arm_config_option( NAME RMM_CCA_TOKEN_BUFFER HELP "Number of pages to allocate in Aux granules for Realm CCA token" TYPE STRING DEFAULT 1) arm_config_option( NAME RMM_V1_1 HELP "Enable v1.1 features in RMM (experimental)" TYPE BOOL DEFAULT OFF) arm_config_option( NAME ATTEST_EL3_TOKEN_SIGN HELP "Use EL3 service to sign realm attestation token." TYPE BOOL DEFAULT OFF ADVANCED) # # Enable the Stack protection compiler flag. # Having the PAUTH and BTI feature enabled makes the software-based # stack frame canary redundant. Enabling the software canary could # have a performance degradation. Hence the default is OFF. # arm_config_option( NAME STACK_PROTECTOR HELP "Enable Stack Protection Compiler Flags" string OFF) # # Introduce a pseudo-library purely for applying flags to RMM's libraries. # This is applied to any targets created after this point. # add_library(rmm-common INTERFACE) target_compile_definitions(rmm-common INTERFACE "$<$:DEBUG>") if(MAX_CPUS EQUAL 0x0) message(FATAL_ERROR "MAX_CPUS is not initialized") endif() target_compile_definitions(rmm-common INTERFACE "MAX_CPUS=${MAX_CPUS}U") if(NOT(GRANULE_SHIFT EQUAL 12)) message(FATAL_ERROR "GRANULE_SHIFT is not initialized correctly") endif() target_compile_definitions(rmm-common INTERFACE "GRANULE_SHIFT=U(${GRANULE_SHIFT})") if (RMM_MAX_GRANULES EQUAL 0x0) message (FATAL_ERROR "RMM_MAX_GRANULES not configured") endif() target_compile_definitions(rmm-common INTERFACE "RMM_MAX_GRANULES=U(${RMM_MAX_GRANULES})") if (RMM_MAX_COH_GRANULES EQUAL 0x0) message (FATAL_ERROR "RMM_MAX_COH_GRANULES cannot be set to 0") endif() target_compile_definitions(rmm-common INTERFACE "RMM_MAX_COH_GRANULES=U(${RMM_MAX_COH_GRANULES})") if (RMM_MAX_NCOH_GRANULES EQUAL 0x0) message (FATAL_ERROR "RMM_MAX_NCOH_GRANULES cannot be set to 0") endif() target_compile_definitions(rmm-common INTERFACE "RMM_MAX_NCOH_GRANULES=U(${RMM_MAX_NCOH_GRANULES})") target_compile_definitions(rmm-common INTERFACE "RMM_NUM_PAGES_PER_STACK=UL(${RMM_NUM_PAGES_PER_STACK})") # Set stack protector option. if(STACK_PROTECTOR) target_compile_definitions(rmm-common INTERFACE "STACK_PROTECTOR_ENABLED=1") message(STATUS "Stack Protector is Enabled.") add_compile_options(-fstack-protector-strong) endif() if(RMM_FPU_USE_AT_REL2 AND RMM_ARCH STREQUAL aarch64) target_compile_definitions(rmm-common INTERFACE "RMM_FPU_USE_AT_REL2=1") endif() target_compile_definitions(rmm-common INTERFACE "RMM_CCA_TOKEN_BUFFER=U(${RMM_CCA_TOKEN_BUFFER})") # # Project name and version # target_compile_definitions(rmm-common INTERFACE "NAME=\"${PROJECT_NAME}\"") target_compile_definitions(rmm-common INTERFACE "VERSION=\"${PROJECT_VERSION}\"") # # Get git commit information # Git_Get_Commit_Info(COMMIT_INFO) target_compile_definitions(rmm-common INTERFACE "COMMIT_INFO=\"${COMMIT_INFO}\"") if(RMM_V1_1) message(WARNING "RMM v1.1 features are experimental") target_compile_definitions(rmm-common INTERFACE "RMM_V1_1=1") endif() link_libraries(rmm-common)