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 |