summaryrefslogtreecommitdiff
path: root/cmake/Hardening.cmake
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()
git clone -b <branch> https://cgit.mode42.com/<repo>.git
git clone -b <branch> git://cgit.mode42.com/<repo>.git

info@mode42.com