diff --git a/.github/workflows/macos-workflow.yml b/.github/workflows/macos-workflow.yml index dcb64f5adb..f2c8ab49b0 100644 --- a/.github/workflows/macos-workflow.yml +++ b/.github/workflows/macos-workflow.yml @@ -92,7 +92,7 @@ jobs: run: .github/workflows/scripts/macos/build-dependencies.sh - name: Generate CMake Files - run: cmake -DCMAKE_PREFIX_PATH="$HOME/deps" -DCMAKE_BUILD_TYPE=Release -DUSE_OPENGL=OFF -DDISABLE_ADVANCE_SIMD=ON -DLTO_PCSX2_CORE=ON -B build . + run: cmake -DCMAKE_PREFIX_PATH="$HOME/deps" -DCMAKE_BUILD_TYPE=Release -DUSE_OPENGL=OFF -DDISABLE_ADVANCE_SIMD=ON -DLTO_PCSX2_CORE=ON -DUSE_SYSTEM_LIBS=OFF -DUSE_SYSTEM_SDL2=ON -B build . - name: Build PCSX2 working-directory: build diff --git a/.github/workflows/scripts/linux/generate-cmake.sh b/.github/workflows/scripts/linux/generate-cmake.sh index b67e04dd1d..f7514782ac 100755 --- a/.github/workflows/scripts/linux/generate-cmake.sh +++ b/.github/workflows/scripts/linux/generate-cmake.sh @@ -27,6 +27,7 @@ cmake \ -DOpenGL_GL_PREFERENCE="LEGACY" \ -DOPENGL_opengl_LIBRARY="" \ -DXDG_STD=TRUE \ +-DUSE_SYSTEM_ZSTD=FALSE \ $ADDITIONAL_CMAKE_ARGS \ -GNinja \ -B build diff --git a/3rdparty/libzip/CMakeLists.txt b/3rdparty/libzip/CMakeLists.txt index b6a90ef154..47e08c9326 100644 --- a/3rdparty/libzip/CMakeLists.txt +++ b/3rdparty/libzip/CMakeLists.txt @@ -5,6 +5,7 @@ set(ENABLE_COMMONCRYPTO OFF CACHE BOOL "") set(ENABLE_GNUTLS OFF CACHE BOOL "") set(ENABLE_MBEDTLS OFF CACHE BOOL "") set(ENABLE_WINDOWS_CRYPTO OFF CACHE BOOL "") +set(ENABLE_OPENSSL OFF CACHE BOOL "") set(ENABLE_BZIP2 OFF CACHE BOOL "") set(ENABLE_LZMA OFF CACHE BOOL "") set(ENABLE_ZSTD ON CACHE BOOL "") diff --git a/3rdparty/sdl2/CMakeLists.txt b/3rdparty/sdl2/CMakeLists.txt index 96d836f298..8829045529 100644 --- a/3rdparty/sdl2/CMakeLists.txt +++ b/3rdparty/sdl2/CMakeLists.txt @@ -17,7 +17,7 @@ set(SDL_LIBSAMPLERATE OFF CACHE BOOL "") set(SDL_X11 OFF CACHE BOOL "") set(SDL_WAYLAND OFF CACHE BOOL "") set(SDL_RPI OFF CACHE BOOL "") -set(SDL_COCOA OFF CACHE BOOL "") +set(SDL_COCOA ON CACHE BOOL "") set(SDL_DIRECTX OFF CACHE BOOL "") set(SDL_WASAPI OFF CACHE BOOL "") set(SDL_RENDER_D3D OFF CACHE BOOL "") @@ -33,7 +33,7 @@ set(SDL_STATIC ON CACHE BOOL "") # Subsystems set(SDL_ATOMIC ON CACHE BOOL "") set(SDL_AUDIO OFF CACHE BOOL "") -set(SDL_VIDEO OFF CACHE BOOL "") +set(SDL_VIDEO ON CACHE BOOL "") set(SDL_RENDER OFF CACHE BOOL "") set(SDL_EVENTS ON CACHE BOOL "") set(SDL_JOYSTICK ON CACHE BOOL "") diff --git a/cmake/BuildParameters.cmake b/cmake/BuildParameters.cmake index 981524dc6d..7f416f154f 100644 --- a/cmake/BuildParameters.cmake +++ b/cmake/BuildParameters.cmake @@ -17,7 +17,12 @@ set(PCSX2_DEFS "") #------------------------------------------------------------------------------- option(DISABLE_BUILD_DATE "Disable including the binary compile date") option(ENABLE_TESTS "Enables building the unit tests" ON) -option(USE_SYSTEM_YAML "Uses a system version of yaml, if found") +set(USE_SYSTEM_LIBS "AUTO" CACHE STRING "Use system libraries instead of bundled libraries. ON - Always use system and fail if unavailable, OFF - Always use bundled, AUTO - Use system if available, otherwise use bundled. Default is AUTO") +optional_system_library(fmt) +optional_system_library(ryml) +optional_system_library(zstd) +optional_system_library(libzip) +optional_system_library(SDL2) option(LTO_PCSX2_CORE "Enable LTO/IPO/LTCG on the subset of pcsx2 that benefits most from it but not anything else") if(WIN32) diff --git a/cmake/Pcsx2Utils.cmake b/cmake/Pcsx2Utils.cmake index c87f305fbe..0dda0f7379 100644 --- a/cmake/Pcsx2Utils.cmake +++ b/cmake/Pcsx2Utils.cmake @@ -155,8 +155,10 @@ endfunction() # like add_library(new ALIAS old) but avoids add_library cannot create ALIAS target "new" because target "old" is imported but not globally visible. on older cmake function(alias_library new old) string(REPLACE "::" "" library_no_namespace ${old}) - add_library(_alias_${library_no_namespace} INTERFACE) - target_link_libraries(_alias_${library_no_namespace} INTERFACE ${old}) + if (NOT TARGET _alias_${library_no_namespace}) + add_library(_alias_${library_no_namespace} INTERFACE) + target_link_libraries(_alias_${library_no_namespace} INTERFACE ${old}) + endif() add_library(${new} ALIAS _alias_${library_no_namespace}) endfunction() @@ -193,3 +195,37 @@ function(source_groups_from_vcxproj_filters file) source_group("${group}" FILES "${parent}/${path}") endforeach() endfunction() + +function(optional_system_library library) + string(TOUPPER ${library} upperlib) + set(USE_SYSTEM_${upperlib} "" CACHE STRING "Use system ${library} instead of bundled. ON - Always use system and fail if unavailable, OFF - Always use bundled, AUTO - Use system if available, otherwise use bundled, blank - Delegate to USE_SYSTEM_LIBS. Default is blank.") + if ("${USE_SYSTEM_${upperlib}}" STREQUAL "") + set(RESOLVED_USE_SYSTEM_${upperlib} ${USE_SYSTEM_LIBS} PARENT_SCOPE) + else() + set(RESOLVED_USE_SYSTEM_${upperlib} ${USE_SYSTEM_${upperlib}} PARENT_SCOPE) + endif() +endfunction() + +function(find_optional_system_library library bundled_path) + string(TOUPPER ${library} upperlib) + if (RESOLVED_USE_SYSTEM_${upperlib}) + find_package(${library} ${ARGN} QUIET) + if ((NOT ${library}_FOUND) AND (NOT ${RESOLVED_USE_SYSTEM_${upperlib}} STREQUAL "AUTO")) + find_package(${library} ${ARGN}) # For the message + message(FATAL_ERROR "No system ${library} was found. Please install it or set USE_SYSTEM_${upperlib} to AUTO.") + endif() + endif() + if (${library}_FOUND) + message("Found ${library}: ${${library}_VERSION}") + set(${library}_TYPE "System" PARENT_SCOPE) + else() + if (${RESOLVED_USE_SYSTEM_${upperlib}} STREQUAL "AUTO") + message("No system ${library} was found. Using bundled.") + endif() + if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${bundled_path}/CMakeLists.txt") + message(FATAL_ERROR "No bundled ${library} was found. Did you forget to checkout submodules?") + endif() + add_subdirectory(${bundled_path} EXCLUDE_FROM_ALL) + set(${library}_TYPE "Bundled" PARENT_SCOPE) + endif() +endfunction() diff --git a/cmake/SearchForStuff.cmake b/cmake/SearchForStuff.cmake index aa323e25a3..12a9f3c8ef 100644 --- a/cmake/SearchForStuff.cmake +++ b/cmake/SearchForStuff.cmake @@ -145,7 +145,7 @@ else() check_lib(SAMPLERATE samplerate samplerate.h) if(NOT QT_BUILD) - check_lib(SDL2 SDL2 SDL.h PATH_SUFFIXES SDL2) + find_optional_system_library(SDL2 3rdparty/sdl2 2.0.12) endif() if(UNIX AND NOT APPLE) @@ -205,39 +205,14 @@ if((GCC_VERSION VERSION_EQUAL "9.0" OR GCC_VERSION VERSION_GREATER "9.0") AND GC This text being in a compile log in an open issue may cause it to be closed.") endif() -find_package(fmt "7.1.3" QUIET) -if(NOT fmt_FOUND) - if(EXISTS "${CMAKE_SOURCE_DIR}/3rdparty/fmt/fmt/CMakeLists.txt") - message(STATUS "No system fmt was found. Using bundled") - add_subdirectory(3rdparty/fmt/fmt) - else() - message(FATAL_ERROR "No system or bundled fmt was found") - endif() -else() - message(STATUS "Found fmt: ${fmt_VERSION}") +find_optional_system_library(fmt 3rdparty/fmt/fmt 7.1.3) +find_optional_system_library(ryml 3rdparty/rapidyaml/rapidyaml 0.4.0) +find_optional_system_library(zstd 3rdparty/zstd 1.4.5) +if (${zstd_TYPE} STREQUAL System) + alias_library(Zstd::Zstd zstd::libzstd_shared) + alias_library(pcsx2-zstd zstd::libzstd_shared) endif() - -if(USE_SYSTEM_YAML) - find_package(ryml REQUIRED) - if(NOT ryml_FOUND) - message(STATUS "No system rapidyaml was found, using the submodule in the 3rdparty directory") - set(USE_SYSTEM_YAML OFF) - else() - message(STATUS "Found rapidyaml: ${rapidyaml_VERSION}") - endif() -endif() - -if(NOT USE_SYSTEM_YAML) - if(EXISTS "${CMAKE_SOURCE_DIR}/3rdparty/rapidyaml/rapidyaml/CMakeLists.txt") - message(STATUS "Using bundled rapidyaml") - add_subdirectory(3rdparty/rapidyaml/rapidyaml EXCLUDE_FROM_ALL) - else() - message(FATAL_ERROR "No bundled rapidyaml was found") - endif() -endif() - -# We could use a system version of zstd, but is it going to be recent enough? -add_subdirectory(3rdparty/zstd EXCLUDE_FROM_ALL) +find_optional_system_library(libzip 3rdparty/libzip 1.8.0) if(QT_BUILD) # Default to bundled Qt6 for Windows. @@ -249,7 +224,7 @@ if(QT_BUILD) find_package(Qt6 COMPONENTS CoreTools Core GuiTools Gui WidgetsTools Widgets Network LinguistTools REQUIRED) # We use the bundled (latest) SDL version for Qt. - add_subdirectory(3rdparty/sdl2 EXCLUDE_FROM_ALL) + find_optional_system_library(SDL2 3rdparty/sdl2 2.0.22) endif() add_subdirectory(3rdparty/lzma EXCLUDE_FROM_ALL) @@ -266,7 +241,6 @@ endif() add_subdirectory(3rdparty/simpleini EXCLUDE_FROM_ALL) add_subdirectory(3rdparty/imgui EXCLUDE_FROM_ALL) -add_subdirectory(3rdparty/libzip EXCLUDE_FROM_ALL) if(USE_OPENGL) add_subdirectory(3rdparty/glad EXCLUDE_FROM_ALL) diff --git a/pcsx2/CMakeLists.txt b/pcsx2/CMakeLists.txt index c0128ada25..fb9de7061a 100644 --- a/pcsx2/CMakeLists.txt +++ b/pcsx2/CMakeLists.txt @@ -70,13 +70,13 @@ if(XDG_STD) target_compile_definitions(PCSX2_FLAGS INTERFACE XDG_STD) endif() -if(TARGET PkgConfig::SDL2 OR QT_BUILD) +if(TARGET SDL2::SDL2 OR TARGET SDL2::SDL2-static) target_compile_definitions(PCSX2_FLAGS INTERFACE SDL_BUILD) - if (QT_BUILD) + if ("${SDL2_TYPE}" STREQUAL Bundled) # Use our in-tree SDL build. target_link_libraries(PCSX2_FLAGS INTERFACE SDL2::SDL2-static) else() - target_link_libraries(PCSX2_FLAGS INTERFACE PkgConfig::SDL2) + target_link_libraries(PCSX2_FLAGS INTERFACE SDL2::SDL2) endif() if(PCSX2_CORE) target_sources(PCSX2 PRIVATE @@ -1602,7 +1602,7 @@ target_link_libraries(PCSX2_FLAGS INTERFACE fmt::fmt ryml chdr-static - zip + libzip::zip wxWidgets::all ZLIB::ZLIB PkgConfig::SOUNDTOUCH