mirror of
https://github.com/RPCSX/rpcsx.git
synced 2025-12-06 07:12:14 +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"]
|
[submodule "3rdparty/Vulkan-Headers"]
|
||||||
path = 3rdparty/Vulkan-Headers
|
path = 3rdparty/Vulkan-Headers
|
||||||
url = ../../KhronosGroup/Vulkan-Headers.git
|
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
|
# Vulkan
|
||||||
set(VULKAN_TARGET 3rdparty_dummy_lib)
|
set(VULKAN_TARGET 3rdparty_dummy_lib)
|
||||||
if(USE_VULKAN)
|
if(APPLE)
|
||||||
if(APPLE)
|
if(USE_SYSTEM_MVK)
|
||||||
if(USE_SYSTEM_MVK)
|
message(STATUS "Using system MoltenVK")
|
||||||
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)
|
|
||||||
else()
|
else()
|
||||||
message(WARNING "USE_VULKAN was enabled, but libvulkan was not found. RPCS3 will be compiled without Vulkan support.")
|
message(STATUS "MoltenVK submodule")
|
||||||
if(APPLE)
|
|
||||||
message(FATAL_ERROR "To build without Vulkan support on macOS, please disable USE_VULKAN.")
|
execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
|
||||||
endif()
|
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()
|
||||||
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
|
# AsmJit
|
||||||
add_subdirectory(asmjit EXCLUDE_FROM_ALL)
|
add_subdirectory(asmjit EXCLUDE_FROM_ALL)
|
||||||
|
|
||||||
|
|
@ -308,11 +316,11 @@ if(USE_FAUDIO)
|
||||||
if (USE_SYSTEM_FAUDIO)
|
if (USE_SYSTEM_FAUDIO)
|
||||||
if (NOT SDL3_FOUND OR SDL3_VERSION VERSION_LESS 3.2.0)
|
if (NOT SDL3_FOUND OR SDL3_VERSION VERSION_LESS 3.2.0)
|
||||||
message(WARNING
|
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.")
|
">=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)
|
set(USE_FAUDIO OFF CACHE BOOL "Disabled using system FAudio with SDL < 3.2.0" FORCE)
|
||||||
else()
|
else()
|
||||||
message(STATUS "RPCS3: Using system FAudio")
|
message(STATUS "Using system FAudio")
|
||||||
find_package(FAudio REQUIRED CONFIGS FAudioConfig.cmake FAudio-config.cmake)
|
find_package(FAudio REQUIRED CONFIGS FAudioConfig.cmake FAudio-config.cmake)
|
||||||
add_library(3rdparty_FAudio INTERFACE)
|
add_library(3rdparty_FAudio INTERFACE)
|
||||||
target_link_libraries(3rdparty_FAudio INTERFACE FAudio)
|
target_link_libraries(3rdparty_FAudio INTERFACE FAudio)
|
||||||
|
|
@ -322,11 +330,11 @@ if(USE_FAUDIO)
|
||||||
else()
|
else()
|
||||||
if (NOT SDL3_FOUND OR SDL3_VERSION VERSION_LESS 3.2.0)
|
if (NOT SDL3_FOUND OR SDL3_VERSION VERSION_LESS 3.2.0)
|
||||||
message(WARNING
|
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.")
|
">=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)
|
set(USE_FAUDIO OFF CACHE BOOL "Disabled FAudio with SDL < 3.2.0" FORCE)
|
||||||
else()
|
else()
|
||||||
message(STATUS "RPCS3: Using builtin FAudio")
|
message(STATUS "Using builtin FAudio")
|
||||||
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared library")
|
set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared library")
|
||||||
add_subdirectory(FAudio EXCLUDE_FROM_ALL)
|
add_subdirectory(FAudio EXCLUDE_FROM_ALL)
|
||||||
target_compile_definitions(FAudio-static INTERFACE -DHAVE_FAUDIO)
|
target_compile_definitions(FAudio-static INTERFACE -DHAVE_FAUDIO)
|
||||||
|
|
@ -399,6 +407,44 @@ else()
|
||||||
add_library(3rdparty::libusb ALIAS usb-1.0-static)
|
add_library(3rdparty::libusb ALIAS usb-1.0-static)
|
||||||
endif()
|
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::zlib ALIAS 3rdparty_zlib)
|
||||||
add_library(3rdparty::zstd ALIAS 3rdparty_zstd)
|
add_library(3rdparty::zstd ALIAS 3rdparty_zstd)
|
||||||
add_library(3rdparty::7zip ALIAS 3rdparty_7zip)
|
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_PS3 "Enable PS3 emulation support" OFF)
|
||||||
option(WITH_PS4 "Enable PS4 emulation support" ON)
|
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_OPENGL "Disable OpenGL" OFF)
|
||||||
option(WITHOUT_OPENGLEW "Disable OpenGLEW" OFF)
|
option(WITHOUT_OPENGLEW "Disable OpenGLEW" OFF)
|
||||||
option(WITHOUT_OPENAL "Disable OpenAL" 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
|
add_compile_options(/wd4530 /utf-8) # C++ exception handler used, but unwind semantics are not enabled
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
include(CheckFunctionExists)
|
||||||
|
|
||||||
add_subdirectory(3rdparty EXCLUDE_FROM_ALL)
|
add_subdirectory(3rdparty EXCLUDE_FROM_ALL)
|
||||||
add_subdirectory(rx EXCLUDE_FROM_ALL)
|
add_subdirectory(rx EXCLUDE_FROM_ALL)
|
||||||
|
|
||||||
include(3rdparty/llvm/CMakeLists.txt)
|
include(3rdparty/llvm/CMakeLists.txt)
|
||||||
include(ConfigureCompiler)
|
|
||||||
include(CheckFunctionExists)
|
|
||||||
|
|
||||||
if (NOT RX_TAG)
|
if (NOT RX_TAG)
|
||||||
set(RX_TAG 0)
|
set(RX_TAG 0)
|
||||||
|
|
@ -276,6 +278,8 @@ endif()
|
||||||
add_subdirectory(rpcsx)
|
add_subdirectory(rpcsx)
|
||||||
|
|
||||||
if (WITH_PS3)
|
if (WITH_PS3)
|
||||||
|
include(ConfigureCompiler)
|
||||||
add_subdirectory(rpcs3)
|
add_subdirectory(rpcs3)
|
||||||
add_subdirectory(ps3fw)
|
add_subdirectory(ps3fw)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ add_library(orbis::kernel::config ALIAS standalone-config)
|
||||||
|
|
||||||
add_subdirectory(cpu)
|
add_subdirectory(cpu)
|
||||||
|
|
||||||
if(LINUX AND WITH_RPCSX)
|
if(LINUX AND WITH_PS4)
|
||||||
find_package(libunwind REQUIRED)
|
find_package(libunwind REQUIRED)
|
||||||
find_package(sox REQUIRED)
|
find_package(sox REQUIRED)
|
||||||
find_package(ALSA REQUIRED)
|
find_package(ALSA REQUIRED)
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,3 @@
|
||||||
find_package(glfw3 3.3 REQUIRED)
|
|
||||||
|
|
||||||
add_precompiled_vulkan_spirv(rpcsx-gpu-shaders
|
add_precompiled_vulkan_spirv(rpcsx-gpu-shaders
|
||||||
shaders/fill_red.frag.glsl
|
shaders/fill_red.frag.glsl
|
||||||
shaders/flip_std.frag.glsl
|
shaders/flip_std.frag.glsl
|
||||||
|
|
@ -24,7 +22,7 @@ PUBLIC
|
||||||
rpcsx-gpu-shaders
|
rpcsx-gpu-shaders
|
||||||
rx
|
rx
|
||||||
gcn-shader
|
gcn-shader
|
||||||
glfw
|
3rdparty::glfw
|
||||||
amdgpu::tiler::cpu
|
amdgpu::tiler::cpu
|
||||||
amdgpu::tiler::vulkan
|
amdgpu::tiler::vulkan
|
||||||
rdna-semantic-spirv
|
rdna-semantic-spirv
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
find_package(Vulkan 1.3 REQUIRED)
|
|
||||||
|
|
||||||
add_library(vk STATIC src/vk.cpp)
|
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)
|
target_include_directories(vk PUBLIC include)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue