2022-08-22 22:21:23 +02:00
|
|
|
cmake_minimum_required(VERSION 3.21.1)
|
|
|
|
|
|
|
|
option(PUBLIC_RELEASE "Compile with debug asserts disabled and no console" OFF)
|
2022-08-29 07:19:48 +02:00
|
|
|
option(ENABLE_VCPKG "Enable the vcpkg package manager" ON)
|
2022-08-22 22:21:23 +02:00
|
|
|
|
|
|
|
if (PUBLIC_RELEASE)
|
|
|
|
add_definitions(-DPUBLIC_RELEASE)
|
|
|
|
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) # enable LTO
|
|
|
|
endif()
|
|
|
|
|
2022-08-29 07:19:48 +02:00
|
|
|
if (ENABLE_VCPKG)
|
|
|
|
set(VCPKG_OVERLAY_PORTS "${CMAKE_CURRENT_LIST_DIR}/dependencies/vcpkg_overlay_ports")
|
|
|
|
set(CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR}/dependencies/vcpkg/scripts/buildsystems/vcpkg.cmake"
|
|
|
|
CACHE STRING "Vcpkg toolchain file")
|
|
|
|
# Set this so that all the various find_package() calls don't need an explicit
|
|
|
|
# CONFIG option
|
|
|
|
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG TRUE)
|
|
|
|
if (WIN32)
|
|
|
|
set(VCPKG_TARGET_TRIPLET "x64-windows-static" CACHE STRING "")
|
|
|
|
endif()
|
2022-08-22 22:21:23 +02:00
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
|
|
project(Cemu VERSION 0.1)
|
2022-08-29 07:19:48 +02:00
|
|
|
|
|
|
|
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
|
|
|
|
|
2022-08-22 22:21:23 +02:00
|
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
|
|
|
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|
|
|
|
|
|
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
|
|
|
|
2022-08-26 17:56:19 +02:00
|
|
|
if (MSVC)
|
|
|
|
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT CemuBin)
|
|
|
|
endif()
|
|
|
|
|
2022-08-24 08:32:04 +02:00
|
|
|
if (MSVC)
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc")
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /fp:precise") # floating point model: precise
|
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GT") # fiber safe optimizations
|
|
|
|
if (PUBLIC_RELEASE)
|
2022-08-22 22:21:23 +02:00
|
|
|
message(STATUS "Using additional optimization flags for MSVC")
|
2022-08-24 08:32:04 +02:00
|
|
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Oi /Ot") # enable intrinsic functions, favor speed
|
|
|
|
endif()
|
|
|
|
endif()
|
2022-08-22 22:21:23 +02:00
|
|
|
|
|
|
|
option(ENABLE_OPENGL "Enables the OpenGL backend" ON)
|
|
|
|
option(ENABLE_VULKAN "Enables the Vulkan backend" ON)
|
|
|
|
option(ENABLE_DISCORD_RPC "Enables the Discord Rich Presence feature" ON)
|
|
|
|
|
|
|
|
# input backends
|
2022-08-24 08:32:04 +02:00
|
|
|
if (WIN32)
|
|
|
|
option(ENABLE_XINPUT "Enables the usage of XInput" ON)
|
|
|
|
option(ENABLE_DIRECTINPUT "Enables the usage of DirectInput" ON)
|
|
|
|
add_definitions(-DHAS_DIRECTINPUT)
|
2022-08-22 22:21:23 +02:00
|
|
|
endif()
|
|
|
|
option(ENABLE_SDL "Enables the SDLController backend" ON)
|
|
|
|
|
|
|
|
# audio backends
|
2022-08-24 08:32:04 +02:00
|
|
|
if (WIN32)
|
|
|
|
option(ENABLE_DIRECTAUDIO "Enables the directaudio backend" ON)
|
|
|
|
option(ENABLE_XAUDIO "Enables the xaudio backend" ON)
|
2022-08-22 22:21:23 +02:00
|
|
|
endif()
|
|
|
|
option(ENABLE_CUBEB "Enabled cubeb backend" ON)
|
|
|
|
|
|
|
|
option(ENABLE_WXWIDGETS "Build with wxWidgets UI (Currently required)" ON)
|
|
|
|
|
2022-08-29 07:19:48 +02:00
|
|
|
set(THREADS_PREFER_PTHREAD_FLAG true)
|
|
|
|
find_package(Threads REQUIRED)
|
|
|
|
find_package(SDL2 REQUIRED)
|
|
|
|
find_package(CURL REQUIRED)
|
|
|
|
find_package(pugixml REQUIRED)
|
|
|
|
find_package(imgui REQUIRED)
|
|
|
|
find_package(RapidJSON REQUIRED)
|
2022-08-22 22:21:23 +02:00
|
|
|
find_package(Boost COMPONENTS program_options filesystem nowide REQUIRED)
|
|
|
|
find_package(libzip REQUIRED)
|
|
|
|
find_package(glslang REQUIRED)
|
|
|
|
find_package(ZLIB REQUIRED)
|
2022-08-29 07:19:48 +02:00
|
|
|
find_package(zstd MODULE REQUIRED) # MODULE so that zstd::zstd is available
|
|
|
|
find_package(OpenSSL COMPONENTS Crypto SSL REQUIRED)
|
|
|
|
find_package(glm REQUIRED)
|
|
|
|
find_package(fmt 7.0.0 REQUIRED)
|
|
|
|
find_package(PNG REQUIRED)
|
|
|
|
|
|
|
|
# glslang versions older than 11.11.0 define targets without a namespace
|
|
|
|
if (NOT TARGET glslang::SPIRV AND TARGET SPIRV)
|
|
|
|
add_library(glslang::SPIRV ALIAS SPIRV)
|
|
|
|
endif()
|
|
|
|
|
2022-08-30 19:02:56 +02:00
|
|
|
if (UNIX AND NOT APPLE)
|
2022-08-29 07:19:48 +02:00
|
|
|
find_package(X11 REQUIRED)
|
|
|
|
endif()
|
2022-08-22 22:21:23 +02:00
|
|
|
|
2022-08-24 08:32:04 +02:00
|
|
|
if (ENABLE_VULKAN)
|
2022-08-25 06:31:32 +02:00
|
|
|
include_directories("dependencies/Vulkan-Headers/include")
|
2022-08-22 22:21:23 +02:00
|
|
|
endif()
|
2022-08-24 08:32:04 +02:00
|
|
|
|
|
|
|
if (ENABLE_OPENGL)
|
|
|
|
find_package(OpenGL REQUIRED)
|
2022-08-22 22:21:23 +02:00
|
|
|
endif()
|
2022-08-24 08:32:04 +02:00
|
|
|
|
|
|
|
if (ENABLE_DISCORD_RPC)
|
|
|
|
add_definitions(-DENABLE_DISCORD_RPC)
|
|
|
|
add_subdirectory(dependencies/discord-rpc EXCLUDE_FROM_ALL)
|
|
|
|
target_include_directories(discord-rpc INTERFACE ./dependencies/discord-rpc/include)
|
2022-08-22 22:21:23 +02:00
|
|
|
endif()
|
|
|
|
|
2022-08-24 08:32:04 +02:00
|
|
|
if (ENABLE_WXWIDGETS)
|
2022-08-29 07:19:48 +02:00
|
|
|
find_package(wxWidgets 3.2 REQUIRED COMPONENTS base core gl propgrid xrc)
|
2022-08-22 22:21:23 +02:00
|
|
|
endif()
|
|
|
|
|
2022-08-24 08:32:04 +02:00
|
|
|
if (ENABLE_CUBEB)
|
2022-08-29 07:19:48 +02:00
|
|
|
find_package(cubeb)
|
|
|
|
if (NOT cubeb_FOUND)
|
|
|
|
option(BUILD_TESTS "" OFF)
|
|
|
|
option(BUILD_TOOLS "" OFF)
|
|
|
|
option(BUNDLE_SPEEX "" OFF)
|
|
|
|
set(USE_WINMM OFF CACHE BOOL "")
|
|
|
|
add_subdirectory("dependencies/cubeb")
|
|
|
|
set_property(TARGET cubeb PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
|
|
|
add_library(cubeb::cubeb ALIAS cubeb)
|
|
|
|
endif()
|
|
|
|
add_compile_definitions("HAS_CUBEB=1")
|
2022-08-22 22:21:23 +02:00
|
|
|
endif()
|
|
|
|
|
2022-08-29 07:19:48 +02:00
|
|
|
add_subdirectory("dependencies/ih264d")
|
|
|
|
|
|
|
|
find_package(ZArchive)
|
|
|
|
if (NOT ZArchive_FOUND)
|
|
|
|
add_subdirectory("dependencies/ZArchive")
|
|
|
|
endif()
|
2022-08-22 22:21:23 +02:00
|
|
|
|
2022-08-29 07:19:48 +02:00
|
|
|
add_subdirectory(src)
|