-
Notifications
You must be signed in to change notification settings - Fork 791
Description
When building in an offline environment, for example in a Nix sandbox or an airgapped environment, the build will try and fail to find several dependencies. Without internet access, FetchContent will always fail unless FETCHCONTENT_SOURCE_DIR_<name> is set.
@sarnex as discussed in #19347, here is a list of the dependencies I ran into and how they're currently handled:
opencl/CMakeLists.txt
ocl-icd: always uses FetchContent. There's a TODO comment for that already
ocl-headers: you can set OpenCL_HEADERS, but when I try that, it fails. (Cannot specify compile definitions for target "Headers" which is not built by this project.)
sycl/cmake/modules/FetchEmhash.cmake / xptifw/src/CMakeLists.txt
emhash: Should be able to find system install, though I haven't tested that as it isn't pre-packaged for nix
llvm/lib/SYCLLowerIR/CMakeLists.txt
vc-intrinsics: find_package is defined, but when not using that, there's seems to be two ways and I'm unsure which is preferred: adding the repo to llvm/projects/LLVM_EXTERNAL_PROJECTS, or setting LLVMGenXIntrinsics_SOURCE_DIR.
llvm/lib/SYCLNativeCPUUtils/CMakeLists.txt
oneapi-ck: you have to set NATIVECPU_OCK_USE_FETCHCONTENT=Off and OCK_SOURCE_DIR both. Sidenote, this also gives Calling FetchContent_Populate(oneapi-ck) is deprecated
llvm-spirv/CMakeLists.txt
spirv-headers: you have to set LLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR.
unified-runtime/source/common/CMakeLists.txt
unified-memory-framework: will use find_package but only if UR_USE_EXTERNAL_UMF=On is set
hdr_histogram: only used if UR_ENABLE_LATENCY_HISTOGRAM=On is set. Will always use FetchContent
unified-runtime/test/CMakeLists.txt
googletest: will always use FetchContent
This also applies to UMF (which uses FetchContent for googlebenchmark as well)
cmake/FetchLevelZero.cmake
level-zero: needs(?) to be specified via UR_LEVEL_ZERO_LOADER_LIBRARY, UR_LEVEL_ZERO_INCLUDE_DIR
compute-runtime: find_package works and is the default.
UMF
jemalloc only uses find_package on Windows, and always uses FetchContent otherwise.
I think it would be nice to have a documentation entry on these dependencies (maybe a brief section on vendored/offline builds).
Also, there's a good bit of inconsistency between these. Some packages default to find_package, some to FetchContent, some toggle based off a boolean flag (UR_USE_EXTERNAL_UMF).
Tangentially, what's the most stable way to get the git tags used (for use in an update script)? Is grepping for set(<DEP>_TAG ([a-z0-9]+)) or similar stable-ish?