|
|
@ -1,9 +1,12 @@
|
|
|
|
# CMake 3.8 required for 17 to be a valid value for CXX_STANDARD
|
|
|
|
# CMake 3.12 required for 20 to be a valid value for CXX_STANDARD
|
|
|
|
cmake_minimum_required(VERSION 3.8)
|
|
|
|
cmake_minimum_required(VERSION 3.12)
|
|
|
|
if (${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.15)
|
|
|
|
if (${CMAKE_VERSION} VERSION_GREATER_EQUAL 3.15)
|
|
|
|
# Don't override the warning flags in MSVC:
|
|
|
|
# Don't override the warning flags in MSVC:
|
|
|
|
cmake_policy(SET CMP0092 NEW)
|
|
|
|
cmake_policy(SET CMP0092 NEW)
|
|
|
|
endif ()
|
|
|
|
# Enforce new LTO setting
|
|
|
|
|
|
|
|
cmake_policy(SET CMP0069 NEW)
|
|
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
|
|
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")
|
|
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules")
|
|
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules")
|
|
|
|
include(DownloadExternals)
|
|
|
|
include(DownloadExternals)
|
|
|
@ -11,11 +14,16 @@ include(CMakeDependentOption)
|
|
|
|
|
|
|
|
|
|
|
|
project(citra LANGUAGES C CXX ASM)
|
|
|
|
project(citra LANGUAGES C CXX ASM)
|
|
|
|
|
|
|
|
|
|
|
|
# Set bundled sdl2/qt as dependent options.
|
|
|
|
if (APPLE)
|
|
|
|
# OFF by default, but if ENABLE_SDL2 and MSVC are true then ON
|
|
|
|
enable_language(OBJC)
|
|
|
|
option(ENABLE_SDL2 "Enable the SDL2 frontend" ON)
|
|
|
|
endif()
|
|
|
|
CMAKE_DEPENDENT_OPTION(CITRA_USE_BUNDLED_SDL2 "Download bundled SDL2 binaries" ON "ENABLE_SDL2;MSVC" OFF)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
option(ENABLE_LTO "Enable link time optimization" OFF)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
option(ENABLE_SDL2 "Enable the SDL2 frontend" ON)
|
|
|
|
|
|
|
|
option(USE_SYSTEM_SDL2 "Use the system SDL2 lib (instead of the bundled one)" OFF)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Set bundled qt as dependent options.
|
|
|
|
option(ENABLE_QT "Enable the Qt frontend" ON)
|
|
|
|
option(ENABLE_QT "Enable the Qt frontend" ON)
|
|
|
|
option(ENABLE_QT_TRANSLATION "Enable translations for the Qt frontend" OFF)
|
|
|
|
option(ENABLE_QT_TRANSLATION "Enable translations for the Qt frontend" OFF)
|
|
|
|
CMAKE_DEPENDENT_OPTION(CITRA_USE_BUNDLED_QT "Download bundled Qt binaries" ON "ENABLE_QT;MSVC" OFF)
|
|
|
|
CMAKE_DEPENDENT_OPTION(CITRA_USE_BUNDLED_QT "Download bundled Qt binaries" ON "ENABLE_QT;MSVC" OFF)
|
|
|
@ -57,6 +65,22 @@ if (NOT $ENV{NDK_CCACHE} EQUAL "")
|
|
|
|
set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_EXE})
|
|
|
|
set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE_EXE})
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Check for LTO support
|
|
|
|
|
|
|
|
# =======================================================================
|
|
|
|
|
|
|
|
if (ENABLE_LTO)
|
|
|
|
|
|
|
|
include(CheckIPOSupported)
|
|
|
|
|
|
|
|
check_ipo_supported(RESULT supported OUTPUT error_msg)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (supported)
|
|
|
|
|
|
|
|
message(STATUS "LTO enabled")
|
|
|
|
|
|
|
|
else()
|
|
|
|
|
|
|
|
message(STATUS "LTO enabled but is unavailable, disabling: ${error_msg}")
|
|
|
|
|
|
|
|
set(ENABLE_LTO OFF)
|
|
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
else()
|
|
|
|
|
|
|
|
message(STATUS "LTO disabled")
|
|
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
# Sanity check : Check that all submodules are present
|
|
|
|
# Sanity check : Check that all submodules are present
|
|
|
|
# =======================================================================
|
|
|
|
# =======================================================================
|
|
|
|
|
|
|
|
|
|
|
@ -134,7 +158,7 @@ message(STATUS "Target architecture: ${ARCHITECTURE}")
|
|
|
|
# Configure C++ standard
|
|
|
|
# Configure C++ standard
|
|
|
|
# ===========================
|
|
|
|
# ===========================
|
|
|
|
|
|
|
|
|
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
|
|
|
|
|
|
|
|
# set up output paths for executable binaries
|
|
|
|
# set up output paths for executable binaries
|
|
|
@ -148,41 +172,10 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin/$<CONFIG>)
|
|
|
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|
|
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|
|
|
find_package(Threads REQUIRED)
|
|
|
|
find_package(Threads REQUIRED)
|
|
|
|
|
|
|
|
|
|
|
|
if (ENABLE_SDL2)
|
|
|
|
|
|
|
|
if (CITRA_USE_BUNDLED_SDL2)
|
|
|
|
|
|
|
|
# Detect toolchain and platform
|
|
|
|
|
|
|
|
if ((MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1940) AND ARCHITECTURE_x86_64)
|
|
|
|
|
|
|
|
set(SDL2_VER "SDL2-2.0.16")
|
|
|
|
|
|
|
|
else()
|
|
|
|
|
|
|
|
message(FATAL_ERROR "No bundled SDL2 binaries for your toolchain. Disable CITRA_USE_BUNDLED_SDL2 and provide your own.")
|
|
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (DEFINED SDL2_VER)
|
|
|
|
|
|
|
|
download_bundled_external("sdl2/" ${SDL2_VER} SDL2_PREFIX)
|
|
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
set(SDL2_FOUND YES)
|
|
|
|
|
|
|
|
set(SDL2_INCLUDE_DIR "${SDL2_PREFIX}/include" CACHE PATH "Path to SDL2 headers")
|
|
|
|
|
|
|
|
set(SDL2_LIBRARY "${SDL2_PREFIX}/lib/x64/SDL2.lib" CACHE PATH "Path to SDL2 library")
|
|
|
|
|
|
|
|
set(SDL2_DLL_DIR "${SDL2_PREFIX}/lib/x64/" CACHE PATH "Path to SDL2.dll")
|
|
|
|
|
|
|
|
else()
|
|
|
|
|
|
|
|
find_package(SDL2 REQUIRED)
|
|
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (SDL2_FOUND)
|
|
|
|
|
|
|
|
# TODO(yuriks): Make FindSDL2.cmake export an IMPORTED library instead
|
|
|
|
|
|
|
|
add_library(SDL2 INTERFACE)
|
|
|
|
|
|
|
|
target_link_libraries(SDL2 INTERFACE "${SDL2_LIBRARY}")
|
|
|
|
|
|
|
|
target_include_directories(SDL2 INTERFACE "${SDL2_INCLUDE_DIR}")
|
|
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
else()
|
|
|
|
|
|
|
|
set(SDL2_FOUND NO)
|
|
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (ENABLE_QT)
|
|
|
|
if (ENABLE_QT)
|
|
|
|
if (CITRA_USE_BUNDLED_QT)
|
|
|
|
if (CITRA_USE_BUNDLED_QT)
|
|
|
|
if ((MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1940) AND ARCHITECTURE_x86_64)
|
|
|
|
if (MSVC_VERSION GREATER_EQUAL 1930 AND ARCHITECTURE_x86_64)
|
|
|
|
set(QT_VER qt-5.10.0-msvc2017_64)
|
|
|
|
set(QT_VER qt-5.15.5-msvc2022_64)
|
|
|
|
else()
|
|
|
|
else()
|
|
|
|
message(FATAL_ERROR "No bundled Qt binaries for your toolchain. Disable CITRA_USE_BUNDLED_QT and provide your own.")
|
|
|
|
message(FATAL_ERROR "No bundled Qt binaries for your toolchain. Disable CITRA_USE_BUNDLED_QT and provide your own.")
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
@ -260,7 +253,7 @@ if (APPLE)
|
|
|
|
set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${AVFOUNDATION_LIBRARY} ${IOKIT_LIBRARY} ${COREVIDEO_LIBRARY})
|
|
|
|
set(PLATFORM_LIBRARIES ${COCOA_LIBRARY} ${AVFOUNDATION_LIBRARY} ${IOKIT_LIBRARY} ${COREVIDEO_LIBRARY})
|
|
|
|
elseif (WIN32)
|
|
|
|
elseif (WIN32)
|
|
|
|
# WSAPoll and SHGetKnownFolderPath (AppData/Roaming) didn't exist before WinNT 6.x (Vista)
|
|
|
|
# WSAPoll and SHGetKnownFolderPath (AppData/Roaming) didn't exist before WinNT 6.x (Vista)
|
|
|
|
add_definitions(-D_WIN32_WINNT=0x0600 -DWINVER=0x0600)
|
|
|
|
add_definitions(-D_WIN32_WINNT=0x0601 -DWINVER=0x0601)
|
|
|
|
set(PLATFORM_LIBRARIES winmm ws2_32)
|
|
|
|
set(PLATFORM_LIBRARIES winmm ws2_32)
|
|
|
|
if (MINGW)
|
|
|
|
if (MINGW)
|
|
|
|
# PSAPI is the Process Status API
|
|
|
|
# PSAPI is the Process Status API
|
|
|
@ -374,6 +367,11 @@ else()
|
|
|
|
add_library(Boost::serialization ALIAS boost_serialization)
|
|
|
|
add_library(Boost::serialization ALIAS boost_serialization)
|
|
|
|
endif()
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# SDL2
|
|
|
|
|
|
|
|
if (ENABLE_SDL2 AND USE_SYSTEM_SDL2)
|
|
|
|
|
|
|
|
find_package(SDL2 REQUIRED)
|
|
|
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
add_subdirectory(src)
|
|
|
|
add_subdirectory(src)
|
|
|
|
add_subdirectory(dist/installer)
|
|
|
|
add_subdirectory(dist/installer)
|
|
|
|
|
|
|
|
|
|
|
|