summaryrefslogtreecommitdiffhomepage
path: root/cmake/opentrack-platform.cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/opentrack-platform.cmake')
-rw-r--r--cmake/opentrack-platform.cmake195
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()