summaryrefslogtreecommitdiffhomepage
path: root/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake')
-rw-r--r--cmake/FindEigen3.cmake84
-rw-r--r--cmake/FindONNXRuntime.cmake104
-rw-r--r--cmake/GetGitRevisionDescription.cmake2
-rw-r--r--cmake/GetGitRevisionDescription.cmake.in2
-rw-r--r--cmake/apple.cmake15
-rw-r--r--cmake/linux.cmake6
-rw-r--r--cmake/mingw-w64.cmake128
-rw-r--r--cmake/mrproper.cmake (renamed from cmake/opentrack-clean-build-directory.cmake)8
-rw-r--r--cmake/msvc.cmake231
-rw-r--r--cmake/opentrack-boilerplate.cmake364
-rw-r--r--cmake/opentrack-check-build-directory.cmake7
-rw-r--r--cmake/opentrack-hier.cmake116
-rw-r--r--cmake/opentrack-i18n.cmake97
-rw-r--r--cmake/opentrack-install.cmake118
-rw-r--r--cmake/opentrack-load-user-settings.cmake36
-rw-r--r--cmake/opentrack-mrproper.cmake (renamed from cmake/opentrack-build.cmake)10
-rw-r--r--cmake/opentrack-opencv.cmake4
-rw-r--r--cmake/opentrack-org.cmake21
-rw-r--r--cmake/opentrack-pkg-config.cmake31
-rw-r--r--cmake/opentrack-platform.cmake195
-rw-r--r--cmake/opentrack-policy.cmake47
-rw-r--r--cmake/opentrack-qt.cmake90
-rw-r--r--cmake/opentrack-rift.cmake37
-rw-r--r--cmake/opentrack-variant.cmake32
-rw-r--r--cmake/opentrack-version.cmake33
-rw-r--r--cmake/opentrack-word-size.cmake11
-rw-r--r--cmake/translation-stub.ts4
27 files changed, 1110 insertions, 723 deletions
diff --git a/cmake/FindEigen3.cmake b/cmake/FindEigen3.cmake
deleted file mode 100644
index 2206ce43..00000000
--- a/cmake/FindEigen3.cmake
+++ /dev/null
@@ -1,84 +0,0 @@
-# - Try to find Eigen3 lib
-#
-# This module supports requiring a minimum version, e.g. you can do
-# find_package(Eigen3 3.1.2)
-# to require version 3.1.2 or newer of Eigen3.
-#
-# Once done this will define
-#
-# EIGEN3_FOUND - system has eigen lib with correct version
-# EIGEN3_INCLUDE_DIR - the eigen include directory
-# EIGEN3_VERSION - eigen version
-
-# Copyright (c) 2006, 2007 Montel Laurent, <montel@kde.org>
-# Copyright (c) 2008, 2009 Gael Guennebaud, <g.gael@free.fr>
-# Copyright (c) 2009 Benoit Jacob <jacob.benoit.1@gmail.com>
-# Redistribution and use is allowed according to the terms of the 2-clause BSD license.
-
-if(NOT Eigen3_FIND_VERSION)
- if(NOT Eigen3_FIND_VERSION_MAJOR)
- set(Eigen3_FIND_VERSION_MAJOR 2)
- endif(NOT Eigen3_FIND_VERSION_MAJOR)
- if(NOT Eigen3_FIND_VERSION_MINOR)
- set(Eigen3_FIND_VERSION_MINOR 91)
- endif(NOT Eigen3_FIND_VERSION_MINOR)
- if(NOT Eigen3_FIND_VERSION_PATCH)
- set(Eigen3_FIND_VERSION_PATCH 0)
- endif(NOT Eigen3_FIND_VERSION_PATCH)
-
- set(Eigen3_FIND_VERSION "${Eigen3_FIND_VERSION_MAJOR}.${Eigen3_FIND_VERSION_MINOR}.${Eigen3_FIND_VERSION_PATCH}")
-endif(NOT Eigen3_FIND_VERSION)
-
-macro(_eigen3_check_version)
- file(READ "${EIGEN3_INCLUDE_DIR}/Eigen/src/Core/util/Macros.h" _eigen3_version_header)
-
- string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen3_world_version_match "${_eigen3_version_header}")
- set(EIGEN3_WORLD_VERSION "${CMAKE_MATCH_1}")
- string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen3_major_version_match "${_eigen3_version_header}")
- set(EIGEN3_MAJOR_VERSION "${CMAKE_MATCH_1}")
- string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen3_minor_version_match "${_eigen3_version_header}")
- set(EIGEN3_MINOR_VERSION "${CMAKE_MATCH_1}")
-
- set(EIGEN3_VERSION ${EIGEN3_WORLD_VERSION}.${EIGEN3_MAJOR_VERSION}.${EIGEN3_MINOR_VERSION})
- if(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
- set(EIGEN3_VERSION_OK FALSE)
- else(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
- set(EIGEN3_VERSION_OK TRUE)
- endif(${EIGEN3_VERSION} VERSION_LESS ${Eigen3_FIND_VERSION})
-
- if(NOT EIGEN3_VERSION_OK)
-
- message(STATUS "Eigen3 version ${EIGEN3_VERSION} found in ${EIGEN3_INCLUDE_DIR}, "
- "but at least version ${Eigen3_FIND_VERSION} is required")
- endif(NOT EIGEN3_VERSION_OK)
-endmacro(_eigen3_check_version)
-
-if (EIGEN3_INCLUDE_DIR)
-
- # in cache already
- _eigen3_check_version()
- set(EIGEN3_FOUND ${EIGEN3_VERSION_OK})
-
-else (EIGEN3_INCLUDE_DIR)
-
- find_path(EIGEN3_INCLUDE_DIR NAMES signature_of_eigen3_matrix_library
- PATHS
- ${CMAKE_INSTALL_PREFIX}/include
- ${KDE4_INCLUDE_DIR}
- PATH_SUFFIXES eigen3 eigen
- )
-
- if(EIGEN3_INCLUDE_DIR)
- _eigen3_check_version()
- endif(EIGEN3_INCLUDE_DIR)
-
- #include(FindPackageHandleStandardArgs)
- #find_package_handle_standard_args(Eigen3 DEFAULT_MSG EIGEN3_INCLUDE_DIR EIGEN3_VERSION_OK)
-
- mark_as_advanced(EIGEN3_INCLUDE_DIR)
-
-endif(EIGEN3_INCLUDE_DIR)
-
-if(EIGEN3_FOUND)
- add_definitions(-DEIGEN_MPL2_ONLY)
-endif()
diff --git a/cmake/FindONNXRuntime.cmake b/cmake/FindONNXRuntime.cmake
new file mode 100644
index 00000000..60ddfc2b
--- /dev/null
+++ b/cmake/FindONNXRuntime.cmake
@@ -0,0 +1,104 @@
+# FindONNXRuntime
+# ===============
+#
+# Find an ONNX Runtime installation.
+# ONNX Runtime is a cross-platform inference and training machine-learning
+# accelerator.
+#
+# Input variables
+# ---------------
+#
+# ONNXRuntime_ROOT Set root installation. This is an environment
+# variable
+# ONNXRuntime_DIR CMake variable to set the installation root.
+#
+# Output variable
+# ---------------
+#
+# ONNXRuntime_FOUND True if headers and requested libraries were found
+# ONNXRuntime_LIBRARIES Component libraries to be linked.
+# ONNXRuntime_INCLUDE_DIRS Include directories.
+
+set(ONNXRuntime_DIR CACHE PATH "Root directory of the ONNX Runtime installation")
+
+# This script is mostly inspired by the guide there:
+# https://gitlab.kitware.com/cmake/community/-/wikis/doc/tutorials/How-To-Find-Libraries
+# Finding of the DLLs was added so we can install them with the application.
+# We adhere to modern CMake standards and also define an import library.
+
+# Determine architecture string for subdir in nuget package
+# This is only relevant when we point `ONNXRuntime_DIR` to the
+# extracted nuget package content.
+if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ if (CMAKE_SIZEOF_VOID_P GREATER_EQUAL 8)
+ set(ONNXRuntime_Arch "linux-x64")
+ else()
+ message(FATAL_ERROR "32 Bit Linux builds are not supported")
+ endif()
+elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows")
+ if (CMAKE_SIZEOF_VOID_P GREATER_EQUAL 8)
+ set(ONNXRuntime_Arch "win-x64")
+ else()
+ set(ONNXRuntime_Arch "win-x86")
+ endif()
+endif()
+
+
+find_library(ONNXRuntime_LIBRARY onnxruntime
+ HINTS ${ONNXRuntime_DIR}
+ PATH_SUFFIXES
+ # For a "normal" installation
+ "lib" "lib64" "bin"
+ # For the nuget package
+ "runtimes/${ONNXRuntime_Arch}/native"
+ )
+
+if(WIN32)
+ SET(CMAKE_FIND_LIBRARY_SUFFIXES ".dll" ".DLL")
+ find_library(ONNXRuntime_RUNTIME onnxruntime
+ HINTS ${ONNXRuntime_DIR}
+ PATH_SUFFIXES
+ # For a "normal" installation
+ "lib" "lib64" "bin"
+ # For the nuget package
+ "runtimes/${ONNXRuntime_Arch}/native"
+ )
+else()
+ SET(ONNXRuntime_RUNTIME ${ONNXRuntime_LIBRARY})
+endif()
+
+find_path(ONNXRuntime_INCLUDE_DIR onnxruntime_cxx_api.h
+ HINTS ${ONNXRuntime_DIR}
+ PATH_SUFFIXES
+ # For .nuget packages
+ "build/native/include"
+ # For when the directory structure of the onnx source repo is preserved
+ "include/onnxruntime/core/session"
+ "include/onnxruntime"
+ # For when we copy the files somewhere
+ "include"
+ )
+
+
+include(FindPackageHandleStandardArgs)
+# handle the QUIETLY and REQUIRED arguments and set ONNXRuntime_FOUND to TRUE
+# if all listed variables are TRUE
+find_package_handle_standard_args(ONNXRuntime DEFAULT_MSG
+ ONNXRuntime_LIBRARY ONNXRuntime_INCLUDE_DIR ONNXRuntime_RUNTIME)
+
+if(ONNXRuntime_FOUND)
+ if(NOT TARGET onnxruntime::onnxruntime)
+ # Following this quide:
+ # https://cmake.org/cmake/help/git-stage/guide/importing-exporting/index.html#importing-libraries
+ add_library(onnxruntime::onnxruntime SHARED IMPORTED)
+ set_target_properties(onnxruntime::onnxruntime PROPERTIES
+ IMPORTED_LOCATION "${ONNXRuntime_RUNTIME}"
+ INTERFACE_INCLUDE_DIRECTORIES "${ONNXRuntime_INCLUDE_DIR}"
+ IMPORTED_IMPLIB "${ONNXRuntime_LIBRARY}")
+ endif()
+endif()
+
+mark_as_advanced(ONNXRuntime_INCLUDE_DIR ONNXRuntime_LIBRARY ONNXRuntime_RUNTIME)
+
+set(ONNXRuntime_INCLUDE_DIRS ${ONNXRuntime_INCLUDE_DIR})
+set(ONNXRuntime_LIBRARIES ${ONNXRuntime_LIBRARY}) \ No newline at end of file
diff --git a/cmake/GetGitRevisionDescription.cmake b/cmake/GetGitRevisionDescription.cmake
index e4ac79c0..0c016cc0 100644
--- a/cmake/GetGitRevisionDescription.cmake
+++ b/cmake/GetGitRevisionDescription.cmake
@@ -30,6 +30,8 @@
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
+include_guard(GLOBAL)
+
if(__get_git_revision_description)
return()
endif()
diff --git a/cmake/GetGitRevisionDescription.cmake.in b/cmake/GetGitRevisionDescription.cmake.in
index 888ce13a..032dda66 100644
--- a/cmake/GetGitRevisionDescription.cmake.in
+++ b/cmake/GetGitRevisionDescription.cmake.in
@@ -13,6 +13,8 @@
# (See accompanying file LICENSE_1_0.txt or copy at
# http://www.boost.org/LICENSE_1_0.txt)
+include_guard(GLOBAL)
+
set(HEAD_HASH)
file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
diff --git a/cmake/apple.cmake b/cmake/apple.cmake
index 627ef3c1..64e4d628 100644
--- a/cmake/apple.cmake
+++ b/cmake/apple.cmake
@@ -1,12 +1,19 @@
set(CMAKE_BUILD_TYPE_INIT RELEASE)
-set(CMAKE_CXX_FLAGS "-arch x86_64 -stdlib=libc++" CACHE STRING "" FORCE)
-set(CMAKE_C_FLAGS "-arch x86_64" CACHE STRING "" FORCE)
+if("$ENV{OTR_OSX_ARCH}" STREQUAL "arm64")
+ set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "" FORCE)
+ set(opentrack-intel FALSE)
+else()
+ set(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE STRING "" FORCE)
+ set(opentrack-intel TRUE)
+endif()
-set(CMAKE_C_FLAGS_RELEASE "-ffast-math -O3 -flto -fvisibility=hidden -g" CACHE STRING "" FORCE)
+set(CMAKE_CXX_FLAGS "-stdlib=libc++" CACHE STRING "" FORCE)
+
+set(CMAKE_C_FLAGS_RELEASE "-ffast-math -O3 -flto -g" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_RELEASE " ${CMAKE_C_FLAGS_RELEASE}" CACHE STRING "" FORCE)
-set(cmake-link-common "-stdlib=libc++ -arch x86_64")
+set(cmake-link-common "-stdlib=libc++")
set(CMAKE_EXE_LINKER_FLAGS "${cmake-link-common} -Wl,-stack_size,0x4000000" CACHE STRING "" FORCE)
set(CMAKE_SHARED_LINKER_FLAGS ${cmake-link-common} CACHE STRING "" FORCE)
set(CMAKE_MODULE_LINKER_FLAGS ${cmake-link-common} CACHE STRING "" FORCE)
diff --git a/cmake/linux.cmake b/cmake/linux.cmake
index 945f7e77..5513f511 100644
--- a/cmake/linux.cmake
+++ b/cmake/linux.cmake
@@ -1,13 +1,13 @@
set(CMAKE_BUILD_TYPE_INIT RELEASE)
-set(CMAKE_CXX_FLAGS "-fPIC" CACHE STRING "" FORCE)
-set(CMAKE_C_FLAGS "-fPIC" CACHE STRING "" FORCE)
+set(CMAKE_CXX_FLAGS "" CACHE STRING "" FORCE)
+set(CMAKE_C_FLAGS "" CACHE STRING "" FORCE)
set(CMAKE_AR "gcc-ar" CACHE STRING "" FORCE)
set(CMAKE_NM "gcc-nm" CACHE STRING "" FORCE)
set(CMAKE_RANLIB "gcc-ranlib" CACHE STRING "" FORCE)
-set(CMAKE_C_FLAGS_RELEASE "-ffast-math -O3 -flto -fuse-linker-plugin -fvisibility=hidden -fPIC" CACHE STRING "" FORCE)
+set(CMAKE_C_FLAGS_RELEASE "-ffast-math -O3 -flto -fuse-linker-plugin -fPIC" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_RELEASE " ${CMAKE_C_FLAGS_RELEASE} " CACHE STRING "" FORCE)
set(cmake-link-common "")
diff --git a/cmake/mingw-w64.cmake b/cmake/mingw-w64.cmake
index 01bf9209..e8c0f062 100644
--- a/cmake/mingw-w64.cmake
+++ b/cmake/mingw-w64.cmake
@@ -3,38 +3,43 @@
# mkdir build && cd build && cmake -DCMAKE_TOOLCHAIN_FILE=$(pwd)/../cmake/mingw-w64.cmake
# -sh 20140922
-SET(CMAKE_SYSTEM_NAME Windows)
-SET(CMAKE_SYSTEM_VERSION 1)
+include("${CMAKE_CURRENT_LIST_DIR}/opentrack-policy.cmake" NO_POLICY_SCOPE)
+
+string(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE)
-set(CMAKE_BUILD_TYPE_INIT RELEASE)
-# for nmake/jom build directories
-if(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE "RELEASE" CACHE STRING "" FORCE)
+if(NOT CMAKE_INSTALL_PREFIX)
+ set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE STRING "" FORCE)
endif()
-unset(c)
-unset(e)
-# specify the cross compiler
+SET(CMAKE_SYSTEM_NAME Windows)
+SET(CMAKE_SYSTEM_VERSION 5)
+set(CMAKE_SYSROOT "/usr/i686-w64-mingw32")
+
+set(c "")
+
+## specify the cross compiler
if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
- set(p C:/msys64/mingw32/bin/)
+ #set(p D:/cygwin64/opt/bin/)
+ #set(p "/mingw32/bin/")
+ set(p "")
set(e .exe)
+ set(c "${p}")
+else()
+ set(p "")
+ set(c "i686-w64-mingw32-")
+ set(e "")
endif()
-#set(c ${p}i686-w64-mingw32-)
-set(c "${p}")
-#set(CMAKE_MAKE_PROGRAM ${p}/mingw32-make.exe CACHE FILEPATH "" FORCE)
SET(CMAKE_C_COMPILER ${c}gcc${e})
SET(CMAKE_CXX_COMPILER ${c}g++${e})
set(CMAKE_RC_COMPILER ${c}windres${e})
set(CMAKE_LINKER ${c}ld${e})
-set(CMAKE_AR ${c}gcc-ar${e} CACHE STRING "" FORCE)
-set(CMAKE_NM ${c}gcc-nm${e} CACHE STRING "" FORCE)
-set(CMAKE_RANLIB ${c}gcc-ranlib${e} CACHE STRING "" FORCE)
-set(CMAKE_OBJCOPY ${c}objcopy${e} CACHE STRING "" FORCE)
-set(CMAKE_OBJDUMP ${c}objdump${e} CACHE STRING "" FORCE)
-set(CMAKE_STRIP ${c}strip${e} CACHE STRING "" FORCE)
-
-#SET(CMAKE_FIND_ROOT_PATH /usr/i686-w64-mingw32)
+set(CMAKE_AR ${c}gcc-ar${e})
+set(CMAKE_NM ${c}gcc-nm${e})
+set(CMAKE_RANLIB ${c}gcc-ranlib${e})
+set(CMAKE_OBJCOPY ${c}objcopy${e})
+set(CMAKE_OBJDUMP ${c}objdump${e})
+set(CMAKE_STRIP ${c}strip${e})
# search for programs in the host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
@@ -43,32 +48,53 @@ SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# oldest CPU supported here is Northwood-based Pentium 4. -sh 20150811
-set(fpu "-ffast-math -mfpmath=both -mstackrealign -falign-functions=16 -falign-loops=16")
-set(cpu "-O3 -march=pentium4 -mtune=skylake -msse -msse2 -mno-sse3 -mno-avx -frename-registers")
-set(lto "-flto -fuse-linker-plugin -flto-compression-level=9 -flto-partition=balanced -fipa-pta -flto-odr-type-merging")
-set(bloat "")
+set(fpu "-ffast-math -mfpmath=sse -mstackrealign")
+set(cpu "-O3 -msse3 -mtune=skylake")
+#set(lto "-fno-lto -fno-use-linker-plugin -flto-compression-level=9 -flto-partition=balanced -fno-ipa-pta -fno-lto-odr-type-merging")
+set(lto "")
set(sections "-ffunction-sections -fdata-sections")
-set(cc "-fdump-statistics-details -fdump-ipa-cgraph -floop-nest-optimize")
+set(cc "")
+#set(cc "-fdump-statistics-details -fdump-ipa-cgraph")
+
+set(noisy-warns "")
+set(suggest-final "")
+set(numerics "")
+set(missing-override "")
+if(WARNINGS_ENABLE)
+ if(WARNINGS_FINAL_SUGGESTIONS)
+ set(suggest-final "-Wsuggest-final-types")
+ endif()
+ if(WARNINGS_NUMERIC)
+ set(numerics "-Wdouble-promotion")
+ endif()
+ if(WARNINGS_MISSING_OVERRIDE)
+ set(missing-override "-Wsuggest-override")
+ endif()
+ set(noisy-warns "${suggest-final} ${numerics}")
+endif()
set(_CXX_WARNS "")
set(_C_WARNS "")
+
if(WARNINGS_ENABLE)
- set(usual-warns "-Wdelete-non-virtual-dtor -Wno-suggest-override -Wno-odr -Wno-attributes -Wcast-align")
+ set(usual-warns "-Wstrict-aliasing=3 -Wstrict-overflow=4 -Wdelete-non-virtual-dtor -Wno-odr -Wattributes")
set(_C_WARNS "-Wall -Wextra -Wpedantic -Wcast-align")
- set(_CXX_WARNS "${_C_WARNS} ${usual-warns} ${clang-warns} ${noisy-warns} ${missing-override}")
+ set(_CXX_WARNS "${_C_WARNS} ${usual-warns} ${noisy-warns} ${missing-override}")
endif()
-set(ccflags-common "-fvisibility=hidden -pipe")
-set(_CXXFLAGS "${bloat} ${ccflags-common} ${_CXX_WARNS}")
+set(ccflags-common "-pipe -g3")
+set(_CXXFLAGS "${ccflags-common} ${_CXX_WARNS}")
set(_CFLAGS "${ccflags-common} -std=c11 ${_C_WARNS}")
-set(_CFLAGS_RELEASE "-s ${cpu} ${fpu} ${lto} ${sections} ${cc}")
+set(_CFLAGS_RELEASE "${cpu} ${fpu} ${lto} ${sections} ${cc}")
set(_CFLAGS_DEBUG "-g -O0 -fstack-protector-strong")
-set(_CXXFLAGS_RELEASE "${_CFLAGS_RELEASE} -std=c++14 ${cc}")
+set(_CXXFLAGS_RELEASE "${_CFLAGS_RELEASE} ${cc}")
set(_CXXFLAGS_DEBUG "${_CFLAGS_DEBUG}")
-set(_LDFLAGS "-Wl,--dynamicbase,--no-seh,--nxcompat,--as-needed,--pic-executable")
-set(_LDFLAGS_RELEASE "-Wl,--gc-sections,--exclude-libs,ALL -ffunction-sections")
+add_definitions(-DSTRSAFE_NO_DEPRECATE)
+
+#set(_LDFLAGS "-Wl,--dynamicbase,--nxcompat,--as-needed -Wl,--gc-sections,--exclude-libs,ALL")
+set(_LDFLAGS_RELEASE "")
set(_LDFLAGS_DEBUG "")
set(enable-val FALSE)
@@ -82,36 +108,14 @@ set(WARNINGS_FINAL_SUGGESTIONS FALSE CACHE BOOL "Emit very noisy warnings at com
set(WARNINGS_NUMERIC ${enable-val} CACHE BOOL "Emit very noisy warnings at compile-time")
set(WARNINGS_MISSING_OVERRIDE FALSE CACHE BOOL "Emit very noisy warnings at compile-time")
-set(noisy-warns "")
-set(suggest-final "")
-set(numerics "")
-set(missing-override "")
-if(WARNINGS_ENABLE)
- if(WARNINGS_FINAL_SUGGESTIONS)
- set(suggest-final "-Wsuggest-final-types -Wsuggest-final-methods")
- endif()
- if(WARNINGS_NUMERIC)
- set(numerics "-Wdouble-promotion -Wsign-compare")
- endif()
- if(WARNINGS_MISSING_OVERRIDE)
- set(missing-override "-Wsuggest-override")
- endif()
- set(noisy-warns "${suggest-final} ${numerics}")
-endif()
-
-set(clang-warns "")
-if(CMAKE_COMPILER_IS_CLANG)
- set(clang-warns "-Wweak-vtables")
-endif()
-
foreach(j C CXX)
foreach(i "" _DEBUG _RELEASE)
- set(CMAKE_${j}_FLAGS${i} "${_${j}FLAGS${i}} ${CMAKE_${j}_FLAGS${j}}")
+ set(CMAKE_${j}_FLAGS${i} "${CMAKE_${j}_FLAGS${j}}")
endforeach()
endforeach()
-foreach(j "" _DEBUG _RELEASE)
- foreach(i MODULE EXE SHARED)
- set(CMAKE_${i}_LINKER_FLAGS${j} "${_LDFLAGS${j}} ${CMAKE_${i}_LINKER_FLAGS${j}}")
- endforeach()
-endforeach()
+#foreach(j "" _DEBUG _RELEASE)
+# foreach(i MODULE EXE SHARED)
+# set(CMAKE_${i}_LINKER_FLAGS${j} "${_LDFLAGS${j}} ${CMAKE_${i}_LINKER_FLAGS${j}}")
+# endforeach()
+#endforeach()
diff --git a/cmake/opentrack-clean-build-directory.cmake b/cmake/mrproper.cmake
index c0934af1..1e8713ef 100644
--- a/cmake/opentrack-clean-build-directory.cmake
+++ b/cmake/mrproper.cmake
@@ -1,4 +1,4 @@
-list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
-include(opentrack-build)
-
-cleanup_build_dir()
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
+include(opentrack-mrproper)
+
+cleanup_build_dir()
diff --git a/cmake/msvc.cmake b/cmake/msvc.cmake
index 823bfffe..b390c120 100644
--- a/cmake/msvc.cmake
+++ b/cmake/msvc.cmake
@@ -3,7 +3,24 @@
# mkdir build && cmake -DCMAKE_TOOLCHAIN_FILE=$(pwd)/../cmake/msvc.cmake build/
SET(CMAKE_SYSTEM_NAME Windows)
-SET(CMAKE_SYSTEM_VERSION 1)
+SET(CMAKE_SYSTEM_VERSION 5.01)
+if(opentrack-64bit)
+ set(CMAKE_SYSTEM_PROCESSOR AMD64)
+else()
+ set(CMAKE_SYSTEM_PROCESSOR x86)
+endif()
+
+if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR CMAKE_INSTALL_PREFIX STREQUAL "")
+ set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "" FORCE)
+endif()
+
+if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/opentrack-policy.cmake")
+ include("${CMAKE_CURRENT_LIST_DIR}/opentrack-policy.cmake" NO_POLICY_SCOPE)
+endif()
+
+#set(CMAKE_GENERATOR Ninja)
+#set(CMAKE_MAKE_PROGRAM ninja.exe)
+set(CMAKE_ASM_NASM_COMPILER nasm.exe)
# search for programs in the host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
@@ -11,92 +28,178 @@ SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-# oldest CPU supported here is Northwood-based Pentium 4. -sh 20150811
-set(cc "/O2it /Ob2 /arch:SSE2 /fp:fast /GS- /GF /GL /Gw /Gy")
-set(warns_ "")
+#add_definitions(-D_ITERATOR_DEBUG_LEVEL=0)
+#add_compile_options(-Qvec-report:2)
+#add_compile_options(-d2cgsummary)
+add_definitions(-D_HAS_EXCEPTIONS=0)
-#C4244: 'return': conversion from '__int64' to 'long', possible loss of data
-set(warns-disable 4530 4577 4789 4244)
+if(DEFINED CMAKE_TOOLCHAIN_FILE)
+ # ignore cmake warning: Manually-specified variable not used by the project
+ set(CMAKE_TOOLCHAIN_FILE "${CMAKE_TOOLCHAIN_FILE}")
+endif()
-foreach(i ${warns-disable})
- set(warns_ "${warns_} /wd${i}")
-endforeach()
+include("${CMAKE_CURRENT_LIST_DIR}/opentrack-policy.cmake" NO_POLICY_SCOPE)
+set(CMAKE_POLICY_DEFAULT_CMP0069 NEW CACHE INTERNAL "" FORCE)
+#set(CMAKE_INTERPROCEDURAL_OPTIMIZATION ON)
+
+set(CMAKE_C_EXTENSIONS FALSE)
+set(CMAKE_CXX_EXTENSIONS FALSE)
+
+set(CMAKE_CROSSCOMPILING 0)
+
+function(sets type)
+ set(i 0)
+ list(LENGTH ARGN max)
+ math(EXPR foo "${max} % 2")
+ if(NOT foo EQUAL 0)
+ message(FATAL_ERROR "argument count not even")
+ endif()
+ while(i LESS max)
+ list(GET ARGN "${i}" name)
+ math(EXPR i "${i} + 1")
+ list(GET ARGN "${i}" value)
+ math(EXPR i "${i} + 1")
+ set(${name} "${value}" CACHE "${type}" "" FORCE)
+ endwhile()
+endfunction()
if(CMAKE_PROJECT_NAME STREQUAL "opentrack")
- #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
+ #include("${CMAKE_CURRENT_LIST_DIR}/opentrack-policy.cmake" NO_POLICY_SCOPE)
- #C4928 - illegal copy-initialization, more than one user-defined conversion has been implicitly applied
+ add_compile_options("-W4")
- set(warns 4263 4264 4266 4928)
- set(warns-noerr 4265)
+ # C4265: class has virtual functions, but destructor is not virtual
+ # C4005: macro redefinition
+ set(warns-error 4265 4005)
- foreach(i ${warns})
- set(warns_ "${warns_} /w1${i} /we${i}")
+ foreach(i ${warns-error})
+ add_compile_options(-w1${i} -we${i})
endforeach()
+endif()
- foreach(i ${warns-noerr})
- set(warns_ "${warns_} /w1${i}")
- endforeach()
- set(cc "${cc} /GR-")
+if(CMAKE_PROJECT_NAME STREQUAL "QtBase")
+ set(QT_BUILD_TOOLS_WHEN_CROSSCOMPILING TRUE CACHE BOOL "" FORCE)
+ set(QT_DEBUG_OPTIMIZATION_FLAGS TRUE CACHE BOOL "" FORCE)
+ set(QT_USE_DEFAULT_CMAKE_OPTIMIZATION_FLAGS TRUE CACHE BOOL "" FORCE)
+
+ set(FEATURE_debug OFF)
+ set(FEATURE_debug_and_release OFF)
+ set(FEATURE_force_debug_info ON)
+ set(FEATURE_ltcg ON)
+ set(FEATURE_shared ON)
+endif()
+
+if(CMAKE_PROJECT_NAME STREQUAL "OpenCV")
+ set(PARALLEL_ENABLE_PLUGINS FALSE)
+ set(HIGHGUI_ENABLE_PLUGINS FALSE)
+ set(VIDEOIO_ENABLE_PLUGINS FALSE)
+
+ set(OPENCV_SKIP_MSVC_EXCEPTIONS_FLAG TRUE)
+ set(OPENCV_DISABLE_THREAD_SUPPORT TRUE)
+
+ set(ENABLE_FAST_MATH ON)
+ set(BUILD_TESTS OFF)
+ set(BUILD_PERF_TESTS OFF)
+ set(BUILD_opencv_apps OFF)
+ set(BUILD_opencv_gapi OFF)
endif()
-set(silly "${warns_} /MT /Zi /Gm")
+if(CMAKE_PROJECT_NAME STREQUAL "TestOscpack")
+ add_compile_definitions(OSC_HOST_LITTLE_ENDIAN)
+endif()
+
+set(opentrack-simd "SSE2")
+
+if(CMAKE_PROJECT_NAME STREQUAL "onnxruntime")
+ sets(BOOL
+ ONNX_USE_MSVC_STATIC_RUNTIME OFF
+ protobuf_MSVC_STATIC_RUNTIME OFF
+ onnxruntime_USE_AVX OFF
+ onnxruntime_USE_AVX2 OFF
+ onnxruntime_USE_AVX512 OFF
+ onnxruntime_BUILD_BENCHMARKS OFF
+ onnxruntime_BUILD_FOR_NATIVE_MACHINE OFF
+ onnxruntime_BUILD_SHARED_LIB ON
+ onnxruntime_BUILD_UNIT_TESTS OFF
+ protobuf_BUILD_EXAMPLES OFF
+ protobuf_BUILD_SHARED_LIBS OFF
+ ONNX_BUILD_BENCHMARKS OFF
+ ONNX_BUILD_TESTS OFF
+ ONNX_DISABLE_EXCEPTIONS OFF # important!
+ ONNX_GEN_PB_TYPE_STUBS OFF
+ onnxruntime_DISABLE_CONTRIB_OPS ON
+ BUILD_TESTING OFF
+ )
+ if(opentrack-64bit)
+ sets(BOOL
+ onnxruntime_USE_AVX ON
+ )
+ endif()
+endif()
+
+if(opentrack-64bit)
+ set(opentrack-simd "AVX")
+endif()
-set(_CFLAGS "${silly}")
-set(_CXXFLAGS "${silly}")
-set(_CFLAGS_RELEASE "${cc}")
-set(_CFLAGS_DEBUG "/GS /sdl /Gs /guard:cf")
-set(_CXXFLAGS_RELEASE "${cc}")
+set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
+add_compile_options(-MD)
+
+add_link_options(-cgthreads:1)
+
+set(_CFLAGS "-diagnostics:caret -Zc:inline -Zc:preprocessor -wd4117 -Zi -Zf -Zo -bigobj -cgthreads1 -vd0 -permissive-")
+#if(NOT opentrack-no-static-crt)
+# set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded" CACHE INTERNAL "" FORCE)
+#else()
+# set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL" CACHE INTERNAL "" FORCE)
+#endif()
+set(_CXXFLAGS "${_CFLAGS} -Zc:throwingNew -Zc:lambda")
+set(_CFLAGS_RELEASE "-O2 -Oit -Oy- -Ob3 -fp:fast -GS- -GF -GL -Gw -Gy")
+if(NOT opentrack-simd STREQUAL "")
+ set(_CFLAGS_RELEASE "${_CFLAGS_RELEASE} -arch:${opentrack-simd}")
+endif()
+set(_CFLAGS_DEBUG "-guard:cf -MTd -Gs0 -RTCs")
+set(_CXXFLAGS_RELEASE "${_CFLAGS_RELEASE}")
set(_CXXFLAGS_DEBUG "${_CFLAGS_DEBUG}")
-set(_LDFLAGS "/WX /DEBUG")
-set(_LDFLAGS_RELEASE "/LTCG:INCREMENTAL /OPT:REF /OPT:ICF=10")
-set(_LDFLAGS_DEBUG "")
+set(_LDFLAGS "-WX")
+set(_LDFLAGS_RELEASE "-OPT:REF,ICF=10 -LTCG -DEBUG:FULL")
+set(_LDFLAGS_DEBUG "-DEBUG:FULL")
-set(_LDFLAGS_STATIC "/WX")
-set(_LDFLAGS_STATIC_RELEASE "/LTCG:INCREMENTAL")
+set(_LDFLAGS_STATIC "-WX")
+set(_LDFLAGS_STATIC_RELEASE "-LTCG")
set(_LDFLAGS_STATIC_DEBUG "")
-foreach(j C CXX)
- foreach(i "" _DEBUG _RELEASE)
- set(OVERRIDE_${j}_FLAGS${i} "" CACHE STRING "")
- set(CMAKE_${j}_FLAGS${i} "${_${j}FLAGS${i}} ${OVERRIDE_${j}_FLAGS${i}}" CACHE STRING "" FORCE)
- endforeach()
- set(CMAKE_${j}_FLAGS "${_${j}FLAGS} ${_${j}_WARNS} ${OVERRIDE_${j}_FLAGS}" CACHE STRING "" FORCE)
+set(CMAKE_BUILD_TYPE_INIT "RELEASE" CACHE INTERNAL "")
+
+string(TOUPPER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE)
+set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING "" FORCE)
+if (NOT CMAKE_BUILD_TYPE STREQUAL "RELEASE" AND NOT CMAKE_BUILD_TYPE STREQUAL "DEBUG")
+ set(CMAKE_BUILD_TYPE "RELEASE" CACHE STRING "" FORCE)
+endif()
+set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS RELEASE DEBUG)
+
+foreach(k "" "_${CMAKE_BUILD_TYPE}")
+ set("FLAGS_CXX${k}" "" CACHE STRING "More CMAKE_CXX_FLAGS${k}")
+ #set("FLAGS_C${k}" "" CACHE STRING "More CMAKE_C_FLAGS${k} (almost never used)")
+ set("FLAGS_LD${k}" "" CACHE STRING "More CMAKE_(SHARED|EXE|MODULE)_LINKER_FLAGS${k}")
+ set("FLAGS_ARCHIVE${k}" "" CACHE STRING "More CMAKE_STATIC_LINKER_FLAGS${k}")
endforeach()
+foreach(k "" _DEBUG _RELEASE)
+ #set(CMAKE_STATIC_LINKER_FLAGS${k} "${CMAKE_STATIC_LINKER_FLAGS${k}} ${_LDFLAGS_STATIC${k}}")
+ set(CMAKE_STATIC_LINKER_FLAGS${k} "${_LDFLAGS_STATIC${k}} ${FLAGS_ARCHIVE${k}}" CACHE STRING "" FORCE)
+endforeach()
foreach(j "" _DEBUG _RELEASE)
foreach(i MODULE EXE SHARED)
- set(OVERRIDE_LDFLAGS${j} "" CACHE STRING "")
- set(CMAKE_${i}_LINKER_FLAGS${j} "${_LDFLAGS${j}} ${OVERRIDE_LDFLAGS${j}}" CACHE STRING "" FORCE)
+ #set(CMAKE_${i}_LINKER_FLAGS${j} "${CMAKE_${i}_LINKER_FLAGS${j}} ${_LDFLAGS${j}}")
+ set(CMAKE_${i}_LINKER_FLAGS${j} "${_LDFLAGS${j}} ${FLAGS_LD${j}}" CACHE STRING "" FORCE)
endforeach()
endforeach()
-set(OVERRIDE_LDFLAGS_STATIC "" CACHE STRING "")
-set(OVERRIDE_LDFLAGS_STATIC_RELEASE "" CACHE STRING "")
-set(OVERRIDE_LDFLAGS_STATIC_DEBUG "" CACHE STRING "")
-
-set(CMAKE_STATIC_LINKER_FLAGS "${_LDFLAGS_STATIC} ${OVERRIDE_LDFLAGS_STATIC}" CACHE STRING "" FORCE)
-set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${_LDFLAGS_STATIC_RELEASE} ${OVERRIDE_LDFLAGS_STATIC_RELEASE}" CACHE STRING "" FORCE)
-set(CMAKE_STATIC_LINKER_FLAGS_DEBUG "${_LDFLAGS_STATIC_DEBUG} ${OVERRIDE_LDFLAGS_STATIC_DEBUG}" CACHE STRING "" FORCE)
-
-set(CMAKE_BUILD_TYPE_INIT RELEASE)
-# for nmake/jom build directories
-if(NOT CMAKE_BUILD_TYPE)
- set(CMAKE_BUILD_TYPE "RELEASE" CACHE STRING "" FORCE)
-endif()
-
-if(CMAKE_PROJECT_NAME STREQUAL "opentrack")
- foreach (i CMAKE_CXX_FLAGS CMAKE_C_FLAGS)
- string(REGEX MATCH "((^| )[-/][W][0-9]( |\$))" ret "${${i}}")
- if(ret STREQUAL "")
- set(${i} "-W3 ${${i}}" CACHE STRING "" FORCE)
- endif()
+foreach(j C CXX)
+ foreach(i "" _DEBUG _RELEASE)
+ #set(CMAKE_${j}_FLAGS${i} "${CMAKE_${j}_FLAGS${i}} ${_${j}FLAGS${i}}")
+ set(CMAKE_${j}_FLAGS${i} "${_${j}FLAGS${i}} ${FLAGS_${j}${i}}" CACHE STRING "" FORCE)
endforeach()
-endif()
-
-set(CMAKE_RC_FLAGS "-nologo -DWIN32" CACHE STRING "" FORCE)
+endforeach()
diff --git a/cmake/opentrack-boilerplate.cmake b/cmake/opentrack-boilerplate.cmake
index 11e5c71d..e325cd6a 100644
--- a/cmake/opentrack-boilerplate.cmake
+++ b/cmake/opentrack-boilerplate.cmake
@@ -1,160 +1,187 @@
-set(opentrack-perms PERMISSIONS WORLD_READ WORLD_EXECUTE OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE)
+include_guard(GLOBAL)
-set(new-hier-path "#pragma once
-#ifndef OPENTRACK_NO_QT_PATH
+set(opentrack-perms-file WORLD_READ OWNER_WRITE OWNER_READ GROUP_READ)
+set(opentrack-perms-dir WORLD_READ WORLD_EXECUTE OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE)
+set(opentrack-perms-exec "${opentrack-perms-dir}")
-# include <QCoreApplication>
-# include <QString>
+set(new-hier-path "#pragma once
+#ifdef QT_CORE_LIB
+# include \"compat/base-path.hpp\"
+#endif
-# define OPENTRACK_BASE_PATH (([]() -> const QString& { \\
- const static QString const__path___ = QCoreApplication::applicationDirPath(); \\
- return const__path___; \\
- })())
+#if defined __APPLE__
+# define OPENTRACK_LIBRARY_EXTENSION \"dylib\"
+#elif defined _WIN32
+# define OPENTRACK_LIBRARY_EXTENSION \"dll\"
+#else
+# define OPENTRACK_LIBRARY_EXTENSION \"so\"
#endif
-#define OPENTRACK_LIBRARY_PATH \"${opentrack-hier-path}\"
-#define OPENTRACK_DOC_PATH \"${opentrack-hier-doc}\"
-#define OPENTRACK_CONTRIB_PATH \"${opentrack-hier-doc}contrib/\"
-#define OPENTRACK_I18N_PATH \"${opentrack-i18n-path}\"
+
+#define OPENTRACK_LIBRARY_PREFIX \"\"
+#define OPENTRACK_LIBRARY_PATH \"${opentrack-runtime-libexec}\"
+#define OPENTRACK_DOC_PATH \"${opentrack-runtime-doc}\"
+#define OPENTRACK_CONTRIB_PATH \"${opentrack-runtime-doc}contrib/\"
+#define OPENTRACK_I18N_PATH \"${opentrack-runtime-i18n}\"
")
-set(hier-path-filename "${CMAKE_BINARY_DIR}/opentrack-library-path.h")
-set(orig-hier-path "")
-if(EXISTS "${hier-path-filename}")
- file(READ ${hier-path-filename} orig-hier-path)
-endif()
-if(NOT (orig-hier-path STREQUAL new-hier-path))
- file(WRITE "${hier-path-filename}" "${new-hier-path}")
-endif()
+function(otr_write_library_paths)
+ set(hier-path-filename "${CMAKE_BINARY_DIR}/opentrack-library-path.hxx")
+ set(orig-hier-path "")
+ if(EXISTS "${hier-path-filename}")
+ file(READ ${hier-path-filename} orig-hier-path)
+ endif()
+ if(NOT (orig-hier-path STREQUAL new-hier-path))
+ file(WRITE "${hier-path-filename}" "${new-hier-path}")
+ endif()
+endfunction()
+
+otr_write_library_paths()
function(otr_glob_sources var)
- set(dir "${CMAKE_CURRENT_SOURCE_DIR}")
- file(GLOB ${var}-cc ${dir}/*.cpp ${dir}/*.c)
- file(GLOB ${var}-hh ${dir}/*.h ${dir}/*.hpp)
- file(GLOB ${var}-res ${dir}/*.rc)
- foreach(f ${var}-res)
- set_source_files_properties(${f} PROPERTIES LANGUAGE RC)
+ set(basedir "${CMAKE_CURRENT_SOURCE_DIR}")
+ foreach(i ui rc res cc cxx hh all)
+ set(${var}-${i} "")
endforeach()
- file(GLOB ${var}-ui ${dir}/*.ui)
- file(GLOB ${var}-rc ${dir}/*.qrc)
- set(${var}-all ${${var}-cc} ${${var}-hh} ${${var}-rc} ${${var}-res})
- foreach(i ui rc res cc hh all)
- set(${var}-${i} "${${var}-${i}}" PARENT_SCOPE)
- endforeach()
-endfunction()
-
-function(otr_qt n)
- if(".${${n}-hh}" STREQUAL ".")
- message(FATAL_ERROR "project ${n} not globbed")
- endif()
- qt5_wrap_cpp(${n}-moc ${${n}-hh} OPTIONS --no-notes)
- qt5_wrap_ui(${n}-uih ${${n}-ui})
- qt5_add_resources(${n}-rcc ${${n}-rc})
- foreach(i moc uih rcc)
- set(${n}-${i} "${${n}-${i}}" PARENT_SCOPE)
- list(APPEND ${n}-all ${${n}-${i}})
+ foreach(dir ${ARGN})
+ set(dir "${basedir}/${dir}")
+ file(GLOB cxx CONFIGURE_DEPENDS "${dir}/*.cpp")
+ file(GLOB cc CONFIGURE_DEPENDS "${dir}/*.c")
+ file(GLOB hh CONFIGURE_DEPENDS "${dir}/*.h" "${dir}/*.hpp" "${dir}/*.inc")
+ file(GLOB res CONFIGURE_DEPENDS "${dir}/*.rc")
+ foreach(f res)
+ set_source_files_properties(${f} PROPERTIES LANGUAGE RC)
+ endforeach()
+ file(GLOB ui CONFIGURE_DEPENDS "${dir}/*.ui")
+ file(GLOB rc CONFIGURE_DEPENDS "${dir}/*.qrc")
+ set(all ${cc} ${cxx} ${hh} ${res})
+ foreach(i ui rc res cc cxx hh all)
+ set(${var}-${i} "${${var}-${i}}" ${${i}} PARENT_SCOPE)
+ endforeach()
endforeach()
- set(${n}-all "${${n}-all}" PARENT_SCOPE)
endfunction()
function(otr_fixup_subsystem n)
if(MSVC)
- if(SDK_CONSOLE_DEBUG)
- set(subsystem CONSOLE)
- else()
- set(subsystem WINDOWS)
- endif()
- set(loc "$<TARGET_FILE:${n}>")
+ otr_find_msvc_editbin(editbin-pathname)
+ set(subsystem WINDOWS)
get_property(type TARGET "${n}" PROPERTY TYPE)
if (NOT type STREQUAL "STATIC_LIBRARY")
+ set(loc "$<TARGET_FILE:${n}>")
add_custom_command(TARGET "${n}"
POST_BUILD
- COMMAND editbin -nologo -SUBSYSTEM:${subsystem},5.01 -OSVERSION:5.1 \"${loc}\")
+ COMMAND "${editbin-pathname}" -nologo -SUBSYSTEM:${subsystem},5.01 -OSVERSION:5.1 \"${loc}\")
endif()
endif()
endfunction()
function(otr_compat target)
if(NOT MSVC)
- set_property(SOURCE ${${target}-moc} APPEND_STRING PROPERTY COMPILE_FLAGS "-w -Wno-error")
+ set_property(SOURCE ${${target}-moc} APPEND PROPERTY COMPILE_OPTIONS "-w;-Wno-error")
endif()
- if(WIN32)
- target_link_libraries(${target} dinput8 dxguid strmiids)
+
+ if(UNIX) # no-op on OSX
+ target_link_libraries(${target} m)
+ endif()
+
+ get_property(type TARGET "${n}" PROPERTY TYPE)
+ if (type STREQUAL "EXECUTABLE")
+ otr_fixup_subsystem(${target})
endif()
- otr_fixup_subsystem(${target})
endfunction()
-include(CMakeParseArguments)
+function(otr_is_sln_generator var)
+ string(FIND "${CMAKE_GENERATOR}" "Visual Studio " is-msvc)
+ if(is-msvc EQUAL 0)
+ set(${var} TRUE PARENT_SCOPE)
+ else()
+ set(${var} FALSE PARENT_SCOPE)
+ endif()
+endfunction()
-function(otr_is_target_c_only ret srcs)
- set(val TRUE)
- foreach(i ${srcs})
- get_filename_component(ext "${i}" EXT)
- string(TOLOWER "${ext}" ext)
- if(ext STREQUAL ".cpp")
- set(val FALSE)
- break()
- endif()
- endforeach()
- set(${ret} "${val}" PARENT_SCOPE)
+function(otr_find_msvc_editbin varname)
+ if(MSVC)
+ get_filename_component(linker-dir "${CMAKE_LINKER}" DIRECTORY)
+ set("${varname}" "${linker-dir}/editbin.exe" PARENT_SCOPE)
+ else()
+ set("${varname}" "editbin" PARENT_SCOPE)
+ endif()
endfunction()
-function(otr_install_pdb_current_project)
- if(MSVC AND FALSE)
- file(GLOB_RECURSE pdbs "${CMAKE_CURRENT_BINARY_DIR}/*.pdb")
- install(FILES ${pdbs} DESTINATION "${subdir}" ${opentrack-perms})
+function(otr_install_pdb_current_project target)
+ if(MSVC)
+ install(FILES "$<TARGET_PDB_FILE:${target}>" DESTINATION "${opentrack-debug}" PERMISSIONS ${opentrack-perms-file})
endif()
endfunction()
-function(otr_module n)
- message(STATUS "module ${n}")
+function(otr_module n_)
+ message(STATUS "module ${n_}")
cmake_parse_arguments(arg
- "STATIC;NO-COMPAT;BIN;EXECUTABLE;NO-QT;WIN32-CONSOLE;NO-INSTALL"
+ "STATIC;NO-COMPAT;BIN;EXECUTABLE;NO-QT;NO-I18N;WIN32-CONSOLE;NO-INSTALL;RELINK"
"LINK;COMPILE"
- "SOURCES"
+ "SOURCES;SUBDIRS"
${ARGN}
- )
+ )
+
if(NOT "${arg_UNPARSED_ARGUMENTS}" STREQUAL "")
- message(FATAL_ERROR "otr_module bad formals: ${arg_UNPARSED_ARGUMENTS}")
+ message(FATAL_ERROR "otr_module(${n_}) bad formals: ${arg_UNPARSED_ARGUMENTS}")
endif()
- set(n_orig "${n}")
- set(n "opentrack-${n}")
+ set(n "opentrack-${n_}")
- otr_glob_sources(${n})
- otr_is_target_c_only(is-c-only "${${n}-all}")
- if(NOT (is-c-only OR arg_NO-QT))
- otr_qt(${n})
+ if(NOT arg_SUBDIRS)
+ otr_glob_sources(${n} .)
else()
- set(arg_NO-QT TRUE)
+ otr_glob_sources(${n} . ${arg_SUBDIRS})
endif()
- list(APPEND ${n}-all ${arg_SOURCES})
- if(arg_NO-QT)
- set(arg_NO-COMPAT TRUE)
- endif()
-
- string(TOUPPER arg_WIN32-CONSOLE "${arg_WIN32-CONSOLE}")
+ list(APPEND ${n}-all ${arg_SOURCES})
- if(NOT WIN32)
- set(subsys "")
- elseif(MSVC)
- set(subsys "WIN32")
- elseif(arg_WIN32-CONSOLE)
- set(subsys "")
+ if(NOT arg_NO-QT)
+ otr_qt(${n})
else()
- set(subsys "WIN32")
+ set(arg_NO-COMPAT TRUE)
+ set(arg_NO-I18N TRUE)
endif()
if(arg_EXECUTABLE)
+ if (APPLE)
+ set(subsys "MACOSX_BUNDLE")
+ elseif(NOT WIN32)
+ set(subsys "")
+ elseif(arg_WIN32-CONSOLE)
+ set(subsys "")
+ else()
+ set(subsys "WIN32")
+ endif()
+
add_executable(${n} ${subsys} "${${n}-all}")
+ set_target_properties(${n} PROPERTIES
+ SUFFIX "${opentrack-binary-suffix}"
+ OUTPUT_NAME "${n_}"
+ PREFIX "")
+ if(MSVC)
+ target_compile_options(${n} PRIVATE -GA)
+ endif()
else()
set(link-mode SHARED)
if (arg_STATIC)
set(link-mode STATIC)
endif()
add_library(${n} ${link-mode} "${${n}-all}")
+ set_property(TARGET "${n}" PROPERTY PREFIX "")
+ endif()
+
+ if(NOT arg_NO-QT)
+ otr_qt2("${n}")
+ endif()
+
+ set(self "${n}" PARENT_SCOPE)
+
+ if(NOT arg_RELINK AND FALSE)
+ set_property(TARGET ${n} PROPERTY LINK_DEPENDS_NO_SHARED TRUE)
+ else()
+ set_property(TARGET ${n} PROPERTY LINK_DEPENDS_NO_SHARED FALSE)
endif()
- set_property(TARGET ${n} PROPERTY PREFIX "")
if(NOT arg_NO-QT)
target_link_libraries(${n} ${MY_QT_LIBS})
@@ -164,60 +191,111 @@ function(otr_module n)
target_link_libraries(${n} opentrack-api opentrack-options opentrack-compat)
endif()
+ string(REPLACE "-" "_" build-n ${n_})
+ string(TOUPPER "${build-n}" build-n)
+ target_compile_definitions(${n} PRIVATE "BUILD_${build-n}")
+ include(opentrack-org)
+
+ if(arg_STATIC)
+ set(arg_NO-INSTALL TRUE)
+ endif()
+
otr_compat(${n})
- if(CMAKE_COMPILER_IS_GNUCXX)
- set(c-props "-fvisibility=hidden")
- if(NOT is-c-only)
- set(c-props "${c-props} -fuse-cxa-atexit")
+ if(CMAKE_COMPILER_IS_CLANGXX AND (arg_EXECUTABLE OR NOT arg_BIN))
+ set(opts
+ weak-vtables
+ header-hygiene
+ )
+ foreach(k ${opts})
+ target_compile_options(${n} PRIVATE "-Wno-${k}")
+ endforeach()
+ endif()
+
+ if(NOT arg_NO-INSTALL)
+ # Librarys/executable
+ if(arg_BIN)
+ if (APPLE)
+ install(TARGETS "${n}"
+ RUNTIME DESTINATION "${opentrack-bin}"
+ BUNDLE DESTINATION "${opentrack-bin}"
+ LIBRARY DESTINATION "${opentrack-bin}/Library"
+ RESOURCE DESTINATION "${opentrack-bin}/opentrack.app/Resource"
+ PERMISSIONS ${opentrack-perms-exec})
+ else()
+ install(TARGETS "${n}"
+ RUNTIME DESTINATION "${opentrack-bin}"
+ LIBRARY DESTINATION "${opentrack-libexec}"
+ PERMISSIONS ${opentrack-perms-exec})
+ endif()
+ else()
+ # Plugins
+ install(TARGETS "${n}"
+ RUNTIME DESTINATION "${opentrack-libexec}"
+ LIBRARY DESTINATION "${opentrack-libexec}"
+ PERMISSIONS ${opentrack-perms-exec})
+ endif()
+
+ if(MSVC)
+ set(opentrack_install-debug-info FALSE CACHE BOOL "Whether to build and install debug info at install time")
+ if(opentrack_install-debug-info)
+ otr_install_pdb_current_project(${n})
+ endif()
endif()
endif()
- if(CMAKE_COMPILER_IS_GNUCXX AND NOT APPLE)
- set(l-props "-Wl,--as-needed")
+ if(NOT arg_NO-I18N)
+ otr_i18n_for_target_directory(${n_})
endif()
- set_property(TARGET ${n} APPEND_STRING PROPERTY COMPILE_FLAGS "${c-props} ${arg_COMPILE}")
- set_property(TARGET ${n} APPEND_STRING PROPERTY LINK_FLAGS "${l-props} ${arg_LINK}")
+ set_property(GLOBAL APPEND PROPERTY opentrack-all-modules "${n_}")
+ set_property(GLOBAL APPEND PROPERTY opentrack-all-source-dirs "${CMAKE_CURRENT_SOURCE_DIR}")
- if(NOT arg_STATIC)
- string(REGEX REPLACE "^opentrack-" "" n_ "${n}")
- string(REPLACE "-" "_" n_ ${n_})
- string(TOUPPER "${n_}" n__)
- target_compile_definitions(${n} PRIVATE "BUILD_${n__}")
+ #make_directory("${CMAKE_CURRENT_BINARY_DIR}")
+endfunction()
- if(NOT arg_NO-INSTALL)
- if(arg_BIN AND WIN32)
- set(subdir ".")
- install(TARGETS "${n}" RUNTIME DESTINATION . ${opentrack-perms})
- else()
- set(subdir "${opentrack-hier-pfx}")
- install(TARGETS "${n}" ${opentrack-hier-str} ${opentrack-perms})
- endif()
- otr_install_pdb_current_project()
- endif()
- else()
- target_compile_definitions(${n} PRIVATE "STATIC_LIBRARY=1")
- endif()
-
- set_property(GLOBAL APPEND PROPERTY opentrack-all-modules "${n}")
-
- foreach(i ${opentrack-all-translations})
- set(t "${CMAKE_CURRENT_SOURCE_DIR}/lang/${i}.ts")
- add_custom_command(OUTPUT "${t}"
- COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_CURRENT_SOURCE_DIR}/lang"
- COMMAND "${Qt5_DIR}/../../../bin/lupdate" -silent -recursive -no-obsolete -locations relative . -ts "${t}"
- WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
- DEPENDS ${${n}-cc} ${${n}-hh} ${${n}-ui} ${${n}-rc}
- COMMENT "Running lupdate for ${n}/${i}")
- set(target-name "i18n-lang-${i}-module-${n_orig}")
- add_custom_target(${target-name} DEPENDS "${t}")
- set_property(GLOBAL APPEND PROPERTY "opentrack-ts-targets-${i}" "${target-name}")
- set_property(GLOBAL APPEND PROPERTY "opentrack-ts-files-${i}" "${t}")
+function(otr_add_target_dirs var)
+ set(globs "")
+ foreach(k ${ARGN})
+ list(APPEND globs "${k}/CMakeLists.txt")
endforeach()
+ set(projects "")
+ file(GLOB projects CONFIGURE_DEPENDS ${globs})
+ list(SORT projects)
+ set("${var}" "${projects}" PARENT_SCOPE)
+endfunction()
- if(NOT arg_NO-INSTALL)
- set_property(GLOBAL APPEND PROPERTY opentrack-all-source-dirs "${CMAKE_CURRENT_SOURCE_DIR}")
+function(otr_pdb_for_dll varname path)
+ set("${varname}" "" PARENT_SCOPE)
+ get_filename_component(dir "${path}" DIRECTORY)
+ get_filename_component(name-only "${path}" NAME_WE)
+ set(pdb-path "${dir}/${name-only}.pdb")
+ if(EXISTS "${pdb-path}")
+ set("${varname}" "${pdb-path}" PARENT_SCOPE)
endif()
endfunction()
+function(otr_install_lib target dest)
+ if(WIN32)
+ string(FIND "${target}" "/" idx)
+ if(idx EQUAL -1)
+ get_property(path TARGET "${target}" PROPERTY "LOCATION_${CMAKE_BUILD_TYPE}")
+ else()
+ set(path "${target}")
+ endif()
+ if(path STREQUAL "")
+ message(FATAL_ERROR "Can't find ${target}")
+ endif()
+ string(TOLOWER "${path}" path_)
+ if(NOT path_ MATCHES "\\.(a|lib)$")
+ if(MSVC AND opentrack_install-debug-info)
+ set(pdb-path "")
+ otr_pdb_for_dll(pdb-path "${path}")
+ if(pdb-path)
+ install(FILES "${pdb-path}" DESTINATION "${opentrack-debug}" PERMISSIONS ${opentrack-perms-exec})
+ endif()
+ endif()
+ install(FILES "${path}" DESTINATION "${dest}" PERMISSIONS ${opentrack-perms-exec})
+ endif()
+ endif()
+endfunction()
diff --git a/cmake/opentrack-check-build-directory.cmake b/cmake/opentrack-check-build-directory.cmake
deleted file mode 100644
index a9351b6a..00000000
--- a/cmake/opentrack-check-build-directory.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-get_filename_component(_abs_src_path ${CMAKE_SOURCE_DIR} REALPATH)
-string(TOLOWER ${_abs_src_path} _abs_src_path)
-get_filename_component(_abs_build_path ${CMAKE_BINARY_DIR} REALPATH)
-string(TOLOWER ${_abs_build_path} _abs_build_path)
-if(_abs_src_path STREQUAL _abs_build_path)
- message(FATAL_ERROR "source directory has to be different than build directory")
-endif()
diff --git a/cmake/opentrack-hier.cmake b/cmake/opentrack-hier.cmake
index 905625fb..bb1a435d 100644
--- a/cmake/opentrack-hier.cmake
+++ b/cmake/opentrack-hier.cmake
@@ -1,62 +1,54 @@
-# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
-# WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
-# WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
-# AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
-# DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-# PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-set(opentrack-install-rpath "")
-if(APPLE)
- set(opentrack-hier-pfx ".")
- set(opentrack-hier-path "/")
- set(opentrack-hier-doc "/")
- set(opentrack-hier-str RUNTIME DESTINATION . LIBRARY DESTINATION .)
- set(opentrack-doc-pfx "./doc")
- set(opentrack-doc-src-pfx "./source-code")
- set(opentrack-i18n-pfx "./i18n")
- set(opentrack-i18n-path "./i18n")
-elseif(WIN32)
- set(opentrack-hier-pfx "./modules")
- set(opentrack-hier-path "/modules/")
- set(opentrack-hier-doc "/doc/")
- set(opentrack-doc-pfx "./doc")
- set(opentrack-doc-src-pfx "./source-code")
- set(opentrack-hier-str RUNTIME DESTINATION ./modules/ LIBRARY DESTINATION ./modules/)
- set(opentrack-i18n-pfx "./i18n")
- set(opentrack-i18n-path "./i18n")
-else()
- set(opentrack-hier-pfx "libexec/opentrack")
- set(opentrack-hier-path "/../libexec/opentrack/")
- set(opentrack-hier-doc "/share/doc/opentrack/")
- set(opentrack-doc-pfx "./share/doc/opentrack")
- set(opentrack-doc-src-pfx "./share/doc/opentrack/source-code")
- set(opentrack-install-rpath "${CMAKE_INSTALL_PREFIX}/${opentrack-hier-pfx}")
- set(opentrack-hier-str ARCHIVE DESTINATION lib/opentrack LIBRARY DESTINATION ${opentrack-hier-pfx} RUNTIME DESTINATION bin)
- set(opentrack-i18n-pfx "./libexec/opentrack/i18n")
- set(opentrack-i18n-path "../libexec/opentrack/i18n")
-endif()
-
-function(otr_escape_string var str)
- string(REGEX REPLACE "([\$\\\"#])" "\\\\\\1" tmp__ "${str}")
- set(${var} "${tmp__}" PARENT_SCOPE)
-endfunction()
-
-function(otr_setup_refresh_install_dir)
- if((NOT CMAKE_INSTALL_PREFIX STREQUAL "") AND (NOT opentrack-doc-src-pfx STREQUAL ""))
- otr_escape_string(dir "${CMAKE_INSTALL_PREFIX}/${opentrack-doc-src-pfx}/")
- install(CODE "file(REMOVE_RECURSE \"${dir}\")")
- endif()
-endfunction()
-
-otr_setup_refresh_install_dir()
-
-set(opentrack-contrib-pfx "${opentrack-doc-pfx}/contrib")
-
-set(opentrack-binary-suffix "")
-if(APPLE)
- set(opentrack-binary-suffix ".bin")
-elseif(WIN32)
- set(opentrack-binary-suffix ".exe")
-endif()
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
+# WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
+# AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+# DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+# PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+include_guard(GLOBAL)
+
+if(APPLE)
+ set(opentrack-libexec "Plugins")
+ set(opentrack-runtime-libexec "/Plugins/") # MUST HAVE A TRAILING BACKSLASH, Used in APP
+ set(opentrack-runtime-doc "/") # MUST HAVE A TRAILING BACKSLASH
+ set(opentrack-bin "${CMAKE_INSTALL_PREFIX}")
+ set(opentrack-doc "doc")
+ set(opentrack-i18n "opentrack.app/Contents/Resources") # used during install
+ set(opentrack-runtime-i18n "../Resources/i18n") # used in application
+ set(opentrack-install-rpath "${CMAKE_INSTALL_PREFIX}/Library")
+elseif(WIN32)
+ set(opentrack-libexec "modules")
+ set(opentrack-runtime-libexec "/${opentrack-libexec}/") # MUST HAVE A TRAILING BACKSLASH
+ set(opentrack-runtime-doc "/doc/") # MUST HAVE A TRAILING BACKSLASH
+ set(opentrack-bin ".")
+ set(opentrack-doc "doc")
+ set(opentrack-i18n "i18n")
+ set(opentrack-runtime-i18n "./i18n")
+ set(opentrack-debug "./debug")
+ set(opentrack-install-rpath "")
+else()
+ set(opentrack-libexec "libexec/opentrack")
+ set(opentrack-runtime-libexec "/../${opentrack-libexec}/") # MUST HAVE A TRAILING BACKSLASH
+ set(opentrack-runtime-doc "/../share/doc/opentrack/") # MUST HAVE A TRAILING BACKSLASH
+ set(opentrack-bin "bin")
+ set(opentrack-doc "share/doc/opentrack")
+ set(opentrack-install-rpath "${CMAKE_INSTALL_PREFIX}/${opentrack-libexec}")
+ set(opentrack-i18n "share/opentrack/i18n")
+ set(opentrack-runtime-i18n "../share/opentrack/i18n")
+endif()
+
+function(otr_escape_string var str)
+ string(REGEX REPLACE "([^_A-Za-z0-9./:-])" "\\\\\\1" str "${str}")
+ set(${var} "${str}" PARENT_SCOPE)
+endfunction()
+
+set(opentrack-contrib-pfx "${opentrack-doc}/contrib")
+
+set(opentrack-binary-suffix "")
+if(WIN32)
+ set(opentrack-binary-suffix ".exe")
+endif()
+
+set(CMAKE_INSTALL_RPATH "${opentrack-install-rpath}")
diff --git a/cmake/opentrack-i18n.cmake b/cmake/opentrack-i18n.cmake
new file mode 100644
index 00000000..1f0c67d9
--- /dev/null
+++ b/cmake/opentrack-i18n.cmake
@@ -0,0 +1,97 @@
+include_guard(GLOBAL)
+
+add_custom_target(i18n-lupdate)
+add_custom_target(i18n-lrelease DEPENDS i18n-lupdate)
+add_custom_target(i18n ALL DEPENDS i18n-lrelease)
+
+function(otr_i18n_for_target_directory n)
+ set(k "opentrack-${n}")
+
+ get_property(lupdate-binary TARGET "${Qt5_LUPDATE_EXECUTABLE}" PROPERTY IMPORTED_LOCATION)
+
+ #make_directory("${CMAKE_CURRENT_BINARY_DIR}/lang")
+
+ set(ts-files "")
+ foreach(k ${opentrack_all-translations})
+ list(APPEND ts-files "${CMAKE_CURRENT_SOURCE_DIR}/lang/${k}.ts")
+ set_property(GLOBAL APPEND PROPERTY "opentrack-ts-files-${k}" "${CMAKE_CURRENT_SOURCE_DIR}/lang/${k}.ts")
+ endforeach()
+ set(stamp "${CMAKE_CURRENT_BINARY_DIR}/lupdate.stamp")
+
+ foreach(i ${opentrack_all-translations})
+ set(t "${CMAKE_CURRENT_SOURCE_DIR}/lang/${i}.ts")
+ set(input "${${k}-all}")
+ if (NOT EXISTS "${t}")
+ file(MAKE_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/lang")
+ file(READ "${CMAKE_SOURCE_DIR}/cmake/translation-stub.ts" stub)
+ string(REPLACE "@LANG@" "${i}" stub "${stub}")
+ file(WRITE "${t}" "${stub}")
+ endif()
+ endforeach()
+
+ # all sorts of problems
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
+ set(to-null "2>NUL")
+ else()
+ set(to-null "2>/dev/null")
+ endif()
+
+ add_custom_command(OUTPUT "${stamp}"
+ COMMAND "${lupdate-binary}"
+ -I "${CMAKE_SOURCE_DIR}"
+ -silent
+ -recursive
+ -no-obsolete
+ -locations none
+ .
+ -ts ${ts-files}
+ ${to-null}
+ COMMAND "${CMAKE_COMMAND}" -E touch "${stamp}"
+ #BYPRODUCTS ${ts-files}
+ DEPENDS "opentrack-${n}"
+ COMMENT "Running lupdate for ${n}"
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
+ set(target-name "i18n-module-${n}")
+ add_custom_target(${target-name} DEPENDS "${stamp}" COMMENT "")
+ add_dependencies(i18n-lupdate ${target-name})
+endfunction()
+
+function(otr_merge_translations)
+ otr_escape_string(i18n-pfx "${opentrack-i18n}")
+ #install(CODE "message(FATAL_ERROR \"foo \${CMAKE_INSTALL_PREFIX}\")")
+ #install(CODE "file(REMOVE_RECURSE \"\${CMAKE_INSTALL_PREFIX}/${i18n-pfx}\")")
+
+ foreach(i ${opentrack_all-translations})
+ get_property(ts-files GLOBAL PROPERTY "opentrack-ts-files-${i}")
+ get_property(lrelease-binary TARGET "${Qt5_LRELEASE_EXECUTABLE}" PROPERTY IMPORTED_LOCATION)
+
+ set(qm-output "${CMAKE_BINARY_DIR}/${i}.qm")
+
+ # whines about duplicate messages since tracker-pt-base is static
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
+ set(to-null "2>NUL")
+ else()
+ set(to-null "2>/dev/null")
+ endif()
+
+ add_custom_command(OUTPUT "${qm-output}"
+ COMMAND "${lrelease-binary}"
+ -nounfinished
+ -silent
+ #-verbose
+ ${ts-files}
+ -qm "${qm-output}"
+ ${to-null}
+ DEPENDS i18n-lupdate ${ts-files}
+ COMMENT "Running lrelease for ${i}"
+ WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")
+
+ set(target-name i18n-qm-${i})
+ add_custom_target(${target-name} DEPENDS "${qm-output}")
+ add_dependencies(i18n-lrelease ${target-name})
+
+ install(FILES "${qm-output}"
+ DESTINATION "${opentrack-i18n}"
+ PERMISSIONS ${opentrack-perms-file})
+ endforeach()
+endfunction()
diff --git a/cmake/opentrack-install.cmake b/cmake/opentrack-install.cmake
index 0dd5cc7d..5aac983b 100644
--- a/cmake/opentrack-install.cmake
+++ b/cmake/opentrack-install.cmake
@@ -1,96 +1,58 @@
-set(opentrack-perms_ WORLD_READ WORLD_EXECUTE OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE)
-set(opentrack-perms PERMISSIONS ${opentrack-perms_})
+include_guard(GLOBAL)
+macro(otr_install_misc path)
+ install(${ARGN} DESTINATION "${path}" PERMISSIONS ${opentrack-perms-file})
+endmacro()
-macro(otr_inst2 path)
- install(${ARGN} DESTINATION "${path}" ${opentrack-perms})
+macro(otr_install_exec path)
+ install(${ARGN} DESTINATION "${path}" PERMISSIONS ${opentrack-perms-file})
endmacro()
-macro(otr_inst_dir path)
+macro(otr_install_dir path)
install(
DIRECTORY ${ARGN} DESTINATION "${path}"
- FILE_PERMISSIONS ${opentrack-perms_}
- DIRECTORY_PERMISSIONS ${opentrack-perms_}
+ FILE_PERMISSIONS ${opentrack-perms-file}
+ DIRECTORY_PERMISSIONS ${opentrack-perms-dir}
+ PATTERN ".gtm" EXCLUDE
)
endmacro()
-function(install_sources)
- get_property(source-dirs GLOBAL PROPERTY opentrack-all-source-dirs)
- foreach(k ${source-dirs})
- file(RELATIVE_PATH dest "${CMAKE_SOURCE_DIR}" "${k}")
- otr_inst_dir("${opentrack-doc-src-pfx}" "${dest}")
- endforeach()
+function(cleanup_visual_studio_debug)
+ otr_escape_string(pfx "${CMAKE_INSTALL_PREFIX}")
+ install(CODE "file(REMOVE_RECURSE \"${pfx}/.vs\")")
endfunction()
-otr_inst_dir("${opentrack-doc-pfx}" ${CMAKE_SOURCE_DIR}/3rdparty-notices)
-otr_inst_dir("${opentrack-doc-pfx}" "${CMAKE_SOURCE_DIR}/settings" "${CMAKE_SOURCE_DIR}/contrib")
-otr_inst_dir("${opentrack-doc-src-pfx}" "${CMAKE_SOURCE_DIR}/cmake")
-otr_inst_dir("${opentrack-doc-src-pfx}" "${CMAKE_SOURCE_DIR}/bin")
+otr_install_dir("${opentrack-doc}" ${CMAKE_SOURCE_DIR}/3rdparty-notices)
+otr_install_dir("${opentrack-doc}" "${CMAKE_SOURCE_DIR}/settings" "${CMAKE_SOURCE_DIR}/contrib")
+otr_install_dir("${opentrack-libexec}" "${CMAKE_SOURCE_DIR}/presets")
if(WIN32)
- otr_inst2(. FILES "${CMAKE_SOURCE_DIR}/bin/qt.conf")
- otr_inst2(. FILES "${CMAKE_SOURCE_DIR}/bin/cleye.config")
- otr_inst2(${opentrack-hier-pfx} FILES "${CMAKE_SOURCE_DIR}/bin/cleye.config")
+ otr_install_misc(. FILES "${CMAKE_SOURCE_DIR}/bin/qt.conf")
+ otr_install_misc(. FILES "${CMAKE_SOURCE_DIR}/bin/cleye.config")
+ otr_install_misc(${opentrack-libexec} FILES "${CMAKE_SOURCE_DIR}/bin/cleye.config")
endif()
-otr_inst2("${opentrack-doc-pfx}" FILES ${CMAKE_SOURCE_DIR}/README.md)
-
-otr_inst2("${opentrack-hier-pfx}" FILES "${CMAKE_SOURCE_DIR}/bin/freetrackclient.dll")
-otr_inst2("${opentrack-hier-pfx}" FILES
- "${CMAKE_SOURCE_DIR}/bin/NPClient.dll"
- "${CMAKE_SOURCE_DIR}/bin/NPClient64.dll"
- "${CMAKE_SOURCE_DIR}/bin/TrackIR.exe")
-
-otr_inst2("${opentrack-doc-src-pfx}" FILES "${CMAKE_SOURCE_DIR}/CMakeLists.txt")
-otr_inst2("${opentrack-doc-src-pfx}" FILES "${CMAKE_SOURCE_DIR}/README.md")
-otr_inst2("${opentrack-doc-src-pfx}" FILES "${CMAKE_SOURCE_DIR}/CONTRIBUTING.md")
-otr_inst2("${opentrack-doc-src-pfx}" FILES "${CMAKE_SOURCE_DIR}/WARRANTY.txt")
-otr_inst2("${opentrack-doc-src-pfx}" FILES "${CMAKE_SOURCE_DIR}/OPENTRACK-LICENSING.txt")
-otr_inst2("${opentrack-doc-src-pfx}" FILES "${CMAKE_SOURCE_DIR}/AUTHORS.md")
-
-function(merge_translations)
- set(SDK_SKIP_TRANSLATION_UPDATE FALSE CACHE BOOL "")
- install(CODE "file(REMOVE_RECURSE \"\${CMAKE_INSTALL_PREFIX}/i18n\")")
-
- set(all-ts-files "")
- set(all-qm-files "")
-
- foreach(i ${opentrack-all-translations})
- get_property(ts-files GLOBAL PROPERTY "opentrack-ts-files-${i}")
- #get_property(ts-deps GLOBAL PROPERTY "opentrack-ts-targets-${i}")
-
- set(ts-files_ "")
+otr_install_misc("${opentrack-doc}" FILES ${CMAKE_SOURCE_DIR}/README.md)
- foreach(k ${ts-files})
- if(EXISTS "${k}")
- list(APPEND ts-files_ "${k}")
- endif()
- endforeach()
+otr_install_misc("${opentrack-doc}" FILES "${CMAKE_SOURCE_DIR}/README.md")
+otr_install_misc("${opentrack-doc}" FILES "${CMAKE_SOURCE_DIR}/.github/CONTRIBUTING.md")
+otr_install_misc("${opentrack-doc}" FILES "${CMAKE_SOURCE_DIR}/WARRANTY.txt")
+otr_install_misc("${opentrack-doc}" FILES "${CMAKE_SOURCE_DIR}/OPENTRACK-LICENSING.txt")
+otr_install_misc("${opentrack-doc}" FILES "${CMAKE_SOURCE_DIR}/AUTHORS.md")
- set(ts-files "${ts-files_}")
+# this must be done last because the files may be in use already
+# do it last so in case of file-in-use failure, the rest is installed
- foreach(k ${ts-files})
- list(APPEND all-ts-files "${k}")
- endforeach()
-
- if(NOT ".${ts-files}" STREQUAL ".")
- if(SDK_SKIP_TRANSLATION_UPDATE)
- set(lrelease-deps "")
- else()
- set(lrelease-deps "${ts-files}")
- endif()
-
- set(qm-output "${CMAKE_CURRENT_BINARY_DIR}/${i}.qm")
- list(APPEND all-qm-files "${qm-output}")
- add_custom_command(OUTPUT "${qm-output}"
- COMMAND "${Qt5_DIR}/../../../bin/lrelease" -nounfinished -silent ${ts-files} -qm "${qm-output}"
- DEPENDS ${lrelease-deps}
- COMMENT "Running lrelease for ${i}")
- set(lang-target "i18n-lang-${i}")
-
- install(FILES "${qm-output}" DESTINATION "${opentrack-i18n-pfx}" RENAME "${i}.qm" ${opentrack-perms})
- endif()
- endforeach()
- add_custom_target(i18n ALL DEPENDS ${all-qm-files})
- add_custom_target(force-i18n DEPENDS ${all-ts-files} ${all-qm-files} i18n)
-endfunction()
+if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
+ cleanup_visual_studio_debug()
+endif()
+# For now copy third party needed files into a seperate direcvtory instead of the plugins directory
+if (APPLE)
+ set(OSX_POST_INSTALL_DIR "/../thirdparty")
+endif()
+otr_install_exec("${opentrack-libexec}${OSX_POST_INSTALL_DIR}" FILES "${CMAKE_SOURCE_DIR}/bin/freetrackclient.dll")
+otr_install_exec("${opentrack-libexec}${OSX_POST_INSTALL_DIR}" FILES "${CMAKE_SOURCE_DIR}/bin/freetrackclient64.dll")
+otr_install_exec("${opentrack-libexec}${OSX_POST_INSTALL_DIR}" FILES
+ "${CMAKE_SOURCE_DIR}/bin/NPClient.dll"
+ "${CMAKE_SOURCE_DIR}/bin/NPClient64.dll"
+ "${CMAKE_SOURCE_DIR}/bin/TrackIR.exe")
diff --git a/cmake/opentrack-load-user-settings.cmake b/cmake/opentrack-load-user-settings.cmake
new file mode 100644
index 00000000..fdb63936
--- /dev/null
+++ b/cmake/opentrack-load-user-settings.cmake
@@ -0,0 +1,36 @@
+include_guard(GLOBAL)
+if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
+ set(__sdk_username "$ENV{USERNAME}")
+else()
+ set(__sdk_username "$ENV{USER}")
+endif()
+
+if(".${__sdk_username}" STREQUAL ".")
+ set(__sdk_username "(I-have-no-name)")
+endif()
+
+if(WIN32)
+ set(__sdk_target_os "windows")
+else()
+ string(REGEX MATCH "^Linux (.+)-Microsoft\$" __sdk_target_os_match "${CMAKE_SYSTEM_NAME} ${CMAKE_SYSTEM_VERSION}")
+ if(__sdk_target_os_match)
+ set(__sdk_target_os "Windows-WSL")
+ else()
+ set(__sdk_target_os "${CMAKE_SYSTEM_NAME}")
+ endif()
+endif()
+
+if(NOT CMAKE_SYSTEM_NAME STREQUAL CMAKE_HOST_SYSTEM_NAME)
+ set(__sdk_host_os "${CMAKE_HOST_SYSTEM_NAME}-cross-")
+else()
+ set(__sdk_host_os "")
+endif()
+
+set(__sdk_paths_filename "${CMAKE_CURRENT_SOURCE_DIR}/sdk-paths-${__sdk_username}@${CMAKE_CXX_COMPILER_ID}-${__sdk_host_os}${__sdk_target_os}.cmake")
+
+if(EXISTS "${__sdk_paths_filename}")
+ message(STATUS "Loading user settings '${__sdk_paths_filename}'")
+ include("${__sdk_paths_filename}")
+else()
+ message(STATUS "User settings file '${__sdk_paths_filename}' doesn't exist")
+endif()
diff --git a/cmake/opentrack-build.cmake b/cmake/opentrack-mrproper.cmake
index 4fe8fde0..6efb0be3 100644
--- a/cmake/opentrack-build.cmake
+++ b/cmake/opentrack-mrproper.cmake
@@ -7,15 +7,7 @@
# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-if(NOT CMAKE_INSTALL_PREFIX)
- set(CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/install" CACHE PATH "" FORCE)
-endif()
-
-set(CMAKE_BUILD_TYPE_INIT "RELEASE")
-
-if(APPLE)
- set(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE STRING "" FORCE)
-endif()
+include_guard(GLOBAL)
function(cleanup_build_dir)
file(GLOB_RECURSE files LIST_DIRECTORIES TRUE RELATIVE "${CMAKE_BINARY_DIR}" "*")
diff --git a/cmake/opentrack-opencv.cmake b/cmake/opentrack-opencv.cmake
new file mode 100644
index 00000000..3acadf4a
--- /dev/null
+++ b/cmake/opentrack-opencv.cmake
@@ -0,0 +1,4 @@
+include_guard(GLOBAL)
+
+include(opentrack-boilerplate)
+find_package(OpenCV QUIET)
diff --git a/cmake/opentrack-org.cmake b/cmake/opentrack-org.cmake
new file mode 100644
index 00000000..107c829b
--- /dev/null
+++ b/cmake/opentrack-org.cmake
@@ -0,0 +1,21 @@
+include_guard(GLOBAL)
+function(otr_write_org)
+ get_property(ident GLOBAL PROPERTY opentrack-ident)
+ if (ident STREQUAL "")
+ message(FATAL_ERROR "must set global property `opentrack-ident' in `opentrack-variant.cmake'")
+ endif()
+ otr_escape_string(ident "${ident}")
+ set(new-str "#pragma once
+#define OPENTRACK_ORG \"${ident}\"
+")
+
+ set(filename "${CMAKE_BINARY_DIR}/opentrack-org.hxx")
+ set(old-str "")
+ if(EXISTS "${filename}")
+ file(READ "${filename}" old-str)
+ endif()
+ if(NOT old-str STREQUAL new-str)
+ file(WRITE "${filename}" "${new-str}")
+ endif()
+endfunction()
+otr_write_org()
diff --git a/cmake/opentrack-pkg-config.cmake b/cmake/opentrack-pkg-config.cmake
new file mode 100644
index 00000000..0f13defc
--- /dev/null
+++ b/cmake/opentrack-pkg-config.cmake
@@ -0,0 +1,31 @@
+include_guard(GLOBAL)
+include(FindPkgConfig)
+
+function(otr_pkgconfig_ ret target)
+ set(${ret} 1 PARENT_SCOPE)
+ foreach(i ${ARGN})
+ set(k pkg-config_${i})
+ pkg_check_modules(${k} QUIET ${i})
+ if(${${k}_FOUND})
+ target_compile_options(${target} PRIVATE "${${k}_CFLAGS}")
+ target_link_options(${target} PRIVATE ${${k}_LDFLAGS})
+ target_include_directories(${target} SYSTEM PRIVATE ${${k}_INCLUDE_DIRS} ${${k}_INCLUDEDIR})
+ target_link_libraries(${target} ${${k}_LIBRARIES})
+ else()
+ set(${ret} 0 PARENT_SCOPE)
+ endif()
+ endforeach()
+endfunction()
+
+function(otr_pkgconfig target)
+ set(ret "")
+ otr_pkgconfig_(ret "${target}" ${ARGN})
+ foreach(i ${ARGN})
+ set(k pkg-config_${i})
+ if(NOT ${${k}_FOUND})
+ message(FATAL_ERROR "Can't find '${i}'. Please install development files for this package.")
+ endif()
+ endforeach()
+endfunction()
+
+
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()
diff --git a/cmake/opentrack-policy.cmake b/cmake/opentrack-policy.cmake
index 2d88e218..5fd8647f 100644
--- a/cmake/opentrack-policy.cmake
+++ b/cmake/opentrack-policy.cmake
@@ -1,27 +1,24 @@
-if(POLICY CMP0020)
- cmake_policy(SET CMP0020 NEW)
-endif()
+include_guard(GLOBAL)
-if(POLICY CMP0058)
- cmake_policy(SET CMP0058 NEW)
-endif()
+set(_policies
+ CMP0020
+ CMP0022
+ CMP0058
+ CMP0028
+ CMP0042
+ CMP0063
+ CMP0053
+ CMP0011
+ CMP0054
+ CMP0012
+ CMP0069
+ CMP0063
+ CMP0074
+)
+foreach(k ${_policies})
+ if(POLICY ${k})
+ cmake_policy(SET ${k} NEW)
+ endif()
+endforeach()
-if(POLICY CMP0028)
- cmake_policy(SET CMP0028 NEW)
-endif()
-
-if(POLICY CMP0042)
- cmake_policy(SET CMP0042 NEW)
-endif()
-
-if(POLICY CMP0063)
- cmake_policy(SET CMP0063 NEW)
-endif()
-
-if(POLICY CMP0053)
- cmake_policy(SET CMP0053 OLD)
-endif()
-
-if(POLICY CMP0011)
- cmake_policy(SET CMP0011 NEW)
-endif()
+set(CMAKE_INSTALL_MESSAGE LAZY)
diff --git a/cmake/opentrack-qt.cmake b/cmake/opentrack-qt.cmake
index 66618c59..1735e836 100644
--- a/cmake/opentrack-qt.cmake
+++ b/cmake/opentrack-qt.cmake
@@ -1,40 +1,68 @@
-find_package(Qt5 REQUIRED COMPONENTS Core Network Widgets Gui QUIET)
-find_package(Qt5 COMPONENTS SerialPort Gamepad QUIET)
-include_directories(SYSTEM ${Qt5Core_INCLUDE_DIRS} ${Qt5Gui_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ${Qt5Network_INCLUDE_DIRS})
-add_definitions(${Qt5Core_DEFINITIONS} ${Qt5Gui_DEFINITIONS} ${Qt5Widgets_DEFINITIONS} ${Qt5Network_DEFINITIONS})
-set(MY_QT_LIBS ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Network_LIBRARIES})
-
+include_guard(GLOBAL)
if(WIN32)
- foreach(i Qt5Core Qt5Gui Qt5Network Qt5SerialPort Qt5Widgets)
- install(FILES "${Qt5_DIR}/../../../bin/${i}.dll" DESTINATION .)
- endforeach()
- install(FILES "${Qt5_DIR}/../../../plugins/platforms/qwindows.dll" DESTINATION "./platforms")
+ find_package(Qt5Gui REQUIRED COMPONENTS QWindowsIntegrationPlugin)
endif()
+set(qt-required-components Core Network Widgets LinguistTools Gui)
+set(qt-optional-components SerialPort)
+set(qt-imported-targets Qt5::Core Qt5::Gui Qt5::Network Qt5::Widgets)
+if(APPLE)
+ list(APPEND qt-required-components "DBus")
+ list(APPEND qt-optional-components "Multimedia")
+ list(APPEND qt-imported-targets Qt5::DBus Qt5::Multimedia)
+endif()
+
+find_package(Qt5 REQUIRED COMPONENTS ${qt-required-components} QUIET)
+find_package(Qt5 COMPONENTS ${qt-optional-components} QUIET)
-string(FIND "${CMAKE_GENERATOR}" "Visual Studio " is-msvc)
-if(is-msvc EQUAL 0)
- set(is-msvc TRUE)
-else()
- set(is-msvc FALSE)
+set(MY_QT_LIBS ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${Qt5Network_LIBRARIES})
+if(APPLE)
+ list(APPEND MY_QT_LIBS ${Qt5Multimedia_LIBRARIES} ${Qt5DBus_LIBRARIES})
endif()
-if(MSVC)
- # on .sln generator we have no editbin in path
- if(is-msvc)
- # this is bad but what can we do? searching for vcvarsall.bat
- # would be easier, but then we'd have to differentiate x86/amd64
- # cross tools, etc. which is a can of worms and if/else branches.
- get_filename_component(linker-dir "${CMAKE_LINKER}" DIRECTORY)
- find_file(editbin-executable-filepath "editbin.exe" "${linker-dir}" "${linker-dir}/.." "${linker-dir}/../..")
- otr_escape_string("${editbin-executable-filepath}" editbin-executable)
- else()
- set(editbin-executable "editbin")
+function(otr_install_qt_libs)
+ foreach(i ${qt-imported-targets})
+ if(NOT TARGET "${i}")
+ continue()
+ endif()
+ otr_install_lib(${i} ".")
+ endforeach()
+ if(WIN32)
+ otr_install_lib(Qt5::QWindowsIntegrationPlugin "./platforms")
endif()
+endfunction()
- install(CODE "
- foreach(i Qt5Core Qt5Gui Qt5Network Qt5SerialPort Qt5Widgets platforms/qwindows)
- execute_process(COMMAND \"${editbin-executable}\" -nologo -SUBSYSTEM:WINDOWS,5.01 -OSVERSION:5.1 \"\${i}.dll\" WORKING_DIRECTORY \"\${CMAKE_INSTALL_PREFIX}\")
- endforeach()
- ")
+if(WIN32 OR APPLE)
+ otr_install_qt_libs()
endif()
+function(otr_qt n)
+ if(".${${n}-cc}${${n}-cxx}${${n}-hh}" STREQUAL ".")
+ message(FATAL_ERROR "project ${n} not globbed")
+ endif()
+ qt5_wrap_cpp(${n}-moc ${${n}-hh} OPTIONS --no-notes -I "${CMAKE_CURRENT_BINARY_DIR}" -I "${CMAKE_SOURCE_DIR}")
+ qt5_wrap_ui(${n}-uih ${${n}-ui})
+ qt5_add_resources(${n}-rcc ${${n}-rc})
+
+ foreach(i moc uih rcc)
+ set(${n}-${i} "${${n}-${i}}" PARENT_SCOPE)
+ list(APPEND ${n}-all ${${n}-${i}})
+ endforeach()
+ set(${n}-all "${${n}-all}" PARENT_SCOPE)
+endfunction()
+
+function(otr_qt2 n)
+ target_include_directories("${n}" SYSTEM PRIVATE
+ ${Qt5Core_INCLUDE_DIRS} ${Qt5Gui_INCLUDE_DIRS} ${Qt5Widgets_INCLUDE_DIRS} ${Qt5Network_INCLUDE_DIRS}
+ )
+ target_compile_definitions("${n}" PRIVATE
+ ${Qt5Core_DEFINITIONS} ${Qt5Gui_DEFINITIONS} ${Qt5Widgets_DEFINITIONS} ${Qt5Network_DEFINITIONS}
+ -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT
+ -DQT_MESSAGELOGCONTEXT
+ )
+ if(CMAKE_COMPILER_IS_GNUCXX)
+ set_property(SOURCE ${${n}-moc} ${${n}-rcc}
+ APPEND_STRING PROPERTY COMPILE_FLAGS " -w -Wno-error ")
+ endif()
+endfunction()
+
+include_directories("${CMAKE_BINARY_DIR}")
diff --git a/cmake/opentrack-rift.cmake b/cmake/opentrack-rift.cmake
deleted file mode 100644
index 88adbb3e..00000000
--- a/cmake/opentrack-rift.cmake
+++ /dev/null
@@ -1,37 +0,0 @@
-function(otr_rift proj opt)
- if(${opt})
- set(link-flags)
- set(c-flags)
- if(APPLE)
- set(link-flags "-framework CoreFoundation -framework CoreGraphics -framework IOKit -framework Quartz")
- set(c-flags "-fno-strict-aliasing")
- elseif(NOT MSVC)
- set(c-flags "-fno-strict-aliasing")
- endif()
- otr_module(${proj} LINK ${link-flags} COMPILE ${c-flags})
- set(proj "opentrack-${proj}")
- target_include_directories(${proj} SYSTEM PUBLIC ${${opt}}/Include ${${opt}}/Src)
- set(c-flags)
- set(link-flags)
- if(MSVC)
- set(ext lib)
- set(p)
- else()
- set(ext a)
- set(p lib)
- endif()
- if(MSVC)
- set(pfx "")
- else()
- set(pfx "lib")
- endif()
- target_link_libraries(${proj} ${${opt}}/${pfx}LibOVR.${ext})
- if(WIN32)
- target_link_libraries(${proj} winmm setupapi ws2_32 imagehlp wbemuuid)
- set(ext)
- set(p)
- elseif(NOT APPLE)
- target_link_libraries(${proj} udev Xinerama)
- endif()
- endif()
-endfunction()
diff --git a/cmake/opentrack-variant.cmake b/cmake/opentrack-variant.cmake
new file mode 100644
index 00000000..5cb4bd57
--- /dev/null
+++ b/cmake/opentrack-variant.cmake
@@ -0,0 +1,32 @@
+include_guard(GLOBAL)
+
+function(otr_init_variant)
+ set_property(GLOBAL PROPERTY opentrack-variant "default")
+ set_property(GLOBAL PROPERTY opentrack-ident "opentrack-2.3")
+
+ set(subprojects
+ "tracker-*"
+ "proto-*"
+ "filter-*"
+ "options"
+ "api"
+ "compat"
+ "logic"
+ "dinput"
+ "gui"
+ "main"
+ "x-plane-plugin"
+ "csv"
+ "pose-widget"
+ "spline"
+ "qxt-mini"
+ "macosx"
+ "cv"
+ "migration"
+ "main-window"
+ "video"
+ "video-*"
+ "opentrack"
+ )
+ set_property(GLOBAL PROPERTY opentrack-subprojects "${subprojects}")
+endfunction()
diff --git a/cmake/opentrack-version.cmake b/cmake/opentrack-version.cmake
index 9cd597d3..0ff516f2 100644
--- a/cmake/opentrack-version.cmake
+++ b/cmake/opentrack-version.cmake
@@ -1,3 +1,4 @@
+include_guard(GLOBAL)
include(GetGitRevisionDescription)
find_package(Git QUIET)
@@ -5,41 +6,31 @@ if(GIT_FOUND)
git_describe(OPENTRACK_COMMIT --tags --always)
endif()
-unset(_build_type)
-if(CMAKE_BUILD_TYPE)
- string(TOUPPER ${CMAKE_BUILD_TYPE} _build_type)
- if (NOT _build_type STREQUAL "DEBUG")
- unset(_build_type)
- else()
- set(_build_type "-${_build_type}")
- endif()
-endif()
-
-file(WRITE ${CMAKE_BINARY_DIR}/opentrack-version.h "#define OPENTRACK_VERSION \"${OPENTRACK_COMMIT}${_build_type}\"")
+file(WRITE ${CMAKE_BINARY_DIR}/opentrack-version.hxx "#define OPENTRACK_VERSION \"${OPENTRACK_COMMIT}\"")
-set(version-string "
+set(version-string "\
#ifdef __cplusplus
extern \"C\"
#else
extern
#endif
-const char* opentrack_version;
-
-const char* opentrack_version = \"${OPENTRACK_COMMIT}${_build_type}\";
+const char* const opentrack_version;
+const char* const opentrack_version = \"${OPENTRACK_COMMIT}\";
")
+set(file "${CMAKE_CURRENT_BINARY_DIR}/version.cpp")
set(crapola-ver)
-if(EXISTS ${CMAKE_BINARY_DIR}/version.c)
- file(READ ${CMAKE_BINARY_DIR}/version.c crapola-ver)
+if(EXISTS "${file}")
+ file(READ "${file}" crapola-ver)
endif()
if(NOT (crapola-ver STREQUAL version-string))
- file(WRITE ${CMAKE_BINARY_DIR}/version.c "${version-string}")
+ file(WRITE "${file}" "${version-string}")
endif()
-add_library(opentrack-version STATIC ${CMAKE_BINARY_DIR}/version.c)
+add_library(opentrack-version STATIC "${file}")
+
if(NOT MSVC)
- set_property(TARGET opentrack-version APPEND_STRING PROPERTY COMPILE_FLAGS "-fno-lto")
+ target_compile_options(opentrack-version PRIVATE -fno-lto)
endif()
-otr_compat(opentrack-version)
diff --git a/cmake/opentrack-word-size.cmake b/cmake/opentrack-word-size.cmake
deleted file mode 100644
index 12c34066..00000000
--- a/cmake/opentrack-word-size.cmake
+++ /dev/null
@@ -1,11 +0,0 @@
-include(CheckTypeSize)
-check_type_size(void* opentrack-word-size BUILTIN_TYPES_ONLY LANGUAGE C)
-if(NOT ((opentrack-word-size EQUAL 4) OR (opentrack-word-size EQUAL 8)))
- message(FATAL_ERROR "word size '${opentrack-word-size}' either misdetected or really not 4 or 8")
-endif()
-set(opentrack-word-size ${opentrack-word-size})
-if(opentrack-word-size GREATER 4)
- set(opentrack-64bit TRUE)
-else()
- set(opentrack-64bit FALSE)
-endif()
diff --git a/cmake/translation-stub.ts b/cmake/translation-stub.ts
new file mode 100644
index 00000000..9d616636
--- /dev/null
+++ b/cmake/translation-stub.ts
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.1" language="@LANG@">
+</TS>