123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- # 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(${CMAKE_SOURCE_DIR}/externals/SPIRV-Headers 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()
|