110 lines
3.9 KiB
CMake
110 lines
3.9 KiB
CMake
cmake_minimum_required(VERSION 3.22)
|
|
|
|
# Match the minimum supported by the bundled MoltenVK runtime, instead of
|
|
# silently targeting the macOS version of the developer's machine.
|
|
if(CMAKE_HOST_APPLE AND NOT CMAKE_OSX_DEPLOYMENT_TARGET)
|
|
set(CMAKE_OSX_DEPLOYMENT_TARGET "12.0" CACHE STRING "Minimum macOS version" FORCE)
|
|
endif()
|
|
|
|
project(nxemu)
|
|
|
|
if(APPLE)
|
|
if(CMAKE_OSX_DEPLOYMENT_TARGET VERSION_LESS "12.0")
|
|
message(FATAL_ERROR "The bundled MoltenVK runtime requires macOS 12.0 or newer")
|
|
endif()
|
|
enable_language(OBJC OBJCXX)
|
|
endif()
|
|
|
|
find_package(Threads REQUIRED)
|
|
|
|
if(APPLE)
|
|
option(ENABLE_SDL2 "Enable SDL game controller input" ON)
|
|
endif()
|
|
|
|
set(CMAKE_CXX_STANDARD 20)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
|
|
# ============================================================
|
|
# Architecture detection
|
|
# ============================================================
|
|
set(NXEMU_TARGET_PROCESSOR "${CMAKE_SYSTEM_PROCESSOR}")
|
|
if(APPLE AND CMAKE_OSX_ARCHITECTURES)
|
|
list(LENGTH CMAKE_OSX_ARCHITECTURES _nxemu_arch_count)
|
|
if(_nxemu_arch_count GREATER 1)
|
|
message(FATAL_ERROR "Build each macOS architecture separately: the JIT backend is architecture-specific")
|
|
endif()
|
|
list(GET CMAKE_OSX_ARCHITECTURES 0 NXEMU_TARGET_PROCESSOR)
|
|
endif()
|
|
if(NXEMU_TARGET_PROCESSOR MATCHES "aarch64|arm64|ARM64")
|
|
set(ARCHITECTURE_arm64 TRUE)
|
|
set(ARCHITECTURE "arm64")
|
|
set(NXEMU_PLATFORM_DIR "arm64")
|
|
add_compile_definitions(ARCHITECTURE_arm64=1)
|
|
elseif(NXEMU_TARGET_PROCESSOR MATCHES "x86_64|AMD64|amd64")
|
|
add_compile_definitions(ARCHITECTURE_x86_64=1)
|
|
set(ARCHITECTURE_x86_64 TRUE)
|
|
set(ARCHITECTURE "x86_64")
|
|
set(NXEMU_PLATFORM_DIR "x64")
|
|
else()
|
|
set(NXEMU_PLATFORM_DIR "${NXEMU_TARGET_PROCESSOR}")
|
|
endif()
|
|
|
|
# CMake modules
|
|
# ============================================================
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/src/cmake/modules")
|
|
include("${CMAKE_SOURCE_DIR}/src/cmake/modules/create_target_directory_groups.cmake")
|
|
include(nxemu_output_directories)
|
|
|
|
# ============================================================
|
|
# Version
|
|
# ============================================================
|
|
set(VERSION_HEADER_IN "${CMAKE_SOURCE_DIR}/src/nxemu-core/version.h.in")
|
|
set(VERSION_HEADER_OUT "${CMAKE_BINARY_DIR}/generated/nxemu-core/version.h")
|
|
include(generate_version_header)
|
|
set(VERSION_HEADER_IN "${CMAKE_SOURCE_DIR}/src/nxemu-cpu/version.h.in")
|
|
set(VERSION_HEADER_OUT "${CMAKE_BINARY_DIR}/generated/nxemu-cpu/version.h")
|
|
include(generate_version_header)
|
|
set(VERSION_HEADER_IN "${CMAKE_SOURCE_DIR}/src/nxemu-video/version.h.in")
|
|
set(VERSION_HEADER_OUT "${CMAKE_BINARY_DIR}/generated/nxemu-video/version.h")
|
|
include(generate_version_header)
|
|
|
|
# ============================================================
|
|
# Include directories
|
|
# ============================================================
|
|
include_directories(${CMAKE_BINARY_DIR}/generated)
|
|
|
|
# external
|
|
# ============================================================
|
|
add_subdirectory(external)
|
|
|
|
# ============================================================
|
|
# Include source code
|
|
# ============================================================
|
|
add_subdirectory(src/3rd_party/lz4)
|
|
add_subdirectory(src/3rd_party/glad)
|
|
add_subdirectory(src/3rd_party/bc_decoder)
|
|
add_subdirectory(src/3rd_party/nx_tzdb)
|
|
if(NOT ANDROID)
|
|
add_subdirectory(src/3rd_party/discord-rpc)
|
|
endif()
|
|
add_subdirectory(src/common)
|
|
add_subdirectory(src/network)
|
|
add_subdirectory(src/yuzu_common)
|
|
add_subdirectory(src/yuzu_hid_core)
|
|
add_subdirectory(src/yuzu_input_common)
|
|
add_subdirectory(src/yuzu_shader_recompiler)
|
|
add_subdirectory(src/yuzu_video_core)
|
|
add_subdirectory(src/yuzu_audio_core)
|
|
add_subdirectory(src/nxemu-core)
|
|
add_subdirectory(src/nxemu-cpu)
|
|
add_subdirectory(src/nxemu-loader)
|
|
add_subdirectory(src/nxemu-os)
|
|
add_subdirectory(src/nxemu-video)
|
|
if(ANDROID)
|
|
add_subdirectory(src/android/app/src/main/jni)
|
|
endif()
|
|
if(NOT ANDROID)
|
|
add_subdirectory(src/nxemu)
|
|
endif()
|