summaryrefslogtreecommitdiff
blob: d4acb515bf3d95309c15c90df2e67c1479248a6f (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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
Prevent overriding of user-define CFLAGS, including -march flag.
The flag -msse4.1 is required otherwise compile will not be able to inline sse4.1 code.
Note: code should detect CPU features at runtime and use sse4.1 paths only if supported by CPU.

--- a/Source/GmmLib/CMakeLists.txt
+++ b/Source/GmmLib/CMakeLists.txt
@@ -74,6 +74,10 @@
     endif()
 endif()
 
+if(NOT DEFINED OVERRIDE_COMPILER_FLAGS)
+    option(OVERRIDE_COMPILER_FLAGS "Override user compiler FLAGS and use lib defaults" ON)
+endif()
+
 # begin -- label bldsys file prologue
 # WARNING: The "project" statement triggers reading of CMAKE_TOOLCHAIN_FILE
 #   and so must precede the inclusion below of bs_init.cmake .
--- a/Source/GmmLib/Linux.cmake
+++ b/Source/GmmLib/Linux.cmake
@@ -76,7 +76,10 @@
     -Werror=format-security
     -Werror=non-virtual-dtor
     -Werror=return-type
+    )
 
+if (OVERRIDE_COMPILER_FLAGS)
+    list (APPEND GMMLIB_COMPILER_FLAGS_COMMON
     # General optimization options
     -march=${GMMLIB_MARCH}
     -mpopcnt
@@ -85,19 +88,31 @@
     -msse3
     -mssse3
     -msse4
-    -msse4.1
     -msse4.2
+    )
+endif()
+
+list (APPEND GMMLIB_COMPILER_FLAGS_COMMON
+    -msse4.1 # SSE4.1 compiler support is required to build
     -mfpmath=sse
     -finline-functions
     -fno-short-enums
     -Wa,--noexecstack
     -fno-strict-aliasing
+    )
+
+if (OVERRIDE_COMPILER_FLAGS)
+    list (APPEND GMMLIB_COMPILER_FLAGS_COMMON
     # Common defines
     -DUSE_MMX
     -DUSE_SSE
     -DUSE_SSE2
     -DUSE_SSE3
     -DUSE_SSSE3
+    )
+endif()
+
+list (APPEND GMMLIB_COMPILER_FLAGS_COMMON
     # Other common flags
     -fstack-protector
     -fdata-sections
@@ -105,11 +120,16 @@
     -fmessage-length=0
     -fvisibility=hidden
     -fPIC
+    )
+
+if (OVERRIDE_COMPILER_FLAGS)
+    list (APPEND GMMLIB_COMPILER_FLAGS_COMMON
     -g
     # -m32 or -m64
     -m${GMMLIB_ARCH}
     )
 endif()
+endif()
 
 if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
 #Gcc only flags
@@ -167,10 +187,12 @@
 
 #set predefined compiler flags set
 add_compile_options("${GMMLIB_COMPILER_FLAGS_COMMON}")
+if (OVERRIDE_COMPILER_FLAGS)
 add_compile_options("$<$<CONFIG:Debug>:${GMMLIB_COMPILER_FLAGS_DEBUG}>")
 add_compile_options("$<$<CONFIG:Release>:${GMMLIB_COMPILER_FLAGS_RELEASE}>")
 add_compile_options("$<$<CONFIG:ReleaseInternal>:${GMMLIB_COMPILER_FLAGS_RELEASEINTERNAL}>")
 #cmake 3.3+, add_compile_options("$<$<COMPILE_LANGUAGE:CXX>:${GMMLIB_COMPILER_CXX_FLAGS_COMMON}>")
+endif()
 foreach (flag ${GMMLIB_COMPILER_CXX_FLAGS_COMMON})
     SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
 endforeach()
@@ -179,6 +201,8 @@
     SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
     SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
 else()
+    if (OVERRIDE_COMPILER_FLAGS)
     SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m${GMMLIB_ARCH}")
     SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -m${GMMLIB_ARCH}")
+    endif()
 endif()