From 67ab3712b3651ba35c66cf9508fc4c3dbb5bad49 Mon Sep 17 00:00:00 2001 From: DH Date: Mon, 7 Apr 2025 18:23:43 +0300 Subject: [PATCH] merge 3rdparty libraries --- .gitmodules | 54 ++- {rpcs3/3rdparty => 3rdparty}/7zip/7zip | 0 .../3rdparty => 3rdparty}/7zip/CMakeLists.txt | 0 3rdparty/CMakeLists.txt | 351 +++++++++++++++++ {rpcs3/3rdparty => 3rdparty}/FAudio | 0 .../GL/KHR/khrplatform.h | 0 {rpcs3/3rdparty => 3rdparty}/GL/glext.h | 0 .../GPUOpen/VulkanMemoryAllocator | 0 .../GPUOpen/include/ffx_a.h | 0 .../GPUOpen/include/ffx_fsr1.h | 0 .../3rdparty => 3rdparty}/MoltenVK/.gitignore | 0 .../MoltenVK/CMakeLists.txt | 0 .../OpenAL/CMakeLists.txt | 0 .../3rdparty => 3rdparty}/OpenAL/openal-soft | 0 .../SoundTouch/CMakeLists.txt | 0 .../SoundTouch/soundtouch | 0 .../asmjit/CMakeLists.txt | 0 {rpcs3/3rdparty => 3rdparty}/asmjit/asmjit | 0 {rpcs3/3rdparty => 3rdparty}/bcdec/bcdec.hpp | 0 .../cubeb/CMakeLists.txt | 0 {rpcs3/3rdparty => 3rdparty}/cubeb/cubeb | 0 .../cubeb/extra/cubeb_export.h | 0 .../3rdparty => 3rdparty}/curl/CMakeLists.txt | 0 {rpcs3/3rdparty => 3rdparty}/curl/curl | 0 .../curl/extra/wolfssl/options.h | 0 {rpcs3/3rdparty => 3rdparty}/flatbuffers | 0 .../fusion/CMakeLists.txt | 0 {rpcs3/3rdparty => 3rdparty}/fusion/fusion | 0 .../hidapi/CMakeLists.txt | 0 {rpcs3/3rdparty => 3rdparty}/hidapi/hidapi | 0 {rpcs3/3rdparty => 3rdparty}/libadrenotools | 0 .../libpng/CMakeLists.txt | 0 {rpcs3/3rdparty => 3rdparty}/libpng/libpng | 0 .../libsdl-org/CMakeLists.txt | 0 {rpcs3/3rdparty => 3rdparty}/libsdl-org/SDL | 0 .../libusb/CMakeLists.txt | 0 .../cmake_modules/FindCoreFoundation.cmake | 0 .../libusb/cmake_modules/FindIOKit.cmake | 0 .../libusb/cmake_modules/LibFindMacros.cmake | 0 .../3rdparty => 3rdparty}/libusb/config.cmake | 0 .../libusb/config.h.cmake | 0 {rpcs3/3rdparty => 3rdparty}/libusb/libusb | 0 .../libusb/libusb-1.0.pc.cmake | 0 .../3rdparty => 3rdparty}/libusb/libusb.cmake | 0 {rpcs3/3rdparty => 3rdparty}/libusb/os.cmake | 0 .../3rdparty => 3rdparty}/llvm/CMakeLists.txt | 0 {rpcs3/3rdparty => 3rdparty}/llvm/llvm | 0 .../miniupnp/CMakeLists.txt | 0 .../3rdparty => 3rdparty}/miniupnp/miniupnp | 0 .../opencv/CMakeLists.txt | 0 {rpcs3/3rdparty => 3rdparty}/opencv/opencv | 0 .../3rdparty => 3rdparty}/pine/pine_server.h | 0 {rpcs3/3rdparty => 3rdparty}/pugixml | 0 .../robin_hood/include/robin_hood.h | 0 .../rtmidi/CMakeLists.txt | 0 {rpcs3/3rdparty => 3rdparty}/rtmidi/rtmidi | 0 .../stblib/CMakeLists.txt | 0 {rpcs3/3rdparty => 3rdparty}/stblib/stb | 0 .../wolfssl/CMakeLists.txt | 0 .../wolfssl/extra/win32/user_settings.h | 0 {rpcs3/3rdparty => 3rdparty}/wolfssl/wolfssl | 0 .../yaml-cpp/CMakeLists.txt | 0 .../3rdparty => 3rdparty}/yaml-cpp/yaml-cpp | 0 .../3rdparty => 3rdparty}/zlib/CMakeLists.txt | 0 {rpcs3/3rdparty => 3rdparty}/zlib/zlib | 0 .../3rdparty => 3rdparty}/zstd/CMakeLists.txt | 0 {rpcs3/3rdparty => 3rdparty}/zstd/zstd | 0 CMakeLists.txt | 21 + .../cmake => cmake}/ConfigureCompiler.cmake | 2 +- .../DetectArchitecture.cmake | 0 {rpcs3/cmake => cmake}/FindFFMPEG.cmake | 0 {rpcs3/cmake => cmake}/FindWayland.cmake | 0 {rpcs3/cmake => cmake}/FindWolfSSL.cmake | 0 {rpcs3/cmake => cmake}/FindZLIB.cmake | 0 {rpcs3/cmake => cmake}/TCDarwinARM64.cmake | 0 rpcs3/3rdparty/CMakeLists.txt | 358 +----------------- rpcs3/3rdparty/json | 1 - rpcs3/CMakeLists.txt | 21 - 78 files changed, 403 insertions(+), 405 deletions(-) rename {rpcs3/3rdparty => 3rdparty}/7zip/7zip (100%) rename {rpcs3/3rdparty => 3rdparty}/7zip/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/FAudio (100%) rename {rpcs3/3rdparty => 3rdparty}/GL/KHR/khrplatform.h (100%) rename {rpcs3/3rdparty => 3rdparty}/GL/glext.h (100%) rename {rpcs3/3rdparty => 3rdparty}/GPUOpen/VulkanMemoryAllocator (100%) rename {rpcs3/3rdparty => 3rdparty}/GPUOpen/include/ffx_a.h (100%) rename {rpcs3/3rdparty => 3rdparty}/GPUOpen/include/ffx_fsr1.h (100%) rename {rpcs3/3rdparty => 3rdparty}/MoltenVK/.gitignore (100%) rename {rpcs3/3rdparty => 3rdparty}/MoltenVK/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/OpenAL/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/OpenAL/openal-soft (100%) rename {rpcs3/3rdparty => 3rdparty}/SoundTouch/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/SoundTouch/soundtouch (100%) rename {rpcs3/3rdparty => 3rdparty}/asmjit/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/asmjit/asmjit (100%) rename {rpcs3/3rdparty => 3rdparty}/bcdec/bcdec.hpp (100%) rename {rpcs3/3rdparty => 3rdparty}/cubeb/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/cubeb/cubeb (100%) rename {rpcs3/3rdparty => 3rdparty}/cubeb/extra/cubeb_export.h (100%) rename {rpcs3/3rdparty => 3rdparty}/curl/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/curl/curl (100%) rename {rpcs3/3rdparty => 3rdparty}/curl/extra/wolfssl/options.h (100%) rename {rpcs3/3rdparty => 3rdparty}/flatbuffers (100%) rename {rpcs3/3rdparty => 3rdparty}/fusion/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/fusion/fusion (100%) rename {rpcs3/3rdparty => 3rdparty}/hidapi/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/hidapi/hidapi (100%) rename {rpcs3/3rdparty => 3rdparty}/libadrenotools (100%) rename {rpcs3/3rdparty => 3rdparty}/libpng/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/libpng/libpng (100%) rename {rpcs3/3rdparty => 3rdparty}/libsdl-org/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/libsdl-org/SDL (100%) rename {rpcs3/3rdparty => 3rdparty}/libusb/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/libusb/cmake_modules/FindCoreFoundation.cmake (100%) rename {rpcs3/3rdparty => 3rdparty}/libusb/cmake_modules/FindIOKit.cmake (100%) rename {rpcs3/3rdparty => 3rdparty}/libusb/cmake_modules/LibFindMacros.cmake (100%) rename {rpcs3/3rdparty => 3rdparty}/libusb/config.cmake (100%) rename {rpcs3/3rdparty => 3rdparty}/libusb/config.h.cmake (100%) rename {rpcs3/3rdparty => 3rdparty}/libusb/libusb (100%) rename {rpcs3/3rdparty => 3rdparty}/libusb/libusb-1.0.pc.cmake (100%) rename {rpcs3/3rdparty => 3rdparty}/libusb/libusb.cmake (100%) rename {rpcs3/3rdparty => 3rdparty}/libusb/os.cmake (100%) rename {rpcs3/3rdparty => 3rdparty}/llvm/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/llvm/llvm (100%) rename {rpcs3/3rdparty => 3rdparty}/miniupnp/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/miniupnp/miniupnp (100%) rename {rpcs3/3rdparty => 3rdparty}/opencv/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/opencv/opencv (100%) rename {rpcs3/3rdparty => 3rdparty}/pine/pine_server.h (100%) rename {rpcs3/3rdparty => 3rdparty}/pugixml (100%) rename {rpcs3/3rdparty => 3rdparty}/robin_hood/include/robin_hood.h (100%) rename {rpcs3/3rdparty => 3rdparty}/rtmidi/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/rtmidi/rtmidi (100%) rename {rpcs3/3rdparty => 3rdparty}/stblib/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/stblib/stb (100%) rename {rpcs3/3rdparty => 3rdparty}/wolfssl/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/wolfssl/extra/win32/user_settings.h (100%) rename {rpcs3/3rdparty => 3rdparty}/wolfssl/wolfssl (100%) rename {rpcs3/3rdparty => 3rdparty}/yaml-cpp/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/yaml-cpp/yaml-cpp (100%) rename {rpcs3/3rdparty => 3rdparty}/zlib/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/zlib/zlib (100%) rename {rpcs3/3rdparty => 3rdparty}/zstd/CMakeLists.txt (100%) rename {rpcs3/3rdparty => 3rdparty}/zstd/zstd (100%) rename {rpcs3/cmake => cmake}/ConfigureCompiler.cmake (99%) rename {rpcs3/3rdparty => cmake}/DetectArchitecture.cmake (100%) rename {rpcs3/cmake => cmake}/FindFFMPEG.cmake (100%) rename {rpcs3/cmake => cmake}/FindWayland.cmake (100%) rename {rpcs3/cmake => cmake}/FindWolfSSL.cmake (100%) rename {rpcs3/cmake => cmake}/FindZLIB.cmake (100%) rename {rpcs3/cmake => cmake}/TCDarwinARM64.cmake (100%) delete mode 160000 rpcs3/3rdparty/json diff --git a/.gitmodules b/.gitmodules index e5122244d..3e8c4073b 100644 --- a/.gitmodules +++ b/.gitmodules @@ -27,97 +27,97 @@ url = ../../RPCS3/ffmpeg-core.git ignore = dirty [submodule "rpcs3/asmjit"] - path = rpcs3/3rdparty/asmjit/asmjit + path = 3rdparty/asmjit/asmjit url = ../../asmjit/asmjit.git branch = master ignore = dirty [submodule "rpcs3/3rdparty/llvm/llvm"] - path = rpcs3/3rdparty/llvm/llvm + path = 3rdparty/llvm/llvm url = ../../llvm/llvm-project.git ignore = dirty [submodule "rpcs3/3rdparty/zlib"] - path = rpcs3/3rdparty/zlib/zlib + path = 3rdparty/zlib/zlib url = ../../madler/zlib ignore = dirty [submodule "rpcs3/3rdparty/hidapi"] - path = rpcs3/3rdparty/hidapi/hidapi + path = 3rdparty/hidapi/hidapi url = ../../RPCS3/hidapi.git branch = master ignore = dirty [submodule "rpcs3/3rdparty/pugixml"] - path = rpcs3/3rdparty/pugixml + path = 3rdparty/pugixml url = ../../zeux/pugixml.git ignore = dirty [submodule "rpcs3/3rdparty/yaml-cpp"] - path = rpcs3/3rdparty/yaml-cpp/yaml-cpp + path = 3rdparty/yaml-cpp/yaml-cpp url = ../../RPCS3/yaml-cpp.git ignore = dirty [submodule "rpcs3/3rdparty/libpng"] - path = rpcs3/3rdparty/libpng/libpng + path = 3rdparty/libpng/libpng url = ../../glennrp/libpng.git ignore = dirty [submodule "rpcs3/3rdparty/libusb"] - path = rpcs3/3rdparty/libusb/libusb + path = 3rdparty/libusb/libusb url = ../../libusb/libusb.git ignore = dirty [submodule "rpcs3/3rdparty/FAudio"] - path = rpcs3/3rdparty/FAudio + path = 3rdparty/FAudio url = ../../FNA-XNA/FAudio.git ignore = dirty [submodule "rpcs3/3rdparty/curl"] - path = rpcs3/3rdparty/curl/curl + path = 3rdparty/curl/curl url = ../../curl/curl.git ignore = dirty [submodule "rpcs3/3rdparty/wolfssl"] - path = rpcs3/3rdparty/wolfssl/wolfssl + path = 3rdparty/wolfssl/wolfssl url = ../../wolfSSL/wolfssl.git ignore = dirty [submodule "rpcs3/3rdparty/flatbuffers"] - path = rpcs3/3rdparty/flatbuffers + path = 3rdparty/flatbuffers url = ../../google/flatbuffers.git ignore = dirty [submodule "rpcs3/3rdparty/cubeb/cubeb"] - path = rpcs3/3rdparty/cubeb/cubeb + path = 3rdparty/cubeb/cubeb url = ../../mozilla/cubeb.git ignore = dirty [submodule "rpcs3/3rdparty/SoundTouch/soundtouch"] - path = rpcs3/3rdparty/SoundTouch/soundtouch + path = 3rdparty/SoundTouch/soundtouch url = ../../RPCS3/soundtouch.git ignore = dirty [submodule "rpcs3/3rdparty/libsdl-org/SDL"] - path = rpcs3/3rdparty/libsdl-org/SDL + path = 3rdparty/libsdl-org/SDL url = ../../libsdl-org/SDL.git ignore = dirty [submodule "rpcs3/3rdparty/miniupnp/miniupnp"] - path = rpcs3/3rdparty/miniupnp/miniupnp + path = 3rdparty/miniupnp/miniupnp url = ../../miniupnp/miniupnp.git ignore = dirty [submodule "rpcs3/3rdparty/rtmidi/rtmidi"] - path = rpcs3/3rdparty/rtmidi/rtmidi + path = 3rdparty/rtmidi/rtmidi url = ../../thestk/rtmidi ignore = dirty [submodule "rpcs3/3rdparty/zstd/zstd"] - path = rpcs3/3rdparty/zstd/zstd + path = 3rdparty/zstd/zstd url = ../../facebook/zstd ignore = dirty [submodule "rpcs3/3rdparty/7zip/7zip"] - path = rpcs3/3rdparty/7zip/7zip + path = 3rdparty/7zip/7zip url = ../../ip7z/7zip.git ignore = dirty [submodule "rpcs3/3rdparty/OpenAL/openal-soft"] - path = rpcs3/3rdparty/OpenAL/openal-soft + path = 3rdparty/OpenAL/openal-soft url = ../../kcat/openal-soft.git ignore = dirty [submodule "rpcs3/3rdparty/stblib/stb"] - path = rpcs3/3rdparty/stblib/stb + path = 3rdparty/stblib/stb url = ../../nothings/stb.git ignore = dirty [submodule "rpcs3/3rdparty/opencv/opencv"] - path = rpcs3/3rdparty/opencv/opencv + path = 3rdparty/opencv/opencv url = ../../Megamouse/opencv_minimal.git ignore = dirty [submodule "rpcs3/3rdparty/fusion/fusion"] - path = rpcs3/3rdparty/fusion/fusion + path = 3rdparty/fusion/fusion url = ../../xioTechnologies/Fusion.git ignore = dirty [submodule "rpcs3/3rdparty/discord-rpc/discord-rpc"] @@ -125,15 +125,11 @@ url = ../../Vestrel/discord-rpc ignore = dirty [submodule "rpcs3/3rdparty/GPUOpen/VulkanMemoryAllocator"] - path = rpcs3/3rdparty/GPUOpen/VulkanMemoryAllocator + path = 3rdparty/GPUOpen/VulkanMemoryAllocator url = ../../Megamouse/VulkanMemoryAllocator.git ignore = dirty -[submodule "rpcs3/3rdparty/json"] - path = rpcs3/3rdparty/json - url = ../../nlohmann/json.git - ignore = dirty [submodule "3rdparty/libadrenotools"] - path = rpcs3/3rdparty/libadrenotools + path = 3rdparty/libadrenotools url = ../../bylaws/libadrenotools.git [submodule "3rdparty/Vulkan-Headers"] path = 3rdparty/Vulkan-Headers diff --git a/rpcs3/3rdparty/7zip/7zip b/3rdparty/7zip/7zip similarity index 100% rename from rpcs3/3rdparty/7zip/7zip rename to 3rdparty/7zip/7zip diff --git a/rpcs3/3rdparty/7zip/CMakeLists.txt b/3rdparty/7zip/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/7zip/CMakeLists.txt rename to 3rdparty/7zip/CMakeLists.txt diff --git a/3rdparty/CMakeLists.txt b/3rdparty/CMakeLists.txt index 8bd9dba42..0dd833b06 100644 --- a/3rdparty/CMakeLists.txt +++ b/3rdparty/CMakeLists.txt @@ -1,3 +1,15 @@ +find_package(PkgConfig) +include(ExternalProject) +include(CMakeDependentOption) + +# Defines the ARCHITECTURE variable +include(DetectArchitecture) + +# Warnings are silenced for 3rdparty code +if(NOT MSVC) + add_compile_options("$<$:-w>") +endif() + add_subdirectory(crypto) if(NOT xbyak_FOUND) @@ -27,10 +39,14 @@ if(NOT TARGET glslang::glslang-standalone) add_executable(glslang::glslang-standalone ALIAS glslang-standalone) endif() +add_library(3rdparty_json INTERFACE) + if(NOT nlohmann_json_FOUND) add_subdirectory(json) endif() +target_link_libraries(3rdparty_json INTERFACE nlohmann_json) + add_subdirectory(LibAtrac9) set(FFMPEG_PATH ${CMAKE_CURRENT_SOURCE_DIR}/FFmpeg) @@ -75,3 +91,338 @@ import_ffmpeg_library(avutil) import_ffmpeg_library(swscale) import_ffmpeg_library(swresample) import_ffmpeg_library(postproc) + + +# Dummy target to use when lib isn't available +add_library(3rdparty_dummy_lib INTERFACE) + + +# ZLib +add_subdirectory(zlib EXCLUDE_FROM_ALL) + +# ZSTD +add_subdirectory(zstd EXCLUDE_FROM_ALL) + +# 7zip sdk +add_subdirectory(7zip EXCLUDE_FROM_ALL) + +add_library(3rdparty_flatbuffers INTERFACE) +if (USE_SYSTEM_FLATBUFFERS) + pkg_check_modules(FLATBUFFERS REQUIRED IMPORTED_TARGET flatbuffers>=2.0.0) + target_link_libraries(3rdparty_flatbuffers INTERFACE PkgConfig::FLATBUFFERS) + set(FBS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../rpcs3/Emu/NP/generated/") + execute_process(COMMAND flatc --cpp -o "${FBS_DIR}" "${FBS_DIR}/np2_structs.fbs" RESULT_VARIABLE FBS_CMD_ERROR) + if(FBS_CMD_ERROR AND NOT FBS_CMD_ERROR EQUAL 0) + message(FATAL_ERROR "flatc failed to regenerate flatbuffers headers.") + endif() +else() + target_include_directories(3rdparty_flatbuffers INTERFACE flatbuffers/include) +endif() + +# libPNG +add_subdirectory(libpng EXCLUDE_FROM_ALL) + + +# pugixml +if (USE_SYSTEM_PUGIXML) + pkg_check_modules(PUGIXML REQUIRED IMPORTED_TARGET pugixml>=1.15) + add_library(pugixml INTERFACE) + target_link_libraries(pugixml INTERFACE PkgConfig::PUGIXML) +else() + add_subdirectory(pugixml EXCLUDE_FROM_ALL) +endif() + + +# libusb +if(CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD") + pkg_check_modules(LIBUSB REQUIRED IMPORTED_TARGET libusb-1.0>=1.0 ) + cmake_dependent_option(USE_SYSTEM_LIBUSB "Use system libusb-1.0 as shared library" ON + "LIBUSB_FOUND" OFF) +else() + pkg_check_modules(LIBUSB IMPORTED_TARGET libusb-1.0>=1.0 ) + cmake_dependent_option(USE_SYSTEM_LIBUSB "Use system libusb-1.0 as shared library" OFF + "LIBUSB_FOUND" OFF) +endif() +if(CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD") + # Always use system libusb as reference implementation isn't supported + add_library(usb-1.0-shared INTERFACE) + target_link_libraries(usb-1.0-shared INTERFACE PkgConfig::LIBUSB) +elseif(MSVC) + # Windows time.h defines timespec but doesn't add any flag for it, which makes libusb attempt to define it again + add_definitions(-DHAVE_STRUCT_TIMESPEC=1) + add_subdirectory(libusb EXCLUDE_FROM_ALL) +else() + if(USE_SYSTEM_LIBUSB) + # we have the system libusb and have selected to use it + add_library(usb-1.0-shared INTERFACE) + target_link_libraries(usb-1.0-shared INTERFACE PkgConfig::LIBUSB) + else() + # we don't have the system libusb, so we compile from submodule + unset(LIBUSB_LIBRARIES CACHE) + add_subdirectory(libusb EXCLUDE_FROM_ALL) + + if (NOT TARGET usb-1.0 AND TARGET usb-1.0-static) + add_library(usb-1.0 ALIAS usb-1.0-static) + endif() + endif() +endif() + + +# hidapi +add_subdirectory(hidapi) + +# glslang +add_library(3rdparty_glslang INTERFACE) +target_link_libraries(3rdparty_glslang INTERFACE SPIRV) + + +# yaml-cpp +add_subdirectory(yaml-cpp) + + +# OpenGL + +if (NOT ANDROID AND NOT WITHOUT_OPENGL) + find_package(OpenGL REQUIRED OPTIONAL_COMPONENTS EGL) + + add_library(3rdparty_opengl INTERFACE) + target_include_directories(3rdparty_opengl INTERFACE GL) + + if (WIN32) + if(NOT MSVC) + target_link_libraries(3rdparty_opengl INTERFACE OpenGL::GL OpenGL::GLU) + else() + target_link_libraries(3rdparty_opengl INTERFACE dxgi.lib d2d1.lib dwrite.lib) + endif() + elseif(APPLE) + target_link_libraries(3rdparty_opengl INTERFACE OpenGL::GL OpenGL::GLU) + else() + target_link_libraries(3rdparty_opengl INTERFACE OpenGL::GL OpenGL::GLU OpenGL::GLX) + endif() +else() + add_library(3rdparty_opengl INTERFACE) + target_compile_definitions(3rdparty_opengl INTERFACE WITHOUT_OPENGL=1) +endif() + +# stblib +add_subdirectory(stblib) + +# Cubeb +add_subdirectory(cubeb EXCLUDE_FROM_ALL) + +# SoundTouch +add_subdirectory(SoundTouch EXCLUDE_FROM_ALL) + +# libevdev +set(LIBEVDEV_TARGET 3rdparty_dummy_lib) +if(USE_LIBEVDEV) + pkg_check_modules(LIBEVDEV libevdev libudev) + if(LIBEVDEV_FOUND) + add_library(3rdparty_libevdev INTERFACE) + target_compile_definitions(3rdparty_libevdev INTERFACE -DHAVE_LIBEVDEV) + target_include_directories(3rdparty_libevdev SYSTEM + INTERFACE ${LIBEVDEV_INCLUDE_DIRS}) + target_link_libraries(3rdparty_libevdev INTERFACE ${LIBEVDEV_LDFLAGS}) + + set(LIBEVDEV_TARGET 3rdparty_libevdev) + endif() +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) + 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() + +# AsmJit +add_subdirectory(asmjit EXCLUDE_FROM_ALL) + +# OpenAL +if (NOT ANDROID AND NOT WITHOUT_OPENAL) + add_subdirectory(OpenAL EXCLUDE_FROM_ALL) +else() + add_library(3rdparty_openal INTERFACE) + target_compile_definitions(3rdparty_openal INTERFACE WITHOUT_OPENAL=1) +endif() + +# FAudio +set(FAUDIO_TARGET 3rdparty_dummy_lib) +if(USE_FAUDIO) + # FAudio depends on SDL3 + find_package(SDL3) + 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" + ">=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") + find_package(FAudio REQUIRED CONFIGS FAudioConfig.cmake FAudio-config.cmake) + add_library(3rdparty_FAudio INTERFACE) + target_link_libraries(3rdparty_FAudio INTERFACE FAudio) + target_compile_definitions(3rdparty_FAudio INTERFACE -DHAVE_FAUDIO) + set(FAUDIO_TARGET 3rdparty_FAudio) + endif() + 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" + ">=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") + set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared library") + add_subdirectory(FAudio EXCLUDE_FROM_ALL) + target_compile_definitions(FAudio-static INTERFACE -DHAVE_FAUDIO) + set(FAUDIO_TARGET FAudio-static) + endif() + endif() +endif() + +set_property(TARGET ${FAUDIO_TARGET} PROPERTY FOLDER "3rdparty/") + + +# GLEW +add_library(3rdparty_glew INTERFACE) +if(NOT MSVC AND NOT ANDROID AND NOT WITHOUT_OPENGLEW) + find_package(GLEW REQUIRED) + target_link_libraries(3rdparty_glew INTERFACE GLEW::GLEW) +endif() + + +# LLVM +add_subdirectory(llvm EXCLUDE_FROM_ALL) + +# WOLFSSL +add_subdirectory(wolfssl EXCLUDE_FROM_ALL) + +# CURL +add_subdirectory(curl EXCLUDE_FROM_ALL) + +# SDL3 +set(SDL3_TARGET 3rdparty_dummy_lib) +if(USE_SDL) + if(USE_SYSTEM_SDL) + find_package(SDL3) + if(SDL3_FOUND AND NOT SDL3_VERSION VERSION_LESS 3.2.0) + message(STATUS "Using system SDL3 version '${SDL3_VERSION}'") + add_library(3rdparty_sdl3 INTERFACE) + target_compile_definitions(3rdparty_sdl3 INTERFACE -DHAVE_SDL3=1) + target_link_libraries(3rdparty_sdl3 INTERFACE SDL3::SDL3) + set(SDL3_TARGET 3rdparty_sdl3) + else() + message(FATAL_ERROR "SDL3 is not available on this system") + endif() + else() + message(STATUS "Using static SDL3 from 3rdparty") + add_library(3rdparty_sdl3 INTERFACE) + target_compile_definitions(3rdparty_sdl3 INTERFACE -DHAVE_SDL3=1) + add_subdirectory(libsdl-org EXCLUDE_FROM_ALL) + set(SDL3_TARGET 3rdparty_sdl3) + endif() +endif() + +# MINIUPNP +add_subdirectory(miniupnp EXCLUDE_FROM_ALL) + +# RTMIDI +add_subdirectory(rtmidi EXCLUDE_FROM_ALL) + +# OPENCV +add_subdirectory(opencv EXCLUDE_FROM_ALL) + +# FUSION +add_subdirectory(fusion EXCLUDE_FROM_ALL) + + +# add nice ALIAS targets for ease of use +if(USE_SYSTEM_LIBUSB) + add_library(3rdparty::libusb ALIAS usb-1.0-shared) +else() + add_library(3rdparty::libusb ALIAS usb-1.0-static) +endif() + +if (ANDROID) + add_subdirectory(libadrenotools) +else() + add_library(adrenotools INTERFACE) +endif() + +add_library(3rdparty::zlib ALIAS 3rdparty_zlib) +add_library(3rdparty::zstd ALIAS 3rdparty_zstd) +add_library(3rdparty::7zip ALIAS 3rdparty_7zip) +add_library(3rdparty::flatbuffers ALIAS 3rdparty_flatbuffers) +add_library(3rdparty::pugixml ALIAS pugixml) +add_library(3rdparty::glslang ALIAS 3rdparty_glslang) +add_library(3rdparty::yaml-cpp ALIAS yaml-cpp) +add_library(3rdparty::hidapi ALIAS 3rdparty_hidapi) +add_library(3rdparty::libpng ALIAS ${LIBPNG_TARGET}) +add_library(3rdparty::opengl ALIAS 3rdparty_opengl) +add_library(3rdparty::stblib ALIAS 3rdparty_stblib) +add_library(3rdparty::faudio ALIAS ${FAUDIO_TARGET}) +add_library(3rdparty::libevdev ALIAS ${LIBEVDEV_TARGET}) +add_library(3rdparty::vulkan ALIAS ${VULKAN_TARGET}) +add_library(3rdparty::openal ALIAS 3rdparty_openal) +add_library(3rdparty::glew ALIAS 3rdparty_glew) +add_library(3rdparty::wolfssl ALIAS wolfssl) +add_library(3rdparty::libcurl ALIAS 3rdparty_libcurl) +add_library(3rdparty::soundtouch ALIAS soundtouch) +add_library(3rdparty::sdl3 ALIAS ${SDL3_TARGET}) +add_library(3rdparty::miniupnpc ALIAS libminiupnpc-static) +add_library(3rdparty::rtmidi ALIAS rtmidi) +add_library(3rdparty::opencv ALIAS ${OPENCV_TARGET}) +add_library(3rdparty::fusion ALIAS Fusion) +add_library(3rdparty::json ALIAS 3rdparty_json) +add_library(3rdparty::adrenotools ALIAS adrenotools) diff --git a/rpcs3/3rdparty/FAudio b/3rdparty/FAudio similarity index 100% rename from rpcs3/3rdparty/FAudio rename to 3rdparty/FAudio diff --git a/rpcs3/3rdparty/GL/KHR/khrplatform.h b/3rdparty/GL/KHR/khrplatform.h similarity index 100% rename from rpcs3/3rdparty/GL/KHR/khrplatform.h rename to 3rdparty/GL/KHR/khrplatform.h diff --git a/rpcs3/3rdparty/GL/glext.h b/3rdparty/GL/glext.h similarity index 100% rename from rpcs3/3rdparty/GL/glext.h rename to 3rdparty/GL/glext.h diff --git a/rpcs3/3rdparty/GPUOpen/VulkanMemoryAllocator b/3rdparty/GPUOpen/VulkanMemoryAllocator similarity index 100% rename from rpcs3/3rdparty/GPUOpen/VulkanMemoryAllocator rename to 3rdparty/GPUOpen/VulkanMemoryAllocator diff --git a/rpcs3/3rdparty/GPUOpen/include/ffx_a.h b/3rdparty/GPUOpen/include/ffx_a.h similarity index 100% rename from rpcs3/3rdparty/GPUOpen/include/ffx_a.h rename to 3rdparty/GPUOpen/include/ffx_a.h diff --git a/rpcs3/3rdparty/GPUOpen/include/ffx_fsr1.h b/3rdparty/GPUOpen/include/ffx_fsr1.h similarity index 100% rename from rpcs3/3rdparty/GPUOpen/include/ffx_fsr1.h rename to 3rdparty/GPUOpen/include/ffx_fsr1.h diff --git a/rpcs3/3rdparty/MoltenVK/.gitignore b/3rdparty/MoltenVK/.gitignore similarity index 100% rename from rpcs3/3rdparty/MoltenVK/.gitignore rename to 3rdparty/MoltenVK/.gitignore diff --git a/rpcs3/3rdparty/MoltenVK/CMakeLists.txt b/3rdparty/MoltenVK/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/MoltenVK/CMakeLists.txt rename to 3rdparty/MoltenVK/CMakeLists.txt diff --git a/rpcs3/3rdparty/OpenAL/CMakeLists.txt b/3rdparty/OpenAL/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/OpenAL/CMakeLists.txt rename to 3rdparty/OpenAL/CMakeLists.txt diff --git a/rpcs3/3rdparty/OpenAL/openal-soft b/3rdparty/OpenAL/openal-soft similarity index 100% rename from rpcs3/3rdparty/OpenAL/openal-soft rename to 3rdparty/OpenAL/openal-soft diff --git a/rpcs3/3rdparty/SoundTouch/CMakeLists.txt b/3rdparty/SoundTouch/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/SoundTouch/CMakeLists.txt rename to 3rdparty/SoundTouch/CMakeLists.txt diff --git a/rpcs3/3rdparty/SoundTouch/soundtouch b/3rdparty/SoundTouch/soundtouch similarity index 100% rename from rpcs3/3rdparty/SoundTouch/soundtouch rename to 3rdparty/SoundTouch/soundtouch diff --git a/rpcs3/3rdparty/asmjit/CMakeLists.txt b/3rdparty/asmjit/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/asmjit/CMakeLists.txt rename to 3rdparty/asmjit/CMakeLists.txt diff --git a/rpcs3/3rdparty/asmjit/asmjit b/3rdparty/asmjit/asmjit similarity index 100% rename from rpcs3/3rdparty/asmjit/asmjit rename to 3rdparty/asmjit/asmjit diff --git a/rpcs3/3rdparty/bcdec/bcdec.hpp b/3rdparty/bcdec/bcdec.hpp similarity index 100% rename from rpcs3/3rdparty/bcdec/bcdec.hpp rename to 3rdparty/bcdec/bcdec.hpp diff --git a/rpcs3/3rdparty/cubeb/CMakeLists.txt b/3rdparty/cubeb/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/cubeb/CMakeLists.txt rename to 3rdparty/cubeb/CMakeLists.txt diff --git a/rpcs3/3rdparty/cubeb/cubeb b/3rdparty/cubeb/cubeb similarity index 100% rename from rpcs3/3rdparty/cubeb/cubeb rename to 3rdparty/cubeb/cubeb diff --git a/rpcs3/3rdparty/cubeb/extra/cubeb_export.h b/3rdparty/cubeb/extra/cubeb_export.h similarity index 100% rename from rpcs3/3rdparty/cubeb/extra/cubeb_export.h rename to 3rdparty/cubeb/extra/cubeb_export.h diff --git a/rpcs3/3rdparty/curl/CMakeLists.txt b/3rdparty/curl/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/curl/CMakeLists.txt rename to 3rdparty/curl/CMakeLists.txt diff --git a/rpcs3/3rdparty/curl/curl b/3rdparty/curl/curl similarity index 100% rename from rpcs3/3rdparty/curl/curl rename to 3rdparty/curl/curl diff --git a/rpcs3/3rdparty/curl/extra/wolfssl/options.h b/3rdparty/curl/extra/wolfssl/options.h similarity index 100% rename from rpcs3/3rdparty/curl/extra/wolfssl/options.h rename to 3rdparty/curl/extra/wolfssl/options.h diff --git a/rpcs3/3rdparty/flatbuffers b/3rdparty/flatbuffers similarity index 100% rename from rpcs3/3rdparty/flatbuffers rename to 3rdparty/flatbuffers diff --git a/rpcs3/3rdparty/fusion/CMakeLists.txt b/3rdparty/fusion/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/fusion/CMakeLists.txt rename to 3rdparty/fusion/CMakeLists.txt diff --git a/rpcs3/3rdparty/fusion/fusion b/3rdparty/fusion/fusion similarity index 100% rename from rpcs3/3rdparty/fusion/fusion rename to 3rdparty/fusion/fusion diff --git a/rpcs3/3rdparty/hidapi/CMakeLists.txt b/3rdparty/hidapi/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/hidapi/CMakeLists.txt rename to 3rdparty/hidapi/CMakeLists.txt diff --git a/rpcs3/3rdparty/hidapi/hidapi b/3rdparty/hidapi/hidapi similarity index 100% rename from rpcs3/3rdparty/hidapi/hidapi rename to 3rdparty/hidapi/hidapi diff --git a/rpcs3/3rdparty/libadrenotools b/3rdparty/libadrenotools similarity index 100% rename from rpcs3/3rdparty/libadrenotools rename to 3rdparty/libadrenotools diff --git a/rpcs3/3rdparty/libpng/CMakeLists.txt b/3rdparty/libpng/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/libpng/CMakeLists.txt rename to 3rdparty/libpng/CMakeLists.txt diff --git a/rpcs3/3rdparty/libpng/libpng b/3rdparty/libpng/libpng similarity index 100% rename from rpcs3/3rdparty/libpng/libpng rename to 3rdparty/libpng/libpng diff --git a/rpcs3/3rdparty/libsdl-org/CMakeLists.txt b/3rdparty/libsdl-org/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/libsdl-org/CMakeLists.txt rename to 3rdparty/libsdl-org/CMakeLists.txt diff --git a/rpcs3/3rdparty/libsdl-org/SDL b/3rdparty/libsdl-org/SDL similarity index 100% rename from rpcs3/3rdparty/libsdl-org/SDL rename to 3rdparty/libsdl-org/SDL diff --git a/rpcs3/3rdparty/libusb/CMakeLists.txt b/3rdparty/libusb/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/libusb/CMakeLists.txt rename to 3rdparty/libusb/CMakeLists.txt diff --git a/rpcs3/3rdparty/libusb/cmake_modules/FindCoreFoundation.cmake b/3rdparty/libusb/cmake_modules/FindCoreFoundation.cmake similarity index 100% rename from rpcs3/3rdparty/libusb/cmake_modules/FindCoreFoundation.cmake rename to 3rdparty/libusb/cmake_modules/FindCoreFoundation.cmake diff --git a/rpcs3/3rdparty/libusb/cmake_modules/FindIOKit.cmake b/3rdparty/libusb/cmake_modules/FindIOKit.cmake similarity index 100% rename from rpcs3/3rdparty/libusb/cmake_modules/FindIOKit.cmake rename to 3rdparty/libusb/cmake_modules/FindIOKit.cmake diff --git a/rpcs3/3rdparty/libusb/cmake_modules/LibFindMacros.cmake b/3rdparty/libusb/cmake_modules/LibFindMacros.cmake similarity index 100% rename from rpcs3/3rdparty/libusb/cmake_modules/LibFindMacros.cmake rename to 3rdparty/libusb/cmake_modules/LibFindMacros.cmake diff --git a/rpcs3/3rdparty/libusb/config.cmake b/3rdparty/libusb/config.cmake similarity index 100% rename from rpcs3/3rdparty/libusb/config.cmake rename to 3rdparty/libusb/config.cmake diff --git a/rpcs3/3rdparty/libusb/config.h.cmake b/3rdparty/libusb/config.h.cmake similarity index 100% rename from rpcs3/3rdparty/libusb/config.h.cmake rename to 3rdparty/libusb/config.h.cmake diff --git a/rpcs3/3rdparty/libusb/libusb b/3rdparty/libusb/libusb similarity index 100% rename from rpcs3/3rdparty/libusb/libusb rename to 3rdparty/libusb/libusb diff --git a/rpcs3/3rdparty/libusb/libusb-1.0.pc.cmake b/3rdparty/libusb/libusb-1.0.pc.cmake similarity index 100% rename from rpcs3/3rdparty/libusb/libusb-1.0.pc.cmake rename to 3rdparty/libusb/libusb-1.0.pc.cmake diff --git a/rpcs3/3rdparty/libusb/libusb.cmake b/3rdparty/libusb/libusb.cmake similarity index 100% rename from rpcs3/3rdparty/libusb/libusb.cmake rename to 3rdparty/libusb/libusb.cmake diff --git a/rpcs3/3rdparty/libusb/os.cmake b/3rdparty/libusb/os.cmake similarity index 100% rename from rpcs3/3rdparty/libusb/os.cmake rename to 3rdparty/libusb/os.cmake diff --git a/rpcs3/3rdparty/llvm/CMakeLists.txt b/3rdparty/llvm/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/llvm/CMakeLists.txt rename to 3rdparty/llvm/CMakeLists.txt diff --git a/rpcs3/3rdparty/llvm/llvm b/3rdparty/llvm/llvm similarity index 100% rename from rpcs3/3rdparty/llvm/llvm rename to 3rdparty/llvm/llvm diff --git a/rpcs3/3rdparty/miniupnp/CMakeLists.txt b/3rdparty/miniupnp/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/miniupnp/CMakeLists.txt rename to 3rdparty/miniupnp/CMakeLists.txt diff --git a/rpcs3/3rdparty/miniupnp/miniupnp b/3rdparty/miniupnp/miniupnp similarity index 100% rename from rpcs3/3rdparty/miniupnp/miniupnp rename to 3rdparty/miniupnp/miniupnp diff --git a/rpcs3/3rdparty/opencv/CMakeLists.txt b/3rdparty/opencv/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/opencv/CMakeLists.txt rename to 3rdparty/opencv/CMakeLists.txt diff --git a/rpcs3/3rdparty/opencv/opencv b/3rdparty/opencv/opencv similarity index 100% rename from rpcs3/3rdparty/opencv/opencv rename to 3rdparty/opencv/opencv diff --git a/rpcs3/3rdparty/pine/pine_server.h b/3rdparty/pine/pine_server.h similarity index 100% rename from rpcs3/3rdparty/pine/pine_server.h rename to 3rdparty/pine/pine_server.h diff --git a/rpcs3/3rdparty/pugixml b/3rdparty/pugixml similarity index 100% rename from rpcs3/3rdparty/pugixml rename to 3rdparty/pugixml diff --git a/rpcs3/3rdparty/robin_hood/include/robin_hood.h b/3rdparty/robin_hood/include/robin_hood.h similarity index 100% rename from rpcs3/3rdparty/robin_hood/include/robin_hood.h rename to 3rdparty/robin_hood/include/robin_hood.h diff --git a/rpcs3/3rdparty/rtmidi/CMakeLists.txt b/3rdparty/rtmidi/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/rtmidi/CMakeLists.txt rename to 3rdparty/rtmidi/CMakeLists.txt diff --git a/rpcs3/3rdparty/rtmidi/rtmidi b/3rdparty/rtmidi/rtmidi similarity index 100% rename from rpcs3/3rdparty/rtmidi/rtmidi rename to 3rdparty/rtmidi/rtmidi diff --git a/rpcs3/3rdparty/stblib/CMakeLists.txt b/3rdparty/stblib/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/stblib/CMakeLists.txt rename to 3rdparty/stblib/CMakeLists.txt diff --git a/rpcs3/3rdparty/stblib/stb b/3rdparty/stblib/stb similarity index 100% rename from rpcs3/3rdparty/stblib/stb rename to 3rdparty/stblib/stb diff --git a/rpcs3/3rdparty/wolfssl/CMakeLists.txt b/3rdparty/wolfssl/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/wolfssl/CMakeLists.txt rename to 3rdparty/wolfssl/CMakeLists.txt diff --git a/rpcs3/3rdparty/wolfssl/extra/win32/user_settings.h b/3rdparty/wolfssl/extra/win32/user_settings.h similarity index 100% rename from rpcs3/3rdparty/wolfssl/extra/win32/user_settings.h rename to 3rdparty/wolfssl/extra/win32/user_settings.h diff --git a/rpcs3/3rdparty/wolfssl/wolfssl b/3rdparty/wolfssl/wolfssl similarity index 100% rename from rpcs3/3rdparty/wolfssl/wolfssl rename to 3rdparty/wolfssl/wolfssl diff --git a/rpcs3/3rdparty/yaml-cpp/CMakeLists.txt b/3rdparty/yaml-cpp/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/yaml-cpp/CMakeLists.txt rename to 3rdparty/yaml-cpp/CMakeLists.txt diff --git a/rpcs3/3rdparty/yaml-cpp/yaml-cpp b/3rdparty/yaml-cpp/yaml-cpp similarity index 100% rename from rpcs3/3rdparty/yaml-cpp/yaml-cpp rename to 3rdparty/yaml-cpp/yaml-cpp diff --git a/rpcs3/3rdparty/zlib/CMakeLists.txt b/3rdparty/zlib/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/zlib/CMakeLists.txt rename to 3rdparty/zlib/CMakeLists.txt diff --git a/rpcs3/3rdparty/zlib/zlib b/3rdparty/zlib/zlib similarity index 100% rename from rpcs3/3rdparty/zlib/zlib rename to 3rdparty/zlib/zlib diff --git a/rpcs3/3rdparty/zstd/CMakeLists.txt b/3rdparty/zstd/CMakeLists.txt similarity index 100% rename from rpcs3/3rdparty/zstd/CMakeLists.txt rename to 3rdparty/zstd/CMakeLists.txt diff --git a/rpcs3/3rdparty/zstd/zstd b/3rdparty/zstd/zstd similarity index 100% rename from rpcs3/3rdparty/zstd/zstd rename to 3rdparty/zstd/zstd diff --git a/CMakeLists.txt b/CMakeLists.txt index afd3bfb07..95ce483ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,27 @@ option(WITH_RPCS3_QT_UI "Enable RPCS3 UI" OFF) option(WITHOUT_OPENGL "Disable OpenGL" OFF) option(WITHOUT_OPENGLEW "Disable OpenGLEW" OFF) +# rpcs3 options +option(USE_NATIVE_INSTRUCTIONS "USE_NATIVE_INSTRUCTIONS makes rpcs3 compile with -march=native, which is useful for local builds, but not good for packages." ON) +option(WITH_LLVM "Enable usage of LLVM library" ON) +option(BUILD_LLVM "Build LLVM from git submodule" OFF) +option(STATIC_LINK_LLVM "Link against LLVM statically. This will get set to ON if you build LLVM from the submodule." OFF) +option(USE_FAUDIO "FAudio audio backend" ON) +option(USE_LIBEVDEV "libevdev-based joystick support" ON) +option(USE_DISCORD_RPC "Discord rich presence integration" OFF) +option(USE_SYSTEM_ZLIB "Prefer system ZLIB instead of the builtin one" ON) +option(USE_VULKAN "Vulkan render backend" ON) +option(USE_PRECOMPILED_HEADERS "Use precompiled headers" OFF) +option(USE_SDL "Enables SDL input handler" OFF) +option(USE_SYSTEM_SDL "Prefer system SDL instead of the builtin one" ON) +option(USE_SYSTEM_FFMPEG "Prefer system ffmpeg instead of the prebuild one" OFF) +option(USE_SYSTEM_OPENAL "Prefer system OpenAL instead of the prebuild one" ON) +option(USE_SYSTEM_CURL "Prefer system Curl instead of the prebuild one" ON) +option(USE_SYSTEM_OPENCV "Prefer system OpenCV instead of the builtin one" ON) +option(HAS_MEMORY_BREAKPOINTS "Add support for memory breakpoints to the interpreter" OFF) +option(USE_LTO "Use LTO for building" ON) + + set(CMAKE_CXX_EXTENSIONS off) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED on) diff --git a/rpcs3/cmake/ConfigureCompiler.cmake b/cmake/ConfigureCompiler.cmake similarity index 99% rename from rpcs3/cmake/ConfigureCompiler.cmake rename to cmake/ConfigureCompiler.cmake index d108c22ad..e7a9fb3ab 100644 --- a/rpcs3/cmake/ConfigureCompiler.cmake +++ b/cmake/ConfigureCompiler.cmake @@ -48,7 +48,7 @@ else() add_compile_options(-msse -msse2 -mcx16) endif() - add_compile_options(-Werror=old-style-cast) + # add_compile_options(-Werror=old-style-cast) add_compile_options(-Werror=sign-compare) add_compile_options(-Werror=reorder) add_compile_options(-Werror=return-type) diff --git a/rpcs3/3rdparty/DetectArchitecture.cmake b/cmake/DetectArchitecture.cmake similarity index 100% rename from rpcs3/3rdparty/DetectArchitecture.cmake rename to cmake/DetectArchitecture.cmake diff --git a/rpcs3/cmake/FindFFMPEG.cmake b/cmake/FindFFMPEG.cmake similarity index 100% rename from rpcs3/cmake/FindFFMPEG.cmake rename to cmake/FindFFMPEG.cmake diff --git a/rpcs3/cmake/FindWayland.cmake b/cmake/FindWayland.cmake similarity index 100% rename from rpcs3/cmake/FindWayland.cmake rename to cmake/FindWayland.cmake diff --git a/rpcs3/cmake/FindWolfSSL.cmake b/cmake/FindWolfSSL.cmake similarity index 100% rename from rpcs3/cmake/FindWolfSSL.cmake rename to cmake/FindWolfSSL.cmake diff --git a/rpcs3/cmake/FindZLIB.cmake b/cmake/FindZLIB.cmake similarity index 100% rename from rpcs3/cmake/FindZLIB.cmake rename to cmake/FindZLIB.cmake diff --git a/rpcs3/cmake/TCDarwinARM64.cmake b/cmake/TCDarwinARM64.cmake similarity index 100% rename from rpcs3/cmake/TCDarwinARM64.cmake rename to cmake/TCDarwinARM64.cmake diff --git a/rpcs3/3rdparty/CMakeLists.txt b/rpcs3/3rdparty/CMakeLists.txt index f4d622963..2955cf825 100644 --- a/rpcs3/3rdparty/CMakeLists.txt +++ b/rpcs3/3rdparty/CMakeLists.txt @@ -1,263 +1,7 @@ -find_package(PkgConfig) -include(ExternalProject) -include(CMakeDependentOption) - -set(CMAKE_CXX_STANDARD 20) - -# Defines the ARCHITECTURE variable -include("DetectArchitecture.cmake") - -# Warnings are silenced for 3rdparty code -if(NOT MSVC) - add_compile_options("$<$:-w>") -endif() - -# Dummy target to use when lib isn't available -add_library(3rdparty_dummy_lib INTERFACE) - - -# ZLib -add_subdirectory(zlib EXCLUDE_FROM_ALL) - -# ZSTD -add_subdirectory(zstd EXCLUDE_FROM_ALL) - -# 7zip sdk -add_subdirectory(7zip EXCLUDE_FROM_ALL) - -add_library(3rdparty_flatbuffers INTERFACE) -if (USE_SYSTEM_FLATBUFFERS) - pkg_check_modules(FLATBUFFERS REQUIRED IMPORTED_TARGET flatbuffers>=2.0.0) - target_link_libraries(3rdparty_flatbuffers INTERFACE PkgConfig::FLATBUFFERS) - set(FBS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../rpcs3/Emu/NP/generated/") - execute_process(COMMAND flatc --cpp -o "${FBS_DIR}" "${FBS_DIR}/np2_structs.fbs" RESULT_VARIABLE FBS_CMD_ERROR) - if(FBS_CMD_ERROR AND NOT FBS_CMD_ERROR EQUAL 0) - message(FATAL_ERROR "flatc failed to regenerate flatbuffers headers.") - endif() -else() - target_include_directories(3rdparty_flatbuffers INTERFACE flatbuffers/include) -endif() - -# libPNG -add_subdirectory(libpng EXCLUDE_FROM_ALL) - - -# pugixml -if (USE_SYSTEM_PUGIXML) - pkg_check_modules(PUGIXML REQUIRED IMPORTED_TARGET pugixml>=1.15) - add_library(pugixml INTERFACE) - target_link_libraries(pugixml INTERFACE PkgConfig::PUGIXML) -else() - add_subdirectory(pugixml EXCLUDE_FROM_ALL) -endif() - - -# libusb -if(CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD") - pkg_check_modules(LIBUSB REQUIRED IMPORTED_TARGET libusb-1.0>=1.0 ) - cmake_dependent_option(USE_SYSTEM_LIBUSB "Use system libusb-1.0 as shared library" ON - "LIBUSB_FOUND" OFF) -else() - pkg_check_modules(LIBUSB IMPORTED_TARGET libusb-1.0>=1.0 ) - cmake_dependent_option(USE_SYSTEM_LIBUSB "Use system libusb-1.0 as shared library" OFF - "LIBUSB_FOUND" OFF) -endif() -if(CMAKE_SYSTEM_NAME MATCHES "DragonFly|FreeBSD") - # Always use system libusb as reference implementation isn't supported - add_library(usb-1.0-shared INTERFACE) - target_link_libraries(usb-1.0-shared INTERFACE PkgConfig::LIBUSB) -elseif(MSVC) - # Windows time.h defines timespec but doesn't add any flag for it, which makes libusb attempt to define it again - add_definitions(-DHAVE_STRUCT_TIMESPEC=1) - add_subdirectory(libusb EXCLUDE_FROM_ALL) -else() - if(USE_SYSTEM_LIBUSB) - # we have the system libusb and have selected to use it - add_library(usb-1.0-shared INTERFACE) - target_link_libraries(usb-1.0-shared INTERFACE PkgConfig::LIBUSB) - else() - # we don't have the system libusb, so we compile from submodule - unset(LIBUSB_LIBRARIES CACHE) - add_subdirectory(libusb EXCLUDE_FROM_ALL) - - if (NOT TARGET usb-1.0 AND TARGET usb-1.0-static) - add_library(usb-1.0 ALIAS usb-1.0-static) - endif() - endif() -endif() - - -# hidapi -add_subdirectory(hidapi) - -# glslang -add_library(3rdparty_glslang INTERFACE) -target_link_libraries(3rdparty_glslang INTERFACE SPIRV) - - -# yaml-cpp -add_subdirectory(yaml-cpp) - - -# OpenGL - -if (NOT ANDROID AND NOT WITHOUT_OPENGL) - find_package(OpenGL REQUIRED OPTIONAL_COMPONENTS EGL) - - add_library(3rdparty_opengl INTERFACE) - target_include_directories(3rdparty_opengl INTERFACE GL) - - if (WIN32) - if(NOT MSVC) - target_link_libraries(3rdparty_opengl INTERFACE OpenGL::GL OpenGL::GLU) - else() - target_link_libraries(3rdparty_opengl INTERFACE dxgi.lib d2d1.lib dwrite.lib) - endif() - elseif(APPLE) - target_link_libraries(3rdparty_opengl INTERFACE OpenGL::GL OpenGL::GLU) - else() - target_link_libraries(3rdparty_opengl INTERFACE OpenGL::GL OpenGL::GLU OpenGL::GLX) - endif() -else() - add_library(3rdparty_opengl INTERFACE) - target_compile_definitions(3rdparty_opengl INTERFACE WITHOUT_OPENGL=1) -endif() - -# stblib -add_subdirectory(stblib) - -# DiscordRPC -add_subdirectory(discord-rpc) - -# Cubeb -add_subdirectory(cubeb EXCLUDE_FROM_ALL) - -# SoundTouch -add_subdirectory(SoundTouch EXCLUDE_FROM_ALL) - -# libevdev -set(LIBEVDEV_TARGET 3rdparty_dummy_lib) -if(USE_LIBEVDEV) - pkg_check_modules(LIBEVDEV libevdev libudev) - if(LIBEVDEV_FOUND) - add_library(3rdparty_libevdev INTERFACE) - target_compile_definitions(3rdparty_libevdev INTERFACE -DHAVE_LIBEVDEV) - target_include_directories(3rdparty_libevdev SYSTEM - INTERFACE ${LIBEVDEV_INCLUDE_DIRS}) - target_link_libraries(3rdparty_libevdev INTERFACE ${LIBEVDEV_LDFLAGS}) - - set(LIBEVDEV_TARGET 3rdparty_libevdev) - endif() -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) - 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() - -# AsmJit -add_subdirectory(asmjit EXCLUDE_FROM_ALL) - -# OpenAL -if (NOT ANDROID AND NOT WITHOUT_OPENAL) - add_subdirectory(OpenAL EXCLUDE_FROM_ALL) -else() - add_library(3rdparty_openal INTERFACE) - target_compile_definitions(3rdparty_openal INTERFACE WITHOUT_OPENAL=1) -endif() - -# FAudio -set(FAUDIO_TARGET 3rdparty_dummy_lib) -if(USE_FAUDIO) - # FAudio depends on SDL3 - find_package(SDL3) - 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" - ">=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") - find_package(FAudio REQUIRED CONFIGS FAudioConfig.cmake FAudio-config.cmake) - add_library(3rdparty_FAudio INTERFACE) - target_link_libraries(3rdparty_FAudio INTERFACE FAudio) - target_compile_definitions(3rdparty_FAudio INTERFACE -DHAVE_FAUDIO) - set(FAUDIO_TARGET 3rdparty_FAudio) - endif() - 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" - ">=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") - set(BUILD_SHARED_LIBS OFF CACHE BOOL "Build shared library") - add_subdirectory(FAudio EXCLUDE_FROM_ALL) - target_compile_definitions(FAudio-static INTERFACE -DHAVE_FAUDIO) - set(FAUDIO_TARGET FAudio-static) - endif() - endif() -endif() - -set_property(TARGET ${FAUDIO_TARGET} PROPERTY FOLDER "3rdparty/") - +include(DetectArchitecture) # FFMPEG -if(NOT ANDROID) +if(NOT TARGET 3rdparty_ffmpeg) add_library(3rdparty_ffmpeg INTERFACE) # Select the version of ffmpeg to use, default is builtin @@ -300,100 +44,8 @@ if(NOT ANDROID) endif() -# GLEW -add_library(3rdparty_glew INTERFACE) -if(NOT MSVC AND NOT ANDROID AND NOT WITHOUT_OPENGLEW) - find_package(GLEW REQUIRED) - target_link_libraries(3rdparty_glew INTERFACE GLEW::GLEW) -endif() +# DiscordRPC +add_subdirectory(discord-rpc) - -# LLVM -add_subdirectory(llvm EXCLUDE_FROM_ALL) - -# WOLFSSL -add_subdirectory(wolfssl EXCLUDE_FROM_ALL) - -# CURL -add_subdirectory(curl EXCLUDE_FROM_ALL) - -# SDL3 -set(SDL3_TARGET 3rdparty_dummy_lib) -if(USE_SDL) - if(USE_SYSTEM_SDL) - find_package(SDL3) - if(SDL3_FOUND AND NOT SDL3_VERSION VERSION_LESS 3.2.0) - message(STATUS "Using system SDL3 version '${SDL3_VERSION}'") - add_library(3rdparty_sdl3 INTERFACE) - target_compile_definitions(3rdparty_sdl3 INTERFACE -DHAVE_SDL3=1) - target_link_libraries(3rdparty_sdl3 INTERFACE SDL3::SDL3) - set(SDL3_TARGET 3rdparty_sdl3) - else() - message(FATAL_ERROR "SDL3 is not available on this system") - endif() - else() - message(STATUS "Using static SDL3 from 3rdparty") - add_library(3rdparty_sdl3 INTERFACE) - target_compile_definitions(3rdparty_sdl3 INTERFACE -DHAVE_SDL3=1) - add_subdirectory(libsdl-org EXCLUDE_FROM_ALL) - set(SDL3_TARGET 3rdparty_sdl3) - endif() -endif() - -# MINIUPNP -add_subdirectory(miniupnp EXCLUDE_FROM_ALL) - -# RTMIDI -add_subdirectory(rtmidi EXCLUDE_FROM_ALL) - -# OPENCV -add_subdirectory(opencv EXCLUDE_FROM_ALL) - -# FUSION -add_subdirectory(fusion EXCLUDE_FROM_ALL) - -# nlohmann json -add_library(3rdparty_json INTERFACE) -target_include_directories(3rdparty_json INTERFACE json/include) - -# add nice ALIAS targets for ease of use -if(USE_SYSTEM_LIBUSB) - add_library(3rdparty::libusb ALIAS usb-1.0-shared) -else() - add_library(3rdparty::libusb ALIAS usb-1.0-static) -endif() - -if (ANDROID) - add_subdirectory(libadrenotools) -else() - add_library(adrenotools INTERFACE) -endif() - -add_library(3rdparty::zlib ALIAS 3rdparty_zlib) -add_library(3rdparty::zstd ALIAS 3rdparty_zstd) -add_library(3rdparty::7zip ALIAS 3rdparty_7zip) -add_library(3rdparty::flatbuffers ALIAS 3rdparty_flatbuffers) -add_library(3rdparty::pugixml ALIAS pugixml) -add_library(3rdparty::glslang ALIAS 3rdparty_glslang) -add_library(3rdparty::yaml-cpp ALIAS yaml-cpp) -add_library(3rdparty::hidapi ALIAS 3rdparty_hidapi) -add_library(3rdparty::libpng ALIAS ${LIBPNG_TARGET}) -add_library(3rdparty::opengl ALIAS 3rdparty_opengl) -add_library(3rdparty::stblib ALIAS 3rdparty_stblib) -add_library(3rdparty::discordRPC ALIAS 3rdparty_discordRPC) -add_library(3rdparty::faudio ALIAS ${FAUDIO_TARGET}) -add_library(3rdparty::libevdev ALIAS ${LIBEVDEV_TARGET}) -add_library(3rdparty::vulkan ALIAS ${VULKAN_TARGET}) -add_library(3rdparty::openal ALIAS 3rdparty_openal) add_library(3rdparty::ffmpeg ALIAS 3rdparty_ffmpeg) -add_library(3rdparty::glew ALIAS 3rdparty_glew) -add_library(3rdparty::wolfssl ALIAS wolfssl) -add_library(3rdparty::libcurl ALIAS 3rdparty_libcurl) -add_library(3rdparty::soundtouch ALIAS soundtouch) -add_library(3rdparty::sdl3 ALIAS ${SDL3_TARGET}) -add_library(3rdparty::miniupnpc ALIAS libminiupnpc-static) -add_library(3rdparty::rtmidi ALIAS rtmidi) -add_library(3rdparty::opencv ALIAS ${OPENCV_TARGET}) -add_library(3rdparty::fusion ALIAS Fusion) -add_library(3rdparty::json ALIAS 3rdparty_json) -add_library(3rdparty::adrenotools ALIAS adrenotools) +add_library(3rdparty::discordRPC ALIAS 3rdparty_discordRPC) diff --git a/rpcs3/3rdparty/json b/rpcs3/3rdparty/json deleted file mode 160000 index 11aa5f944..000000000 --- a/rpcs3/3rdparty/json +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 11aa5f944d17ed5b96250ca133bf33c5ca8b0161 diff --git a/rpcs3/CMakeLists.txt b/rpcs3/CMakeLists.txt index c99ccdc49..65314b5b2 100644 --- a/rpcs3/CMakeLists.txt +++ b/rpcs3/CMakeLists.txt @@ -14,27 +14,6 @@ elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") endif() endif() -option(USE_NATIVE_INSTRUCTIONS "USE_NATIVE_INSTRUCTIONS makes rpcs3 compile with -march=native, which is useful for local builds, but not good for packages." ON) -option(WITH_LLVM "Enable usage of LLVM library" ON) -option(BUILD_LLVM "Build LLVM from git submodule" OFF) -option(STATIC_LINK_LLVM "Link against LLVM statically. This will get set to ON if you build LLVM from the submodule." OFF) -option(USE_FAUDIO "FAudio audio backend" ON) -option(USE_LIBEVDEV "libevdev-based joystick support" ON) -option(USE_DISCORD_RPC "Discord rich presence integration" OFF) -option(USE_SYSTEM_ZLIB "Prefer system ZLIB instead of the builtin one" ON) -option(USE_VULKAN "Vulkan render backend" ON) -option(USE_PRECOMPILED_HEADERS "Use precompiled headers" OFF) -option(USE_SDL "Enables SDL input handler" OFF) -option(USE_SYSTEM_SDL "Prefer system SDL instead of the builtin one" ON) -option(USE_SYSTEM_FFMPEG "Prefer system ffmpeg instead of the prebuild one" OFF) -option(USE_SYSTEM_OPENAL "Prefer system OpenAL instead of the prebuild one" ON) -option(USE_SYSTEM_CURL "Prefer system Curl instead of the prebuild one" ON) -option(USE_SYSTEM_OPENCV "Prefer system OpenCV instead of the builtin one" ON) -option(HAS_MEMORY_BREAKPOINTS "Add support for memory breakpoints to the interpreter" OFF) -option(USE_LTO "Use LTO for building" ON) - -set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") - include(CheckCXXCompilerFlag) get_property(IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)