summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorAdmiral H. Curtiss <pikachu025@gmail.com>2023-06-30 19:06:04 +0200
committerGitHub <noreply@github.com>2023-06-30 19:06:04 +0200
commitfa81006b519cdfff61a4686df8cdef901cf6685d (patch)
tree3389d331067ce7f8ae0389e11b5152636dd952ec /CMakeLists.txt
parente4d7ba5554e4d0eae1e803679318c7d2551d9c5f (diff)
parentade40650f5cbd2e950e382ab0a21598ab34aa65c (diff)
Merge pull request #11955 from TellowKrinkle/CMakeDependencies
CMake: Allow ignoring system packages
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt243
1 files changed, 29 insertions, 214 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 96cd381b3a..ed6c64a2fa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -85,7 +85,11 @@ if(NOT ANDROID)
option(ENABLE_CLI_TOOL "Enable dolphin-tool, a CLI-based utility for functions such as managing disc images" ON)
endif()
-option(USE_SHARED_ENET "Use shared libenet if found rather than Dolphin's soon-to-compatibly-diverge version" OFF)
+
+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")
+if(APPROVED_VENDORED_DEPENDENCIES)
+ message(WARNING "APPROVED_VENDORED_DEPENDENCIES is deprecated. Please migrate to setting USE_SYSTEM_LIBS to ON and setting USE_SYSTEM_<dependency> to either AUTO or OFF to allow bundled libs.")
+endif()
option(USE_UPNP "Enables UPnP port mapping support" ON)
option(ENABLE_NOGUI "Enable NoGUI frontend" ON)
option(ENABLE_QT "Enable Qt (Default)" ON)
@@ -158,7 +162,6 @@ list(APPEND CMAKE_MODULE_PATH
# Support functions
include(CheckAndAddFlag)
include(CheckCCompilerFlag)
-include(CheckVendoringApproved)
include(DolphinCompileDefinitions)
include(DolphinDisableWarningsMSVC)
include(DolphinLibraryTools)
@@ -586,32 +589,7 @@ if(UNIX)
endif()
if(ENABLE_SDL)
- find_package(SDL2)
-
- if(SDL2_FOUND)
- message(STATUS "Using system SDL2")
- else()
- message(STATUS "Using static SDL2 from Externals")
- option(SDL2_DISABLE_SDL2MAIN "" ON)
- option(SDL2_DISABLE_INSTALL "" ON)
- option(SDL2_DISABLE_UNINSTALL "" ON)
- set(SDL_SHARED OFF)
- set(SDL_SHARED_ENABLED_BY_DEFAULT OFF)
- set(SDL_STATIC ON)
- set(SDL_STATIC_ENABLED_BY_DEFAULT ON)
- set(SDL_TEST OFF)
- set(SDL_TEST_ENABLED_BY_DEFAULT OFF)
- set(OPT_DEF_LIBC ON)
- add_subdirectory(Externals/SDL/SDL)
- if (TARGET SDL2)
- dolphin_disable_warnings_msvc(SDL2)
- endif()
- if (TARGET SDL2-static)
- dolphin_disable_warnings_msvc(SDL2-static)
- endif()
- set(SDL2_FOUND TRUE)
- endif()
- add_definitions(-DHAVE_SDL2=1)
+ dolphin_find_optional_system_library(SDL2 Externals/SDL)
endif()
if(ENABLE_ANALYTICS)
@@ -652,14 +630,8 @@ if (_M_X86)
endif()
add_subdirectory(Externals/cpp-optparse)
-find_package(fmt 8)
-if(fmt_FOUND)
- message(STATUS "Using shared fmt ${fmt_VERSION}")
-else()
- check_vendoring_approved(fmt)
- message(STATUS "Using static fmt from Externals")
- add_subdirectory(Externals/fmt EXCLUDE_FROM_ALL)
-endif()
+dolphin_find_optional_system_library(fmt Externals/fmt 8)
+
add_subdirectory(Externals/imgui)
add_subdirectory(Externals/implot)
add_subdirectory(Externals/glslang)
@@ -687,111 +659,30 @@ if(NOT WIN32 OR (NOT (CMAKE_SYSTEM_PROCESSOR STREQUAL "aarch64")))
add_definitions(-DHAS_OPENGL)
endif()
-find_package(pugixml)
-if(NOT pugixml_FOUND)
- check_vendoring_approved(pugixml)
- message(STATUS "Using static pugixml from Externals")
- add_subdirectory(Externals/pugixml)
-endif()
-
-if(USE_SHARED_ENET)
- check_lib(ENET libenet enet enet/enet.h QUIET)
- include(CheckSymbolExists)
- if (ENET_FOUND)
- set(CMAKE_REQUIRED_INCLUDES ${ENET_INCLUDE_DIRS})
- # hack: LDFLAGS already contains -lenet but all flags but the first are
- # dropped; ugh, cmake
- set(CMAKE_REQUIRED_FLAGS ${ENET_LDFLAGS})
- set(CMAKE_REQUIRED_LIBRARIES ${ENET_LIBRARIES})
- check_symbol_exists(enet_socket_get_address enet/enet.h ENET_HAVE_SGA)
- set(CMAKE_REQUIRED_INCLUDES)
- set(CMAKE_REQUIRED_FLAGS)
- set(CMAKE_REQUIRED_LIBRARIES)
- if (NOT ENET_HAVE_SGA)
- # enet is too old
- set(ENET_FOUND FALSE)
- endif()
- endif()
-endif()
-if (ENET_FOUND)
- message(STATUS "Using shared enet")
-else()
- check_vendoring_approved(enet)
- message(STATUS "Using static enet from Externals")
- include_directories(Externals/enet/include)
- add_subdirectory(Externals/enet)
-endif()
+dolphin_find_optional_system_library(pugixml Externals/pugixml)
+
+dolphin_find_optional_system_library_pkgconfig(ENET libenet>=1.3.8 enet::enet Externals/enet)
if(NOT XXHASH_FOUND)
message(STATUS "Using static xxhash from Externals")
add_subdirectory(Externals/xxhash)
endif()
-find_package(BZip2)
-if(BZIP2_FOUND)
- message(STATUS "Using shared bzip2")
-else()
- check_vendoring_approved(bzip2)
- message(STATUS "Shared bzip2 not found, falling back to the static library")
- add_subdirectory(Externals/bzip2)
-endif()
+dolphin_find_optional_system_library(BZip2 Externals/bzip2)
-# macOS ships with liblzma.dylib but no headers, so check for the headers too
-find_package(LibLZMA)
-if(LIBLZMA_FOUND)
- # Imported target added in CMake 3.14
- dolphin_make_imported_target_if_missing(LibLZMA::LibLZMA LIBLZMA)
- message(STATUS "Using shared lzma")
-else()
- check_vendoring_approved(lzma)
- message(STATUS "Shared lzma not found, falling back to the static library")
- add_subdirectory(Externals/liblzma)
-endif()
+dolphin_find_optional_system_library(LibLZMA Externals/liblzma)
+# Imported target added in CMake 3.14
+dolphin_make_imported_target_if_missing(LibLZMA::LibLZMA LIBLZMA)
-pkg_check_modules(ZSTD QUIET libzstd>=1.4.0 IMPORTED_TARGET)
-if(ZSTD_FOUND)
- message(STATUS "Using shared zstd version: " ${ZSTD_VERSION})
- dolphin_alias_library(zstd::zstd PkgConfig::ZSTD)
-else()
- check_vendoring_approved(zstd)
- message(STATUS "Shared zstd not found, falling back to the static library")
- add_subdirectory(Externals/zstd)
-endif()
+dolphin_find_optional_system_library_pkgconfig(ZSTD libzstd>=1.4.0 zstd::zstd Externals/zstd)
add_subdirectory(Externals/zlib-ng)
-pkg_check_modules(MINIZIP minizip>=3.0.0)
-if(MINIZIP_FOUND)
- message(STATUS "Using shared minizip")
- include_directories(${MINIZIP_INCLUDE_DIRS})
-else()
- check_vendoring_approved(minizip)
- message(STATUS "Shared minizip not found, falling back to the static library")
- add_subdirectory(Externals/minizip)
- include_directories(External/minizip)
-endif()
+dolphin_find_optional_system_library_pkgconfig(MINIZIP minizip>=3.0.0 minizip::minizip Externals/minizip)
-if(NOT APPLE)
- check_lib(LZO "(no .pc for lzo2)" lzo2 lzo/lzo1x.h QUIET)
-endif()
-if(LZO_FOUND)
- message(STATUS "Using shared lzo")
-else()
- check_vendoring_approved(lzo)
- message(STATUS "Using static lzo from Externals")
- add_subdirectory(Externals/LZO)
- set(LZO lzo2)
-endif()
+dolphin_find_optional_system_library(LZO Externals/LZO)
-pkg_check_modules(pc_spng IMPORTED_TARGET spng)
-if (pc_spng_FOUND AND TARGET PkgConfig::pc_spng)
- message(STATUS "Using the system libspng")
- set(spng_target PkgConfig::pc_spng)
-else()
- message(STATUS "Using static libspng from Externals")
- add_subdirectory(Externals/libspng)
- set(spng_target spng)
-endif()
+dolphin_find_optional_system_library_pkgconfig(SPNG spng spng::spng Externals/libspng)
# Using static FreeSurround from Externals
# There is no system FreeSurround library.
@@ -809,105 +700,33 @@ endif()
add_subdirectory(Externals/soundtouch)
include_directories(Externals/soundtouch)
-find_package(CUBEB)
-if(CUBEB_FOUND)
- message(STATUS "Using the system cubeb")
-else()
- check_vendoring_approved(cubeb)
- message(STATUS "Using static cubeb from Externals")
- add_subdirectory(Externals/cubeb EXCLUDE_FROM_ALL)
-endif()
+dolphin_find_optional_system_library(CUBEB Externals/cubeb)
if(NOT ANDROID)
+ dolphin_find_optional_system_library(LibUSB Externals/libusb)
add_definitions(-D__LIBUSB__)
- if(NOT APPLE)
- find_package(LibUSB)
- endif()
- if(LIBUSB_FOUND AND NOT APPLE)
- message(STATUS "Using shared LibUSB")
- include_directories(${LIBUSB_INCLUDE_DIR})
- else()
- check_vendoring_approved(libusb)
- message(STATUS "Using static LibUSB from Externals")
- add_subdirectory(Externals/libusb)
- set(LIBUSB_LIBRARIES usb)
- endif()
- set(LIBUSB_FOUND true)
endif()
-set(SFML_REQD_VERSION 2.1)
-if(NOT APPLE)
- find_package(SFML ${SFML_REQD_VERSION} COMPONENTS network system)
-endif()
-if(SFML_FOUND)
- message(STATUS "Using shared SFML")
-else()
- check_vendoring_approved(sfml)
- message(STATUS "Using static SFML ${SFML_REQD_VERSION} from Externals")
- add_definitions(-DSFML_STATIC)
- add_subdirectory(Externals/SFML)
- include_directories(BEFORE Externals/SFML/include)
-endif()
+dolphin_find_optional_system_library(SFML Externals/SFML 2.1 COMPONENTS network system)
if(USE_UPNP)
- if(NOT APPLE)
- find_package(MINIUPNPC)
- endif()
- if(MINIUPNPC_FOUND AND MINIUPNPC_API_VERSION GREATER 8)
- message(STATUS "Using shared miniupnpc")
- else()
- check_vendoring_approved(miniupnpc)
- message(STATUS "Using static miniupnpc from Externals")
- add_subdirectory(Externals/miniupnpc)
- endif()
+ dolphin_find_optional_system_library(MINIUPNPC Externals/miniupnpc 1.6)
add_definitions(-DUSE_UPNP)
endif()
-if(NOT APPLE)
- find_package(MBEDTLS)
-endif()
-if(MBEDTLS_FOUND)
- message(STATUS "Using shared mbed TLS")
- include_directories(${MBEDTLS_INCLUDE_DIRS})
-else()
- check_vendoring_approved(mbedtls)
- message(STATUS "Using static mbed TLS from Externals")
- set(MBEDTLS_LIBRARIES mbedtls mbedcrypto mbedx509)
- add_subdirectory(Externals/mbedtls/ EXCLUDE_FROM_ALL)
- include_directories(Externals/mbedtls/include)
-endif()
+dolphin_find_optional_system_library(MBEDTLS Externals/mbedtls 2.28)
-find_package(CURL)
-if(CURL_FOUND)
- message(STATUS "Using shared libcurl")
- include_directories(${CURL_INCLUDE_DIRS})
-else()
- check_vendoring_approved(curl)
- message(STATUS "Using static libcurl from Externals")
- add_subdirectory(Externals/curl)
- set(CURL_LIBRARIES curl)
- include_directories(BEFORE Externals/curl/include)
-endif()
+dolphin_find_optional_system_library(CURL Externals/curl)
if(NOT ANDROID)
- find_package(Iconv)
-endif()
-
-if(TARGET Iconv::Iconv)
- message(STATUS "Using shared iconv")
+ dolphin_find_optional_system_library(Iconv Externals/libiconv-1.14)
else()
- check_vendoring_approved(iconv)
message(STATUS "Using static iconv from Externals")
- add_subdirectory(Externals/libiconv-1.14)
+ add_subdirectory(Externals/libiconv-1.14 EXCLUDE_FROM_ALL)
endif()
if(NOT ANDROID)
- find_package(HIDAPI)
- if(NOT HIDAPI_FOUND)
- check_vendoring_approved(hidapi)
- message(STATUS "Using static HIDAPI from Externals")
- add_subdirectory(Externals/hidapi EXCLUDE_FROM_ALL)
- endif()
+ dolphin_find_optional_system_library(HIDAPI Externals/hidapi)
endif()
if(USE_DISCORD_PRESENCE)
@@ -920,11 +739,7 @@ if(NOT ENABLE_QT)
set(USE_MGBA 0)
endif()
if(USE_MGBA)
- find_package(LIBMGBA)
- if(NOT LIBMGBA_FOUND)
- message(STATUS "Using static libmgba from Externals")
- add_subdirectory(Externals/mGBA)
- endif()
+ dolphin_find_optional_system_library(LIBMGBA Externals/mGBA)
endif()
find_package(SYSTEMD)