12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- # 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)
- # 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)
- # Sirit project files
- add_subdirectory(src)
- if (SIRIT_TESTS)
- add_subdirectory(tests)
- endif()
|