mirror of
https://github.com/shadps4-emu/ext-MoltenVK.git
synced 2026-01-31 01:05:17 +01:00
Merge pull request #2513 from zfergus/cmake-build
Download External Dependencies and Build using CMake
This commit is contained in:
56
.github/workflows/CI.yml
vendored
56
.github/workflows/CI.yml
vendored
@@ -1,6 +1,6 @@
|
|||||||
name: CI
|
name: CI
|
||||||
|
|
||||||
# Controls when the action will run.
|
# Controls when the action will run.
|
||||||
on:
|
on:
|
||||||
# Triggers the workflow on push or pull request events
|
# Triggers the workflow on push or pull request events
|
||||||
push:
|
push:
|
||||||
@@ -39,9 +39,9 @@ jobs:
|
|||||||
fail-fast: false
|
fail-fast: false
|
||||||
|
|
||||||
name: MoltenVK (Xcode ${{ matrix.xcode }} - ${{ matrix.platform }}${{ matrix.private_api && '-privateapi' || '' }})
|
name: MoltenVK (Xcode ${{ matrix.xcode }} - ${{ matrix.platform }}${{ matrix.private_api && '-privateapi' || '' }})
|
||||||
|
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
env:
|
env:
|
||||||
XCODE_DEV_PATH: "/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer"
|
XCODE_DEV_PATH: "/Applications/Xcode_${{ matrix.xcode }}.app/Contents/Developer"
|
||||||
ARTIFACT_TYPE: ${{ matrix.platform }}${{ matrix.private_api && '-privateapi' || '' }}
|
ARTIFACT_TYPE: ${{ matrix.platform }}${{ matrix.private_api && '-privateapi' || '' }}
|
||||||
@@ -123,6 +123,56 @@ jobs:
|
|||||||
name: "MoltenVK-${{ env.ARTIFACT_TYPE }}"
|
name: "MoltenVK-${{ env.ARTIFACT_TYPE }}"
|
||||||
path: "MoltenVK-${{ env.ARTIFACT_TYPE }}.tar"
|
path: "MoltenVK-${{ env.ARTIFACT_TYPE }}.tar"
|
||||||
|
|
||||||
|
build_cmake:
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
# Primary build on latest macOS and its default Xcode version
|
||||||
|
os: [ "macos-latest" ]
|
||||||
|
# platform: [ "all", "macos", "ios" ]
|
||||||
|
config: [Debug, Release]
|
||||||
|
fail-fast: false
|
||||||
|
|
||||||
|
name: 'MoltenVK (Cmake - ${{ matrix.config }})'
|
||||||
|
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Dependencies
|
||||||
|
if: runner.os == 'macOS'
|
||||||
|
run: |
|
||||||
|
brew install ccache
|
||||||
|
echo 'CACHE_PATH=~/Library/Caches/ccache' >> "$GITHUB_ENV"
|
||||||
|
|
||||||
|
- name: Get number of CPU cores
|
||||||
|
uses: SimenB/github-actions-cpu-cores@v2.0.0
|
||||||
|
id: cpu-cores
|
||||||
|
|
||||||
|
- name: Cache Build
|
||||||
|
id: cache-build
|
||||||
|
uses: actions/cache@v4
|
||||||
|
with:
|
||||||
|
path: ${{ env.CACHE_PATH }}
|
||||||
|
key: ${{ runner.os }}-${{ matrix.config }}-cache
|
||||||
|
|
||||||
|
- name: Prepare ccache
|
||||||
|
run: |
|
||||||
|
ccache --max-size=1.0G
|
||||||
|
ccache -V && ccache --show-config
|
||||||
|
ccache --show-stats && ccache --zero-stats
|
||||||
|
|
||||||
|
- name: Configure
|
||||||
|
run: |
|
||||||
|
mkdir -p build
|
||||||
|
cd build
|
||||||
|
cmake .. -DCMAKE_BUILD_TYPE=${{ matrix.config }}
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: |
|
||||||
|
cmake --build build -j ${{ steps.cpu-cores.outputs.count }}
|
||||||
|
ccache --show-stats
|
||||||
|
|
||||||
release:
|
release:
|
||||||
name: 'Release'
|
name: 'Release'
|
||||||
|
|
||||||
|
|||||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -35,3 +35,4 @@ Backup[ ]of[ ]*.pages/
|
|||||||
Backup[ ]of[ ]*.key/
|
Backup[ ]of[ ]*.key/
|
||||||
Backup[ ]of[ ]*.numbers/
|
Backup[ ]of[ ]*.numbers/
|
||||||
|
|
||||||
|
MoltenVKOptions.cmake
|
||||||
|
|||||||
121
CMakeLists.txt
Normal file
121
CMakeLists.txt
Normal file
@@ -0,0 +1,121 @@
|
|||||||
|
# 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.1")
|
||||||
|
|
||||||
|
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")
|
||||||
|
|
||||||
|
# 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
|
||||||
|
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
|
||||||
|
add_subdirectory("MoltenVKShaderConverter/MoltenVKShaderConverterTool")
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# 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_DATAROOTDIR}/pkgconfig)
|
||||||
|
|
||||||
|
install(TARGETS MoltenVKShaderConverter)
|
||||||
|
endif()
|
||||||
66
Common/CMakeLists.txt
Normal file
66
Common/CMakeLists.txt
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
################################################################################
|
||||||
|
# MoltenVK::Common Library
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# Find the source files in this directory. We prefer to use GLOB because it is
|
||||||
|
# easier to maintain in conjunction with the Xcode project file.
|
||||||
|
file(GLOB_RECURSE SOURCES "*.c" "*.cpp" "*.m" "*.mm")
|
||||||
|
|
||||||
|
add_library(MoltenVK_Common STATIC ${SOURCES})
|
||||||
|
add_library(MoltenVK::Common ALIAS MoltenVK_Common)
|
||||||
|
|
||||||
|
target_include_directories(MoltenVK_Common PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Dependencies
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
find_library(FOUNDATION_LIBRARY Foundation REQUIRED)
|
||||||
|
find_library(METAL_LIBRARY Metal REQUIRED)
|
||||||
|
find_library(APPKIT_LIBRARY AppKit REQUIRED)
|
||||||
|
find_library(IOKIT_LIBRARY IOKit REQUIRED)
|
||||||
|
find_library(IOSURFACE_LIBRARY IOSurface REQUIRED)
|
||||||
|
find_library(QUARTZCORE_LIBRARY QuartzCore REQUIRED)
|
||||||
|
target_link_libraries(MoltenVK_Common PUBLIC
|
||||||
|
${FOUNDATION_LIBRARY}
|
||||||
|
${METAL_LIBRARY}
|
||||||
|
${APPKIT_LIBRARY}
|
||||||
|
${IOKIT_LIBRARY}
|
||||||
|
${IOSURFACE_LIBRARY}
|
||||||
|
${QUARTZCORE_LIBRARY}
|
||||||
|
)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Compiler options
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# Use C++17
|
||||||
|
target_compile_features(MoltenVK_Common PUBLIC cxx_std_17)
|
||||||
|
|
||||||
|
# Disable annoying warnings
|
||||||
|
set(MOLTEN_VK_WARNING_FLAGS
|
||||||
|
-Wno-deprecated-declarations # deprecated metal API
|
||||||
|
-Wno-vla-cxx-extension # variable length arrays in C++ are a Clang extension
|
||||||
|
)
|
||||||
|
|
||||||
|
include(MoltenVK_Filter_Flags)
|
||||||
|
MoltenVK_Filter_Flags(MOLTEN_VK_WARNING_FLAGS)
|
||||||
|
target_compile_options(MoltenVK_Common PUBLIC ${MOLTEN_VK_WARNING_FLAGS})
|
||||||
|
|
||||||
|
# Convert the log level to a number: off=0, error=1, warning=2, info=3, debug=4
|
||||||
|
if(MVK_CONFIG_LOG_LEVEL STREQUAL "off")
|
||||||
|
set(MVK_CONFIG_LOG_LEVEL_NUM 0)
|
||||||
|
elseif(MVK_CONFIG_LOG_LEVEL STREQUAL "error")
|
||||||
|
set(MVK_CONFIG_LOG_LEVEL_NUM 1)
|
||||||
|
elseif(MVK_CONFIG_LOG_LEVEL STREQUAL "warn")
|
||||||
|
set(MVK_CONFIG_LOG_LEVEL_NUM 2)
|
||||||
|
elseif(MVK_CONFIG_LOG_LEVEL STREQUAL "info")
|
||||||
|
set(MVK_CONFIG_LOG_LEVEL_NUM 3)
|
||||||
|
elseif(MVK_CONFIG_LOG_LEVEL STREQUAL "debug")
|
||||||
|
set(MVK_CONFIG_LOG_LEVEL_NUM 4)
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "Invalid MVK_CONFIG_LOG_LEVEL: ${MVK_CONFIG_LOG_LEVEL}")
|
||||||
|
endif()
|
||||||
|
target_compile_definitions(MoltenVK_Common PUBLIC
|
||||||
|
MVK_CONFIG_LOG_LEVEL=${MVK_CONFIG_LOG_LEVEL_NUM}
|
||||||
|
)
|
||||||
@@ -1 +1 @@
|
|||||||
51cbda5f30e56c801c07fe3d3aba5d7fb9e6cca4
|
a56bad8bbb770ee266e930c95d37fff2a5be7fea
|
||||||
|
|||||||
60
MoltenVK/CMakeLists.txt
Normal file
60
MoltenVK/CMakeLists.txt
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
################################################################################
|
||||||
|
# MoltenVK::MoltenVK Library
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# Find the source files in this directory. We prefer to use GLOB because it is
|
||||||
|
# easier to maintain in conjunction with the Xcode project file.
|
||||||
|
file(GLOB_RECURSE SOURCES "MoltenVK/*.c" "MoltenVK/*.cpp" "MoltenVK/*.m" "MoltenVK/*.mm")
|
||||||
|
|
||||||
|
add_library(MoltenVK SHARED ${SOURCES})
|
||||||
|
add_library(MoltenVK::MoltenVK ALIAS MoltenVK)
|
||||||
|
|
||||||
|
target_include_directories(MoltenVK
|
||||||
|
PUBLIC
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/include"
|
||||||
|
PRIVATE
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/API"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/Commands"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/GPUObjects"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/Layers"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/OS"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/Utility"
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/Vulkan"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}" # for mvkGitRevDerived.h
|
||||||
|
)
|
||||||
|
|
||||||
|
# Record the MoltenVK GIT revision as a derived header file suitable for including in a build
|
||||||
|
find_package(Git)
|
||||||
|
if(GIT_FOUND)
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
|
||||||
|
OUTPUT_VARIABLE MVK_GIT_REV
|
||||||
|
ERROR_QUIET
|
||||||
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||||
|
)
|
||||||
|
configure_file(
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/../Templates/cmake/mvkGitRevDerived.h.in"
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/mvkGitRevDerived.h"
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "GIT not found")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_compile_definitions(MoltenVK PUBLIC
|
||||||
|
"MVK_FRAMEWORK_VERSION=${PROJECT_VERSION}"
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(MoltenVK PROPERTIES VERSION ${PROJECT_VERSION})
|
||||||
|
set_target_properties(MoltenVK PROPERTIES SOVERSION ${PROJECT_VERSION_MAJOR})
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Dependencies
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
target_link_libraries(MoltenVK PUBLIC MoltenVK::ShaderConverter)
|
||||||
|
|
||||||
|
include(cereal)
|
||||||
|
target_link_libraries(MoltenVK PRIVATE cereal::cereal)
|
||||||
|
|
||||||
|
include(Vulkan-Headers)
|
||||||
|
target_link_libraries(MoltenVK PUBLIC Vulkan::Headers)
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
################################################################################
|
||||||
|
# MoltenVK::ShaderConverter Library
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# Find the source files in this directory. We prefer to use GLOB because it is
|
||||||
|
# easier to maintain in conjunction with the Xcode project file.
|
||||||
|
file(GLOB_RECURSE SOURCES "*.c" "*.cpp" "*.m" "*.mm")
|
||||||
|
|
||||||
|
add_library(MoltenVK_ShaderConverter STATIC ${SOURCES})
|
||||||
|
add_library(MoltenVK::ShaderConverter ALIAS MoltenVK_ShaderConverter)
|
||||||
|
|
||||||
|
target_include_directories(MoltenVK_ShaderConverter PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/..")
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Dependencies
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
target_link_libraries(MoltenVK_ShaderConverter PUBLIC MoltenVK::Common)
|
||||||
|
|
||||||
|
include(SPIRV-Cross)
|
||||||
|
target_link_libraries(MoltenVK_ShaderConverter PUBLIC SPRIV-Cross::SPRIV-Cross)
|
||||||
|
|
||||||
|
include(SPIRV-Tools)
|
||||||
|
target_link_libraries(MoltenVK_ShaderConverter PUBLIC SPIRV-Tools::SPIRV-Tools)
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
################################################################################
|
||||||
|
# MoltenVKShaderConverter Executable
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# Find the source files in this directory. We prefer to use GLOB because it is
|
||||||
|
# easier to maintain in conjunction with the Xcode project file.
|
||||||
|
file(GLOB_RECURSE SOURCES "*.c" "*.cpp" "*.m" "*.mm")
|
||||||
|
|
||||||
|
add_executable(MoltenVKShaderConverter ${SOURCES})
|
||||||
|
|
||||||
|
target_include_directories(MoltenVKShaderConverter PUBLIC
|
||||||
|
"${CMAKE_CURRENT_SOURCE_DIR}/../MoltenVKShaderConverter"
|
||||||
|
)
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# Dependencies
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
target_link_libraries(MoltenVKShaderConverter PRIVATE MoltenVK::MoltenVK)
|
||||||
12
Templates/cmake/MoltenVK.pc.in
Normal file
12
Templates/cmake/MoltenVK.pc.in
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
|
exec_prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
|
libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@
|
||||||
|
includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
|
||||||
|
|
||||||
|
Name: @PROJECT_NAME@
|
||||||
|
Description: @PROJECT_DESCRIPTION@
|
||||||
|
Version: @PROJECT_VERSION@
|
||||||
|
|
||||||
|
Requires:
|
||||||
|
Libs: -L${libdir} -lMoltenVK
|
||||||
|
Cflags: -I${includedir}
|
||||||
40
Templates/cmake/MoltenVKOptions.cmake.sample
Normal file
40
Templates/cmake/MoltenVKOptions.cmake.sample
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
# In order to persistently set default options for your project, copy this file
|
||||||
|
# and remove the '.sample' suffix. Then uncomment the relevant options for your
|
||||||
|
# project. Note that this file is included before `project(IPCToolkit)` is defined,
|
||||||
|
# so we can use it to define the C and C++ compilers, but some variables such as
|
||||||
|
# PROJECT_SOURCE_DIR will not be defined yet. You can use CMAKE_SOURCE_DIR instead.
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# CMake Options
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# Specify a custom install prefix path
|
||||||
|
# set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR}/install CACHE STRING "Install directory used by install().")
|
||||||
|
|
||||||
|
# Generates a `compile_commands.json` that can be used for autocompletion
|
||||||
|
# set(CMAKE_EXPORT_COMPILE_COMMANDS ON CACHE BOOL "Enable/Disable output of compile commands during generation.")
|
||||||
|
|
||||||
|
# Use a specific C/C++ compiler, e.g. llvm-clang on macOS (so we can use clangd)
|
||||||
|
# set(CMAKE_C_COMPILER "/usr/bin/cc" CACHE STRING "C compiler")
|
||||||
|
# set(CMAKE_CXX_COMPILER "/usr/bin/c++" CACHE STRING "C++ compiler")
|
||||||
|
|
||||||
|
# Use a specific Objective-C/C++ compiler, e.g. llvm-clang on macOS (so we can use clangd)
|
||||||
|
# set(CMAKE_OBJC_COMPILER "/usr/bin/cc" CACHE STRING "C compiler")
|
||||||
|
# set(CMAKE_OBJCXX_COMPILER "/usr/bin/c++" CACHE STRING "C++ compiler")
|
||||||
|
|
||||||
|
# Set deployment platform for macOS
|
||||||
|
# set(CMAKE_OSX_DEPLOYMENT_TARGET 11.0 CACHE STRING "macOS deployment target")
|
||||||
|
|
||||||
|
################################################################################
|
||||||
|
# MoltenVK Options
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# 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(CPM_cereal_SOURCE "" CACHE PATH "Path to Cereal library to override CPM download")
|
||||||
|
# set(CPM_SPIRV-Cross_SOURCE "" CACHE PATH "Path to SPIRV-Cross library to override CPM download")
|
||||||
|
# set(CPM_SPIRV-Headers_SOURCE "" CACHE PATH "Path to SPIRV-Headers library to override CPM download")
|
||||||
|
# set(CPM_SPIRV-Tools_SOURCE "" CACHE PATH "Path to SPIRV-Tools library to override CPM download")
|
||||||
|
# set(CPM_Volk_SOURCE "" CACHE PATH "Path to Volk library to override CPM download")
|
||||||
|
# set(CPM_Vulkan-Headers_SOURCE "" CACHE PATH "Path to Vulkan-Headers library to override CPM download")
|
||||||
|
# set(CPM_Vulkan-Tools_SOURCE "" CACHE PATH "Path to Vulkan-Tools library to override CPM download")
|
||||||
2
Templates/cmake/mvkGitRevDerived.h.in
Normal file
2
Templates/cmake/mvkGitRevDerived.h.in
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
// Auto-generated by MoltenVK
|
||||||
|
static const char* mvkRevString = "@MVK_GIT_REV@";
|
||||||
24
cmake/MoltenVK/MoltenVK_CPM_Cache.cmake
Normal file
24
cmake/MoltenVK/MoltenVK_CPM_Cache.cmake
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
#
|
||||||
|
# Copyright 2021 Adobe. All rights reserved.
|
||||||
|
# This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License. You may obtain a copy
|
||||||
|
# of the License at http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software distributed under
|
||||||
|
# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
||||||
|
# OF ANY KIND, either express or implied. See the License for the specific language
|
||||||
|
# governing permissions and limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
|
if(DEFINED ENV{CPM_SOURCE_CACHE})
|
||||||
|
set(CPM_SOURCE_CACHE_DEFAULT $ENV{CPM_SOURCE_CACHE})
|
||||||
|
else()
|
||||||
|
# Set CPM cache folder if unset
|
||||||
|
file(REAL_PATH "~/.cache/CPM" CPM_SOURCE_CACHE_DEFAULT EXPAND_TILDE)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CPM_SOURCE_CACHE
|
||||||
|
${CPM_SOURCE_CACHE_DEFAULT}
|
||||||
|
CACHE PATH "Directory to download CPM dependencies"
|
||||||
|
)
|
||||||
|
message(STATUS "Using CPM cache folder: ${CPM_SOURCE_CACHE}")
|
||||||
36
cmake/MoltenVK/MoltenVK_Filter_Flags.cmake
Normal file
36
cmake/MoltenVK/MoltenVK_Filter_Flags.cmake
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
#
|
||||||
|
# Copyright 2021 Adobe. All rights reserved.
|
||||||
|
# This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License. You may obtain a copy
|
||||||
|
# of the License at http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software distributed under
|
||||||
|
# the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
||||||
|
# OF ANY KIND, either express or implied. See the License for the specific language
|
||||||
|
# governing permissions and limitations under the License.
|
||||||
|
#
|
||||||
|
function(MoltenVK_Filter_Flags flags)
|
||||||
|
include(CheckCXXCompilerFlag)
|
||||||
|
include(CheckOBJCXXCompilerFlag)
|
||||||
|
set(output_flags)
|
||||||
|
foreach(FLAG IN ITEMS ${${flags}})
|
||||||
|
string(REPLACE "=" "-" FLAG_VAR "${FLAG}")
|
||||||
|
|
||||||
|
# Check if the flag is supported by the C++ compiler
|
||||||
|
if(NOT DEFINED IS_SUPPORTED_${FLAG_VAR}_CXX)
|
||||||
|
check_cxx_compiler_flag("${FLAG}" IS_SUPPORTED_${FLAG_VAR}_CXX)
|
||||||
|
endif()
|
||||||
|
if(IS_SUPPORTED_${FLAG_VAR}_CXX)
|
||||||
|
list(APPEND output_flags $<$<COMPILE_LANGUAGE:CXX>:${FLAG}>)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Check if the flag is supported by the Objective-C++ compiler
|
||||||
|
if(NOT DEFINED IS_SUPPORTED_${FLAG_VAR}_OBJCXX)
|
||||||
|
check_objcxx_compiler_flag("${FLAG}" IS_SUPPORTED_${FLAG_VAR}_OBJCXX)
|
||||||
|
endif()
|
||||||
|
if(IS_SUPPORTED_${FLAG_VAR}_OBJCXX)
|
||||||
|
list(APPEND output_flags $<$<COMPILE_LANGUAGE:OBJCXX>:${FLAG}>)
|
||||||
|
endif()
|
||||||
|
endforeach()
|
||||||
|
set(${flags} ${output_flags} PARENT_SCOPE)
|
||||||
|
endfunction()
|
||||||
33
cmake/recipes/CPM.cmake
Normal file
33
cmake/recipes/CPM.cmake
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
set(CPM_DOWNLOAD_VERSION 0.40.8)
|
||||||
|
|
||||||
|
if(CPM_SOURCE_CACHE)
|
||||||
|
set(CPM_DOWNLOAD_LOCATION "${CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||||
|
elseif(DEFINED ENV{CPM_SOURCE_CACHE})
|
||||||
|
set(CPM_DOWNLOAD_LOCATION "$ENV{CPM_SOURCE_CACHE}/cpm/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||||
|
else()
|
||||||
|
set(CPM_DOWNLOAD_LOCATION "${CMAKE_BINARY_DIR}/cmake/CPM_${CPM_DOWNLOAD_VERSION}.cmake")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Expand relative path. This is important if the provided path contains a tilde (~)
|
||||||
|
get_filename_component(CPM_DOWNLOAD_LOCATION ${CPM_DOWNLOAD_LOCATION} ABSOLUTE)
|
||||||
|
|
||||||
|
function(download_cpm)
|
||||||
|
message(STATUS "Downloading CPM.cmake to ${CPM_DOWNLOAD_LOCATION}")
|
||||||
|
file(DOWNLOAD
|
||||||
|
https://github.com/cpm-cmake/CPM.cmake/releases/download/v${CPM_DOWNLOAD_VERSION}/CPM.cmake
|
||||||
|
${CPM_DOWNLOAD_LOCATION}
|
||||||
|
)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
if(NOT (EXISTS ${CPM_DOWNLOAD_LOCATION}))
|
||||||
|
download_cpm()
|
||||||
|
else()
|
||||||
|
# resume download if it previously failed
|
||||||
|
file(READ ${CPM_DOWNLOAD_LOCATION} check)
|
||||||
|
if("${check}" STREQUAL "")
|
||||||
|
download_cpm()
|
||||||
|
endif()
|
||||||
|
unset(check)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include(${CPM_DOWNLOAD_LOCATION})
|
||||||
46
cmake/recipes/SPIRV-Cross.cmake
Normal file
46
cmake/recipes/SPIRV-Cross.cmake
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
# SPIRV-Cross (https://github.com/KhronosGroup/SPIRV-Cross)
|
||||||
|
# License: Apache-2.0
|
||||||
|
if(TARGET SPRIV-Cross::SPRIV-Cross)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "External: creating target 'SPRIV-Cross::SPRIV-Cross'")
|
||||||
|
|
||||||
|
# Read Git commit hash from ExternalRevisions file
|
||||||
|
file(READ "${MOLTEN_VK_EXTERNAL_REVISIONS_DIR}/SPIRV-Cross_repo_revision" SPIRV_CROSS_COMMIT_HASH)
|
||||||
|
string(STRIP "${SPIRV_CROSS_COMMIT_HASH}" SPIRV_CROSS_COMMIT_HASH)
|
||||||
|
|
||||||
|
include(CPM)
|
||||||
|
CPMAddPackage(
|
||||||
|
NAME SPIRV-Cross
|
||||||
|
GITHUB_REPOSITORY KhronosGroup/SPIRV-Cross
|
||||||
|
GIT_TAG ${SPIRV_CROSS_COMMIT_HASH}
|
||||||
|
GIT_SHALLOW TRUE
|
||||||
|
SYSTEM TRUE
|
||||||
|
OPTIONS
|
||||||
|
"SPIRV_CROSS_CLI OFF"
|
||||||
|
"SPIRV_CROSS_ENABLE_TESTS OFF"
|
||||||
|
"SPIRV_CROSS_ENABLE_GLSL ON"
|
||||||
|
"SPIRV_CROSS_ENABLE_HLSL OFF"
|
||||||
|
"SPIRV_CROSS_ENABLE_MSL ON"
|
||||||
|
"SPIRV_CROSS_ENABLE_CPP OFF"
|
||||||
|
"SPIRV_CROSS_ENABLE_REFLECT ON"
|
||||||
|
"SPIRV_CROSS_ENABLE_C_API OFF"
|
||||||
|
"SPIRV_CROSS_ENABLE_UTIL OFF"
|
||||||
|
"SPIRV_CROSS_NAMESPACE_OVERRIDE MVK_spirv_cross"
|
||||||
|
"SPIRV_CROSS_SKIP_INSTALL ON"
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(SPRIV-Cross::Core ALIAS spirv-cross-core)
|
||||||
|
add_library(SPRIV-Cross::Reflect ALIAS spirv-cross-reflect)
|
||||||
|
add_library(SPRIV-Cross::GLSL ALIAS spirv-cross-glsl)
|
||||||
|
add_library(SPRIV-Cross::MSL ALIAS spirv-cross-msl)
|
||||||
|
|
||||||
|
add_library(SPRIV-Cross INTERFACE)
|
||||||
|
add_library(SPRIV-Cross::SPRIV-Cross ALIAS SPRIV-Cross)
|
||||||
|
target_link_libraries(SPRIV-Cross INTERFACE
|
||||||
|
spirv-cross-core
|
||||||
|
spirv-cross-reflect
|
||||||
|
spirv-cross-glsl
|
||||||
|
spirv-cross-msl
|
||||||
|
)
|
||||||
14
cmake/recipes/SPIRV-Headers.cmake
Normal file
14
cmake/recipes/SPIRV-Headers.cmake
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# SPIRV-Headers (https://github.com/KhronosGroup/SPIRV-Headers)
|
||||||
|
# License: Apache-2.0
|
||||||
|
if(TARGET SPIRV-Headers::SPIRV-Headers)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "External: creating target 'SPIRV-Headers::SPIRV-Headers'")
|
||||||
|
|
||||||
|
# Read Git commit hash from ExternalRevisions file
|
||||||
|
file(READ "${MOLTEN_VK_EXTERNAL_REVISIONS_DIR}/SPIRV-Headers_repo_revision" SPIRV_HEADERS_COMMIT_HASH)
|
||||||
|
string(STRIP "${SPIRV_HEADERS_COMMIT_HASH}" SPIRV_HEADERS_COMMIT_HASH)
|
||||||
|
|
||||||
|
include(CPM)
|
||||||
|
CPMAddPackage("gh:KhronosGroup/SPIRV-Headers#${SPIRV_HEADERS_COMMIT_HASH}")
|
||||||
21
cmake/recipes/SPIRV-Tools.cmake
Normal file
21
cmake/recipes/SPIRV-Tools.cmake
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# SPIRV-Tools (https://github.com/KhronosGroup/SPIRV-Tools)
|
||||||
|
# License: Apache-2.0
|
||||||
|
if(TARGET SPIRV-Tools::SPIRV-Tools)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "External: creating target 'SPIRV-Tools::SPIRV-Tools'")
|
||||||
|
|
||||||
|
# SPIRV-Tools requires SPIRV-Headers
|
||||||
|
include(SPIRV-Headers)
|
||||||
|
|
||||||
|
set(SPIRV_TOOLS_BUILD_STATIC ON)
|
||||||
|
|
||||||
|
# Read Git commit hash from ExternalRevisions file
|
||||||
|
file(READ "${MOLTEN_VK_EXTERNAL_REVISIONS_DIR}/SPIRV-Tools_repo_revision" SPIRV_TOOLS_COMMIT_HASH)
|
||||||
|
string(STRIP "${SPIRV_TOOLS_COMMIT_HASH}" SPIRV_TOOLS_COMMIT_HASH)
|
||||||
|
|
||||||
|
include(CPM)
|
||||||
|
CPMAddPackage("gh:KhronosGroup/SPIRV-Tools#${SPIRV_TOOLS_COMMIT_HASH}")
|
||||||
|
|
||||||
|
add_library(SPIRV-Tools::SPIRV-Tools ALIAS SPIRV-Tools-static)
|
||||||
14
cmake/recipes/Volk.cmake
Normal file
14
cmake/recipes/Volk.cmake
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# Volk (https://github.com/zeux/Volk)
|
||||||
|
# License: MIT
|
||||||
|
if(TARGET volk::volk)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "External: creating target 'volk::volk'")
|
||||||
|
|
||||||
|
# Read Git commit hash from ExternalRevisions file
|
||||||
|
file(READ "${MOLTEN_VK_EXTERNAL_REVISIONS_DIR}/Volk_repo_revision" VOLK_COMMIT_HASH)
|
||||||
|
string(STRIP "${VOLK_COMMIT_HASH}" VOLK_COMMIT_HASH)
|
||||||
|
|
||||||
|
include(CPM)
|
||||||
|
CPMAddPackage("gh:zeux/Volk#${VOLK_COMMIT_HASH}")
|
||||||
14
cmake/recipes/Vulkan-Headers.cmake
Normal file
14
cmake/recipes/Vulkan-Headers.cmake
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# Vulkan-Headers (https://github.com/KhronosGroup/Vulkan-Headers)
|
||||||
|
# License: Apache-2.0
|
||||||
|
if(TARGET Vulkan::Headers)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "External: creating target 'Vulkan::Headers'")
|
||||||
|
|
||||||
|
# Read Git commit hash from ExternalRevisions file
|
||||||
|
file(READ "${MOLTEN_VK_EXTERNAL_REVISIONS_DIR}/Vulkan-Headers_repo_revision" VULKAN_HEADERS_COMMIT_HASH)
|
||||||
|
string(STRIP "${VULKAN_HEADERS_COMMIT_HASH}" VULKAN_HEADERS_COMMIT_HASH)
|
||||||
|
|
||||||
|
include(CPM)
|
||||||
|
CPMAddPackage("gh:KhronosGroup/Vulkan-Headers#${VULKAN_HEADERS_COMMIT_HASH}")
|
||||||
14
cmake/recipes/Vulkan-Tools.cmake
Normal file
14
cmake/recipes/Vulkan-Tools.cmake
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
# Vulkan-Tools (https://github.com/KhronosGroup/Vulkan-Tools)
|
||||||
|
# License: Apache-2.0
|
||||||
|
if(TARGET Vulkan::Headers)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "External: creating target 'Vulkan::Tools'")
|
||||||
|
|
||||||
|
# Read Git commit hash from ExternalRevisions file
|
||||||
|
file(READ "${MOLTEN_VK_EXTERNAL_REVISIONS_DIR}/Vulkan-Tools_repo_revision" VULKAN_TOOLS_COMMIT_HASH)
|
||||||
|
string(STRIP "${VULKAN_TOOLS_COMMIT_HASH}" VULKAN_TOOLS_COMMIT_HASH)
|
||||||
|
|
||||||
|
include(CPM)
|
||||||
|
CPMAddPackage("gh:KhronosGroup/Vulkan-Tools#${VULKAN_TOOLS_COMMIT_HASH}")
|
||||||
24
cmake/recipes/cereal.cmake
Normal file
24
cmake/recipes/cereal.cmake
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
# cereal (https://github.com/USCiLab/cereal)
|
||||||
|
# License: BSD-3-Clause
|
||||||
|
if(TARGET cereal::cereal)
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
message(STATUS "External: creating target 'cereal::cereal'")
|
||||||
|
|
||||||
|
# Read Git commit hash from ExternalRevisions file
|
||||||
|
file(READ "${MOLTEN_VK_EXTERNAL_REVISIONS_DIR}/cereal_repo_revision" CEREAL_COMMIT_HASH)
|
||||||
|
string(STRIP "${CEREAL_COMMIT_HASH}" CEREAL_COMMIT_HASH)
|
||||||
|
|
||||||
|
include(CPM)
|
||||||
|
CPMAddPackage(
|
||||||
|
NAME cereal
|
||||||
|
GITHUB_REPOSITORY USCiLab/cereal
|
||||||
|
GIT_TAG ${CEREAL_COMMIT_HASH}
|
||||||
|
GIT_SHALLOW TRUE
|
||||||
|
SYSTEM TRUE
|
||||||
|
OPTIONS
|
||||||
|
"BUILD_DOC OFF"
|
||||||
|
"BUILD_SANDBOX OFF"
|
||||||
|
"SKIP_PERFORMANCE_COMPARISON ON"
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user