diff options
Diffstat (limited to 'cmake/opentrack-platform.cmake')
| -rw-r--r-- | cmake/opentrack-platform.cmake | 195 |
1 files changed, 117 insertions, 78 deletions
diff --git a/cmake/opentrack-platform.cmake b/cmake/opentrack-platform.cmake index ab3a5f8b..638260f1 100644 --- a/cmake/opentrack-platform.cmake +++ b/cmake/opentrack-platform.cmake @@ -21,114 +21,153 @@ # ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR # OTHER DEALINGS IN THE SOFTWARE. +include_guard(GLOBAL) + +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() + +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 "cannot use GNU C xor GNU C++") +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) - add_definitions(-D_ITERATOR_DEBUG_LEVEL=0 -D_HAS_ITERATOR_DEBUGGING=0 -D_SECURE_SCL=0) - set(CMAKE_CXX_FLAGS "-std:c++14 ${CMAKE_CXX_FLAGS}") - #set(CMAKE_C_FLAGS " -DNOMINMAX -D_CRT_SECURE_NO_WARNINGS ${CMAKE_C_FLAGS} ") +if(CMAKE_COMPILER_IS_GNUCXX AND NOT APPLE) + add_compile_options(-fuse-cxa-atexit) - foreach (i SHARED MODULE EXE) - set(CMAKE_${i}_LINKER_FLAGS "-DYNAMICBASE -NXCOMPAT ${CMAKE_${i}_LINKER_FLAGS} ") - endforeach() + 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() endif() if(WIN32) - if(CMAKE_COMPILER_IS_GNUCXX) - 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 14) - set(CMAKE_CXX_STANDARD_DEFAULT 14) - set(CMAKE_CXX_STANDARD_REQUIRED TRUE) - set(CMAKE_CXX_EXTENSIONS FALSE) -endif() + #add_compile_options(-EHsc) + add_definitions(-D_HAS_EXCEPTIONS=0) -set_property(GLOBAL PROPERTY USE_FOLDERS OFF) + 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) -function(fix_flags lang flag replacement) - set(part "-") - set(pfx "-") - if(MSVC) - set(part "[-/]") - set(pfx "/") - endif() - if(".${replacement}" STREQUAL ".") - set(pfx "") + add_compile_options(-permissive-) + + if(opentrack-64bit) + add_link_options(-HIGHENTROPYVA) endif() - otr_escape_string(flag "${flag}") - foreach(k _DEBUG _RELEASE _MINSIZEREL _RELWITHDEBINFO "") - set(tmp "${CMAKE_${lang}_FLAGS${k}}") - if(NOT ".${replacement}" STREQUAL ".") - string(APPEND replacement " ") - endif() - string(REGEX REPLACE "(^| )${part}${flag}(\$| )" " ${pfx}${replacement}" CMAKE_${lang}_FLAGS${k} "${CMAKE_${lang}_FLAGS${k}}") - if(NOT ".${tmp}" STREQUAL ".${CMAKE_${lang}_FLAGS${k}}") - set(CMAKE_${lang}_FLAGS${k} "${CMAKE_${lang}_FLAGS${k}}" CACHE STRING "" FORCE) - else() - set(CMAKE_${lang}_FLAGS${k} "${CMAKE_${lang}_FLAGS${k}} ${pfx}${replacement}" CACHE STRING "" FORCE) + + 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() -endfunction() - -# 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(MINGW) - add_definitions(-DMINGW_HAS_SECURE_API) +if(NOT MSVC) + include(FindPkgConfig) endif() -set(opencv-modules opencv_calib3d opencv_core opencv_features2d opencv_imgcodecs opencv_imgproc opencv_objdetect opencv_videoio) +if(LINUX AND CMAKE_COMPILER_IS_CLANG) + link_libraries(atomic) +endif() |
