Compile Vulkan Loader and GLFW if not available

This commit is contained in:
DH 2025-10-04 13:32:28 +03:00
parent b1080c40de
commit d2b9b7c1f6
10 changed files with 122 additions and 64 deletions

9
.gitmodules vendored
View file

@ -131,3 +131,12 @@
[submodule "3rdparty/Vulkan-Headers"]
path = 3rdparty/Vulkan-Headers
url = ../../KhronosGroup/Vulkan-Headers.git
[submodule "3rdparty/fmtlib"]
path = 3rdparty/fmtlib
url = ../../fmtlib/fmt.git
[submodule "3rdparty/Vulkan-Loader"]
path = 3rdparty/Vulkan-Loader
url = ../../KhronosGroup/Vulkan-Loader.git
[submodule "3rdparty/glfw"]
path = 3rdparty/glfw
url = ../../glfw/glfw.git

View file

@ -235,12 +235,11 @@ endif()
# Vulkan
set(VULKAN_TARGET 3rdparty_dummy_lib)
if(USE_VULKAN)
if(APPLE)
if(APPLE)
if(USE_SYSTEM_MVK)
message(STATUS "RPCS3: Using system MoltenVK")
message(STATUS "Using system MoltenVK")
else()
message(STATUS "RPCS3: MoltenVK submodule")
message(STATUS "MoltenVK submodule")
execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK"
@ -261,16 +260,32 @@ if(USE_VULKAN)
set(Vulkan_LIBRARY "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/MoltenVK/Build/Products/Release/dynamic/libMoltenVK.dylib")
set(Vulkan_TOOLS "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/MoltenVK/Build/Products/Release")
endif()
endif()
endif()
find_package(Vulkan)
if(VULKAN_FOUND)
add_library(3rdparty_vulkan INTERFACE)
target_compile_definitions(3rdparty_vulkan INTERFACE -DHAVE_VULKAN)
add_library(3rdparty_vulkan INTERFACE)
target_compile_definitions(3rdparty_vulkan INTERFACE -DHAVE_VULKAN)
if (NOT COMPILE_VULKAN_LOADER OR ANDROID OR APPLE)
find_package(Vulkan 1.3 GLOBAL)
if (Vulkan_FOUND)
message(STATUS "Using system Vulkan Loader")
target_link_libraries(3rdparty_vulkan INTERFACE Vulkan::Vulkan)
add_library(Vulkan::Loader ALIAS Vulkan::Vulkan)
else()
message(WARNING "Vulkan not found, using submodule")
set(COMPILE_VULKAN_LOADER on)
endif()
endif()
if(UNIX AND NOT APPLE AND NOT ANDROID)
if (COMPILE_VULKAN_LOADER)
add_subdirectory(Vulkan-Loader)
target_link_libraries(3rdparty_vulkan INTERFACE Vulkan::Loader)
endif()
if(UNIX AND NOT APPLE AND NOT ANDROID)
find_package(Wayland)
if (WAYLAND_FOUND)
target_include_directories(3rdparty_vulkan
INTERFACE ${WAYLAND_INCLUDE_DIR})
@ -278,17 +293,10 @@ if(USE_VULKAN)
target_compile_definitions(3rdparty_vulkan
INTERFACE -DVK_USE_PLATFORM_WAYLAND_KHR)
endif()
endif()
set(VULKAN_TARGET 3rdparty_vulkan)
else()
message(WARNING "USE_VULKAN was enabled, but libvulkan was not found. RPCS3 will be compiled without Vulkan support.")
if(APPLE)
message(FATAL_ERROR "To build without Vulkan support on macOS, please disable USE_VULKAN.")
endif()
endif()
endif()
set(VULKAN_TARGET 3rdparty_vulkan)
# AsmJit
add_subdirectory(asmjit EXCLUDE_FROM_ALL)
@ -308,11 +316,11 @@ if(USE_FAUDIO)
if (USE_SYSTEM_FAUDIO)
if (NOT SDL3_FOUND OR SDL3_VERSION VERSION_LESS 3.2.0)
message(WARNING
"RPCS3: System FAudio requires SDL 3.2.0 or newer. Since a valid SDL3"
"System FAudio requires SDL 3.2.0 or newer. Since a valid SDL3"
">=3.2.0 version cannot be found, building with FAudio will be skipped.")
set(USE_FAUDIO OFF CACHE BOOL "Disabled using system FAudio with SDL < 3.2.0" FORCE)
else()
message(STATUS "RPCS3: Using system FAudio")
message(STATUS "Using system FAudio")
find_package(FAudio REQUIRED CONFIGS FAudioConfig.cmake FAudio-config.cmake)
add_library(3rdparty_FAudio INTERFACE)
target_link_libraries(3rdparty_FAudio INTERFACE FAudio)
@ -322,11 +330,11 @@ if(USE_FAUDIO)
else()
if (NOT SDL3_FOUND OR SDL3_VERSION VERSION_LESS 3.2.0)
message(WARNING
"-- RPCS3: 3rdparty FAudio requires SDL 3.2.0 or newer. Since a valid SDL3"
"-- 3rdparty FAudio requires SDL 3.2.0 or newer. Since a valid SDL3"
">=3.2.0 version cannot be found, building with FAudio will be skipped.")
set(USE_FAUDIO OFF CACHE BOOL "Disabled FAudio with SDL < 3.2.0" FORCE)
else()
message(STATUS "RPCS3: Using builtin FAudio")
message(STATUS "Using builtin FAudio")
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared library")
add_subdirectory(FAudio EXCLUDE_FROM_ALL)
target_compile_definitions(FAudio-static INTERFACE -DHAVE_FAUDIO)
@ -399,6 +407,44 @@ else()
add_library(3rdparty::libusb ALIAS usb-1.0-static)
endif()
if (ANDROID)
add_library(glfw INTERFACE)
target_compile_definitions(glfw INTERFACE WITHOUT_GLFW)
add_library(3rdparty::glfw ALIAS glfw)
else()
if (NOT COMPILE_GLFW)
find_package(glfw3 3.3 GLOBAL)
if (glfw3_FOUND)
message(STATUS "Using system glfw")
else()
message(WARNING "glfw not found, using submodule")
set(COMPILE_GLFW on)
endif()
endif()
if (COMPILE_GLFW)
set(GLFW_BUILD_DOCS off)
set(GLFW_INSTALL off)
if (WIN32)
set(GLFW_BUILD_WIN32 on)
elseif(LINUX)
set(GLFW_BUILD_WAYLAND on)
set(GLFW_BUILD_X11 on)
endif()
add_subdirectory(glfw)
endif()
if (NOT TARGET glfw)
message(FATAL_ERROR "where is glfw?")
endif()
add_library(3rdparty::glfw ALIAS glfw)
endif()
add_library(3rdparty::zlib ALIAS 3rdparty_zlib)
add_library(3rdparty::zstd ALIAS 3rdparty_zstd)
add_library(3rdparty::7zip ALIAS 3rdparty_7zip)

@ -1 +1 @@
Subproject commit 5ceb9ed481e58e705d0d9b5326537daedd06b97d
Subproject commit a4f8ada9f4f97c45b8c89c57997be9cebaae65d2

1
3rdparty/Vulkan-Loader vendored Submodule

@ -0,0 +1 @@
Subproject commit ae0461b671558197a9a50e5fcfcc3b2d3f406b42

1
3rdparty/fmtlib vendored Submodule

@ -0,0 +1 @@
Subproject commit 486e7ba579a2c677772d004ecd0311142ba481be

1
3rdparty/glfw vendored Submodule

@ -0,0 +1 @@
Subproject commit 8e15281d34a8b9ee9271ccce38177a3d812456f8

View file

@ -134,6 +134,9 @@ endfunction()
option(WITH_PS3 "Enable PS3 emulation support" OFF)
option(WITH_PS4 "Enable PS4 emulation support" ON)
option(COMPILE_GLFW "Compile GLFW" OFF)
option(COMPILE_VULKAN_LOADER "Compile Vulkan Loader" OFF)
option(WITHOUT_OPENGL "Disable OpenGL" OFF)
option(WITHOUT_OPENGLEW "Disable OpenGLEW" OFF)
option(WITHOUT_OPENAL "Disable OpenAL" OFF)
@ -246,13 +249,12 @@ if(MSVC)
add_compile_options(/wd4530 /utf-8) # C++ exception handler used, but unwind semantics are not enabled
endif()
include(CheckFunctionExists)
add_subdirectory(3rdparty EXCLUDE_FROM_ALL)
add_subdirectory(rx EXCLUDE_FROM_ALL)
include(3rdparty/llvm/CMakeLists.txt)
include(ConfigureCompiler)
include(CheckFunctionExists)
if (NOT RX_TAG)
set(RX_TAG 0)
@ -276,6 +278,8 @@ endif()
add_subdirectory(rpcsx)
if (WITH_PS3)
include(ConfigureCompiler)
add_subdirectory(rpcs3)
add_subdirectory(ps3fw)
endif()

View file

@ -4,7 +4,7 @@ add_library(orbis::kernel::config ALIAS standalone-config)
add_subdirectory(cpu)
if(LINUX AND WITH_RPCSX)
if(LINUX AND WITH_PS4)
find_package(libunwind REQUIRED)
find_package(sox REQUIRED)
find_package(ALSA REQUIRED)

View file

@ -1,5 +1,3 @@
find_package(glfw3 3.3 REQUIRED)
add_precompiled_vulkan_spirv(rpcsx-gpu-shaders
shaders/fill_red.frag.glsl
shaders/flip_std.frag.glsl
@ -24,7 +22,7 @@ PUBLIC
rpcsx-gpu-shaders
rx
gcn-shader
glfw
3rdparty::glfw
amdgpu::tiler::cpu
amdgpu::tiler::vulkan
rdna-semantic-spirv

View file

@ -1,7 +1,5 @@
find_package(Vulkan 1.3 REQUIRED)
add_library(vk STATIC src/vk.cpp)
target_link_libraries(vk PUBLIC Vulkan::Vulkan rx)
target_link_libraries(vk PUBLIC Vulkan::Loader Vulkan::Headers rx)
target_include_directories(vk PUBLIC include)