mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2024-12-27 18:16:23 +00:00
externals: Add MoltenVK as an external. (#1767)
This commit is contained in:
parent
a57ccf9112
commit
40e8a40ada
14
.github/workflows/build.yml
vendored
14
.github/workflows/build.yml
vendored
|
@ -174,11 +174,6 @@ jobs:
|
||||||
with:
|
with:
|
||||||
xcode-version: latest
|
xcode-version: latest
|
||||||
|
|
||||||
- name: Install MoltenVK
|
|
||||||
run: |
|
|
||||||
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
|
||||||
arch -x86_64 /usr/local/bin/brew install molten-vk
|
|
||||||
|
|
||||||
- name: Cache CMake Configuration
|
- name: Cache CMake Configuration
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
env:
|
env:
|
||||||
|
@ -210,7 +205,7 @@ jobs:
|
||||||
run: |
|
run: |
|
||||||
mkdir upload
|
mkdir upload
|
||||||
mv ${{github.workspace}}/build/shadps4 upload
|
mv ${{github.workspace}}/build/shadps4 upload
|
||||||
cp $(arch -x86_64 /usr/local/bin/brew --prefix)/opt/molten-vk/lib/libMoltenVK.dylib upload
|
cp ${{github.workspace}}/build/externals/MoltenVK/libMoltenVK.dylib upload
|
||||||
tar cf shadps4-macos-sdl.tar.gz -C upload .
|
tar cf shadps4-macos-sdl.tar.gz -C upload .
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
|
@ -230,11 +225,8 @@ jobs:
|
||||||
with:
|
with:
|
||||||
xcode-version: latest
|
xcode-version: latest
|
||||||
|
|
||||||
- name: Install MoltenVK and Setup Qt
|
- name: Setup Qt
|
||||||
run: |
|
uses: jurplel/install-qt-action@v4
|
||||||
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
|
||||||
arch -x86_64 /usr/local/bin/brew install molten-vk
|
|
||||||
- uses: jurplel/install-qt-action@v4
|
|
||||||
with:
|
with:
|
||||||
version: 6.7.3
|
version: 6.7.3
|
||||||
host: mac
|
host: mac
|
||||||
|
|
12
.gitmodules
vendored
12
.gitmodules
vendored
|
@ -107,3 +107,15 @@
|
||||||
path = externals/libpng
|
path = externals/libpng
|
||||||
url = https://github.com/pnggroup/libpng
|
url = https://github.com/pnggroup/libpng
|
||||||
shallow = true
|
shallow = true
|
||||||
|
[submodule "externals/MoltenVK/SPIRV-Cross"]
|
||||||
|
path = externals/MoltenVK/SPIRV-Cross
|
||||||
|
url = https://github.com/KhronosGroup/SPIRV-Cross
|
||||||
|
shallow = true
|
||||||
|
[submodule "externals/MoltenVK/MoltenVK"]
|
||||||
|
path = externals/MoltenVK/MoltenVK
|
||||||
|
url = https://github.com/KhronosGroup/MoltenVK
|
||||||
|
shallow = true
|
||||||
|
[submodule "externals/MoltenVK/cereal"]
|
||||||
|
path = externals/MoltenVK/cereal
|
||||||
|
url = https://github.com/USCiLab/cereal
|
||||||
|
shallow = true
|
||||||
|
|
|
@ -894,8 +894,7 @@ if (APPLE)
|
||||||
target_compile_definitions(shadps4 PRIVATE USE_SYSTEM_VULKAN_LOADER=1)
|
target_compile_definitions(shadps4 PRIVATE USE_SYSTEM_VULKAN_LOADER=1)
|
||||||
else()
|
else()
|
||||||
# Link MoltenVK for Vulkan support
|
# Link MoltenVK for Vulkan support
|
||||||
find_library(MOLTENVK MoltenVK REQUIRED)
|
target_link_libraries(shadps4 PRIVATE MoltenVK)
|
||||||
target_link_libraries(shadps4 PRIVATE ${MOLTENVK})
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ARCHITECTURE STREQUAL "x86_64")
|
if (ARCHITECTURE STREQUAL "x86_64")
|
||||||
|
|
|
@ -24,23 +24,21 @@ eval $(/opt/homebrew/bin/brew shellenv)
|
||||||
brew install clang-format cmake
|
brew install clang-format cmake
|
||||||
```
|
```
|
||||||
|
|
||||||
Next, install x86_64 Homebrew and libraries.
|
Next, install x86_64 Qt. You can skip these steps and move on to **Cloning and compiling** if you do not intend to build the Qt GUI.
|
||||||
|
|
||||||
**If you are on an ARM Mac:**
|
**If you are on an ARM Mac:**
|
||||||
```
|
```
|
||||||
# Installs x86_64 Homebrew to /usr/local
|
# Installs x86_64 Homebrew to /usr/local
|
||||||
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
arch -x86_64 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
||||||
# Installs libraries.
|
# Installs libraries.
|
||||||
arch -x86_64 /usr/local/bin/brew install molten-vk qt@6
|
arch -x86_64 /usr/local/bin/brew install qt@6
|
||||||
```
|
```
|
||||||
|
|
||||||
**If you are on an x86_64 Mac:**
|
**If you are on an x86_64 Mac:**
|
||||||
```
|
```
|
||||||
brew install molten-vk qt@6
|
brew install qt@6
|
||||||
```
|
```
|
||||||
|
|
||||||
If you don't need the Qt GUI you can remove `qt@6` from the last command.
|
|
||||||
|
|
||||||
### Cloning and compiling:
|
### Cloning and compiling:
|
||||||
|
|
||||||
Clone the repository recursively:
|
Clone the repository recursively:
|
||||||
|
|
24
externals/CMakeLists.txt
vendored
24
externals/CMakeLists.txt
vendored
|
@ -177,15 +177,6 @@ if (NOT TARGET PNG::PNG)
|
||||||
add_library(PNG::PNG ALIAS png_static)
|
add_library(PNG::PNG ALIAS png_static)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (APPLE)
|
|
||||||
# date
|
|
||||||
if (NOT TARGET date::date-tz)
|
|
||||||
option(BUILD_TZ_LIB "" ON)
|
|
||||||
option(USE_SYSTEM_TZ_DB "" ON)
|
|
||||||
add_subdirectory(date)
|
|
||||||
endif()
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Dear ImGui
|
# Dear ImGui
|
||||||
add_library(Dear_ImGui
|
add_library(Dear_ImGui
|
||||||
dear_imgui/imgui.cpp
|
dear_imgui/imgui.cpp
|
||||||
|
@ -232,3 +223,18 @@ if (NOT TARGET stb::headers)
|
||||||
target_include_directories(stb INTERFACE stb)
|
target_include_directories(stb INTERFACE stb)
|
||||||
add_library(stb::headers ALIAS stb)
|
add_library(stb::headers ALIAS stb)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# Apple-only dependencies
|
||||||
|
if (APPLE)
|
||||||
|
# date
|
||||||
|
if (NOT TARGET date::date-tz)
|
||||||
|
option(BUILD_TZ_LIB "" ON)
|
||||||
|
option(USE_SYSTEM_TZ_DB "" ON)
|
||||||
|
add_subdirectory(date)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# MoltenVK
|
||||||
|
if (NOT TARGET MoltenVK)
|
||||||
|
add_subdirectory(MoltenVK)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
81
externals/MoltenVK/CMakeLists.txt
vendored
Normal file
81
externals/MoltenVK/CMakeLists.txt
vendored
Normal file
|
@ -0,0 +1,81 @@
|
||||||
|
# SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
# Prepare version information
|
||||||
|
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)
|
||||||
|
endif()
|
||||||
|
set(MVK_VERSION "1.2.12")
|
||||||
|
set(MVK_GENERATED_INCLUDES ${CMAKE_CURRENT_BINARY_DIR}/Generated)
|
||||||
|
file(WRITE ${MVK_GENERATED_INCLUDES}/mvkGitRevDerived.h "static const char* mvkRevString = \"${MVK_GIT_REV}\";")
|
||||||
|
|
||||||
|
# Find required system libraries
|
||||||
|
find_library(APPKIT_LIBRARY AppKit REQUIRED)
|
||||||
|
find_library(FOUNDATION_LIBRARY Foundation REQUIRED)
|
||||||
|
find_library(IOKIT_LIBRARY IOKit REQUIRED)
|
||||||
|
find_library(IOSURFACE_LIBRARY IOSurface REQUIRED)
|
||||||
|
find_library(METAL_LIBRARY Metal REQUIRED)
|
||||||
|
find_library(QUARTZCORE_LIBRARY QuartzCore REQUIRED)
|
||||||
|
|
||||||
|
# cereal
|
||||||
|
option(SKIP_PORTABILITY_TEST "" ON)
|
||||||
|
option(BUILD_DOC "" OFF)
|
||||||
|
option(BUILD_SANDBOX "" OFF)
|
||||||
|
option(SKIP_PERFORMANCE_COMPARISON "" ON)
|
||||||
|
option(SPIRV_CROSS_SKIP_INSTALL "" ON)
|
||||||
|
add_subdirectory(cereal)
|
||||||
|
|
||||||
|
# SPIRV-Cross
|
||||||
|
option(SPIRV_CROSS_CLI "" OFF)
|
||||||
|
option(SPIRV_CROSS_ENABLE_TESTS "" OFF)
|
||||||
|
option(SPIRV_CROSS_ENABLE_HLSL "" OFF)
|
||||||
|
option(SPIRV_CROSS_ENABLE_CPP "" OFF)
|
||||||
|
option(SPIRV_CROSS_SKIP_INSTALL "" ON)
|
||||||
|
add_subdirectory(SPIRV-Cross)
|
||||||
|
|
||||||
|
# Common
|
||||||
|
set(MVK_COMMON_DIR ${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/Common)
|
||||||
|
file(GLOB_RECURSE MVK_COMMON_SOURCES CONFIGURE_DEPENDS
|
||||||
|
${MVK_COMMON_DIR}/*.cpp
|
||||||
|
${MVK_COMMON_DIR}/*.m
|
||||||
|
${MVK_COMMON_DIR}/*.mm)
|
||||||
|
set(MVK_COMMON_INCLUDES ${MVK_COMMON_DIR})
|
||||||
|
|
||||||
|
add_library(MoltenVKCommon STATIC ${MVK_COMMON_SOURCES})
|
||||||
|
target_include_directories(MoltenVKCommon PUBLIC ${MVK_COMMON_INCLUDES})
|
||||||
|
target_compile_options(MoltenVKCommon PRIVATE -w)
|
||||||
|
|
||||||
|
# MoltenVKShaderConverter
|
||||||
|
set(MVK_SHADER_CONVERTER_DIR ${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/MoltenVKShaderConverter)
|
||||||
|
file(GLOB_RECURSE MVK_SHADER_CONVERTER_SOURCES CONFIGURE_DEPENDS
|
||||||
|
${MVK_SHADER_CONVERTER_DIR}/MoltenVKShaderConverter/*.cpp
|
||||||
|
${MVK_SHADER_CONVERTER_DIR}/MoltenVKShaderConverter/*.m
|
||||||
|
${MVK_SHADER_CONVERTER_DIR}/MoltenVKShaderConverter/*.mm)
|
||||||
|
set(MVK_SHADER_CONVERTER_INCLUDES ${MVK_SHADER_CONVERTER_DIR} ${MVK_SHADER_CONVERTER_DIR}/include)
|
||||||
|
|
||||||
|
add_library(MoltenVKShaderConverter STATIC ${MVK_SHADER_CONVERTER_SOURCES})
|
||||||
|
target_include_directories(MoltenVKShaderConverter PUBLIC ${MVK_SHADER_CONVERTER_INCLUDES})
|
||||||
|
target_compile_options(MoltenVKShaderConverter PRIVATE -w)
|
||||||
|
target_link_libraries(MoltenVKShaderConverter PRIVATE spirv-cross-msl spirv-cross-reflect MoltenVKCommon)
|
||||||
|
target_compile_definitions(MoltenVKShaderConverter PRIVATE MVK_EXCLUDE_SPIRV_TOOLS=1)
|
||||||
|
|
||||||
|
# MoltenVK
|
||||||
|
set(MVK_DIR ${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/MoltenVK)
|
||||||
|
file(GLOB_RECURSE MVK_SOURCES CONFIGURE_DEPENDS
|
||||||
|
${MVK_DIR}/MoltenVK/*.cpp
|
||||||
|
${MVK_DIR}/MoltenVK/*.m
|
||||||
|
${MVK_DIR}/MoltenVK/*.mm)
|
||||||
|
file(GLOB MVK_SRC_INCLUDES LIST_DIRECTORIES ON ${MVK_DIR}/MoltenVK/*)
|
||||||
|
set(MVK_INCLUDES ${MVK_SRC_INCLUDES} ${MVK_GENERATED_INCLUDES} ${MVK_DIR}/include)
|
||||||
|
|
||||||
|
add_library(MoltenVK SHARED ${MVK_SOURCES})
|
||||||
|
target_include_directories(MoltenVK PRIVATE ${MVK_INCLUDES})
|
||||||
|
target_compile_options(MoltenVK PRIVATE -w)
|
||||||
|
target_link_libraries(MoltenVK PRIVATE
|
||||||
|
${APPKIT_LIBRARY} ${FOUNDATION_LIBRARY} ${IOKIT_LIBRARY} ${IOSURFACE_LIBRARY} ${METAL_LIBRARY} ${QUARTZCORE_LIBRARY}
|
||||||
|
Vulkan::Headers cereal::cereal spirv-cross-msl MoltenVKCommon MoltenVKShaderConverter)
|
||||||
|
target_compile_definitions(MoltenVK PRIVATE MVK_FRAMEWORK_VERSION=${MVK_VERSION} MVK_USE_METAL_PRIVATE_API=1)
|
1
externals/MoltenVK/MoltenVK
vendored
Submodule
1
externals/MoltenVK/MoltenVK
vendored
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 5ad3ee5d2f84342950c3fe93dec97719574d1932
|
1
externals/MoltenVK/SPIRV-Cross
vendored
Submodule
1
externals/MoltenVK/SPIRV-Cross
vendored
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 6173e24b31f09a0c3217103a130e74c4ddec14a6
|
1
externals/MoltenVK/cereal
vendored
Submodule
1
externals/MoltenVK/cereal
vendored
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit d1fcec807b372f04e4c1041b3058e11c12853e6e
|
Loading…
Reference in a new issue