basic project
This commit is contained in:
52
cmake/CompilerFlags.cmake
Normal file
52
cmake/CompilerFlags.cmake
Normal file
@@ -0,0 +1,52 @@
|
||||
|
||||
# Core compile arguments used for the whole native project
|
||||
|
||||
if(NOT TV2HV_LINKER)
|
||||
message(FATAL_ERROR "Somehow we got here without a set TV2HV_LINKER, bailing.")
|
||||
endif()
|
||||
|
||||
# This isn't really the best place to put this, but it's probably the only one which makes sense.
|
||||
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||
|
||||
# TODO: Use a list so that this isn't one giant line, and we can just append compile flags to it as needed
|
||||
set(TV2HV_CORE_COMPILE_ARGS "-Wall -Wno-builtin-declaration-mismatch -Wformat=2 -fstrict-flex-arrays=3 -fstack-clash-protection -fstack-protector-strong")
|
||||
set(TV2HV_CORE_LINKER_ARGS "-fuse-ld=${TV2HV_LINKER}")
|
||||
|
||||
if("${CMAKE_BUILD_TYPE}" STREQUAL "Release" OR "${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
|
||||
# Disable C assert() in release builds (needed since we wipe cmake core args) and enable FORTIFY_SOURCE
|
||||
set(TV2HV_CORE_COMPILE_ARGS "${TV2HV_CORE_COMPILE_ARGS} -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=3 -DNDEBUG")
|
||||
|
||||
# If on Release and we are prompted to use link-time optimizations do so
|
||||
if("lto" IN_LIST TV2HV_BUILD_FEATURES)
|
||||
# On clang we use ThinLTO for even better build performance.
|
||||
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
|
||||
message(STATUS "CompilerFlags: Using LLVM ThinLTO")
|
||||
set(TV2HV_CORE_COMPILE_ARGS "${TV2HV_CORE_COMPILE_ARGS} -flto=thin")
|
||||
set(TV2HV_CORE_LINKER_ARGS "${TV2HV_CORE_LINKER_ARGS} -flto=thin")
|
||||
else()
|
||||
message(STATUS "CompilerFlags: Using LTO")
|
||||
set(TV2HV_CORE_COMPILE_ARGS "${TV2HV_CORE_COMPILE_ARGS} -flto")
|
||||
set(TV2HV_CORE_LINKER_ARGS "${TV2HV_CORE_LINKER_ARGS} -flto")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
include(SanitizerSetup)
|
||||
|
||||
# Set core CMake toolchain variables so that they get applied to all projects.
|
||||
# A bit nasty, but /shrug, this way our third party libraries can be mostly sanitized/etc as well.
|
||||
#
|
||||
# Note that -g3 in release flags is temporary, and will be removed once we don't need it
|
||||
|
||||
set(CMAKE_C_FLAGS "${TV2HV_CORE_COMPILE_ARGS}")
|
||||
set(CMAKE_CXX_FLAGS "${TV2HV_CORE_COMPILE_ARGS}")
|
||||
|
||||
set(CMAKE_C_FLAGS_DEBUG "-O0 -g3")
|
||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O3 -g3")
|
||||
set(CMAKE_C_FLAGS_RELEASE "-O3 -g3")
|
||||
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3")
|
||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O3 -g3")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -g3")
|
||||
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${TV2HV_CORE_LINKER_ARGS} -Wl,-z,noexecstack,-z,relro,-z,now")
|
||||
Reference in New Issue
Block a user