cmake_modules/compilerchecks.cmake
author koda
Sat, 08 Jun 2013 01:56:23 +0200
changeset 9153 354a9803fe91
parent 9152 c884e40dca9e
child 9154 a43406054648
permissions -rw-r--r--
add relro linker tests (issue #663)
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
9152
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
     1
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
     2
#TESTING TIME
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
     3
include(CheckCCompilerFlag)
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
     4
#when you need to check for a linker flag, just leave the argument of "check_c_compiler_flag" empty
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
     5
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
     6
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
     7
#check for noexecstack on ELF, Gentoo security
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
     8
set(CMAKE_REQUIRED_FLAGS "-Wl,-z,noexecstack")
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
     9
check_c_compiler_flag("" HAVE_NOEXECSTACK)
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    10
if(HAVE_NOEXECSTACK)
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    11
    list(APPEND pascal_flags "-k-z" "-knoexecstack")
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    12
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    13
endif()
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    14
9153
354a9803fe91 add relro linker tests (issue 663)
koda
parents: 9152
diff changeset
    15
#check for full relro on ELF, Debian security
354a9803fe91 add relro linker tests (issue 663)
koda
parents: 9152
diff changeset
    16
set(CMAKE_REQUIRED_FLAGS "-Wl,-z,relro,-z,now")
354a9803fe91 add relro linker tests (issue 663)
koda
parents: 9152
diff changeset
    17
check_c_compiler_flag("" HAVE_RELROFULL)
354a9803fe91 add relro linker tests (issue 663)
koda
parents: 9152
diff changeset
    18
if(HAVE_RELROFULL)
354a9803fe91 add relro linker tests (issue 663)
koda
parents: 9152
diff changeset
    19
    list(APPEND pascal_flags "-k-z" "-krelro" "-k-z" "-know")
354a9803fe91 add relro linker tests (issue 663)
koda
parents: 9152
diff changeset
    20
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
354a9803fe91 add relro linker tests (issue 663)
koda
parents: 9152
diff changeset
    21
else()
354a9803fe91 add relro linker tests (issue 663)
koda
parents: 9152
diff changeset
    22
    #if full relro is not available, try partial relro
354a9803fe91 add relro linker tests (issue 663)
koda
parents: 9152
diff changeset
    23
    set(CMAKE_REQUIRED_FLAGS "-Wl,-z,relro")
354a9803fe91 add relro linker tests (issue 663)
koda
parents: 9152
diff changeset
    24
    check_c_compiler_flag("" HAVE_RELROPARTIAL)
354a9803fe91 add relro linker tests (issue 663)
koda
parents: 9152
diff changeset
    25
    if(HAVE_RELROPARTIAL)
354a9803fe91 add relro linker tests (issue 663)
koda
parents: 9152
diff changeset
    26
        list(APPEND pascal_flags "-k-z" "-krelro")
354a9803fe91 add relro linker tests (issue 663)
koda
parents: 9152
diff changeset
    27
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
354a9803fe91 add relro linker tests (issue 663)
koda
parents: 9152
diff changeset
    28
    endif()
354a9803fe91 add relro linker tests (issue 663)
koda
parents: 9152
diff changeset
    29
endif()
354a9803fe91 add relro linker tests (issue 663)
koda
parents: 9152
diff changeset
    30
9152
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    31
#check for ASLR on Windows Vista or later, requires binutils >= 2.20
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    32
set(CMAKE_REQUIRED_FLAGS "-Wl,--nxcompat")
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    33
check_c_compiler_flag("" HAVE_WINASLR)
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    34
if(HAVE_WINASLR)
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    35
    list(APPEND pascal_flags "-k--nxcompat")
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    36
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    37
endif()
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    38
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    39
#check for DEP on Windows XP SP2 or later, requires binutils >= 2.20
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    40
set(CMAKE_REQUIRED_FLAGS "-Wl,--dynamicbase")
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    41
check_c_compiler_flag("" HAVE_WINDEP)
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    42
if(HAVE_WINDEP)
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    43
    list(APPEND pascal_flags "-k--dynamicbase")
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    44
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    45
endif()
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    46
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    47
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    48
#always unset or these flags will be spread everywhere
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    49
unset(CMAKE_REQUIRED_FLAGS)
c884e40dca9e move compiler checks in a separate cmake module
koda
parents:
diff changeset
    50