diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 247e1d0..9b9c5c9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -155,30 +155,71 @@ set(BUILD_TESTING OFF CACHE BOOL "" FORCE) set(BUILD_STATIC_LIBS ON) set(BUILD_SHARED_LIBS OFF) -include(FetchContent) -include(dependencies/fetch-vendor.cmake) +# Bundled yescrypt +include(dependencies/yescrypt.cmake) -# Bundled liblzma -include(dependencies/xz.cmake) +option(IMAGER_USE_SYSTEM_DEPS "Use system libraries instead of bundled FetchContent dependencies" OFF) -# Bundled zstd -include(dependencies/zstd.cmake) +if(IMAGER_USE_SYSTEM_DEPS) + # The project normally ignores MacPorts to avoid accidental dependency + # discovery. pkg-config is deliberate in system-dependency mode. + if(APPLE) + list(REMOVE_ITEM CMAKE_IGNORE_PATH /opt/local/bin) + list(REMOVE_ITEM CMAKE_IGNORE_PATH /opt/local/lib) + list(REMOVE_ITEM CMAKE_SYSTEM_IGNORE_PATH /opt/local/bin) + list(REMOVE_ITEM CMAKE_SYSTEM_IGNORE_PATH /opt/local/lib) + endif() -# Remote nghttp2 -include(dependencies/nghttp2.cmake) + find_package(PkgConfig REQUIRED) + pkg_check_modules(LIBARCHIVE REQUIRED IMPORTED_TARGET libarchive) + pkg_check_modules(LIBUSB REQUIRED IMPORTED_TARGET libusb-1.0) + pkg_check_modules(LIBLZMA REQUIRED IMPORTED_TARGET liblzma) + pkg_check_modules(ZLIB REQUIRED IMPORTED_TARGET zlib) + pkg_check_modules(ZSTD REQUIRED IMPORTED_TARGET libzstd) -# Bundled yescrypt -include(dependencies/yescrypt.cmake) + if(APPLE) + list(APPEND CMAKE_IGNORE_PATH /opt/local/bin /opt/local/lib) + list(APPEND CMAKE_SYSTEM_IGNORE_PATH /opt/local/bin /opt/local/lib) + endif() + + set(LibArchive_LIBRARIES PkgConfig::LIBARCHIVE) + set(LibArchive_INCLUDE_DIR "${LIBARCHIVE_INCLUDE_DIRS}") + set(LIBUSB_LIBRARIES PkgConfig::LIBUSB) + set(LIBUSB_INCLUDE_DIR "${LIBUSB_INCLUDE_DIRS}") + set(LIBLZMA_LIBRARIES PkgConfig::LIBLZMA) + set(LIBLZMA_INCLUDE_DIRS "${LIBLZMA_INCLUDE_DIRS}") + set(ZLIB_LIBRARIES PkgConfig::ZLIB) + set(ZLIB_INCLUDE_DIRS "${ZLIB_INCLUDE_DIRS}") + set(ZSTD_LIBRARIES PkgConfig::ZSTD) + set(ZSTD_INCLUDE_DIR "${ZSTD_INCLUDE_DIRS}") +else() + include(FetchContent) + include(dependencies/fetch-vendor.cmake) + # Bundled liblzma + include(dependencies/xz.cmake) -# Bundled zlib -include(dependencies/zlib.cmake) + # Bundled zstd + include(dependencies/zstd.cmake) -# Bundled libarchive -include(dependencies/libarchive.cmake) + # Remote nghttp2; only required by the bundled curl build. + include(dependencies/nghttp2.cmake) + + # Bundled zlib + include(dependencies/zlib.cmake) + + # Bundled libarchive + include(dependencies/libarchive.cmake) + + # Bundled libusb (for rpiboot Compute Module support) + include(dependencies/libusb.cmake) +endif() # libcurl -if(APPLE) +if(IMAGER_USE_SYSTEM_DEPS) + find_package(CURL REQUIRED) + set(CURL_INCLUDE_DIR ${CURL_INCLUDE_DIRS}) +elseif(APPLE) # In version 8.15.0, libcurl dropped support for Secure Transport, because it # does not implement TLS 1.3. Unfortunately, there was no replacement Network.framework implementation, # so on macOS we're forced to use the macOS SDK version of libcurl, including libcurl's own OpenSSL-analogue. @@ -192,10 +233,6 @@ else() include(dependencies/curl.cmake) endif() - -# Bundled libusb (for rpiboot Compute Module support) -include(dependencies/libusb.cmake) - # Add dependencies if (APPLE) include(mac/Platform.cmake) @@ -540,7 +577,10 @@ else() include(linux/PlatformPackaging.cmake) endif() -add_dependencies(${PROJECT_NAME} zlibstatic yescrypt usb-1.0-static) +add_dependencies(${PROJECT_NAME} yescrypt) +if(NOT IMAGER_USE_SYSTEM_DEPS) + add_dependencies(${PROJECT_NAME} zlibstatic usb-1.0-static) +endif() include_directories(${CURL_INCLUDE_DIR} ${LibArchive_INCLUDE_DIR} ${LIBLZMA_INCLUDE_DIRS} ${LIBDRM_INCLUDE_DIRS} ${ZLIB_INCLUDE_DIRS} ${ZSTD_INCLUDE_DIR} ${YESCRYPT_INCLUDE_DIR} ${LIBUSB_INCLUDE_DIR}) # Link different Qt components based on build type