diff options
author | ReinUsesLisp <[email protected]> | 2018-08-23 04:59:57 -0300 |
---|---|---|
committer | ReinUsesLisp <[email protected]> | 2018-08-23 04:59:57 -0300 |
commit | 5cfa8aa6ab22157045348a25504c05bef4886abf (patch) | |
tree | b924835078158d8c564e811df0a096ad799e1672 /CMakeLists.txt | |
download | sirit-5cfa8aa6ab22157045348a25504c05bef4886abf.tar.gz sirit-5cfa8aa6ab22157045348a25504c05bef4886abf.zip |
aloha
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r-- | CMakeLists.txt | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..cbc91b7 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,104 @@ +# This file has been adapted from dynarmic + +cmake_minimum_required(VERSION 3.8) +project(sirit 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() + +# Default to a Release build +if (NOT CMAKE_BUILD_TYPE) + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel." FORCE) + message(STATUS "Defaulting to a Release build") +endif() + +# 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(SIRIT_CXX_FLAGS + /std:c++latest # CMAKE_CXX_STANDARD as no effect on MSVC until CMake 3.10. + /W4 + /w34263 # Non-virtual member function hides base class virtual function + /w44265 # Class has virtual functions, but destructor is not virtual + /w34456 # Declaration of 'var' hides previous local declaration + /w34457 # Declaration of 'var' hides function parameter + /w34458 # Declaration of 'var' hides class member + /w34459 # Declaration of 'var' hides global definition + /w34946 # Reinterpret-cast between related types + /wd4592 # Symbol will be dynamically initialized (implementation limitation) + /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) + + if (SIRIT_WARNINGS_AS_ERRORS) + list(APPEND SIRIT_CXX_FLAGS + /WX) + endif() + + if (CMAKE_VS_PLATFORM_TOOLSET MATCHES "LLVM-vs[0-9]+") + list(APPEND SIRIT_CXX_FLAGS + -Qunused-arguments + -Wno-missing-braces) + endif() +else() + set(SIRIT_CXX_FLAGS + -Wall + -Wextra + -Wcast-qual + -pedantic + -pedantic-errors + -Wfatal-errors + -Wno-missing-braces) + + if (SIRIT_WARNINGS_AS_ERRORS) + list(APPEND SIRIT_CXX_FLAGS + -Werror) + endif() +endif() + +# Include Boost +if (NOT TARGET boost) + if (NOT Boost_INCLUDE_DIRS) + find_package(Boost 1.57.0 REQUIRED) + endif() + add_library(boost INTERFACE) + target_include_directories(boost SYSTEM INTERFACE ${Boost_INCLUDE_DIRS}) +endif() + +# Enable unit-testing. +enable_testing(true) + +# SPIR-V headers +add_subdirectory(externals/SPIRV-Headers) + +# Sirit project files +add_subdirectory(src) +if (SIRIT_TESTS) + add_subdirectory(tests) +endif() |