mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2024-06-16 03:17:20 -04:00
95 lines
2.4 KiB
CMake
95 lines
2.4 KiB
CMake
cmake_minimum_required(VERSION 3.8)
|
|
project(teakra 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()
|
|
|
|
option(TEAKRA_WARNINGS_AS_ERRORS "Warnings as errors" ${MASTER_PROJECT})
|
|
option(TEAKRA_BUILD_TOOLS "Build tools" ${MASTER_PROJECT})
|
|
option(TEAKRA_BUILD_UNIT_TESTS "Build unit tests" ${MASTER_PROJECT})
|
|
option(TEAKRA_RUN_TESTS "Run Teakra accuracy tests" OFF)
|
|
|
|
# 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(TEAKRA_CXX_FLAGS
|
|
/std:c++latest # CMAKE_CXX_STANDARD as no effect on MSVC until CMake 3.10.
|
|
/W3
|
|
/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
|
|
/D_CRT_SECURE_NO_WARNINGS)
|
|
|
|
if (TEAKRA_WARNINGS_AS_ERRORS)
|
|
list(APPEND TEAKRA_CXX_FLAGS
|
|
/WX)
|
|
endif()
|
|
else()
|
|
set(TEAKRA_CXX_FLAGS
|
|
-Wall
|
|
-Wextra
|
|
-Wcast-qual
|
|
-pedantic
|
|
-pedantic-errors
|
|
-Wfatal-errors
|
|
-Wno-missing-braces
|
|
-Wno-unused-parameter)
|
|
|
|
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|
list(APPEND TEAKRA_CXX_FLAGS
|
|
-Wno-error=maybe-uninitialized)
|
|
endif()
|
|
|
|
if (TEAKRA_WARNINGS_AS_ERRORS)
|
|
list(APPEND TEAKRA_CXX_FLAGS
|
|
-Werror)
|
|
endif()
|
|
endif()
|
|
|
|
# Prefer the -pthread flag on Linux.
|
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|
find_package(Threads REQUIRED)
|
|
|
|
enable_testing()
|
|
|
|
if (NOT TEAKRA_TEST_ASSETS_DIR)
|
|
set(TEAKRA_TEST_ASSETS_DIR "${CMAKE_CURRENT_BINARY_DIR}")
|
|
endif()
|
|
|
|
# External libraries
|
|
add_subdirectory(externals)
|
|
|
|
# Teakra project files
|
|
add_subdirectory(src)
|
|
|
|
# Teakra tests
|
|
if (TEAKRA_BUILD_UNIT_TESTS)
|
|
add_subdirectory(tests)
|
|
endif()
|