author | sheepluva |
Fri, 07 Feb 2014 10:11:10 +0100 | |
changeset 10118 | 788703011d20 |
parent 9339 | 14f5f3a1e2f7 |
child 10783 | 8e742c9ffdf8 |
permissions | -rw-r--r-- |
9152 | 1 |
|
2 |
#TESTING TIME |
|
3 |
include(CheckCCompilerFlag) |
|
4 |
#when you need to check for a linker flag, just leave the argument of "check_c_compiler_flag" empty |
|
5 |
||
9159 | 6 |
# CMAKE_C{XX}_FLAGS is for compiler flags (c and c++) |
7 |
# CMAKE_EXE_LINKER_FLAGS is for linker flags (also add them to pascal_flags and haskell_flags) |
|
9165
7b0d5388abc4
stack-protector flag needs to be passed to the linker as well
koda
parents:
9159
diff
changeset
|
8 |
# CMAKE_SHARED_LIBRARY_<lang>_FLAGS same but for shared libraries |
9152 | 9 |
|
9156
6bf5359d5d14
make sure that also CXX sources pick up the flags (although I'm not 100% of the correctness of the tests)
koda
parents:
9155
diff
changeset
|
10 |
#TODO: should there be two different checks for C and CXX? |
9307
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
11 |
#TODO: can the various if(platform) be avoided in some way? |
9156
6bf5359d5d14
make sure that also CXX sources pick up the flags (although I'm not 100% of the correctness of the tests)
koda
parents:
9155
diff
changeset
|
12 |
|
9155
480f483de544
add fstack-protector and fvisibility=hidden to cmake tests
koda
parents:
9154
diff
changeset
|
13 |
|
9307
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
14 |
if(NOT (WIN32 OR (CMAKE_SYSTEM_NAME MATCHES BSD.OS) OR (CMAKE_SYSTEM_NAME MATCHES FreeBSD))) |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
15 |
#stack protection, when found it needs to go in the linker flags too |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
16 |
#it is disabled on win32 because it adds a dll and messes with linker |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
17 |
#some bsd installations reported problems too |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
18 |
#(see 822312 654424 on bugzilla.redhat.com) |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
19 |
check_c_compiler_flag("-fstack-protector-all -fstack-protector" HAVE_STACKPROTECTOR) |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
20 |
if(HAVE_STACKPROTECTOR) |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
21 |
add_flag_append(CMAKE_C_FLAGS "-fstack-protector-all -fstack-protector") |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
22 |
add_flag_append(CMAKE_CXX_FLAGS "-fstack-protector-all -fstack-protector") |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
23 |
endif() |
9155
480f483de544
add fstack-protector and fvisibility=hidden to cmake tests
koda
parents:
9154
diff
changeset
|
24 |
endif() |
480f483de544
add fstack-protector and fvisibility=hidden to cmake tests
koda
parents:
9154
diff
changeset
|
25 |
|
480f483de544
add fstack-protector and fvisibility=hidden to cmake tests
koda
parents:
9154
diff
changeset
|
26 |
|
9152 | 27 |
|
9307
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
28 |
if(UNIX) |
9315 | 29 |
#symbol visibility |
9307
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
30 |
check_c_compiler_flag("-fvisibility=hidden" HAVE_VISIBILITY) |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
31 |
if(HAVE_VISIBILITY) |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
32 |
add_flag_append(CMAKE_C_FLAGS "-fvisibility=hidden") |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
33 |
add_flag_append(CMAKE_CXX_FLAGS "-fvisibility=hidden") |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
34 |
endif() |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
35 |
|
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
36 |
#check for noexecstack on ELF, Gentoo security |
9315 | 37 |
set(CMAKE_REQUIRED_FLAGS "-Wl,-znoexecstack") |
9307
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
38 |
check_c_compiler_flag("" HAVE_NOEXECSTACK) |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
39 |
if(HAVE_NOEXECSTACK) |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
40 |
add_linker_flag("-znoexecstack") |
9153 | 41 |
endif() |
42 |
||
9339
14f5f3a1e2f7
some work on cmake_pascal files to better support flags we use, make engine compile as library again
koda
parents:
9315
diff
changeset
|
43 |
#check for origin on ELF, BSD $ORIGIN support |
14f5f3a1e2f7
some work on cmake_pascal files to better support flags we use, make engine compile as library again
koda
parents:
9315
diff
changeset
|
44 |
set(CMAKE_REQUIRED_FLAGS "-Wl,-zorigin") |
14f5f3a1e2f7
some work on cmake_pascal files to better support flags we use, make engine compile as library again
koda
parents:
9315
diff
changeset
|
45 |
check_c_compiler_flag("" HAVE_ORIGIN) |
14f5f3a1e2f7
some work on cmake_pascal files to better support flags we use, make engine compile as library again
koda
parents:
9315
diff
changeset
|
46 |
if(HAVE_ORIGIN) |
14f5f3a1e2f7
some work on cmake_pascal files to better support flags we use, make engine compile as library again
koda
parents:
9315
diff
changeset
|
47 |
add_linker_flag("-zorigin") |
14f5f3a1e2f7
some work on cmake_pascal files to better support flags we use, make engine compile as library again
koda
parents:
9315
diff
changeset
|
48 |
endif() |
14f5f3a1e2f7
some work on cmake_pascal files to better support flags we use, make engine compile as library again
koda
parents:
9315
diff
changeset
|
49 |
|
9307
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
50 |
#check for full relro on ELF, Debian security |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
51 |
set(CMAKE_REQUIRED_FLAGS "-Wl,-zrelro,-znow") |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
52 |
check_c_compiler_flag("" HAVE_RELROFULL) |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
53 |
if(HAVE_RELROFULL) |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
54 |
add_linker_flag("-zrelro") |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
55 |
add_linker_flag("-znow") |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
56 |
else() |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
57 |
#if full relro is not available, try partial relro |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
58 |
set(CMAKE_REQUIRED_FLAGS "-Wl,-zrelro") |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
59 |
check_c_compiler_flag("" HAVE_RELROPARTIAL) |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
60 |
if(HAVE_RELROPARTIAL) |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
61 |
add_linker_flag("-zrelro") |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
62 |
endif() |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
63 |
endif() |
9152 | 64 |
|
9315 | 65 |
if(CMAKE_BUILD_TYPE MATCHES "RELEASE") |
66 |
set(CMAKE_REQUIRED_FLAGS "-Wl,--as-needed") |
|
67 |
check_c_compiler_flag("" HAVE_ASNEEDED) |
|
68 |
if(HAVE_ASNEEDED) |
|
69 |
add_linker_flag("--as-needed") |
|
70 |
endif() |
|
9307
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
71 |
endif() |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
72 |
else(UNIX) |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
73 |
#check for ASLR on Windows Vista or later, requires binutils >= 2.20 |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
74 |
set(CMAKE_REQUIRED_FLAGS "-Wl,--nxcompat") |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
75 |
check_c_compiler_flag("" HAVE_WINASLR) |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
76 |
if(HAVE_WINASLR) |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
77 |
add_linker_flag("--nxcompat") |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
78 |
endif() |
9152 | 79 |
|
9307
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
80 |
#check for DEP on Windows XP SP2 or later, requires binutils >= 2.20 |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
81 |
set(CMAKE_REQUIRED_FLAGS "-Wl,--dynamicbase") |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
82 |
check_c_compiler_flag("" HAVE_WINDEP) |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
83 |
if(HAVE_WINDEP) |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
84 |
add_linker_flag("--dynamicbase") |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
85 |
endif() |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
86 |
endif(UNIX) |
a0fef7134ade
tell ya what, let's just disable these tests on some platform for now
koda
parents:
9298
diff
changeset
|
87 |
|
9152 | 88 |
|
89 |
#always unset or these flags will be spread everywhere |
|
90 |
unset(CMAKE_REQUIRED_FLAGS) |
|
91 |