While maintaining the OpenCL repository CMake and CI scripts I came across an issue I can’t untangle.
When building one of the components (OpenCL-ICD-Loader) that relies on another (OpenCL-Headers) I first build the dependency and install it designating some CMAKE_INSTALL_PREFIX
.
cmake -G "Visual Studio 16 2019" -A %BIN% -T v140 -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_EXTENSIONS=ON -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%/external/OpenCL-Headers/install -S %GITHUB_WORKSPACE%/external/OpenCL-Headers -B %GITHUB_WORKSPACE%/external/OpenCL-Headers/build
# Invoke install
...
-- Installing: D:/a/OpenCL-ICD-Loader/OpenCL-ICD-Loader/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake
-- Installing: D:/a/OpenCL-ICD-Loader/OpenCL-ICD-Loader/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersConfig.cmake
-- Installing: D:/a/OpenCL-ICD-Loader/OpenCL-ICD-Loader/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersConfigVersion.cmake
So far so good. After that I configure my component and provide the location of the header package using the very same location I used for installation and feeding it to CMAKE_PREFIX_PATH
.
I try finding the package like this:
find_package(OpenCLHeaders)
if (TARGET OpenCL::Headers)
target_link_libraries (OpenCL PUBLIC OpenCL::Headers)
else ()
# Uninteresting fallback mechanism
endif ()
This all works flawlessly locally.
C:\Kellekek\Kitware\CMake\3.19.0-rc2\bin\cmake.exe --debug-find -G "Visual Studio 16 2019" -A x64 -T v142 -D BUILD_TESTING=ON -D CMAKE_PREFIX_PATH=C:/Users/mate/Source/Repos/OpenCL-Headers/.vscode/install -S ../.. -B .
...
CMake Debug Log at CMakeLists.txt:121 (find_package):
find_package considered the following paths for OpenCLHeaders.cmake
...
CMAKE_PREFIX_PATH variable [CMAKE_FIND_USE_CMAKE_PATH].
C:/Users/mate/Source/Repos/OpenCL-Headers/.vscode/install
..
find_package considered the following locations for the Config module:
C:/Users/mate/Source/Repos/OpenCL-Headers/.vscode/install/OpenCLHeadersConfig.cmake
C:/Users/mate/Source/Repos/OpenCL-Headers/.vscode/install/openclheaders-config.cmake
C:/Users/mate/Source/Repos/OpenCL-Headers/.vscode/install/share/cmake/OpenCLHeaders/OpenCLHeadersConfig.cmake
The file was found at
C:/Users/mate/Source/Repos/OpenCL-Headers/.vscode/install/share/cmake/OpenCLHeaders/OpenCLHeadersConfig.cmake
However the same when invoked in GitHub Actions on a GitHub hosted Windows runner spews out hordes of paths I never provided, but not the one I gave in CMAKE_PREFIX_PATH
:
cmake --debug-find -G "Visual Studio 16 2019" -A %BIN% -T v140 -D BUILD_TESTING=ON -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_EXTENSIONS=ON -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%/install -D CMAKE_PREFIX_PATH=%GITHUB_WORKSPACE%/external/OpenCL-Headers/install -S %GITHUB_WORKSPACE% -B %GITHUB_WORKSPACE%/build
...
CMAKE_PREFIX_PATH variable [CMAKE_FIND_USE_CMAKE_PATH].
D:/a/OpenCL-ICD-Loader/OpenCL-ICD-Loader/external/OpenCL-Headers/install
...
find_package considered the following locations for the Config module:
C:/Program Files/MongoDB/Server/4.4/OpenCLHeadersConfig.cmake
C:/Program Files/MongoDB/Server/4.4/openclheaders-config.cmake
C:/aliyun-cli/OpenCLHeadersConfig.cmake
C:/aliyun-cli/openclheaders-config.cmake
C:/ProgramData/kind/OpenCLHeadersConfig.cmake
C:/ProgramData/kind/openclheaders-config.cmake
C:/vcpkg/OpenCLHeadersConfig.cmake
C:/vcpkg/openclheaders-config.cmake
C:/cf-cli/OpenCLHeadersConfig.cmake
C:/cf-cli/openclheaders-config.cmake
...
On a slightly related note I don’t know why this works locally in the first place as the docs suggest that <prefix>/(lib/<arch>|lib*|share)/cmake/<name>*/ (U)
is only searched on Unix-like OS-es, however the issue here is likely something else. Why is my CMAKE_PREFIX_PATH
not being searched in the GitHub Actions case?