cmake_modules/compilerchecks.cmake
changeset 9220 5e7db24f3489
parent 9219 0a4b6bb69f99
child 9221 c4289023ddae
equal deleted inserted replaced
9219:0a4b6bb69f99 9220:5e7db24f3489
    31 
    31 
    32 #check for noexecstack on ELF, Gentoo security
    32 #check for noexecstack on ELF, Gentoo security
    33 set(CMAKE_REQUIRED_FLAGS "-Wl,-z,noexecstack")
    33 set(CMAKE_REQUIRED_FLAGS "-Wl,-z,noexecstack")
    34 check_c_compiler_flag("" HAVE_NOEXECSTACK)
    34 check_c_compiler_flag("" HAVE_NOEXECSTACK)
    35 if(HAVE_NOEXECSTACK)
    35 if(HAVE_NOEXECSTACK)
    36     list(APPEND pascal_flags "-k-z" "-knoexecstack")
    36     append_linker_flag("-znoexecstack")
    37     list(APPEND haskell_flags "-optl" "${CMAKE_REQUIRED_FLAGS}")
       
    38     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
       
    39     set(CMAKE_SHARED_LIBRARY_C_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
       
    40     set(CMAKE_SHARED_LIBRARY_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
       
    41 endif()
    37 endif()
    42 
    38 
    43 #check for full relro on ELF, Debian security
    39 #check for full relro on ELF, Debian security
    44 set(CMAKE_REQUIRED_FLAGS "-Wl,-z,relro,-z,now")
    40 set(CMAKE_REQUIRED_FLAGS "-Wl,-zrelro,-znow")
    45 check_c_compiler_flag("" HAVE_RELROFULL)
    41 check_c_compiler_flag("" HAVE_RELROFULL)
    46 if(HAVE_RELROFULL)
    42 if(HAVE_RELROFULL)
    47     list(APPEND pascal_flags "-k-z" "-krelro" "-k-z" "-know")
    43     append_linker_flag("-zrelro")
    48     list(APPEND haskell_flags "-optl" "${CMAKE_REQUIRED_FLAGS}")
    44     append_linker_flag("-znow")
    49     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
       
    50     set(CMAKE_SHARED_LIBRARY_C_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
       
    51     set(CMAKE_SHARED_LIBRARY_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
       
    52 else()
    45 else()
    53     #if full relro is not available, try partial relro
    46     #if full relro is not available, try partial relro
    54     set(CMAKE_REQUIRED_FLAGS "-Wl,-z,relro")
    47     set(CMAKE_REQUIRED_FLAGS "-Wl,-zrelro")
    55     check_c_compiler_flag("" HAVE_RELROPARTIAL)
    48     check_c_compiler_flag("" HAVE_RELROPARTIAL)
    56     if(HAVE_RELROPARTIAL)
    49     if(HAVE_RELROPARTIAL)
    57         list(APPEND pascal_flags "-k-z" "-krelro")
    50         append_linker_flag("-zrelro")
    58         list(APPEND haskell_flags "-optl" "${CMAKE_REQUIRED_FLAGS}")
       
    59         set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
       
    60         set(CMAKE_SHARED_LIBRARY_C_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
       
    61         set(CMAKE_SHARED_LIBRARY_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
       
    62     endif()
    51     endif()
    63 endif()
    52 endif()
    64 
    53 
    65 #check for ASLR on Windows Vista or later, requires binutils >= 2.20
    54 #check for ASLR on Windows Vista or later, requires binutils >= 2.20
    66 set(CMAKE_REQUIRED_FLAGS "-Wl,--nxcompat")
    55 set(CMAKE_REQUIRED_FLAGS "-Wl,--nxcompat")
    67 check_c_compiler_flag("" HAVE_WINASLR)
    56 check_c_compiler_flag("" HAVE_WINASLR)
    68 if(HAVE_WINASLR)
    57 if(HAVE_WINASLR)
    69     list(APPEND pascal_flags "-k--nxcompat")
    58     append_linker_flag("--nxcompat")
    70     list(APPEND haskell_flags "-optl" "${CMAKE_REQUIRED_FLAGS}")
       
    71     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
       
    72     set(CMAKE_SHARED_LIBRARY_C_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
       
    73     set(CMAKE_SHARED_LIBRARY_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
       
    74 endif()
    59 endif()
    75 
    60 
    76 #check for DEP on Windows XP SP2 or later, requires binutils >= 2.20
    61 #check for DEP on Windows XP SP2 or later, requires binutils >= 2.20
    77 set(CMAKE_REQUIRED_FLAGS "-Wl,--dynamicbase")
    62 set(CMAKE_REQUIRED_FLAGS "-Wl,--dynamicbase")
    78 check_c_compiler_flag("" HAVE_WINDEP)
    63 check_c_compiler_flag("" HAVE_WINDEP)
    79 if(HAVE_WINDEP)
    64 if(HAVE_WINDEP)
    80     list(APPEND pascal_flags "-k--dynamicbase")
    65     append_linker_flag("--dynamicbase")
    81     list(APPEND haskell_flags "-optl" "${CMAKE_REQUIRED_FLAGS}")
       
    82     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
       
    83     set(CMAKE_SHARED_LIBRARY_C_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
       
    84     set(CMAKE_SHARED_LIBRARY_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
       
    85 endif()
    66 endif()
    86 
    67 
    87 #this is actually an optimisation
    68 #this is actually an optimisation
    88 set(CMAKE_REQUIRED_FLAGS "-Wl,--as-needed")
    69 set(CMAKE_REQUIRED_FLAGS "-Wl,--as-needed")
    89 check_c_compiler_flag("" HAVE_ASNEEDED)
    70 check_c_compiler_flag("" HAVE_ASNEEDED)
    90 if(HAVE_ASNEEDED)
    71 if(HAVE_ASNEEDED)
    91     list(APPEND pascal_flags "-k--as-needed")
    72     append_linker_flag("--as-needed")
    92     list(APPEND haskell_flags "-optl" "${CMAKE_REQUIRED_FLAGS}")
       
    93     set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
       
    94     set(CMAKE_SHARED_LIBRARY_C_FLAGS "${CMAKE_SHARED_LIBRARY_C_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
       
    95     set(CMAKE_SHARED_LIBRARY_CXX_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} ${CMAKE_REQUIRED_FLAGS}")
       
    96 endif()
    73 endif()
    97 
    74 
    98 #always unset or these flags will be spread everywhere
    75 #always unset or these flags will be spread everywhere
    99 unset(CMAKE_REQUIRED_FLAGS)
    76 unset(CMAKE_REQUIRED_FLAGS)
   100 
    77