aboutsummaryrefslogtreecommitdiffhomepage
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorReinUsesLisp <[email protected]>2018-08-23 04:59:57 -0300
committerReinUsesLisp <[email protected]>2018-08-23 04:59:57 -0300
commit5cfa8aa6ab22157045348a25504c05bef4886abf (patch)
treeb924835078158d8c564e811df0a096ad799e1672 /CMakeLists.txt
downloadsirit-5cfa8aa6ab22157045348a25504c05bef4886abf.tar.gz
sirit-5cfa8aa6ab22157045348a25504c05bef4886abf.zip
aloha
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt104
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()