diff options
Diffstat (limited to 'cmake/opentrack-platform.cmake')
-rw-r--r-- | cmake/opentrack-platform.cmake | 204 |
1 files changed, 112 insertions, 92 deletions
diff --git a/cmake/opentrack-platform.cmake b/cmake/opentrack-platform.cmake index eced4201..638260f1 100644 --- a/cmake/opentrack-platform.cmake +++ b/cmake/opentrack-platform.cmake @@ -21,133 +21,153 @@ # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE "RELEASE" CACHE STRING "" FORCE) - set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install") -endif() +include_guard(GLOBAL) -if(APPLE) - if(NOT CMAKE_OSX_ARCHITECTURES) - set(CMAKE_OSX_ARCHITECTURES "x86_64") - endif() +if(MSVC AND MSVC_VERSION LESS "1915" AND NOT ".${CMAKE_CXX_COMPILER_ID}" STREQUAL ".Clang") + message(FATAL_ERROR "Visual Studio too old. Use Visual Studio 2017 or newer.") endif() -if(MSVC AND MSVC_VERSION LESS "1900" AND NOT ".${CMAKE_CXX_COMPILER_ID}" STREQUAL ".Clang") - message(FATAL_ERROR "Visual Studio too old. Use Visual Studio 2015 Update 3 or newer.") +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # for clang + +string(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE) +set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING "" FORCE) + +include_directories("${CMAKE_SOURCE_DIR}") + +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_DEFAULT 20) +set(CMAKE_CXX_STANDARD_REQUIRED TRUE) +set(CMAKE_CXX_EXTENSIONS FALSE) + +set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) +set(CMAKE_SKIP_INSTALL_RPATH FALSE) +set(CMAKE_SKIP_RPATH FALSE) +set(CMAKE_INCLUDE_CURRENT_DIR ON) +set(CMAKE_AUTOMOC OFF) +set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) + +set(CMAKE_C_VISIBILITY_PRESET hidden) +set(CMAKE_CXX_VISIBILITY_PRESET hidden) + + +if(NOT WIN32 AND NOT APPLE) + include(opentrack-pkg-config) endif() if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set(CMAKE_COMPILER_IS_GNUCXX TRUE) - set(CMAKE_COMPILER_IS_CLANG TRUE) + set(CMAKE_COMPILER_IS_CLANGXX TRUE) endif() if(CMAKE_C_COMPILER_ID STREQUAL "Clang") set(CMAKE_COMPILER_IS_GNUCC TRUE) - set(CMAKE_COMPILER_IS_GNUC TRUE) set(CMAKE_COMPILER_IS_CLANG TRUE) endif() -if((NOT CMAKE_COMPILER_IS_GNUCXX) EQUAL (NOT (NOT CMAKE_COMPILER_IS_GNUCC))) - message(FATAL_ERROR "use either use both gcc and g++ or neither") +if(APPLE AND NOT CMAKE_OSX_ARCHITECTURES) + set(CMAKE_OSX_ARCHITECTURES "x86_64") + set(opentrack-intel TRUE) +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "amd64.*|x86_64.*|AMD64.*|i[0-9]86.*|x86.*") + set(opentrack-intel TRUE) +elseif(MSVC AND CMAKE_SYSTEM_NAME STREQUAL "Windows" AND CMAKE_SYSTEM_PROCESSOR STREQUAL "") + set(opentrack-intel TRUE) +else() + set(opentrack-intel FALSE) +endif() + +if(CMAKE_SIZEOF_VOID_P GREATER_EQUAL 8) + set(opentrack-64bit TRUE) +else() + set(opentrack-64bit FALSE) endif() IF(CMAKE_SYSTEM_NAME STREQUAL "Linux") set(LINUX TRUE) endif() -if(MSVC) - add_definitions(-DNOMINMAX -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS -D_NO_DEBUG_HEAP) - add_definitions(-D_ITERATOR_DEBUG_LEVEL=0) - add_definitions(-D_HAS_EXCEPTIONS=0) - add_definitions(-D_SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING -D_SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Zi") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Zi") - - if(NOT CMAKE_COMPILER_IS_CLANG) - if(MSVC_VERSION GREATER 1909) # visual studio 2017 - set(__stuff "-permissive-") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${__stuff}") - set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} ${__stuff}") - endif() +if(CMAKE_COMPILER_IS_GNUCXX AND NOT APPLE) + add_compile_options(-fuse-cxa-atexit) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std:c++latest") - else() - set(__stuff "-fms-compatibility -fms-compatibility-version=1911 -fms-extensions") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${__stuff} -std:c++latest -Xclang -std=c++17") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${__stuff}") + if(LINUX) # assume binutils + add_link_options(-Wl,--exclude-libs,ALL) + add_link_options(-Wl,-z,relro,-z,now) + add_link_options(-Wl,--as-needed) + add_link_options(-Wl,-z,noexecstack) + add_compile_options(-fno-plt) endif() - - if(opentrack-64bit) - set(ent "-HIGHENTROPYVA") - else() - set(ent "") - endif() - - foreach (i SHARED MODULE EXE) - set(CMAKE_${i}_LINKER_FLAGS "${CMAKE_${i}_LINKER_FLAGS} -DYNAMICBASE -NXCOMPAT -DEBUG ${ent}") - endforeach() endif() if(WIN32) - if(CMAKE_COMPILER_IS_GNUCXX AND NOT MSVC) - set(CMAKE_RC_COMPILER_INIT i686-w64-mingw32-windres) - set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> --use-temp-file -O coff <DEFINES> -i <SOURCE> -o <OBJECT>") - endif() - enable_language(RC) - add_definitions(-D_USE_MATH_DEFINES=1) -endif(WIN32) - -if(opentrack-install-rpath) - set(CMAKE_INSTALL_RPATH "${opentrack-install-rpath}") -else() - set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}") + add_definitions(-D_USE_MATH_DEFINES=1 -DSTRSAFE_NO_DEPRECATE) endif() -set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) -set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) -set(CMAKE_SKIP_INSTALL_RPATH FALSE) -set(CMAKE_SKIP_RPATH FALSE) -set(CMAKE_INCLUDE_CURRENT_DIR ON) -set(CMAKE_AUTOMOC OFF) -set(CMAKE_POSITION_INDEPENDENT_CODE ON) +if(MINGW) + add_definitions(-DMINGW_HAS_SECURE_API) +endif() -include_directories("${CMAKE_SOURCE_DIR}") +if(MSVC) + set(CMAKE_RC_FLAGS "/nologo /DWIN32") -if(APPLE) - set(CMAKE_MACOSX_RPATH OFF) - set(apple-frameworks "-stdlib=libc++ -framework Cocoa -framework CoreFoundation -lobjc -lz -framework Carbon") - set(CMAKE_SHARED_LINKER_FLAGS " ${apple-frameworks} ${CMAKE_SHARED_LINKER_FLAGS}") - #set(CMAKE_STATIC_LINKER_FLAGS " ${apple-frameworks} ${CMAKE_STATIC_LINKER_FLAGS}") - set(CMAKE_EXE_LINKER_FLAGS " ${apple-frameworks} ${CMAKE_EXE_LINKER_FLAGS}") - set(CMAKE_MODULE_LINKER_FLAGS " ${apple-frameworks} ${CMAKE_MODULE_LINKER_FLAGS}") - set(CMAKE_CXX_FLAGS " -stdlib=libc++ ${CMAKE_CXX_FLAGS}") -endif() + add_definitions(-DNOMINMAX) + add_definitions(-DWIN32_LEAN_AND_MEAN) + add_definitions(-D_CRT_SECURE_NO_WARNINGS) + add_definitions(-D_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1) + add_definitions(-D_SCL_SECURE_NO_WARNINGS) -if(NOT MSVC) - set(CMAKE_CXX_STANDARD 17) - set(CMAKE_CXX_STANDARD_DEFAULT 17) - set(CMAKE_CXX_STANDARD_REQUIRED TRUE) - set(CMAKE_CXX_EXTENSIONS FALSE) -endif() + #add_compile_options(-EHsc) + add_definitions(-D_HAS_EXCEPTIONS=0) -foreach(k _RELEASE _DEBUG _RELWITHDEBINFO _MINSIZEREL) - set(CMAKE_C_FLAGS${k} "${CMAKE_C_FLAGS${k}} -UNDEBUG") - set(CMAKE_CXX_FLAGS${k} "${CMAKE_CXX_FLAGS${k}} -UNDEBUG") -endforeach() + add_definitions(-D_ENABLE_EXTENDED_ALIGNED_STORAGE) + add_definitions(-D_ENABLE_ATOMIC_ALIGNMENT_FIX) + add_definitions(-D_SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING) + add_definitions(-D_SILENCE_CXX17_ADAPTOR_TYPEDEFS_DEPRECATION_WARNING) + add_definitions(-D_SILENCE_STDEXT_ARR_ITERS_DEPRECATION_WARNING) -set_property(GLOBAL PROPERTY USE_FOLDERS OFF) + add_compile_options(-permissive-) -# nix -rdynamic passed from Linux-GNU.cmake -if(CMAKE_COMPILER_IS_GNUCXX) - set(__LINUX_COMPILER_GNU 1) - set(CMAKE_SHARED_LIBRARY_LINK_C_FLAGS) - set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS) -endif() + if(opentrack-64bit) + add_link_options(-HIGHENTROPYVA) + endif() -if(MINGW) - add_definitions(-DMINGW_HAS_SECURE_API) + add_link_options(-DYNAMICBASE -NXCOMPAT) + add_link_options(-WX) + add_link_options(-ignore:4020) + add_link_options(-ignore:4217) # debug build + + + if(MSVC_VERSION GREATER_EQUAL 1913) + if(NOT MSVC_VERSION GREATER_EQUAL 1929) + add_compile_options(-experimental:external) + endif() + add_compile_options(-external:W0 -external:anglebrackets) + endif() + add_compile_options(-Zc:preprocessor) + #add_compile_options(-Zc:inline) + + #C4457: declaration of 'id' hides function parameter + #C4456: declaration of 'i' hides previous local declaration + #C4263 - member function does not override any base class virtual member function + #C4264 - no override available for virtual member function from base class, function is hidden + #C4265 - class has virtual functions, but destructor is not virtual + #C4266 - no override available for virtual member function from base type, function is hidden + #C4928 - illegal copy-initialization, more than one user-defined conversion has been implicitly applied + #C4200: nonstandard extension used: zero-sized array in struct/union + #C4459: declaration of 'eps' hides global declaration + + set(warns-disable 4530 4577 4789 4244 4702 4530 4244 4127 4458 4456 4251 4100 4702 4457 4200 4459) + + foreach(i ${warns-disable}) + add_compile_options(-wd${i}) + endforeach() endif() -if(UNIX AND NOT APPLE) +if(NOT MSVC) include(FindPkgConfig) endif() + +if(LINUX AND CMAKE_COMPILER_IS_CLANG) + link_libraries(atomic) +endif() |