Julian Hall | 07679f2 | 2020-11-23 17:45:16 +0100 | [diff] [blame] | 1 | #------------------------------------------------------------------------------- |
Gyorgy Szing | 748838e | 2022-03-05 04:17:34 +0000 | [diff] [blame] | 2 | # Copyright (c) 2020-2022, Arm Limited and Contributors. All rights reserved. |
Julian Hall | 07679f2 | 2020-11-23 17:45:16 +0100 | [diff] [blame] | 3 | # |
| 4 | # SPDX-License-Identifier: BSD-3-Clause |
| 5 | # |
| 6 | #------------------------------------------------------------------------------- |
Gyorgy Szing | 34aaf21 | 2022-10-20 07:26:23 +0200 | [diff] [blame] | 7 | |
| 8 | # Since we append to default compilation flags stop multiple inclusion to avoid |
| 9 | # flags being added multiple times. |
| 10 | include_guard(GLOBAL) |
| 11 | |
Gyorgy Szing | d80f856 | 2021-02-11 19:31:43 +0100 | [diff] [blame] | 12 | if(NOT CROSS_COMPILE AND NOT DEFINED ENV{CROSS_COMPILE}) |
Gyorgy Szing | 748838e | 2022-03-05 04:17:34 +0000 | [diff] [blame] | 13 | set(CROSS_COMPILE "aarch64-linux-gnu-;aarch64-none-linux-gnu-" CACHE STRING "List of GCC prefix triplets to use.") |
Gyorgy Szing | d80f856 | 2021-02-11 19:31:43 +0100 | [diff] [blame] | 14 | endif() |
Julian Hall | 07679f2 | 2020-11-23 17:45:16 +0100 | [diff] [blame] | 15 | |
| 16 | set(CMAKE_CROSSCOMPILING True) |
| 17 | set(CMAKE_SYSTEM_NAME Linux) |
| 18 | set(CMAKE_SYSTEM_PROCESSOR arm) |
| 19 | |
Gyorgy Szing | 34aaf21 | 2022-10-20 07:26:23 +0200 | [diff] [blame] | 20 | set(TS_DEBUG_INFO_FLAGS "-fdiagnostics-show-option -gdwarf-2" CACHE STRING "Compiler flags to add debug information.") |
Balint Dobszay | 550ce87 | 2022-12-15 15:28:40 +0100 | [diff] [blame] | 21 | set(TS_MANDATORY_AARCH_FLAGS "-mstrict-align -march=armv8-a+crc -DARM64=1" CACHE STRING "Compiler flags configuring architecture specific ") |
Gabor Toth | 983264f | 2024-01-23 09:16:24 +0100 | [diff] [blame] | 22 | set(TS_WARNING_FLAGS "-Wall -Werror" CACHE STRING "Compiler flags affecting generating warning messages.") |
Gyorgy Szing | 34aaf21 | 2022-10-20 07:26:23 +0200 | [diff] [blame] | 23 | set(TS_MANDATORY_LINKER_FLAGS "" CACHE STRING "Linker flags needed for correct builds.") |
Julian Hall | 07679f2 | 2020-11-23 17:45:16 +0100 | [diff] [blame] | 24 | |
Gabor Toth | 350452a | 2024-06-19 12:35:08 +0200 | [diff] [blame] | 25 | # branch-protection enables bti/pac while compile force-bti tells the linker to |
| 26 | # warn if some object files lack the .note.gnu.property section with the BTI |
| 27 | # flag, and to turn on the BTI flag in the output anyway. |
| 28 | set(BRANCH_PROTECTION unset CACHE STRING "Enable branch protection") |
| 29 | set_property(CACHE BRANCH_PROTECTION PROPERTY STRINGS unset 0 1 2 3 4) |
Gabor Toth | b446a1e | 2024-05-10 10:42:20 +0200 | [diff] [blame] | 30 | |
Gabor Toth | 350452a | 2024-06-19 12:35:08 +0200 | [diff] [blame] | 31 | if(BRANCH_PROTECTION STREQUAL "0") |
| 32 | set(TS_MANDATORY_AARCH_FLAGS "${TS_MANDATORY_AARCH_FLAGS} -mbranch-protection=none") |
| 33 | elseif(BRANCH_PROTECTION STREQUAL "1") |
| 34 | set(TS_MANDATORY_AARCH_FLAGS "${TS_MANDATORY_AARCH_FLAGS} -mbranch-protection=standard") |
| 35 | set(TS_MANDATORY_LINKER_FLAGS "${TS_MANDATORY_LINKER_FLAGS} -zforce-bti") |
| 36 | add_compile_definitions("BTI_ENABLED") |
| 37 | elseif(BRANCH_PROTECTION STREQUAL "2") |
| 38 | set(TS_MANDATORY_AARCH_FLAGS "${TS_MANDATORY_AARCH_FLAGS} -mbranch-protection=pac-ret") |
| 39 | elseif(BRANCH_PROTECTION STREQUAL "3") |
| 40 | set(TS_MANDATORY_AARCH_FLAGS "${TS_MANDATORY_AARCH_FLAGS} -mbranch-protection=pac-ret+leaf") |
| 41 | elseif(BRANCH_PROTECTION STREQUAL "4") |
Gabor Toth | b446a1e | 2024-05-10 10:42:20 +0200 | [diff] [blame] | 42 | set(TS_MANDATORY_AARCH_FLAGS "${TS_MANDATORY_AARCH_FLAGS} -mbranch-protection=bti") |
| 43 | set(TS_MANDATORY_LINKER_FLAGS "${TS_MANDATORY_LINKER_FLAGS} -zforce-bti") |
Gabor Toth | 350452a | 2024-06-19 12:35:08 +0200 | [diff] [blame] | 44 | add_compile_definitions("BTI_ENABLED") |
Gabor Toth | b446a1e | 2024-05-10 10:42:20 +0200 | [diff] [blame] | 45 | endif() |
| 46 | |
Gyorgy Szing | 34aaf21 | 2022-10-20 07:26:23 +0200 | [diff] [blame] | 47 | # Set flags affecting all build types |
Gabor Toth | 22d04d6 | 2024-06-25 12:42:34 +0200 | [diff] [blame] | 48 | string(APPEND CMAKE_C_FLAGS_INIT " ${TS_MANDATORY_AARCH_FLAGS}") |
| 49 | string(APPEND CMAKE_CXX_FLAGS_INIT " ${TS_MANDATORY_AARCH_FLAGS}") |
| 50 | string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${TS_MANDATORY_LINKER_FLAGS}") |
| 51 | if(DEFINED TS_ROOT) |
| 52 | # Flags not to be used with external components. |
| 53 | string(APPEND CMAKE_C_FLAGS_INIT " ${TS_WARNING_FLAGS}") |
| 54 | string(APPEND CMAKE_CXX_FLAGS_INIT " ${TS_WARNING_FLAGS}") |
| 55 | endif() |
Gyorgy Szing | 34aaf21 | 2022-10-20 07:26:23 +0200 | [diff] [blame] | 56 | |
| 57 | # Set flags affecting all build types supporting debugging. |
Gyorgy Szing | 1ff7d79 | 2024-09-18 13:40:05 +0200 | [diff] [blame^] | 58 | foreach(_b_type IN ITEMS DEBUG RELWITHDEBINFO MINSIZWITHDEBINFO DEBUGCOVERAGE) |
Gyorgy Szing | 34aaf21 | 2022-10-20 07:26:23 +0200 | [diff] [blame] | 59 | string(APPEND CMAKE_C_FLAGS_${_b_type}_INIT " ${TS_DEBUG_INFO_FLAGS}") |
| 60 | string(APPEND CMAKE_CXX_FLAGS_${_b_type}_INIT " ${TS_DEBUG_INFO_FLAGS}") |
| 61 | endforeach() |
| 62 | |
| 63 | # Build type specific flags |
| 64 | string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " -O0") |
| 65 | string(APPEND CMAKE_C_FLAGS_MINSIZEREL_INIT " -Os") |
| 66 | string(APPEND CMAKE_C_FLAGS_MINSIZWITHDEBINFO_INIT " -Os") |
| 67 | string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " -O2") |
| 68 | string(APPEND CMAKE_C_FLAGS_RELWITHDEBINFO_INIT " -O2") |
Gyorgy Szing | 1ff7d79 | 2024-09-18 13:40:05 +0200 | [diff] [blame^] | 69 | string(APPEND CMAKE_C_FLAGS_DEBUGCOVERAGE_INIT " -O0 -coverage") |
Gyorgy Szing | 34aaf21 | 2022-10-20 07:26:23 +0200 | [diff] [blame] | 70 | string(APPEND CMAKE_CXX_FLAGS_DEBUG_INIT " -O0") |
| 71 | string(APPEND CMAKE_CXX_FLAGS_MINSIZEREL_INIT " -Os") |
| 72 | string(APPEND CMAKE_CXX_FLAGS_MINSIZWITHDEBINFO_INIT " -Os") |
| 73 | string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " -O2") |
| 74 | string(APPEND CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT " -O2") |
Gyorgy Szing | 1ff7d79 | 2024-09-18 13:40:05 +0200 | [diff] [blame^] | 75 | string(APPEND CMAKE_CXX_FLAGS_DEBUGCOVERAGE_INIT " -O0 -coverage") |
Julian Hall | 6e02acf | 2022-02-22 16:25:03 +0000 | [diff] [blame] | 76 | |
Julian Hall | 07679f2 | 2020-11-23 17:45:16 +0100 | [diff] [blame] | 77 | include($ENV{TS_ROOT}/tools/cmake/compiler/GCC.cmake REQUIRED) |
Julian Hall | 0051ed1 | 2021-07-22 13:59:24 +0100 | [diff] [blame] | 78 | include($ENV{TS_ROOT}/tools/cmake/compiler/config_iface.cmake REQUIRED) |