blob: 00ddf8992896f02dd1c829f4d2dcdcd2a4b3a9c8 [file] [log] [blame]
Gyorgy Szing49091802020-11-24 00:33:09 +01001#-------------------------------------------------------------------------------
Julian Hall6e02acf2022-02-22 16:25:03 +00002# Copyright (c) 2020-2022, Arm Limited and Contributors. All rights reserved.
Gyorgy Szing49091802020-11-24 00:33:09 +01003#
4# SPDX-License-Identifier: BSD-3-Clause
5#
6#-------------------------------------------------------------------------------
7
Gyorgy Szing34aaf212022-10-20 07:26:23 +02008# Since we append to default compilation flags stop multiple inclusion to avoid
9# flags being added multiple times.
10include_guard(GLOBAL)
11
Gyorgy Szing49091802020-11-24 00:33:09 +010012#GNUARM v8 and v9 compilers use a different triplet.
Gyorgy Szingd80f8562021-02-11 19:31:43 +010013if(NOT CROSS_COMPILE AND NOT DEFINED ENV{CROSS_COMPILE})
Gyorgy Szingdaf2efd2021-03-09 07:30:34 +010014 set(CROSS_COMPILE "aarch64-elf-;aarch64-none-elf-;aarch64-linux-gnu-;aarch64-none-linux-gnu-" CACHE STRING "List of GCC prefix triplets to use.")
Gyorgy Szing49091802020-11-24 00:33:09 +010015endif()
16
17set(CMAKE_CROSSCOMPILING True)
18set(CMAKE_SYSTEM_NAME Generic)
19set(CMAKE_SYSTEM_PROCESSOR arm)
20set(CMAKE_POSITION_INDEPENDENT_CODE True)
21
Gyorgy Szing34aaf212022-10-20 07:26:23 +020022set(TS_DEBUG_INFO_FLAGS "-fdiagnostics-show-option -gdwarf-2" CACHE STRING "Compiler flags to add debug information.")
Balint Dobszay550ce872022-12-15 15:28:40 +010023set(TS_MANDATORY_AARCH_FLAGS "-fpic -mstrict-align -march=armv8-a+crc" CACHE STRING "Compiler flags configuring architecture specific ")
Gabor Toth983264f2024-01-23 09:16:24 +010024set(TS_WARNING_FLAGS "-Wall -Werror" CACHE STRING "Compiler flags affecting generating warning messages.")
Gyorgy Szing34aaf212022-10-20 07:26:23 +020025set(TS_MANDATORY_LINKER_FLAGS "-pie -Wl,--as-needed -Wl,--sort-section=alignment -zmax-page-size=4096"
26 CACHE STRING "Linker flags needed for correct builds.")
27
Gabor Tothb446a1e2024-05-10 10:42:20 +020028set(BTI_ENABLED unset CACHE STRING "Enable Branch Target Identification (BTI)")
29set_property(CACHE BTI_ENABLED PROPERTY STRINGS unset OFF ON)
30
31if(BTI_ENABLED STREQUAL "ON")
32 # branch-protection enables bti while compile force-bti tells the linker to
33 # warn if some object files lack the .note.gnu.property section with the BTI
34 # flag, and to turn on the BTI flag in the output anyway.
35 set(TS_MANDATORY_AARCH_FLAGS "${TS_MANDATORY_AARCH_FLAGS} -mbranch-protection=bti")
36 set(TS_MANDATORY_LINKER_FLAGS "${TS_MANDATORY_LINKER_FLAGS} -zforce-bti")
37elseif(BTI_ENABLED STREQUAL "OFF")
38 set(TS_MANDATORY_AARCH_FLAGS "${TS_MANDATORY_AARCH_FLAGS} -mbranch-protection=none")
39endif()
40
Gyorgy Szing34aaf212022-10-20 07:26:23 +020041# Set flags affecting all build types
Gabor Toth22d04d62024-06-25 12:42:34 +020042string(APPEND CMAKE_C_FLAGS_INIT " ${TS_MANDATORY_AARCH_FLAGS}")
43string(APPEND CMAKE_CXX_FLAGS_INIT " ${TS_MANDATORY_AARCH_FLAGS}")
44string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${TS_MANDATORY_LINKER_FLAGS}")
45if(DEFINED TS_ROOT)
46 # Flags not to be used with external components.
47 string(APPEND CMAKE_C_FLAGS_INIT " ${TS_WARNING_FLAGS}")
48 string(APPEND CMAKE_CXX_FLAGS_INIT " ${TS_WARNING_FLAGS}")
49endif()
Gyorgy Szing34aaf212022-10-20 07:26:23 +020050
51# Set flags affecting all build types supporting debugging.
52foreach(_b_type IN ITEMS DEBUG RELWITHDEBINFO MINSIZWITHDEBINFO)
53 string(APPEND CMAKE_C_FLAGS_${_b_type}_INIT " ${TS_DEBUG_INFO_FLAGS}")
54 string(APPEND CMAKE_CXX_FLAGS_${_b_type}_INIT " ${TS_DEBUG_INFO_FLAGS}")
55endforeach()
56
57# Build type specific flags
58string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " -O0")
59string(APPEND CMAKE_C_FLAGS_MINSIZEREL_INIT " -Os")
60string(APPEND CMAKE_C_FLAGS_MINSIZWITHDEBINFO_INIT " -Os")
61string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " -O2")
62string(APPEND CMAKE_C_FLAGS_RELWITHDEBINFO_INIT " -O2")
63string(APPEND CMAKE_CXX_FLAGS_DEBUG_INIT " -O0")
64string(APPEND CMAKE_CXX_FLAGS_MINSIZEREL_INIT " -Os")
65string(APPEND CMAKE_CXX_FLAGS_MINSIZWITHDEBINFO_INIT " -Os")
66string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " -O2")
67string(APPEND CMAKE_CXX_FLAGS_RELWITHDEBINFO_INIT " -O2")
68
Gyorgy Szing49091802020-11-24 00:33:09 +010069include($ENV{TS_ROOT}/tools/cmake/compiler/GCC.cmake REQUIRED)
Julian Hall0051ed12021-07-22 13:59:24 +010070include($ENV{TS_ROOT}/tools/cmake/compiler/config_iface.cmake REQUIRED)