aboutsummaryrefslogtreecommitdiff
path: root/src/teakra/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'src/teakra/CMakeLists.txt')
-rw-r--r--src/teakra/CMakeLists.txt89
1 files changed, 89 insertions, 0 deletions
diff --git a/src/teakra/CMakeLists.txt b/src/teakra/CMakeLists.txt
new file mode 100644
index 0000000..046f8c4
--- /dev/null
+++ b/src/teakra/CMakeLists.txt
@@ -0,0 +1,89 @@
+cmake_minimum_required(VERSION 3.8)
+project(teakra CXX)
+
+# Determine if we're built as a subproject (using add_subdirectory)
+# or if this is the master project.
+set(MASTER_PROJECT OFF)
+if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR)
+ set(MASTER_PROJECT ON)
+endif()
+
+option(TEAKRA_WARNINGS_AS_ERRORS "Warnings as errors" ${MASTER_PROJECT})
+option(TEAKRA_BUILD_TOOLS "Build tools" ${MASTER_PROJECT})
+option(TEAKRA_BUILD_UNIT_TESTS "Build unit tests" ${MASTER_PROJECT})
+option(TEAKRA_RUN_TESTS "Run Teakra accuracy tests" OFF)
+
+# Set hard requirements for C++
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+set(CMAKE_CXX_EXTENSIONS OFF)
+
+# Warn on CMake API deprecations
+set(CMAKE_WARN_DEPRECATED ON)
+
+# Disable in-source builds
+set(CMAKE_DISABLE_SOURCE_CHANGES ON)
+set(CMAKE_DISABLE_IN_SOURCE_BUILD ON)
+if ("${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
+ message(SEND_ERROR "In-source builds are not allowed.")
+endif()
+
+# Add the module directory to the list of paths
+list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/CMakeModules")
+
+# Compiler flags
+if (MSVC)
+ set(TEAKRA_CXX_FLAGS
+ /std:c++latest # CMAKE_CXX_STANDARD as no effect on MSVC until CMake 3.10.
+ /W3
+ /permissive- # Stricter C++ standards conformance
+ /MP
+ /Zi
+ /Zo
+ /EHsc
+ /Zc:throwingNew # Assumes new never returns null
+ /Zc:inline # Omits inline functions from object-file output
+ /DNOMINMAX
+ /D_CRT_SECURE_NO_WARNINGS)
+
+ if (TEAKRA_WARNINGS_AS_ERRORS)
+ list(APPEND TEAKRA_CXX_FLAGS
+ /WX)
+ endif()
+else()
+ set(TEAKRA_CXX_FLAGS
+ -Wall
+ -Wextra
+ -Wcast-qual
+ -pedantic
+ -pedantic-errors
+ -Wfatal-errors
+ -Wno-missing-braces
+ -Wno-unused-parameter)
+
+ if (TEAKRA_WARNINGS_AS_ERRORS)
+ list(APPEND TEAKRA_CXX_FLAGS
+ -Werror)
+ endif()
+endif()
+
+# Prefer the -pthread flag on Linux.
+set(THREADS_PREFER_PTHREAD_FLAG ON)
+find_package(Threads REQUIRED)
+
+enable_testing()
+
+if (NOT TEAKRA_TEST_ASSETS_DIR)
+ set(TEAKRA_TEST_ASSETS_DIR "${CMAKE_CURRENT_BINARY_DIR}")
+endif()
+
+# External libraries
+add_subdirectory(externals)
+
+# Teakra project files
+add_subdirectory(src)
+
+# Teakra tests
+if (TEAKRA_BUILD_UNIT_TESTS)
+ add_subdirectory(tests)
+endif()