blob: 6bbc43ff3b94ad780a0966deb129d74e9077fd6a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# HyBBX compiler and linker hardening (HYBBX_HARDENING=ON)
function(hybbx_apply_hardening target)
if(NOT HYBBX_HARDENING)
return()
endif()
if(HYBBX_SUPPORTED_C_FLAGS)
target_compile_options(${target} PRIVATE ${HYBBX_SUPPORTED_C_FLAGS})
endif()
if(HYBBX_WARNINGS_AS_ERRORS)
target_compile_options(${target} PRIVATE -Werror)
endif()
if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
if(NOT HYBBX_PLATFORM_AMIGAOS)
target_compile_definitions(${target} PRIVATE _FORTIFY_SOURCE=2)
endif()
endif()
if(NOT HYBBX_PLATFORM_AMIGAOS AND CMAKE_SYSTEM_NAME STREQUAL "Linux")
target_compile_options(${target} PRIVATE -fPIC)
if(HYBBX_COMPILER_GCC OR HYBBX_COMPILER_CLANG)
target_link_options(${target} PRIVATE
-Wl,-z,relro
-Wl,-z,now
)
endif()
endif()
endfunction()
function(hybbx_apply_hardening_executable target)
hybbx_apply_hardening(${target})
if(NOT HYBBX_HARDENING OR HYBBX_PLATFORM_AMIGAOS)
return()
endif()
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND (HYBBX_COMPILER_GCC OR HYBBX_COMPILER_CLANG))
target_compile_options(${target} PRIVATE -fPIE)
target_link_options(${target} PRIVATE -pie)
endif()
endfunction()
|