diff options
Diffstat (limited to 'src/teakra/CMakeLists.txt')
-rw-r--r-- | src/teakra/CMakeLists.txt | 89 |
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() |