• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Copyright (c) 2017, Intel Corporation
2#
3# Permission is hereby granted, free of charge, to any person obtaining a
4# copy of this software and associated documentation files (the "Software"),
5# to deal in the Software without restriction, including without limitation
6# the rights to use, copy, modify, merge, publish, distribute, sublicense,
7# and/or sell copies of the Software, and to permit persons to whom the
8# Software is furnished to do so, subject to the following conditions:
9#
10# The above copyright notice and this permission notice shall be included
11# in all copies or substantial portions of the Software.
12#
13# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
14# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
16# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
17# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
18# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
19# OTHER DEALINGS IN THE SOFTWARE.
20
21set(MEDIA_COMPILER_FLAGS_COMMON
22    # Global setting for warnings
23    -Wall
24    -Winit-self
25    -Wpointer-arith
26    -Wno-unused
27    -Wno-unknown-pragmas
28    -Wno-comments
29    -Wno-sign-compare
30    -Wno-attributes
31    -Wno-narrowing
32    -Wno-overflow
33    -Wno-parentheses
34    -Wno-delete-incomplete
35    -Werror=address
36    -Werror=format-security
37    -Werror=non-virtual-dtor
38    -Werror=return-type
39    -Wno-overloaded-virtual
40
41    # General optimization options
42    -finline-functions
43    -funswitch-loops
44    -fno-short-enums
45    -Wa,--noexecstack
46    -fno-strict-aliasing
47
48    # Other common flags
49    -fmessage-length=0
50    -fvisibility=hidden
51    -fdata-sections
52    -ffunction-sections
53    -Wl,--gc-sections
54
55    # Enable c++14 features
56    -std=c++14
57    # -m32 or -m64
58    -m${ARCH}
59
60    # Global defines
61    -DLINUX=1
62    -DLINUX
63    -DNO_RTTI
64    -DNO_EXCEPTION_HANDLING
65    -DINTEL_NOT_PUBLIC
66    -g
67)
68
69if(MEDIA_BUILD_HARDENING)
70    set(MEDIA_COMPILER_FLAGS_COMMON
71        ${MEDIA_COMPILER_FLAGS_COMMON}
72        -fstack-protector)
73endif()
74
75if(${UFO_MARCH} STREQUAL "slm")
76    set(MEDIA_COMPILER_FLAGS_COMMON
77        ${MEDIA_COMPILER_FLAGS_COMMON}
78        -maes
79        # Optimizing driver for Intel
80        -mtune=atom
81    )
82endif()
83
84if(${ARCH} STREQUAL "64")
85    set(MEDIA_COMPILER_FLAGS_COMMON
86        ${MEDIA_COMPILER_FLAGS_COMMON}
87        -D_AMD64_
88        -D__CT__
89    )
90endif()
91
92if(NOT ${PLATFORM} STREQUAL "android")
93    set(MEDIA_COMPILER_FLAGS_COMMON
94        ${MEDIA_COMPILER_FLAGS_COMMON}
95        -D__linux__
96            -fno-tree-pre
97        -fPIC
98            -Wl,--no-as-needed
99        )
100    endif()
101
102set(MEDIA_COMPILER_CXX_FLAGS_COMMON
103    # for cpp
104    -Wreorder
105    -Wsign-promo
106    -Wnon-virtual-dtor
107    -Wno-invalid-offsetof
108    -fvisibility-inlines-hidden
109    -fno-use-cxa-atexit
110    -frtti
111    -fexceptions
112    -fpermissive
113    -fcheck-new
114)
115
116if(NOT ${PLATFORM} STREQUAL "android")
117    set(MEDIA_COMPILER_CXX_FLAGS_COMMON
118        ${MEDIA_COMPILER_CXX_FLAGS_COMMON}
119        -std=c++1y
120    )
121endif()
122
123set(MEDIA_COMPILER_FLAGS_RELEASE "")
124
125if(${UFO_VARIANT} STREQUAL "default")
126    set(MEDIA_COMPILER_FLAGS_RELEASE
127        ${MEDIA_COMPILER_FLAGS_RELEASE}
128        -O2
129        -fno-omit-frame-pointer
130    )
131    if(MEDIA_BUILD_HARDENING)
132        set(MEDIA_COMPILER_FLAGS_RELEASE
133            ${MEDIA_COMPILER_FLAGS_RELEASE}
134            -D_FORTIFY_SOURCE=2)
135    endif()
136endif()
137
138if(NOT ${PLATFORM} STREQUAL "android")
139    if(${UFO_VARIANT} STREQUAL "default")
140            set(MEDIA_COMPILER_FLAGS_RELEASE
141                ${MEDIA_COMPILER_FLAGS_RELEASE}
142                -finline-limit=100
143            )
144    elseif(${UFO_VARIANT} STREQUAL "nano")
145        set(MEDIA_COMPILER_FLAGS_RELEASE
146            ${MEDIA_COMPILER_FLAGS_RELEASE}
147            -Os
148            -fomit-frame-pointer
149            -fno-asynchronous-unwind-tables
150            -flto
151            -Wl,-flto
152        )
153    endif()
154endif()
155
156set(MEDIA_COMPILER_FLAGS_RELEASEINTERNAL
157    -O0
158    -fno-omit-frame-pointer
159)
160
161if(NOT ${PLATFORM} STREQUAL "android")
162        set(MEDIA_COMPILER_FLAGS_RELEASEINTERNAL
163            ${MEDIA_COMPILER_FLAGS_RELEASEINTERNAL}
164            -finline-limit=100
165        )
166    endif()
167
168if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
169    list(APPEND MEDIA_COMPILER_FLAGS_COMMON
170         -Wno-deprecated
171         -Wno-missing-braces
172         -Wno-overloaded-virtual
173         -Wbitfield-constant-conversion
174         -Wno-extern-c-compat
175         -Wno-inconsistent-missing-override
176         # for verison under clang-17
177         -Wno-ignored-optimization-argument
178         -gdwarf-4
179        )
180    list(REMOVE_ITEM MEDIA_COMPILER_FLAGS_COMMON
181         -funswitch-loops
182         -Wl,--gc-sections
183         -Wl,--no-as-needed
184         -fno-tree-pre
185        )
186    list(REMOVE_ITEM MEDIA_COMPILER_FLAGS_RELEASE
187         -finline-limit=100
188        )
189    list(REMOVE_ITEM MEDIA_COMPILER_FLAGS_RELEASEINTERNAL
190         -finline-limit=100
191        )
192endif()
193
194set(MEDIA_COMPILER_FLAGS_DEBUG
195    -O0
196    -DINSTR_GTUNE_EXT
197)
198
199if(X11_FOUND AND LIBVAX11_FOUND)
200    add_definitions(-DX11_FOUND)
201endif()
202
203include(${MEDIA_EXT_CMAKE}/ext/linux/media_compile_flags_linux_ext.cmake OPTIONAL)
204
205if(${PLATFORM} STREQUAL "linux")
206    #set predefined compiler flags set
207    add_compile_options("${MEDIA_COMPILER_FLAGS_COMMON}")
208    add_compile_options("$<$<CONFIG:Debug>:${MEDIA_COMPILER_FLAGS_DEBUG}>")
209    add_compile_options("$<$<CONFIG:Release>:${MEDIA_COMPILER_FLAGS_RELEASE}>")
210    add_compile_options("$<$<CONFIG:ReleaseInternal>:${MEDIA_COMPILER_FLAGS_RELEASEINTERNAL}>")
211
212    foreach (flag ${MEDIA_COMPILER_CXX_FLAGS_COMMON})
213        SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${flag}")
214    endforeach()
215endif()
216
217if (NOT DEFINED GIT_COMMIT)
218    execute_process(
219        COMMAND git rev-parse --short HEAD
220        OUTPUT_VARIABLE GIT_COMMIT
221        OUTPUT_STRIP_TRAILING_WHITESPACE
222        WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
223    )
224endif()
225
226add_definitions(-DMEDIA_VERSION="${MEDIA_VERSION}")
227add_definitions(-DMEDIA_VERSION_DETAILS="${GIT_COMMIT}")
228