aboutsummaryrefslogtreecommitdiff
path: root/externals/sirit/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'externals/sirit/CMakeLists.txt')
-rw-r--r--externals/sirit/CMakeLists.txt99
1 files changed, 99 insertions, 0 deletions
diff --git a/externals/sirit/CMakeLists.txt b/externals/sirit/CMakeLists.txt
new file mode 100644
index 0000000000..ca7e3b6cd2
--- /dev/null
+++ b/externals/sirit/CMakeLists.txt
@@ -0,0 +1,99 @@
+# 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()
+
+# Sirit project options
+option(SIRIT_TESTS "Build tests" OFF)
+option(SIRIT_USE_SYSTEM_SPIRV_HEADERS "Use system SPIR-V headers" OFF)
+
+# 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 20)
+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
+ /WX)
+
+ 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
+ -Wconversion
+ -Wsign-conversion
+ -Wshadow
+ -Werror)
+endif()
+
+# Enable unit-testing.
+enable_testing(true)
+
+# SPIR-V headers
+if (SIRIT_USE_SYSTEM_SPIRV_HEADERS)
+ find_package(SPIRV-Headers REQUIRED)
+else()
+ add_subdirectory(externals/SPIRV-Headers EXCLUDE_FROM_ALL)
+ add_library(SPIRV-Headers::SPIRV-Headers ALIAS SPIRV-Headers)
+endif()
+
+# Sirit project files
+add_subdirectory(src)
+if (SIRIT_TESTS)
+ add_subdirectory(tests)
+endif()