mirror of
https://github.com/shadps4-emu/ext-MoltenVK.git
synced 2026-01-31 01:05:17 +01:00
- Update to latest SPIRV-Cross. - Add top CMake file to Xcode projects to support editing versions in future. - Update documentation.
137 lines
5.5 KiB
CMake
137 lines
5.5 KiB
CMake
# Detects whether this is a top-level project
|
|
get_directory_property(HAS_PARENT PARENT_DIRECTORY)
|
|
if(HAS_PARENT)
|
|
set(MOLTEN_VK_TOPLEVEL_PROJECT OFF)
|
|
else()
|
|
set(MOLTEN_VK_TOPLEVEL_PROJECT ON)
|
|
endif()
|
|
|
|
# Check required CMake version
|
|
set(REQUIRED_CMAKE_VERSION "3.18.0")
|
|
if(MOLTEN_VK_TOPLEVEL_PROJECT)
|
|
cmake_minimum_required(VERSION ${REQUIRED_CMAKE_VERSION})
|
|
else()
|
|
# Don't use cmake_minimum_required here to avoid implicitly overriding parent policies
|
|
if(${CMAKE_VERSION} VERSION_LESS ${REQUIRED_CMAKE_VERSION})
|
|
message(FATAL_ERROR "CMake required version to build MoltenVK is ${REQUIRED_CMAKE_VERSION}")
|
|
endif()
|
|
endif()
|
|
|
|
# Include user-provided default options if available. We do that before the main
|
|
# `project()` so that we can define the C/C++ compilers from the option file.
|
|
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/MoltenVKOptions.cmake)
|
|
message(STATUS "Using local options file: ${CMAKE_CURRENT_SOURCE_DIR}/MoltenVKOptions.cmake")
|
|
include(${CMAKE_CURRENT_SOURCE_DIR}/MoltenVKOptions.cmake)
|
|
endif()
|
|
|
|
# Enable ccache if available
|
|
find_program(CCACHE_PROGRAM ccache)
|
|
if(CCACHE_PROGRAM)
|
|
option(MOLTEN_VK_WITH_CCACHE "Enable ccache when building MoltenVK" ${MOLTEN_VK_TOPLEVEL_PROJECT})
|
|
else()
|
|
option(MOLTEN_VK_WITH_CCACHE "Enable ccache when building MoltenVK" OFF)
|
|
endif()
|
|
if(MOLTEN_VK_WITH_CCACHE AND CCACHE_PROGRAM)
|
|
message(STATUS "Enabling Ccache support (${CCACHE_PROGRAM})")
|
|
set(ccacheEnv
|
|
CCACHE_BASEDIR=${CMAKE_BINARY_DIR}
|
|
CCACHE_SLOPPINESS=clang_index_store,include_file_ctime,include_file_mtime,locale,pch_defines,time_macros
|
|
)
|
|
foreach(lang IN ITEMS C CXX)
|
|
set(CMAKE_${lang}_COMPILER_LAUNCHER
|
|
${CMAKE_COMMAND} -E env ${ccacheEnv} ${CCACHE_PROGRAM}
|
|
)
|
|
endforeach()
|
|
endif()
|
|
|
|
################################################################################
|
|
# CMake Policies
|
|
################################################################################
|
|
|
|
cmake_policy(SET CMP0054 NEW) # Only interpret if() arguments as variables or keywords when unquoted.
|
|
cmake_policy(SET CMP0076 NEW) # target_sources() command converts relative paths to absolute.
|
|
if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.24")
|
|
cmake_policy(SET CMP0135 NEW) # Set the timestamps of all extracted contents to the time of the extraction.
|
|
endif()
|
|
cmake_policy(SET CMP0114 NEW) # Support the Xcode "new build system"
|
|
|
|
################################################################################
|
|
|
|
project(MoltenVK
|
|
DESCRIPTION "MoltenVK is a Vulkan Portability implementation. It layers a subset of the high-performance, industry-standard Vulkan graphics and compute API over Apple's Metal graphics framework, enabling Vulkan applications to run on macOS, iOS and tvOS."
|
|
LANGUAGES C CXX OBJC OBJCXX
|
|
VERSION "1.4.2")
|
|
|
|
set(MVK_CONFIG_LOG_LEVEL "info" CACHE STRING "Set the default log level for MoltenVK. Options are: debug, info, warn, error, off. Default is 'info'.")
|
|
set_property(CACHE MVK_CONFIG_LOG_LEVEL PROPERTY STRINGS "debug" "info" "warn" "error" "off")
|
|
|
|
option(MVK_EXCLUDE_SPIRV_TOOLS "Exclude the SPIRV-Tools dependency. If excluded, disables printing debug SPIR-V disassembly." OFF)
|
|
option(MVK_EXCLUDE_CEREAL "Exclude the cereal dependency. If excluded, disables reading and writing pipeline caches." OFF)
|
|
option(MVK_USE_METAL_PRIVATE_API "If enabled, MoltenVK will use private interfaces exposed by Metal to implement Vulkan features that are difficult to support otherwise." OFF)
|
|
|
|
option(MVK_BUILD_SHADER_CONVERTER_TOOL "If enabled, the MoltenVKShaderConverter executable will be built." OFF)
|
|
|
|
# Set default minimum C++ standard
|
|
if(MOLTEN_VK_TOPLEVEL_PROJECT)
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
|
endif()
|
|
|
|
### Configuration
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/MoltenVK/")
|
|
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/recipes/")
|
|
|
|
# General CMake utils
|
|
set(CPM_USE_NAMED_CACHE_DIRECTORIES 1)
|
|
include(MoltenVK_CPM_Cache)
|
|
|
|
# Generate position-independent code by default
|
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
|
|
|
if(NOT DEFINED MOLTEN_VK_EXTERNAL_REVISIONS_DIR)
|
|
set(MOLTEN_VK_EXTERNAL_REVISIONS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ExternalRevisions")
|
|
endif()
|
|
|
|
################################################################################
|
|
# MoltenVK Libraries
|
|
################################################################################
|
|
|
|
# MoltenVK::Common
|
|
add_subdirectory("Common")
|
|
|
|
# MoltenVK::ShaderConverter
|
|
add_subdirectory("MoltenVKShaderConverter/MoltenVKShaderConverter")
|
|
|
|
## MoltenVK::MoltenVK
|
|
add_subdirectory("MoltenVK")
|
|
|
|
## MoltenVKShaderConverter
|
|
if(MVK_BUILD_SHADER_CONVERTER_TOOL)
|
|
add_subdirectory("MoltenVKShaderConverter/MoltenVKShaderConverterTool")
|
|
endif()
|
|
|
|
################################################################################
|
|
# Install
|
|
################################################################################
|
|
|
|
if(MOLTEN_VK_TOPLEVEL_PROJECT)
|
|
include(GNUInstallDirs)
|
|
|
|
install(TARGETS MoltenVK
|
|
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/MoltenVK")
|
|
|
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/Templates/cmake/MoltenVK.pc.in" MoltenVK.pc @ONLY)
|
|
install(FILES ${CMAKE_BINARY_DIR}/MoltenVK.pc
|
|
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
|
|
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/Templates/cmake/MoltenVK_icd.json.in" MoltenVK_icd.json @ONLY)
|
|
install(FILES ${CMAKE_BINARY_DIR}/MoltenVK_icd.json
|
|
DESTINATION ${CMAKE_INSTALL_PREFIX}/etc/vulkan/icd.d)
|
|
|
|
if(MVK_BUILD_SHADER_CONVERTER_TOOL)
|
|
install(TARGETS MoltenVKShaderConverter)
|
|
endif()
|
|
endif()
|