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.cmake204
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()