externals: Use shared libraries if possible
This is mostly done by pkgconfig. I've focused on the larger and more stable libraries.
This commit is contained in:
		
							
								
								
									
										46
									
								
								externals/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										46
									
								
								externals/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							| @@ -3,13 +3,27 @@ | |||||||
| set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules) | set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules) | ||||||
| include(DownloadExternals) | include(DownloadExternals) | ||||||
|  |  | ||||||
|  | # pkgconfig -- it is used to find shared libraries without cmake modules on linux systems | ||||||
|  | find_package(PkgConfig) | ||||||
|  | if (NOT PkgConfig_FOUND) | ||||||
|  |     function(pkg_check_modules) | ||||||
|  |         # STUB | ||||||
|  |     endfunction() | ||||||
|  | endif() | ||||||
|  |  | ||||||
| # Catch | # Catch | ||||||
| add_library(catch-single-include INTERFACE) | add_library(catch-single-include INTERFACE) | ||||||
| target_include_directories(catch-single-include INTERFACE catch/single_include) | target_include_directories(catch-single-include INTERFACE catch/single_include) | ||||||
|  |  | ||||||
| # libfmt | # libfmt | ||||||
|  | pkg_check_modules(FMT IMPORTED_TARGET GLOBAL fmt>=6.1.0) | ||||||
|  | if (FMT_FOUND) | ||||||
|  |     add_library(fmt::fmt ALIAS PkgConfig::FMT) | ||||||
|  | else() | ||||||
|  |     message(STATUS "fmt 6.1.0 or newer not found, falling back to externals") | ||||||
|     add_subdirectory(fmt) |     add_subdirectory(fmt) | ||||||
|     add_library(fmt::fmt ALIAS fmt) |     add_library(fmt::fmt ALIAS fmt) | ||||||
|  | endif() | ||||||
|  |  | ||||||
| # Dynarmic | # Dynarmic | ||||||
| if (ARCHITECTURE_x86_64) | if (ARCHITECTURE_x86_64) | ||||||
| @@ -30,9 +44,15 @@ add_subdirectory(glad) | |||||||
| add_subdirectory(inih) | add_subdirectory(inih) | ||||||
|  |  | ||||||
| # lz4 | # lz4 | ||||||
|  | pkg_check_modules(LIBLZ4 IMPORTED_TARGET GLOBAL liblz4>=1.8.0) | ||||||
|  | if (LIBLZ4_FOUND) | ||||||
|  |     add_library(lz4_static ALIAS PkgConfig::LIBLZ4) | ||||||
|  | else() | ||||||
|  |     message(STATUS "liblz4 1.8.0 or newer not found, falling back to externals") | ||||||
|     set(LZ4_BUNDLED_MODE ON) |     set(LZ4_BUNDLED_MODE ON) | ||||||
|     add_subdirectory(lz4/contrib/cmake_unofficial EXCLUDE_FROM_ALL) |     add_subdirectory(lz4/contrib/cmake_unofficial EXCLUDE_FROM_ALL) | ||||||
|     target_include_directories(lz4_static INTERFACE ./lz4/lib) |     target_include_directories(lz4_static INTERFACE ./lz4/lib) | ||||||
|  | endif() | ||||||
|  |  | ||||||
| # mbedtls | # mbedtls | ||||||
| add_subdirectory(mbedtls EXCLUDE_FROM_ALL) | add_subdirectory(mbedtls EXCLUDE_FROM_ALL) | ||||||
| @@ -47,15 +67,27 @@ add_library(unicorn-headers INTERFACE) | |||||||
| target_include_directories(unicorn-headers INTERFACE ./unicorn/include) | target_include_directories(unicorn-headers INTERFACE ./unicorn/include) | ||||||
|  |  | ||||||
| # Zstandard | # Zstandard | ||||||
|  | pkg_check_modules(LIBZSTD IMPORTED_TARGET GLOBAL libzstd>=1.3.8) | ||||||
|  | if (LIBZSTD_FOUND) | ||||||
|  |     add_library(libzstd_static ALIAS PkgConfig::LIBZSTD) | ||||||
|  | else() | ||||||
|  |     message(STATUS "libzstd 1.3.8 or newer not found, falling back to externals") | ||||||
|     add_subdirectory(zstd/build/cmake EXCLUDE_FROM_ALL) |     add_subdirectory(zstd/build/cmake EXCLUDE_FROM_ALL) | ||||||
|     target_include_directories(libzstd_static INTERFACE ./zstd/lib) |     target_include_directories(libzstd_static INTERFACE ./zstd/lib) | ||||||
|  | endif() | ||||||
|  |  | ||||||
| # SoundTouch | # SoundTouch | ||||||
| add_subdirectory(soundtouch) | add_subdirectory(soundtouch) | ||||||
|  |  | ||||||
| # Opus | # Opus | ||||||
|  | pkg_check_modules(OPUS IMPORTED_TARGET GLOBAL opus>=1.3.1) | ||||||
|  | if (OPUS_FOUND) | ||||||
|  |     add_library(opus ALIAS PkgConfig::OPUS) | ||||||
|  | else() | ||||||
|  |     message(STATUS "opus 1.3.1 or newer not found, falling back to externals") | ||||||
|     add_subdirectory(opus) |     add_subdirectory(opus) | ||||||
|     target_include_directories(opus INTERFACE ./opus/include) |     target_include_directories(opus INTERFACE ./opus/include) | ||||||
|  | endif() | ||||||
|  |  | ||||||
| # Cubeb | # Cubeb | ||||||
| if(ENABLE_CUBEB) | if(ENABLE_CUBEB) | ||||||
| @@ -75,14 +107,27 @@ if (ENABLE_VULKAN) | |||||||
| endif() | endif() | ||||||
|  |  | ||||||
| # zlib | # zlib | ||||||
|  | find_package(ZLIB 1.2.11) | ||||||
|  | if (NOT ZLIB_FOUND) | ||||||
|  |     message(STATUS "zlib 1.2.11 or newer not found, falling back to externals") | ||||||
|     add_subdirectory(zlib EXCLUDE_FROM_ALL) |     add_subdirectory(zlib EXCLUDE_FROM_ALL) | ||||||
|     set(ZLIB_LIBRARIES z) |     set(ZLIB_LIBRARIES z) | ||||||
|  | endif() | ||||||
|  |  | ||||||
| # libzip | # libzip | ||||||
|  | pkg_check_modules(LIBZIP IMPORTED_TARGET GLOBAL libzip>=1.5.3) | ||||||
|  | if (LIBZIP_FOUND) | ||||||
|  |     add_library(zip ALIAS PkgConfig::LIBZIP) | ||||||
|  | else() | ||||||
|  |     message(STATUS "libzip 1.5.3 or newer not found, falling back to externals") | ||||||
|     add_subdirectory(libzip EXCLUDE_FROM_ALL) |     add_subdirectory(libzip EXCLUDE_FROM_ALL) | ||||||
|  | endif() | ||||||
|  |  | ||||||
| if (ENABLE_WEB_SERVICE) | if (ENABLE_WEB_SERVICE) | ||||||
|     # LibreSSL |     # LibreSSL | ||||||
|  |     find_package(OpenSSL COMPONENTS Crypto SSL) | ||||||
|  |     if (NOT OpenSSL_FOUND) | ||||||
|  |         message(STATUS "OpenSSL not found, falling back to externals") | ||||||
|         set(LIBRESSL_SKIP_INSTALL ON CACHE BOOL "") |         set(LIBRESSL_SKIP_INSTALL ON CACHE BOOL "") | ||||||
|         add_subdirectory(libressl EXCLUDE_FROM_ALL) |         add_subdirectory(libressl EXCLUDE_FROM_ALL) | ||||||
|         target_include_directories(ssl INTERFACE ./libressl/include) |         target_include_directories(ssl INTERFACE ./libressl/include) | ||||||
| @@ -90,6 +135,7 @@ if (ENABLE_WEB_SERVICE) | |||||||
|         get_directory_property(OPENSSL_LIBRARIES |         get_directory_property(OPENSSL_LIBRARIES | ||||||
|             DIRECTORY libressl |             DIRECTORY libressl | ||||||
|             DEFINITION OPENSSL_LIBS) |             DEFINITION OPENSSL_LIBS) | ||||||
|  |     endif() | ||||||
|  |  | ||||||
|     # lurlparser |     # lurlparser | ||||||
|     add_subdirectory(lurlparser EXCLUDE_FROM_ALL) |     add_subdirectory(lurlparser EXCLUDE_FROM_ALL) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user