mirror of
https://github.com/RPCSX/rpcsx.git
synced 2025-12-05 23:02:07 +01:00
Compile Vulkan Loader and GLFW if not available
This commit is contained in:
parent
b1080c40de
commit
d2b9b7c1f6
9
.gitmodules
vendored
9
.gitmodules
vendored
|
|
@ -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
|
||||
|
|
|
|||
154
3rdparty/CMakeLists.txt
vendored
154
3rdparty/CMakeLists.txt
vendored
|
|
@ -235,60 +235,68 @@ endif()
|
|||
|
||||
# Vulkan
|
||||
set(VULKAN_TARGET 3rdparty_dummy_lib)
|
||||
if(USE_VULKAN)
|
||||
if(APPLE)
|
||||
if(USE_SYSTEM_MVK)
|
||||
message(STATUS "RPCS3: Using system MoltenVK")
|
||||
else()
|
||||
message(STATUS "RPCS3: MoltenVK submodule")
|
||||
|
||||
execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK"
|
||||
)
|
||||
execute_process(COMMAND "${CMAKE_COMMAND}" --build .
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK"
|
||||
)
|
||||
|
||||
add_library(moltenvk_lib SHARED IMPORTED)
|
||||
add_dependencies(moltenvk_lib moltenvk)
|
||||
set_target_properties(moltenvk_lib
|
||||
PROPERTIES IMPORTED_LOCATION "{Vulkan_LIBRARY}"
|
||||
)
|
||||
|
||||
set(VULKAN_SDK "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/MoltenVK/MoltenVK")
|
||||
set(VK_ICD_FILENAMES "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/MoltenVK/MoltenVK/icd/MoltenVK_icd.json")
|
||||
set(Vulkan_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/MoltenVK/MoltenVK/include")
|
||||
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()
|
||||
|
||||
find_package(Vulkan)
|
||||
if(VULKAN_FOUND)
|
||||
add_library(3rdparty_vulkan INTERFACE)
|
||||
target_compile_definitions(3rdparty_vulkan INTERFACE -DHAVE_VULKAN)
|
||||
target_link_libraries(3rdparty_vulkan INTERFACE Vulkan::Vulkan)
|
||||
|
||||
if(UNIX AND NOT APPLE AND NOT ANDROID)
|
||||
find_package(Wayland)
|
||||
if (WAYLAND_FOUND)
|
||||
target_include_directories(3rdparty_vulkan
|
||||
INTERFACE ${WAYLAND_INCLUDE_DIR})
|
||||
|
||||
target_compile_definitions(3rdparty_vulkan
|
||||
INTERFACE -DVK_USE_PLATFORM_WAYLAND_KHR)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(VULKAN_TARGET 3rdparty_vulkan)
|
||||
if(APPLE)
|
||||
if(USE_SYSTEM_MVK)
|
||||
message(STATUS "Using system MoltenVK")
|
||||
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()
|
||||
message(STATUS "MoltenVK submodule")
|
||||
|
||||
execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK"
|
||||
)
|
||||
execute_process(COMMAND "${CMAKE_COMMAND}" --build .
|
||||
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK"
|
||||
)
|
||||
|
||||
add_library(moltenvk_lib SHARED IMPORTED)
|
||||
add_dependencies(moltenvk_lib moltenvk)
|
||||
set_target_properties(moltenvk_lib
|
||||
PROPERTIES IMPORTED_LOCATION "{Vulkan_LIBRARY}"
|
||||
)
|
||||
|
||||
set(VULKAN_SDK "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/MoltenVK/MoltenVK")
|
||||
set(VK_ICD_FILENAMES "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/MoltenVK/MoltenVK/icd/MoltenVK_icd.json")
|
||||
set(Vulkan_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/MoltenVK/MoltenVK/MoltenVK/include")
|
||||
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()
|
||||
|
||||
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 (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})
|
||||
|
||||
target_compile_definitions(3rdparty_vulkan
|
||||
INTERFACE -DVK_USE_PLATFORM_WAYLAND_KHR)
|
||||
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)
|
||||
|
|
|
|||
2
3rdparty/Vulkan-Headers
vendored
2
3rdparty/Vulkan-Headers
vendored
|
|
@ -1 +1 @@
|
|||
Subproject commit 5ceb9ed481e58e705d0d9b5326537daedd06b97d
|
||||
Subproject commit a4f8ada9f4f97c45b8c89c57997be9cebaae65d2
|
||||
1
3rdparty/Vulkan-Loader
vendored
Submodule
1
3rdparty/Vulkan-Loader
vendored
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit ae0461b671558197a9a50e5fcfcc3b2d3f406b42
|
||||
1
3rdparty/fmtlib
vendored
Submodule
1
3rdparty/fmtlib
vendored
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 486e7ba579a2c677772d004ecd0311142ba481be
|
||||
1
3rdparty/glfw
vendored
Submodule
1
3rdparty/glfw
vendored
Submodule
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 8e15281d34a8b9ee9271ccce38177a3d812456f8
|
||||
|
|
@ -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()
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue