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