From c7b1f65e598172b8078afaaae068d894f6925c19 Mon Sep 17 00:00:00 2001 From: Beatriz Navidad Vilches Date: Thu, 22 Jun 2023 16:46:44 +0000 Subject: [PATCH 01/29] Add DEB packaging --- .github/workflows/linux.yml | 154 +++++++++++++++++++++++++++--------- .gitignore | 20 ++++- CMakeLists.txt | 35 +++++--- cmake/Package.cmake | 67 ++++++++++++++++ 4 files changed, 229 insertions(+), 47 deletions(-) create mode 100644 cmake/Package.cmake diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index f301de65..8a951406 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -3,14 +3,16 @@ name: Linux on: [push, pull_request] env: - OPENCL_PKGCONFIG_PATHS: ${{ github.workspace }}/install/lib/pkgconfig:${{ github.workspace }}/external/OpenCL-Headers/install/share/pkgconfig + DEB_INSTALLATION_PATH: /usr + INSTALL_LIBDIR: lib/x86_64-linux-gnu + OPENCL_PKGCONFIG_PATHS: $DEB_INSTALLATION_PATH/INSTALL_LIBDIR/pkgconfig:${{ github.workspace }}/install/$INSTALL_LIBDIR/pkgconfig:${{ github.workspace }}/external/OpenCL-Headers/install/share/pkgconfig jobs: - tools: - runs-on: ubuntu-20.04 + runs-on: ${{ matrix.OS }} strategy: matrix: + OS : [ubuntu-20.04] CMAKE: [3.21.2] env: CMAKE_URL: https://github.com/Kitware/CMake/releases/download/v${{ matrix.CMAKE }}/cmake-${{ matrix.CMAKE }}-Linux-x86_64.tar.gz @@ -37,14 +39,15 @@ jobs: COMPILER: [gcc-7, clang-8] #gcc-8 clang-10 EXT: [ON, OFF] GEN: [Unix Makefiles] - CONFIG: [Debug, Release] + CONFIG: [Release, Release] STD: [99, 11] - BIN: [32, 64] - CMAKE: [3.1.3] #3.21.2 + BIN: [64] # Temporarily disable cross-compilation + CMAKE: [3.1.3] env: CMAKE_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cmake + CPACK_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cpack CTEST_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/ctest - OPENCL_PKGCONFIG_PATHS: /__w/OpenCL-ICD-Loader/OpenCL-ICD-Loader/install/lib/pkgconfig:/__w/OpenCL-ICD-Loader/OpenCL-ICD-Loader/external/OpenCL-Headers/install/share/pkgconfig + OPENCL_PKGCONFIG_PATHS: $DEB_INSTALLATION_PATH/$INSTALL_LIBDIR/pkgconfig:/__w/OpenCL-ICD-Loader/OpenCL-ICD-Loader/install/$INSTALL_LIBDIR/pkgconfig:/__w/OpenCL-ICD-Loader/OpenCL-ICD-Loader/external/OpenCL-Headers/install/share/pkgconfig steps: @@ -54,10 +57,13 @@ jobs: - name: Checkout OpenCL-Headers uses: actions/checkout@v3 with: - repository: KhronosGroup/OpenCL-Headers + # Change to KhronosGroup/OpenCL-Headers when PR for DEB packaging is merged + repository: StreamHPC/OpenCL-Headers path: external/OpenCL-Headers + # Remove when PR for DEB packaging is merged + ref: 58-create-deb-package - - name: Build & install OpenCL-Headers + - name: Build install & package OpenCL-Headers run: $CMAKE_EXE -G "${{matrix.GEN}}" -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} @@ -66,14 +72,20 @@ jobs: -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install + -D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH -D BUILD_TESTING=OFF -B$GITHUB_WORKSPACE/external/OpenCL-Headers/build - -H$GITHUB_WORKSPACE/external/OpenCL-Headers && + -H$GITHUB_WORKSPACE/external/OpenCL-Headers ; $CMAKE_EXE --build $GITHUB_WORKSPACE/external/OpenCL-Headers/build --target install -- - -j`nproc` + -j`nproc` ; + $CPACK_EXE + --config "$GITHUB_WORKSPACE/external/OpenCL-Headers/build/CPackConfig.cmake" + -G DEB + -C Release + -B "$GITHUB_WORKSPACE/external/OpenCL-Headers/package-deb" - name: Configure shell: bash @@ -86,7 +98,8 @@ jobs: -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install - -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install + -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install" + -D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH -B$GITHUB_WORKSPACE/build -H$GITHUB_WORKSPACE @@ -97,6 +110,14 @@ jobs: -- -j`nproc` + - name: Package DEB + shell: bash + run: $CPACK_EXE + --config "$GITHUB_WORKSPACE/build/CPackConfig.cmake" + -G DEB + -C Release + -B "$GITHUB_WORKSPACE/package-deb" + - name: Test working-directory: ${{runner.workspace}}/OpenCL-ICD-Loader/build shell: bash @@ -110,16 +131,38 @@ jobs: -- -j`nproc` + - name: Install dependencies (Package DEB) + shell: bash + run: | + dpkg -i $GITHUB_WORKSPACE/external/OpenCL-Headers/package-deb/*.deb + + - name: Consume (Package DEB) + shell: bash + run: | + dpkg -i $GITHUB_WORKSPACE/package-deb/*.deb + rm -rf $GITHUB_WORKSPACE/build + $CMAKE_EXE \ + -G "${{matrix.GEN}}" \ + -D BUILD_TESTING=ON \ + -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} \ + -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" \ + -D CMAKE_C_COMPILER=${{matrix.COMPILER}} \ + -D CMAKE_C_STANDARD=${{matrix.STD}} \ + -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} \ + -B$GITHUB_WORKSPACE/build \ + -H$GITHUB_WORKSPACE + $CMAKE_EXE --build $GITHUB_WORKSPACE/build -- -j`nproc` + - name: "Consume (standalone): Configure/Build/Test" shell: bash run: $CMAKE_EXE -G "${{matrix.GEN}}" + -D BUILD_TESTING=ON -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} - -D CMAKE_C_COMPILER=${{matrix.COMPILER}} -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" + -D CMAKE_C_COMPILER=${{matrix.COMPILER}} -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/install" -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/libOpenCLDriverStub.so -B$GITHUB_WORKSPACE/build/downstream/bare -H$GITHUB_WORKSPACE/test/pkgconfig/bare ; @@ -130,16 +173,16 @@ jobs: - name: "Consume (SDK): Configure/Build/Test" shell: bash - run: $CMAKE_EXE -E make_directory $GITHUB_WORKSPACE/install/share/cmake/OpenCL ; - echo -e "include(\"$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake\")\ninclude(\"\${CMAKE_CURRENT_LIST_DIR}/../OpenCLICDLoader/OpenCLICDLoaderTargets.cmake\")" > $GITHUB_WORKSPACE/install/share/cmake/OpenCL/OpenCLConfig.cmake ; + run: $CMAKE_EXE -E make_directory $DEB_INSTALLATION_PATH/share/cmake/OpenCL ; + echo -e "include(\"$DEB_INSTALLATION_PATH/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake\")\ninclude(\"$DEB_INSTALLATION_PATH/share/cmake/OpenCLICDLoader/OpenCLICDLoaderTargets.cmake\")" > $DEB_INSTALLATION_PATH/share/cmake/OpenCL/OpenCLConfig.cmake ; $CMAKE_EXE -G "${{matrix.GEN}}" + -D BUILD_TESTING=ON -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} - -D CMAKE_C_COMPILER=${{matrix.COMPILER}} -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" + -D CMAKE_C_COMPILER=${{matrix.COMPILER}} -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/install" -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/libOpenCLDriverStub.so -B$GITHUB_WORKSPACE/build/downstream/sdk -H$GITHUB_WORKSPACE/test/pkgconfig/sdk ; @@ -150,11 +193,11 @@ jobs: - name: Test pkg-config --cflags shell: bash - run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" + run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --cflags | grep -q "$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" - name: Test pkg-config --libs shell: bash - run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/lib -lOpenCL" + run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR -lOpenCL" - name: Consume pkg-config shell: bash @@ -173,8 +216,6 @@ jobs: - - cmake-latest: needs: [tools] runs-on: ${{ matrix.OS }} @@ -185,10 +226,11 @@ jobs: EXT: [ON, OFF] GEN: [Ninja Multi-Config] STD: [99, 11, 17] - BIN: [32, 64] + BIN: [64] # Temporarily disable cross-compilation CMAKE: [3.21.2] env: CMAKE_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cmake + CPACK_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cpack CTEST_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/ctest @@ -199,8 +241,11 @@ jobs: - name: Checkout OpenCL-Headers uses: actions/checkout@v3 with: - repository: KhronosGroup/OpenCL-Headers + # Change to KhronosGroup/OpenCL-Headers when PR for DEB packaging is merged + repository: StreamHPC/OpenCL-Headers path: external/OpenCL-Headers + # Remove when PR for DEB packaging is merged + ref: 58-create-deb-package - name: Restore CMake uses: actions/cache@v3 @@ -224,7 +269,7 @@ jobs: mv /opt/Kitware/CMake/cmake-${{ matrix.CMAKE }}-* /opt/Kitware/CMake/${{ matrix.CMAKE }} # Install Ninja only if it's the selected generator and it's not available. - - name: Build & install OpenCL-Headers + - name: Build, install & package OpenCL-Headers run: $CMAKE_EXE -G "${{matrix.GEN}}" -D CMAKE_C_FLAGS="-w -m${{matrix.BIN}}" @@ -232,15 +277,20 @@ jobs: -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install + -D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH -D BUILD_TESTING=OFF -B $GITHUB_WORKSPACE/external/OpenCL-Headers/build -S $GITHUB_WORKSPACE/external/OpenCL-Headers; - $CMAKE_EXE + sudo $CMAKE_EXE --build $GITHUB_WORKSPACE/external/OpenCL-Headers/build --target install - --config Release -- - -j`nproc` + -j`nproc` ; + sudo $CPACK_EXE + --config "$GITHUB_WORKSPACE/external/OpenCL-Headers/build/CPackConfig.cmake" + -G DEB + -C Release + -B "$GITHUB_WORKSPACE/external/OpenCL-Headers/package-deb" - name: Configure shell: bash @@ -252,7 +302,8 @@ jobs: -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install - -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install + -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install" + -D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH -B $GITHUB_WORKSPACE/build -S $GITHUB_WORKSPACE @@ -262,6 +313,14 @@ jobs: $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Release -- -j`nproc`; $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Debug -- -j`nproc` + - name: Package DEB + shell: bash + run: $CPACK_EXE + --config "$GITHUB_WORKSPACE/build/CPackConfig.cmake" + -G DEB + -C Release + -B "$GITHUB_WORKSPACE/package-deb" + - name: Test working-directory: ${{runner.workspace}}/OpenCL-ICD-Loader/build shell: bash @@ -278,15 +337,36 @@ jobs: -- -j`nproc` + - name: Install dependencies (Package DEB) + shell: bash + run: | + sudo dpkg -i $GITHUB_WORKSPACE/external/OpenCL-Headers/package-deb/*.deb + + - name: Consume (Package DEB) + shell: bash + run: | + sudo dpkg -i $GITHUB_WORKSPACE/package-deb/*.deb + rm -rf $GITHUB_WORKSPACE/build + $CMAKE_EXE \ + -G "${{matrix.GEN}}" \ + -D BUILD_TESTING=ON \ + -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" \ + -D CMAKE_C_COMPILER=${{matrix.COMPILER}} \ + -D CMAKE_C_STANDARD=${{matrix.STD}} \ + -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} \ + -B $GITHUB_WORKSPACE/build \ + -S $GITHUB_WORKSPACE + $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Debug -- -j`nproc` + $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Release -- -j`nproc` + - name: "Consume (standalone): Configure/Build/Test" shell: bash run: $CMAKE_EXE -G "${{matrix.GEN}}" - -D CMAKE_C_COMPILER=${{matrix.COMPILER}} -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" + -D CMAKE_C_COMPILER=${{matrix.COMPILER}} -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/install" -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/Release/libOpenCLDriverStub.so -B $GITHUB_WORKSPACE/build/downstream/bare -S $GITHUB_WORKSPACE/test/pkgconfig/bare; @@ -298,15 +378,15 @@ jobs: - name: "Consume (SDK): Configure/Build/Test" shell: bash - run: $CMAKE_EXE -E make_directory $GITHUB_WORKSPACE/install/share/cmake/OpenCL ; - echo -e "include(\"$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake\")\ninclude(\"\${CMAKE_CURRENT_LIST_DIR}/../OpenCLICDLoader/OpenCLICDLoaderTargets.cmake\")" > $GITHUB_WORKSPACE/install/share/cmake/OpenCL/OpenCLConfig.cmake ; + run: $CMAKE_EXE -E make_directory $DEB_INSTALLATION_PATH/share/cmake/OpenCL ; + echo -e "include(\"$DEB_INSTALLATION_PATH/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake\")\ninclude(\"$DEB_INSTALLATION_PATH/share/cmake/OpenCLICDLoader/OpenCLICDLoaderTargets.cmake\")" > $DEB_INSTALLATION_PATH/share/cmake/OpenCL/OpenCLConfig.cmake ; $CMAKE_EXE -G "${{matrix.GEN}}" - -D CMAKE_C_COMPILER=${{matrix.COMPILER}} + -D BUILD_TESTING=ON -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" + -D CMAKE_C_COMPILER=${{matrix.COMPILER}} -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/install" -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/Release/libOpenCLDriverStub.so -B $GITHUB_WORKSPACE/build/downstream/sdk -S $GITHUB_WORKSPACE/test/pkgconfig/sdk; @@ -318,11 +398,11 @@ jobs: - name: Test pkg-config --cflags shell: bash - run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" + run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --cflags | grep -q "$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" - name: Test pkg-config --libs shell: bash - run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/lib -lOpenCL" + run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR -lOpenCL" - name: Consume pkg-config shell: bash diff --git a/.gitignore b/.gitignore index 9bb7c139..3939ee71 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,22 @@ +# Build dir +[Bb]uild/ + +# Install dir +[Ii]nstall/ + +# External dir +[Ee]xternal/ + +# Package dir +[Pp]ackage[-_\s\d]*/ + +# Tackage dir +[T]esting/ + +# inc subdirs inc/CL/ inc/EGL/ inc/KHR/ -build/ + +# CMake +CMakeFiles/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 7cb30797..c0f4942a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,7 +6,7 @@ if(TARGET OpenCL) endif() project (OpenCL-ICD-Loader - VERSION 1.2 + VERSION 3.0 LANGUAGES C) find_package (Threads REQUIRED) @@ -57,6 +57,7 @@ cmake_dependent_option(ENABLE_OPENCL_LAYERINFO "Enable building cllayerinfo tool set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake") include(JoinPaths) +include(Package) include(CheckFunctionExists) check_function_exists(secure_getenv HAVE_SECURE_GETENV) @@ -118,7 +119,7 @@ endif() add_library (OpenCL::OpenCL ALIAS OpenCL) -set_target_properties (OpenCL PROPERTIES VERSION "1.2" SOVERSION "1") +set_target_properties (OpenCL PROPERTIES VERSION 1\.0\.0 SOVERSION "1") if (WIN32) target_link_libraries (OpenCL PRIVATE cfgmgr32.lib runtimeobject.lib) @@ -221,11 +222,13 @@ endif() include (GNUInstallDirs) +set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}/x86_64-linux-gnu) + install( TARGETS OpenCL EXPORT OpenCLICDLoaderTargets LIBRARY - DESTINATION ${CMAKE_INSTALL_LIBDIR} # obtained from GNUInstallDirs + DESTINATION ${INSTALL_LIBDIR} # obtained from GNUInstallDirs ) install( # FILES $ is cleanest, but is MSVC link.exe specific. LLVM's lld.exe and lld-link.exe don't support it (configure-time error) @@ -241,6 +244,7 @@ if (ENABLE_OPENCL_LAYERINFO) EXPORT OpenCLICDLoaderTargets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + COMPONENT runtime ) endif() @@ -260,10 +264,12 @@ install( FILE OpenCLICDLoaderTargets.cmake NAMESPACE OpenCL:: DESTINATION ${config_package_location} + COMPONENT runtime ) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCLICDLoader/OpenCLICDLoaderConfig.cmake DESTINATION ${config_package_location} + COMPONENT runtime ) unset(CMAKE_SIZEOF_VOID_P) @@ -276,20 +282,31 @@ write_basic_package_version_file( install( FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCLICDLoader/OpenCLICDLoaderConfigVersion.cmake DESTINATION ${config_package_location} + COMPONENT runtime ) +# Separate namelink from shared library and symlink for DEB packaging +install (TARGETS OpenCL + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + ARCHIVE DESTINATION ${INSTALL_LIBDIR} + LIBRARY DESTINATION ${INSTALL_LIBDIR} + COMPONENT runtime + NAMELINK_SKIP) + install (TARGETS OpenCL RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + ARCHIVE DESTINATION ${INSTALL_LIBDIR} + LIBRARY DESTINATION ${INSTALL_LIBDIR} + COMPONENT dev + NAMELINK_ONLY) -join_paths(OPENCL_LIBDIR_PC "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}") -join_paths(OPENCL_INCLUDEDIR_PC "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}") +join_paths(OPENCL_LIBDIR_PC "\${exec_prefix}" "${INSTALL_LIBDIR}") if (NOT MSVC) configure_file(OpenCL.pc.in OpenCL.pc @ONLY) - set(pkg_config_location ${CMAKE_INSTALL_LIBDIR}/pkgconfig) + set(pkg_config_location ${INSTALL_LIBDIR}/pkgconfig) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCL.pc - DESTINATION ${pkg_config_location}) + DESTINATION ${pkg_config_location} + COMPONENT dev) endif() diff --git a/cmake/Package.cmake b/cmake/Package.cmake new file mode 100644 index 00000000..954c7a91 --- /dev/null +++ b/cmake/Package.cmake @@ -0,0 +1,67 @@ +set(CPACK_PACKAGE_VENDOR "khronos") + +set(CPACK_DEBIAN_DESCRIPTION "Khronos OpenCL ICD Loader") + +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") + +set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md") + +if(NOT CPACK_PACKAGING_INSTALL_PREFIX) + set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") +endif() + +# DEB packaging configuration +set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_VENDOR}) + +set(CPACK_DEBIAN_PACKAGE_HOMEPAGE + "https://github.com/KhronosGroup/OpenCL-ICD-Loader") + +# Version number [epoch:]upstream_version[-debian_revision] +set(CPACK_DEBIAN_PACKAGE_VERSION "${PROJECT_VERSION}") # upstream_version +set(CPACK_DEBIAN_PACKAGE_RELEASE "1") # debian_revision (because this is a + # non-native pkg) +set(PACKAGE_VERSION_REVISION "${CPACK_DEBIAN_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_RELEASE}") + +# Get architecture +execute_process(COMMAND dpkg "--print-architecture" OUTPUT_VARIABLE CPACK_PACKAGE_ARCHITECTURE) + +########################################################## +# Components # +########################################################## + +set(CPACK_DEB_COMPONENT_INSTALL ON) +set(CPACK_COMPONENTS_ALL runtime dev) + +set(DEBIAN_FILE_NAME "ocl-icd") + +## Package runtime component +set(DEBIAN_RUNTIME_PACKAGE_SUFIX "libopencl1") +set(CPACK_DEBIAN_RUNTIME_PACKAGE_NAME + "${DEBIAN_FILE_NAME}-${DEBIAN_RUNTIME_PACKAGE_SUFIX}" + CACHE STRING "Package name" FORCE) + +# Package file name in deb format: +# _-_.deb +set(CPACK_DEBIAN_RUNTIME_FILE_NAME "${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_PACKAGE_ARCHITECTURE}.deb") + +# Dependencies +set(CPACK_DEBIAN_RUNTIME_PACKAGE_DEPENDS "libc6") + + +## Package dev component +set(DEBIAN_DEV_PACKAGE_SUFIX "opencl-dev") +set(CPACK_DEBIAN_DEV_PACKAGE_NAME + "${DEBIAN_FILE_NAME}-${DEBIAN_DEV_PACKAGE_SUFIX}" + CACHE STRING "Package name" FORCE) + +# Package file name in deb format: +# _-_.deb +set(CPACK_DEBIAN_DEV_FILE_NAME "${CPACK_DEBIAN_DEV_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_PACKAGE_ARCHITECTURE}.deb") + +# Dependencies +set(CPACK_DEBIAN_DEV_PACKAGE_DEPENDS "opencl-c-headers") +set(CPACK_COMPONENT_DEV_DEPENDS runtime) + +set(CPACK_DEBIAN_PACKAGE_DEBUG ON) + +include(CPack) From bafbeaa5f279fa9d1552886e9d2b5488eb19fbdc Mon Sep 17 00:00:00 2001 From: Beatriz Navidad Vilches Date: Thu, 6 Jul 2023 07:37:06 +0000 Subject: [PATCH 02/29] Fix MacOS workflow --- CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c0f4942a..98a67f4e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -222,7 +222,11 @@ endif() include (GNUInstallDirs) -set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}/x86_64-linux-gnu) +if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}) +else() + set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}/x86_64-linux-gnu) +endif() install( TARGETS OpenCL From 21facb37c23aa85b5740389b79ef281c5f0988d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc=20Serf=C5=91z=C5=91?= Date: Mon, 31 Jul 2023 10:25:54 +0200 Subject: [PATCH 03/29] Move linux CI to presubmit and update it --- .github/workflows/linux.yml | 3 + .github/workflows/macos.yml | 1 + .github/workflows/presubmit.yml | 238 ++++++++++++++++++++++++ .github/workflows/windows.yml | 2 + CMakeLists.txt | 35 ++-- OpenCL.pc.in | 2 +- cmake/Package.cmake | 39 ++++ test/loader_test/icd_test_match.c | 2 +- test/loader_test/main.c | 23 ++- test/loader_test/test_buffer_object.c | 2 +- test/loader_test/test_cl_runtime.c | 2 +- test/loader_test/test_clgl.c | 2 +- test/loader_test/test_create_calls.c | 4 +- test/loader_test/test_image_objects.c | 2 +- test/loader_test/test_kernel.c | 2 +- test/loader_test/test_platforms.c | 2 +- test/loader_test/test_program_objects.c | 2 +- test/loader_test/test_sampler_objects.c | 2 +- test/pkgconfig/pkgconfig.c | 2 +- 19 files changed, 319 insertions(+), 48 deletions(-) create mode 100644 .github/workflows/presubmit.yml diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 8a951406..edad25e0 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -9,6 +9,7 @@ env: jobs: tools: + if: false runs-on: ${{ matrix.OS }} strategy: matrix: @@ -31,6 +32,7 @@ jobs: run: wget -c -O ~/cmake-${{matrix.CMAKE}}-Linux-x86_64.tar.gz $CMAKE_URL cmake-minimum: + if: false runs-on: ${{ matrix.OS }} container: streamhpc/opencl-sdk-base:ubuntu-18.04-20220127 strategy: @@ -217,6 +219,7 @@ jobs: cmake-latest: + if: false needs: [tools] runs-on: ${{ matrix.OS }} strategy: diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 53fc5e7d..585a99f8 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -7,6 +7,7 @@ env: jobs: macos-gcc: + if: false #runs-on: macos-latest runs-on: macos-11 # temporary, macos-latest only supports gcc-12 strategy: diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml new file mode 100644 index 00000000..a9459437 --- /dev/null +++ b/.github/workflows/presubmit.yml @@ -0,0 +1,238 @@ +name: Presubmit + +on: [push, pull_request] + +jobs: + linux: + runs-on: ubuntu-latest + strategy: + matrix: + CMAKE: [3.26.4] + C_COMPILER: + - gcc-11 + - gcc-13 + - clang-14 + - clang-16 + BIN: [64] + CONF: + - GEN: Unix Makefiles + CONFIG: Debug + - GEN: Unix Makefiles + CONFIG: Release + - GEN: Ninja Multi-Config + CONFIG: Release + IMAGE: + - streamhpc/opencl-sdk-intelcpu:ubuntu-22.04-20230717 + include: + - CMAKE: 3.1.3 + C_COMPILER: gcc-7 + BIN: 64 + CONF: + GEN: Unix Makefiles + CONFIG: Debug + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-20.04-20230717 + - CMAKE: 3.1.3 + C_COMPILER: gcc-7 + BIN: 64 + CONF: + GEN: Unix Makefiles + CONFIG: Release + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-20.04-20230717 + - CMAKE: 3.1.3 + C_COMPILER: gcc-7 + BIN: 32 + CONF: + GEN: Unix Makefiles + CONFIG: Debug + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-20.04-20230717 + - CMAKE: 3.1.3 + C_COMPILER: gcc-7 + BIN: 32 + CONF: + GEN: Unix Makefiles + CONFIG: Release + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-20.04-20230717 + - CMAKE: 3.1.3 + C_COMPILER: clang-8 + BIN: 64 + CONF: + GEN: Unix Makefiles + CONFIG: Debug + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-22.04-20230717 + - CMAKE: 3.1.3 + C_COMPILER: clang-8 + BIN: 64 + CONF: + GEN: Unix Makefiles + CONFIG: Release + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-22.04-20230717 + - CMAKE: 3.1.3 + C_COMPILER: clang-8 + BIN: 32 + CONF: + GEN: Unix Makefiles + CONFIG: Debug + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-22.04-20230717 + - CMAKE: 3.1.3 + C_COMPILER: clang-8 + BIN: 32 + CONF: + GEN: Unix Makefiles + CONFIG: Release + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-22.04-20230717 + container: ${{matrix.IMAGE}} + env: + CMAKE_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cmake + CPACK_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cpack + CTEST_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/ctest + CC: ${{matrix.C_COMPILER}} + DEB_INSTALLATION_PATH: /usr + INSTALL_LIBDIR: lib/x86_64-linux-gnu + + steps: + - name: Checkout OpenCL-ICD-Loader + uses: actions/checkout@v3 + + - name: Checkout OpenCL-Headers + uses: actions/checkout@v3 + with: + path: external/OpenCL-Headers + # ToDo: Change to KhronosGroup/OpenCL-Headers:main + repository: StreamHPC/OpenCL-Headers + ref: update-ci + + - name: Configure, install & package OpenCL-Headers + shell: bash + run: mkdir $GITHUB_WORKSPACE/external/OpenCL-Headers/build && + cd $GITHUB_WORKSPACE/external/OpenCL-Headers/build && + $CMAKE_EXE + -G "${{matrix.CONF.GEN}}" + `if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` + -D CMAKE_C_FLAGS="-w -m${{matrix.BIN}}" + -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install + -D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH + -D BUILD_TESTING=OFF + $GITHUB_WORKSPACE/external/OpenCL-Headers && + $CMAKE_EXE + --build $GITHUB_WORKSPACE/external/OpenCL-Headers/build + --target install + -- + -j`nproc` && + $CPACK_EXE + --config "$GITHUB_WORKSPACE/external/OpenCL-Headers/build/CPackConfig.cmake" + -G DEB + -C ${{matrix.CONF.CONFIG}} + -B "$GITHUB_WORKSPACE/external/OpenCL-Headers/package-deb" + + - name: Configure + shell: bash + run: mkdir $GITHUB_WORKSPACE/build && + cd $GITHUB_WORKSPACE/build && + $CMAKE_EXE + -G "${{matrix.CONF.GEN}}" + -D BUILD_TESTING=ON + `if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` + -D CMAKE_C_FLAGS="-Wall -Wextra -Werror -pedantic -m${{matrix.BIN}}" + -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install + -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install" + -D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH + $GITHUB_WORKSPACE + + - name: Build + shell: bash + run: if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; + then + $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config ${{matrix.CONF.CONFIG}} -- -j `nproc`; + else + $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Debug; + $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Release; + fi + + - name: Test + shell: bash + working-directory: ${{runner.workspace}}/OpenCL-ICD-Loader/build + run: if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; + then + $CTEST_EXE --output-on-failure --parallel `nproc`; + else + $CTEST_EXE --output-on-failure -C Debug --parallel `nproc`; + $CTEST_EXE --output-on-failure -C Release --parallel `nproc`; + fi; + + - name: Package DEB + shell: bash + run: $CPACK_EXE + --config "$GITHUB_WORKSPACE/build/CPackConfig.cmake" + -G DEB + -C ${{matrix.CONF.CONFIG}} + -B "$GITHUB_WORKSPACE/package-deb" && + dpkg -c $GITHUB_WORKSPACE/package-deb/ocl-icd-opencl-dev_3.0-1_amd64.deb && + dpkg -c $GITHUB_WORKSPACE/package-deb/ocl-icd-libopencl1_3.0-1_amd64.deb + + - name: Consume (DEB) + shell: bash + run: dpkg -i $GITHUB_WORKSPACE/external/OpenCL-Headers/package-deb/*.deb && + dpkg -i $GITHUB_WORKSPACE/package-deb/*.deb && + mkdir $GITHUB_WORKSPACE/build_package && + cd $GITHUB_WORKSPACE/build_package && + $CMAKE_EXE + -G "${{matrix.CONF.GEN}}" + `if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` + -D CMAKE_C_FLAGS="-Wall -Wextra -Werror -pedantic -m${{matrix.BIN}}" + $GITHUB_WORKSPACE/test/pkgconfig/bare && + if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; + then + $CMAKE_EXE --build $GITHUB_WORKSPACE/build_package --config ${{matrix.CONF.CONFIG}} -- -j `nproc`; + else + $CMAKE_EXE --build $GITHUB_WORKSPACE/build_package --config Debug; + $CMAKE_EXE --build $GITHUB_WORKSPACE/build_package --config Release; + fi; + + - name: Test pkg-config (DEB) + shell: bash + # We expect no pre-processor and compile flags (--cflags) but we do expect link flags (--libs) + run: if [[ $(pkg-config OpenCL --cflags) ]]; + then + exit 1; + fi && + pkg-config OpenCL --libs | grep -q "\-lOpenCL" + + - name: Uninstall (DEB) + shell: bash + run: apt-get remove -y ocl-icd-opencl-dev ocl-icd-libopencl1 + + # - name: Re-configure for install + # shell: bash + # run: cd $GITHUB_WORKSPACE/build && + # $CMAKE_EXE -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install $GITHUB_WORKSPACE + + - name: Test install + shell: bash + run: $CMAKE_EXE --build $GITHUB_WORKSPACE/build --target install --config ${{matrix.CONF.CONFIG}} -- -j`nproc` + + - name: Consume (install) + shell: bash + run: mkdir $GITHUB_WORKSPACE/build_install && cd $GITHUB_WORKSPACE/build_install && + $CMAKE_EXE + -G "${{matrix.CONF.GEN}}" + `if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` + -D CMAKE_C_FLAGS="-Wall -Wextra -Werror -pedantic -m${{matrix.BIN}}" + -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/install + $GITHUB_WORKSPACE/test/pkgconfig/bare && + if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; + then + $CMAKE_EXE --build $GITHUB_WORKSPACE/build_install -- -j`nproc`; + else + $CMAKE_EXE --build $GITHUB_WORKSPACE/build_install --config Debug -- -j`nproc`; + $CMAKE_EXE --build $GITHUB_WORKSPACE/build_install --config Release -- -j`nproc`; + fi; + + - name: Test pkg-config (install) + shell: bash + # We expect no pre-processor and compile flags (--cflags) but we do expect link flags (--libs) + run: export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR/pkgconfig && + if [[ $(pkg-config OpenCL --cflags) ]]; + then + exit 1; + fi && + pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR \-lOpenCL" diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 407a7e29..deb9a895 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -5,6 +5,7 @@ on: [push, pull_request] jobs: tools: + if: false runs-on: windows-2022 strategy: matrix: @@ -41,6 +42,7 @@ jobs: run: Invoke-WebRequest ${env:NINJA_URL} -OutFile ~\Downloads\ninja-win.zip msvc: + if: false needs: [tools] runs-on: windows-2022 strategy: diff --git a/CMakeLists.txt b/CMakeLists.txt index 98a67f4e..cac997d8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,11 +55,19 @@ option (ENABLE_OPENCL_LAYERS "Enable OpenCL Layers" ON) include(CMakeDependentOption) cmake_dependent_option(ENABLE_OPENCL_LAYERINFO "Enable building cllayerinfo tool" ON ENABLE_OPENCL_LAYERS OFF) +include(GNUInstallDirs) + +if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}) +else() + set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}/x86_64-linux-gnu) +endif() + set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake") +include(CheckFunctionExists) include(JoinPaths) include(Package) -include(CheckFunctionExists) check_function_exists(secure_getenv HAVE_SECURE_GETENV) check_function_exists(__secure_getenv HAVE___SECURE_GETENV) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/loader/icd_cmake_config.h.in @@ -220,14 +228,6 @@ if((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME OR OPENCL_ICD_LOADER_BUILD_TESTING) add_subdirectory (test) endif() -include (GNUInstallDirs) - -if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}) -else() - set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}/x86_64-linux-gnu) -endif() - install( TARGETS OpenCL EXPORT OpenCLICDLoaderTargets @@ -268,12 +268,12 @@ install( FILE OpenCLICDLoaderTargets.cmake NAMESPACE OpenCL:: DESTINATION ${config_package_location} - COMPONENT runtime + COMPONENT dev ) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCLICDLoader/OpenCLICDLoaderConfig.cmake DESTINATION ${config_package_location} - COMPONENT runtime + COMPONENT dev ) unset(CMAKE_SIZEOF_VOID_P) @@ -286,7 +286,7 @@ write_basic_package_version_file( install( FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCLICDLoader/OpenCLICDLoaderConfigVersion.cmake DESTINATION ${config_package_location} - COMPONENT runtime + COMPONENT dev ) # Separate namelink from shared library and symlink for DEB packaging @@ -303,14 +303,3 @@ install (TARGETS OpenCL LIBRARY DESTINATION ${INSTALL_LIBDIR} COMPONENT dev NAMELINK_ONLY) - -join_paths(OPENCL_LIBDIR_PC "\${exec_prefix}" "${INSTALL_LIBDIR}") - -if (NOT MSVC) - configure_file(OpenCL.pc.in OpenCL.pc @ONLY) - set(pkg_config_location ${INSTALL_LIBDIR}/pkgconfig) - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCL.pc - DESTINATION ${pkg_config_location} - COMPONENT dev) -endif() diff --git a/OpenCL.pc.in b/OpenCL.pc.in index 1b6730c9..ef353336 100644 --- a/OpenCL.pc.in +++ b/OpenCL.pc.in @@ -1,4 +1,4 @@ -prefix=@CMAKE_INSTALL_PREFIX@ +prefix=@PKGCONFIG_PREFIX@ exec_prefix=${prefix} libdir=@OPENCL_LIBDIR_PC@ diff --git a/cmake/Package.cmake b/cmake/Package.cmake index 954c7a91..5289f946 100644 --- a/cmake/Package.cmake +++ b/cmake/Package.cmake @@ -10,6 +10,43 @@ if(NOT CPACK_PACKAGING_INSTALL_PREFIX) set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") endif() +# Configuring pkgconfig + +# We need two different instances of OpenCL.pc +# One for installing (cmake --install), which contains CMAKE_INSTALL_PREFIX as prefix +# And another for the Debian development package, which contains CPACK_PACKAGING_INSTALL_PREFIX as prefix + +join_paths(OPENCL_INCLUDEDIR_PC "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}") +join_paths(OPENCL_LIBDIR_PC "\${exec_prefix}" "${INSTALL_LIBDIR}") + +set(pkg_config_location ${INSTALL_LIBDIR}/pkgconfig) +set(PKGCONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}") +configure_file( + OpenCL.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL.pc + @ONLY) +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL.pc + DESTINATION ${pkg_config_location} + COMPONENT pkgconfig_install) + +if(NOT (CMAKE_VERSION VERSION_LESS "3.5")) + set(PKGCONFIG_PREFIX "${CPACK_PACKAGING_INSTALL_PREFIX}") + configure_file( + OpenCL.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL.pc + @ONLY) + # This install component is only needed in the Debian package + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL.pc + DESTINATION ${pkg_config_location} + COMPONENT dev + EXCLUDE_FROM_ALL) +elseif(NOT (CMAKE_INSTALL_PREFIX STREQUAL CPACK_PACKAGING_INSTALL_PREFIX)) + message(FATAL_ERROR "When using CMake version < 3.5, CPACK_PACKAGING_INSTALL_PREFIX should not be set," + " or should be the same as CMAKE_INSTALL_PREFIX") +endif() + # DEB packaging configuration set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_VENDOR}) @@ -24,6 +61,7 @@ set(PACKAGE_VERSION_REVISION "${CPACK_DEBIAN_PACKAGE_VERSION}-${CPACK_DEBIAN_PAC # Get architecture execute_process(COMMAND dpkg "--print-architecture" OUTPUT_VARIABLE CPACK_PACKAGE_ARCHITECTURE) +string(STRIP "${CPACK_PACKAGE_ARCHITECTURE}" CPACK_PACKAGE_ARCHITECTURE) ########################################################## # Components # @@ -59,6 +97,7 @@ set(CPACK_DEBIAN_DEV_PACKAGE_NAME set(CPACK_DEBIAN_DEV_FILE_NAME "${CPACK_DEBIAN_DEV_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_PACKAGE_ARCHITECTURE}.deb") # Dependencies +set(CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS ON) # Component dependencies are reflected in package relationships set(CPACK_DEBIAN_DEV_PACKAGE_DEPENDS "opencl-c-headers") set(CPACK_COMPONENT_DEV_DEPENDS runtime) diff --git a/test/loader_test/icd_test_match.c b/test/loader_test/icd_test_match.c index b70e741f..cf791814 100644 --- a/test/loader_test/icd_test_match.c +++ b/test/loader_test/icd_test_match.c @@ -6,7 +6,7 @@ #endif #include -int test_icd_match() +int test_icd_match(void) { int error = 0; char *app_log = NULL, *stub_log = NULL; diff --git a/test/loader_test/main.c b/test/loader_test/main.c index b8b73040..e10bee52 100644 --- a/test/loader_test/main.c +++ b/test/loader_test/main.c @@ -3,18 +3,17 @@ #include #include "param_struct.h" -extern int test_create_calls(); -extern int test_platforms(); -extern int test_cl_runtime(); -extern int test_kernel(); -extern int test_buffer_object(); -extern int test_program_objects(); -extern int test_image_objects(); -extern int test_sampler_objects(); -extern int test_OpenGL_share(); -extern int test_release_calls(); - -extern int test_icd_match(); +extern int test_create_calls(void); +extern int test_platforms(void); +extern int test_cl_runtime(void); +extern int test_kernel(void); +extern int test_buffer_object(void); +extern int test_program_objects(void); +extern int test_image_objects(void); +extern int test_sampler_objects(void); +extern int test_OpenGL_share(void); +extern int test_release_calls(void); +extern int test_icd_match(void); int main(int argc, char **argv) { diff --git a/test/loader_test/test_buffer_object.c b/test/loader_test/test_buffer_object.c index 38d5b902..d133875a 100644 --- a/test/loader_test/test_buffer_object.c +++ b/test/loader_test/test_buffer_object.c @@ -408,7 +408,7 @@ int test_clGetMemObjectInfo (const struct clGetMemObjectInfo_st *data) return 0; } -int test_buffer_object() +int test_buffer_object(void) { int i; for (i=0; i Date: Thu, 3 Aug 2023 08:17:40 +0000 Subject: [PATCH 04/29] Fixes for CMake < 3.15 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cac997d8..a3779e07 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -57,7 +57,7 @@ cmake_dependent_option(ENABLE_OPENCL_LAYERINFO "Enable building cllayerinfo tool include(GNUInstallDirs) -if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") +if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin" OR (CMAKE_VERSION VERSION_LESS "3.15")) set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}) else() set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}/x86_64-linux-gnu) From fbe4d40ddb0dde3c1c981ac3043f1392150d6038 Mon Sep 17 00:00:00 2001 From: Beatriz Navidad Vilches Date: Wed, 2 Aug 2023 15:12:46 +0000 Subject: [PATCH 05/29] Fixes for CMake < 3.5 --- .github/workflows/presubmit.yml | 48 +++++++++++++++------------------ cmake/Package.cmake | 38 +++++++++++++++++--------- 2 files changed, 47 insertions(+), 39 deletions(-) diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index a9459437..9a0d6f08 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -30,56 +30,56 @@ jobs: CONF: GEN: Unix Makefiles CONFIG: Debug - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-20.04-20230717 + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-18.04-20220127 - CMAKE: 3.1.3 C_COMPILER: gcc-7 BIN: 64 CONF: GEN: Unix Makefiles CONFIG: Release - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-20.04-20230717 + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-18.04-20220127 - CMAKE: 3.1.3 C_COMPILER: gcc-7 BIN: 32 CONF: GEN: Unix Makefiles CONFIG: Debug - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-20.04-20230717 + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-18.04-20220127 - CMAKE: 3.1.3 C_COMPILER: gcc-7 BIN: 32 CONF: GEN: Unix Makefiles CONFIG: Release - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-20.04-20230717 + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-18.04-20220127 - CMAKE: 3.1.3 C_COMPILER: clang-8 BIN: 64 CONF: GEN: Unix Makefiles CONFIG: Debug - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-22.04-20230717 + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-18.04-20220127 - CMAKE: 3.1.3 C_COMPILER: clang-8 BIN: 64 CONF: GEN: Unix Makefiles CONFIG: Release - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-22.04-20230717 + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-18.04-20220127 - CMAKE: 3.1.3 C_COMPILER: clang-8 BIN: 32 CONF: GEN: Unix Makefiles CONFIG: Debug - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-22.04-20230717 + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-18.04-20220127 - CMAKE: 3.1.3 C_COMPILER: clang-8 BIN: 32 CONF: GEN: Unix Makefiles CONFIG: Release - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-22.04-20230717 + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-18.04-20220127 container: ${{matrix.IMAGE}} env: CMAKE_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cmake @@ -109,8 +109,8 @@ jobs: -G "${{matrix.CONF.GEN}}" `if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` -D CMAKE_C_FLAGS="-w -m${{matrix.BIN}}" - -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install - -D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH + -D CMAKE_INSTALL_PREFIX=`if [[ "${{matrix.CMAKE}}" != "3.1.3" ]]; then echo "$GITHUB_WORKSPACE/external/OpenCL-Headers/install"; else echo "$DEB_INSTALLATION_PATH"; fi` + `if [[ "${{matrix.CMAKE}}" != "3.1.3" ]]; then echo "-D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH"; fi` -D BUILD_TESTING=OFF $GITHUB_WORKSPACE/external/OpenCL-Headers && $CMAKE_EXE @@ -133,9 +133,9 @@ jobs: -D BUILD_TESTING=ON `if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` -D CMAKE_C_FLAGS="-Wall -Wextra -Werror -pedantic -m${{matrix.BIN}}" - -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install - -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install" - -D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH + -D CMAKE_INSTALL_PREFIX=`if [[ "${{matrix.CMAKE}}" != "3.1.3" ]]; then echo "$GITHUB_WORKSPACE/install"; else echo "$DEB_INSTALLATION_PATH"; fi` + `if [[ "${{matrix.CMAKE}}" != "3.1.3" ]]; then echo "-D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH"; fi` + `if [[ "${{matrix.CMAKE}}" != "3.1.3" ]]; then echo "-D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install"; fi` $GITHUB_WORKSPACE - name: Build @@ -157,7 +157,7 @@ jobs: else $CTEST_EXE --output-on-failure -C Debug --parallel `nproc`; $CTEST_EXE --output-on-failure -C Release --parallel `nproc`; - fi; + fi - name: Package DEB shell: bash @@ -165,9 +165,7 @@ jobs: --config "$GITHUB_WORKSPACE/build/CPackConfig.cmake" -G DEB -C ${{matrix.CONF.CONFIG}} - -B "$GITHUB_WORKSPACE/package-deb" && - dpkg -c $GITHUB_WORKSPACE/package-deb/ocl-icd-opencl-dev_3.0-1_amd64.deb && - dpkg -c $GITHUB_WORKSPACE/package-deb/ocl-icd-libopencl1_3.0-1_amd64.deb + -B "$GITHUB_WORKSPACE/package-deb" - name: Consume (DEB) shell: bash @@ -186,7 +184,7 @@ jobs: else $CMAKE_EXE --build $GITHUB_WORKSPACE/build_package --config Debug; $CMAKE_EXE --build $GITHUB_WORKSPACE/build_package --config Release; - fi; + fi - name: Test pkg-config (DEB) shell: bash @@ -201,11 +199,6 @@ jobs: shell: bash run: apt-get remove -y ocl-icd-opencl-dev ocl-icd-libopencl1 - # - name: Re-configure for install - # shell: bash - # run: cd $GITHUB_WORKSPACE/build && - # $CMAKE_EXE -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install $GITHUB_WORKSPACE - - name: Test install shell: bash run: $CMAKE_EXE --build $GITHUB_WORKSPACE/build --target install --config ${{matrix.CONF.CONFIG}} -- -j`nproc` @@ -225,14 +218,17 @@ jobs: else $CMAKE_EXE --build $GITHUB_WORKSPACE/build_install --config Debug -- -j`nproc`; $CMAKE_EXE --build $GITHUB_WORKSPACE/build_install --config Release -- -j`nproc`; - fi; + fi - name: Test pkg-config (install) shell: bash # We expect no pre-processor and compile flags (--cflags) but we do expect link flags (--libs) - run: export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR/pkgconfig && + run: if [[ "${{matrix.CMAKE}}" != "3.1.3" ]]; + then + export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR/pkgconfig; + fi && if [[ $(pkg-config OpenCL --cflags) ]]; then exit 1; fi && - pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR \-lOpenCL" + pkg-config OpenCL --libs | `if [[ "${{matrix.CMAKE}}" != "3.1.3" ]]; then grep -q "\-L$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR \-lOpenCL"; else grep -q "\-lOpenCL"; fi` diff --git a/cmake/Package.cmake b/cmake/Package.cmake index 5289f946..b682a203 100644 --- a/cmake/Package.cmake +++ b/cmake/Package.cmake @@ -21,28 +21,40 @@ join_paths(OPENCL_LIBDIR_PC "\${exec_prefix}" "${INSTALL_LIBDIR}") set(pkg_config_location ${INSTALL_LIBDIR}/pkgconfig) set(PKGCONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}") -configure_file( - OpenCL.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL.pc - @ONLY) -install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL.pc - DESTINATION ${pkg_config_location} - COMPONENT pkgconfig_install) +# Configure and install OpenCL.pc for installing the project if(NOT (CMAKE_VERSION VERSION_LESS "3.5")) - set(PKGCONFIG_PREFIX "${CPACK_PACKAGING_INSTALL_PREFIX}") configure_file( OpenCL.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL.pc + ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL.pc @ONLY) - # This install component is only needed in the Debian package + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL.pc + DESTINATION ${pkg_config_location} + COMPONENT pkgconfig_install) +endif() + +# Configure and install OpenCL.pc for the Debian package +if(NOT (CMAKE_VERSION VERSION_LESS "3.5") OR (CMAKE_INSTALL_PREFIX STREQUAL CPACK_PACKAGING_INSTALL_PREFIX)) +set(PKGCONFIG_PREFIX "${CPACK_PACKAGING_INSTALL_PREFIX}") +configure_file( + OpenCL.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL.pc + @ONLY) + + # We exclude the file from the normal installation when using CMake >= 3.5, because in that + # case we already set a separate file for it + set(EXTRA_ARGS) + if(NOT (CMAKE_VERSION VERSION_LESS "3.5")) + list(APPEND EXTRA_ARGS EXCLUDE_FROM_ALL) + endif() + install( FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL.pc DESTINATION ${pkg_config_location} COMPONENT dev - EXCLUDE_FROM_ALL) -elseif(NOT (CMAKE_INSTALL_PREFIX STREQUAL CPACK_PACKAGING_INSTALL_PREFIX)) + ${EXTRA_ARGS}) +else() message(FATAL_ERROR "When using CMake version < 3.5, CPACK_PACKAGING_INSTALL_PREFIX should not be set," " or should be the same as CMAKE_INSTALL_PREFIX") endif() From c7c46de1eccb079468985550909aac514b1b1e6d Mon Sep 17 00:00:00 2001 From: Beatriz Navidad Vilches Date: Thu, 3 Aug 2023 15:29:04 +0000 Subject: [PATCH 06/29] Remove linux.yml --- .github/workflows/linux.yml | 425 ------------------------------------ CMakeLists.txt | 10 +- 2 files changed, 4 insertions(+), 431 deletions(-) delete mode 100644 .github/workflows/linux.yml diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml deleted file mode 100644 index edad25e0..00000000 --- a/.github/workflows/linux.yml +++ /dev/null @@ -1,425 +0,0 @@ -name: Linux - -on: [push, pull_request] - -env: - DEB_INSTALLATION_PATH: /usr - INSTALL_LIBDIR: lib/x86_64-linux-gnu - OPENCL_PKGCONFIG_PATHS: $DEB_INSTALLATION_PATH/INSTALL_LIBDIR/pkgconfig:${{ github.workspace }}/install/$INSTALL_LIBDIR/pkgconfig:${{ github.workspace }}/external/OpenCL-Headers/install/share/pkgconfig - -jobs: - tools: - if: false - runs-on: ${{ matrix.OS }} - strategy: - matrix: - OS : [ubuntu-20.04] - CMAKE: [3.21.2] - env: - CMAKE_URL: https://github.com/Kitware/CMake/releases/download/v${{ matrix.CMAKE }}/cmake-${{ matrix.CMAKE }}-Linux-x86_64.tar.gz - - steps: - - name: Cache CMake - uses: actions/cache@v3 - id: cmake - env: - cache-name: cache-cmake - with: - path: ~/cmake-${{matrix.CMAKE}}-Linux-x86_64.tar.gz - key: ${{ runner.os }}-${{ env.cache-name }}-${{matrix.CMAKE}} - - name: Checkout CMake - if: steps.cmake.outputs.cache-hit != 'true' - run: wget -c -O ~/cmake-${{matrix.CMAKE}}-Linux-x86_64.tar.gz $CMAKE_URL - - cmake-minimum: - if: false - runs-on: ${{ matrix.OS }} - container: streamhpc/opencl-sdk-base:ubuntu-18.04-20220127 - strategy: - matrix: - OS: [ubuntu-20.04] - COMPILER: [gcc-7, clang-8] #gcc-8 clang-10 - EXT: [ON, OFF] - GEN: [Unix Makefiles] - CONFIG: [Release, Release] - STD: [99, 11] - BIN: [64] # Temporarily disable cross-compilation - CMAKE: [3.1.3] - env: - CMAKE_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cmake - CPACK_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cpack - CTEST_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/ctest - OPENCL_PKGCONFIG_PATHS: $DEB_INSTALLATION_PATH/$INSTALL_LIBDIR/pkgconfig:/__w/OpenCL-ICD-Loader/OpenCL-ICD-Loader/install/$INSTALL_LIBDIR/pkgconfig:/__w/OpenCL-ICD-Loader/OpenCL-ICD-Loader/external/OpenCL-Headers/install/share/pkgconfig - - - steps: - - name: Checkout OpenCL-ICD-Loader - uses: actions/checkout@v3 - - - name: Checkout OpenCL-Headers - uses: actions/checkout@v3 - with: - # Change to KhronosGroup/OpenCL-Headers when PR for DEB packaging is merged - repository: StreamHPC/OpenCL-Headers - path: external/OpenCL-Headers - # Remove when PR for DEB packaging is merged - ref: 58-create-deb-package - - - name: Build install & package OpenCL-Headers - run: $CMAKE_EXE - -G "${{matrix.GEN}}" - -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} - -D CMAKE_C_FLAGS="-w -m${{matrix.BIN}}" - -D CMAKE_C_COMPILER=${{matrix.COMPILER}} - -D CMAKE_C_STANDARD=${{matrix.STD}} - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install - -D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH - -D BUILD_TESTING=OFF - -B$GITHUB_WORKSPACE/external/OpenCL-Headers/build - -H$GITHUB_WORKSPACE/external/OpenCL-Headers ; - $CMAKE_EXE - --build $GITHUB_WORKSPACE/external/OpenCL-Headers/build - --target install - -- - -j`nproc` ; - $CPACK_EXE - --config "$GITHUB_WORKSPACE/external/OpenCL-Headers/build/CPackConfig.cmake" - -G DEB - -C Release - -B "$GITHUB_WORKSPACE/external/OpenCL-Headers/package-deb" - - - name: Configure - shell: bash - run: $CMAKE_EXE - -G "${{matrix.GEN}}" - -D BUILD_TESTING=ON - -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} - -D CMAKE_C_FLAGS="-Wall -Wextra -Werror -pedantic -m${{matrix.BIN}}" - -D CMAKE_C_COMPILER=${{matrix.COMPILER}} - -D CMAKE_C_STANDARD=${{matrix.STD}} - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install - -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install" - -D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH - -B$GITHUB_WORKSPACE/build - -H$GITHUB_WORKSPACE - - - name: Build - shell: bash - run: $CMAKE_EXE - --build $GITHUB_WORKSPACE/build - -- - -j`nproc` - - - name: Package DEB - shell: bash - run: $CPACK_EXE - --config "$GITHUB_WORKSPACE/build/CPackConfig.cmake" - -G DEB - -C Release - -B "$GITHUB_WORKSPACE/package-deb" - - - name: Test - working-directory: ${{runner.workspace}}/OpenCL-ICD-Loader/build - shell: bash - run: $CTEST_EXE --output-on-failure --parallel `nproc` - - - name: Install - shell: bash - run: $CMAKE_EXE - --build $GITHUB_WORKSPACE/build - --target install - -- - -j`nproc` - - - name: Install dependencies (Package DEB) - shell: bash - run: | - dpkg -i $GITHUB_WORKSPACE/external/OpenCL-Headers/package-deb/*.deb - - - name: Consume (Package DEB) - shell: bash - run: | - dpkg -i $GITHUB_WORKSPACE/package-deb/*.deb - rm -rf $GITHUB_WORKSPACE/build - $CMAKE_EXE \ - -G "${{matrix.GEN}}" \ - -D BUILD_TESTING=ON \ - -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} \ - -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" \ - -D CMAKE_C_COMPILER=${{matrix.COMPILER}} \ - -D CMAKE_C_STANDARD=${{matrix.STD}} \ - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} \ - -B$GITHUB_WORKSPACE/build \ - -H$GITHUB_WORKSPACE - $CMAKE_EXE --build $GITHUB_WORKSPACE/build -- -j`nproc` - - - name: "Consume (standalone): Configure/Build/Test" - shell: bash - run: $CMAKE_EXE - -G "${{matrix.GEN}}" - -D BUILD_TESTING=ON - -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} - -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" - -D CMAKE_C_COMPILER=${{matrix.COMPILER}} - -D CMAKE_C_STANDARD=${{matrix.STD}} - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/libOpenCLDriverStub.so - -B$GITHUB_WORKSPACE/build/downstream/bare - -H$GITHUB_WORKSPACE/test/pkgconfig/bare ; - $CMAKE_EXE - --build $GITHUB_WORKSPACE/build/downstream/bare ; - cd $GITHUB_WORKSPACE/build/downstream/bare ; - $CTEST_EXE --output-on-failure - - - name: "Consume (SDK): Configure/Build/Test" - shell: bash - run: $CMAKE_EXE -E make_directory $DEB_INSTALLATION_PATH/share/cmake/OpenCL ; - echo -e "include(\"$DEB_INSTALLATION_PATH/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake\")\ninclude(\"$DEB_INSTALLATION_PATH/share/cmake/OpenCLICDLoader/OpenCLICDLoaderTargets.cmake\")" > $DEB_INSTALLATION_PATH/share/cmake/OpenCL/OpenCLConfig.cmake ; - $CMAKE_EXE - -G "${{matrix.GEN}}" - -D BUILD_TESTING=ON - -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} - -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" - -D CMAKE_C_COMPILER=${{matrix.COMPILER}} - -D CMAKE_C_STANDARD=${{matrix.STD}} - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/libOpenCLDriverStub.so - -B$GITHUB_WORKSPACE/build/downstream/sdk - -H$GITHUB_WORKSPACE/test/pkgconfig/sdk ; - $CMAKE_EXE - --build $GITHUB_WORKSPACE/build/downstream/sdk ; - cd $GITHUB_WORKSPACE/build/downstream/sdk ; - $CTEST_EXE --output-on-failure - - - name: Test pkg-config --cflags - shell: bash - run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --cflags | grep -q "$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" - - - name: Test pkg-config --libs - shell: bash - run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR -lOpenCL" - - - name: Consume pkg-config - shell: bash - run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" $CMAKE_EXE - -G "${{matrix.GEN}}" - -D CMAKE_C_COMPILER=${{matrix.COMPILER}} - -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" - -D CMAKE_C_STANDARD=${{matrix.STD}} - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/libOpenCLDriverStub.so - -B$GITHUB_WORKSPACE/build/downstream/pkgconfig - -H$GITHUB_WORKSPACE/test/pkgconfig/pkgconfig ; - $CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/pkgconfig ; - cd $GITHUB_WORKSPACE/build/downstream/pkgconfig ; - $CTEST_EXE --output-on-failure - - - - cmake-latest: - if: false - needs: [tools] - runs-on: ${{ matrix.OS }} - strategy: - matrix: - OS : [ubuntu-20.04] - COMPILER: [gcc-9, gcc-11, clang-11, clang-13] - EXT: [ON, OFF] - GEN: [Ninja Multi-Config] - STD: [99, 11, 17] - BIN: [64] # Temporarily disable cross-compilation - CMAKE: [3.21.2] - env: - CMAKE_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cmake - CPACK_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cpack - CTEST_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/ctest - - - steps: - - name: Checkout OpenCL-ICD-Loader - uses: actions/checkout@v3 - - - name: Checkout OpenCL-Headers - uses: actions/checkout@v3 - with: - # Change to KhronosGroup/OpenCL-Headers when PR for DEB packaging is merged - repository: StreamHPC/OpenCL-Headers - path: external/OpenCL-Headers - # Remove when PR for DEB packaging is merged - ref: 58-create-deb-package - - - name: Restore CMake - uses: actions/cache@v3 - id: cmake - env: - cache-name: cache-cmake - with: - path: ~/cmake-${{matrix.CMAKE}}-Linux-x86_64.tar.gz - key: ${{ runner.os }}-${{ env.cache-name }}-${{matrix.CMAKE}} - - - name: Create Build Environment - run: sudo apt-get update -q; - if [[ "${{matrix.GEN}}" =~ "Ninja" && ! `which ninja` ]]; then sudo apt install -y ninja-build; fi; - if [[ "${{matrix.COMPILER}}" =~ "gcc-11" ]]; then sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test; fi; - if [[ "${{matrix.COMPILER}}" =~ "clang-13" ]]; then wget -q -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -; sudo apt-add-repository -y 'deb [arch=amd64] https://apt.llvm.org/focal/ llvm-toolchain-focal-13 main'; fi; - sudo apt install -y ${{matrix.COMPILER}}; - if [[ "${{matrix.BIN}}" == "32" && "${{matrix.COMPILER}}" =~ "gcc" ]]; then sudo apt install -y ${{matrix.COMPILER}}-multilib; fi; - if [[ "${{matrix.BIN}}" == "32" && "${{matrix.COMPILER}}" =~ "clang" ]]; then sudo apt install -y gcc-multilib ; fi; - mkdir -p /opt/Kitware/CMake; - tar -xzf ~/cmake-${{matrix.CMAKE}}-Linux-x86_64.tar.gz --directory /opt/Kitware/CMake; - mv /opt/Kitware/CMake/cmake-${{ matrix.CMAKE }}-* /opt/Kitware/CMake/${{ matrix.CMAKE }} - # Install Ninja only if it's the selected generator and it's not available. - - - name: Build, install & package OpenCL-Headers - run: $CMAKE_EXE - -G "${{matrix.GEN}}" - -D CMAKE_C_FLAGS="-w -m${{matrix.BIN}}" - -D CMAKE_C_COMPILER=${{matrix.COMPILER}} - -D CMAKE_C_STANDARD=${{matrix.STD}} - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install - -D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH - -D BUILD_TESTING=OFF - -B $GITHUB_WORKSPACE/external/OpenCL-Headers/build - -S $GITHUB_WORKSPACE/external/OpenCL-Headers; - sudo $CMAKE_EXE - --build $GITHUB_WORKSPACE/external/OpenCL-Headers/build - --target install - -- - -j`nproc` ; - sudo $CPACK_EXE - --config "$GITHUB_WORKSPACE/external/OpenCL-Headers/build/CPackConfig.cmake" - -G DEB - -C Release - -B "$GITHUB_WORKSPACE/external/OpenCL-Headers/package-deb" - - - name: Configure - shell: bash - run: $CMAKE_EXE - -G "${{matrix.GEN}}" - -D BUILD_TESTING=ON - -D CMAKE_C_FLAGS="-Wall -Wextra -Werror -pedantic -m${{matrix.BIN}}" - -D CMAKE_C_COMPILER=${{matrix.COMPILER}} - -D CMAKE_C_STANDARD=${{matrix.STD}} - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install - -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install" - -D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH - -B $GITHUB_WORKSPACE/build - -S $GITHUB_WORKSPACE - - - name: Build - shell: bash - run: | - $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Release -- -j`nproc`; - $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Debug -- -j`nproc` - - - name: Package DEB - shell: bash - run: $CPACK_EXE - --config "$GITHUB_WORKSPACE/build/CPackConfig.cmake" - -G DEB - -C Release - -B "$GITHUB_WORKSPACE/package-deb" - - - name: Test - working-directory: ${{runner.workspace}}/OpenCL-ICD-Loader/build - shell: bash - run: | - $CTEST_EXE --output-on-failure -C Release --parallel `nproc`; - $CTEST_EXE --output-on-failure -C Debug --parallel `nproc`; - - - name: Install - shell: bash - run: $CMAKE_EXE - --build $GITHUB_WORKSPACE/build - --target install - --config Release - -- - -j`nproc` - - - name: Install dependencies (Package DEB) - shell: bash - run: | - sudo dpkg -i $GITHUB_WORKSPACE/external/OpenCL-Headers/package-deb/*.deb - - - name: Consume (Package DEB) - shell: bash - run: | - sudo dpkg -i $GITHUB_WORKSPACE/package-deb/*.deb - rm -rf $GITHUB_WORKSPACE/build - $CMAKE_EXE \ - -G "${{matrix.GEN}}" \ - -D BUILD_TESTING=ON \ - -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" \ - -D CMAKE_C_COMPILER=${{matrix.COMPILER}} \ - -D CMAKE_C_STANDARD=${{matrix.STD}} \ - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} \ - -B $GITHUB_WORKSPACE/build \ - -S $GITHUB_WORKSPACE - $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Debug -- -j`nproc` - $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Release -- -j`nproc` - - - name: "Consume (standalone): Configure/Build/Test" - shell: bash - run: $CMAKE_EXE - -G "${{matrix.GEN}}" - -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" - -D CMAKE_C_COMPILER=${{matrix.COMPILER}} - -D CMAKE_C_STANDARD=${{matrix.STD}} - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/Release/libOpenCLDriverStub.so - -B $GITHUB_WORKSPACE/build/downstream/bare - -S $GITHUB_WORKSPACE/test/pkgconfig/bare; - $CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/bare --config Release; - $CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/bare --config Debug; - cd $GITHUB_WORKSPACE/build/downstream/bare; - $CTEST_EXE --output-on-failure -C Release; - $CTEST_EXE --output-on-failure -C Debug; - - - name: "Consume (SDK): Configure/Build/Test" - shell: bash - run: $CMAKE_EXE -E make_directory $DEB_INSTALLATION_PATH/share/cmake/OpenCL ; - echo -e "include(\"$DEB_INSTALLATION_PATH/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake\")\ninclude(\"$DEB_INSTALLATION_PATH/share/cmake/OpenCLICDLoader/OpenCLICDLoaderTargets.cmake\")" > $DEB_INSTALLATION_PATH/share/cmake/OpenCL/OpenCLConfig.cmake ; - $CMAKE_EXE - -G "${{matrix.GEN}}" - -D BUILD_TESTING=ON - -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" - -D CMAKE_C_COMPILER=${{matrix.COMPILER}} - -D CMAKE_C_STANDARD=${{matrix.STD}} - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/Release/libOpenCLDriverStub.so - -B $GITHUB_WORKSPACE/build/downstream/sdk - -S $GITHUB_WORKSPACE/test/pkgconfig/sdk; - $CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/sdk --config Release; - $CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/sdk --config Debug; - cd $GITHUB_WORKSPACE/build/downstream/sdk; - $CTEST_EXE --output-on-failure -C Release; - $CTEST_EXE --output-on-failure -C Debug; - - - name: Test pkg-config --cflags - shell: bash - run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --cflags | grep -q "$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" - - - name: Test pkg-config --libs - shell: bash - run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR -lOpenCL" - - - name: Consume pkg-config - shell: bash - run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" $CMAKE_EXE - -G "${{matrix.GEN}}" - -D CMAKE_C_COMPILER=${{matrix.COMPILER}} - -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" - -D CMAKE_C_STANDARD=${{matrix.STD}} - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/Release/libOpenCLDriverStub.so - -B $GITHUB_WORKSPACE/build/downstream/pkgconfig - -S $GITHUB_WORKSPACE/test/pkgconfig/pkgconfig; - $CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Release; - $CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Debug; - cd $GITHUB_WORKSPACE/build/downstream/pkgconfig; - $CTEST_EXE --output-on-failure -C Release; - $CTEST_EXE --output-on-failure -C Debug; diff --git a/CMakeLists.txt b/CMakeLists.txt index a3779e07..dac00ce5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -291,15 +291,13 @@ install( # Separate namelink from shared library and symlink for DEB packaging install (TARGETS OpenCL - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - ARCHIVE DESTINATION ${INSTALL_LIBDIR} - LIBRARY DESTINATION ${INSTALL_LIBDIR} + LIBRARY + DESTINATION ${INSTALL_LIBDIR} COMPONENT runtime NAMELINK_SKIP) install (TARGETS OpenCL - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - ARCHIVE DESTINATION ${INSTALL_LIBDIR} - LIBRARY DESTINATION ${INSTALL_LIBDIR} + LIBRARY + DESTINATION ${INSTALL_LIBDIR} COMPONENT dev NAMELINK_ONLY) From 9a37d390889f1b52e36b355bf4cb7fdfab2de769 Mon Sep 17 00:00:00 2001 From: Beatriz Navidad Vilches Date: Thu, 3 Aug 2023 12:57:25 +0000 Subject: [PATCH 07/29] Update Windows CI --- .github/workflows/presubmit.yml | 1 + .github/workflows/windows.yml | 430 ++++++++++++++++++-------------- 2 files changed, 248 insertions(+), 183 deletions(-) diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index 9a0d6f08..98bf0377 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -4,6 +4,7 @@ on: [push, pull_request] jobs: linux: + if: false runs-on: ubuntu-latest strategy: matrix: diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index deb9a895..5be5f9aa 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -3,63 +3,46 @@ name: Windows on: [push, pull_request] jobs: - - tools: - if: false + windows: runs-on: windows-2022 strategy: matrix: - CMAKE: [3.22.0] - NINJA: [1.10.2] + VER: [v141, v142, v143, clangcl] + GEN: [Visual Studio 17 2022, Ninja Multi-Config] + BIN: [x64] + exclude: + - VER: clangcl + GEN: Ninja Multi-Config + include: + - VER: v142 + GEN: Visual Studio 17 2022 + BIN: x86 env: - CMAKE_URL: https://github.com/Kitware/CMake/releases/download/v${{matrix.CMAKE}}/cmake-${{matrix.CMAKE}}-windows-x86_64.zip - NINJA_URL: https://github.com/ninja-build/ninja/releases/download/v${{matrix.NINJA}}/ninja-win.zip + NINJA_URL: https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip + NINJA_ROOT: C:\Tools\Ninja + VS_ROOT: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise' + UseMultiToolTask: true # Better parallel MSBuild execution + EnforceProcessCountAcrossBuilds: 'true' + MultiProcMaxCount: '3' steps: - - name: Cache CMake - uses: actions/cache@v3 - id: cmake - env: - cache-name: cache-cmake - with: - path: ~/Downloads/cmake-${{matrix.CMAKE}}-windows-x86_64.zip - key: ${{ runner.os }}-${{ env.cache-name }}-${{matrix.CMAKE}} - - name: Cache Ninja + - name: Cache Ninja install + if: matrix.GEN == 'Ninja Multi-Config' + id: ninja-install uses: actions/cache@v3 - id: ninja - env: - cache-name: cache-ninja with: - path: ~/Downloads/ninja-win.zip - key: ${{ runner.os }}-${{ env.cache-name }}-${{matrix.NINJA}} - - name: Checkout CMake - if: steps.cmake.outputs.cache-hit != 'true' - shell: pwsh - run: Invoke-WebRequest ${env:CMAKE_URL} -OutFile ~\Downloads\cmake-${{matrix.CMAKE}}-windows-x86_64.zip - - name: Checkout Ninja - if: steps.ninja.outputs.cache-hit != 'true' - shell: pwsh - run: Invoke-WebRequest ${env:NINJA_URL} -OutFile ~\Downloads\ninja-win.zip + path: | + C:\Tools\Ninja + key: ${{runner.os}}-ninja-${{env.NINJA_URL}} - msvc: - if: false - needs: [tools] - runs-on: windows-2022 - strategy: - matrix: - VER: [v141, v142, v143] - EXT: [ON, OFF] - GEN: [Visual Studio 17 2022, Ninja Multi-Config] - BIN: [x64, x86] - STD: [90, 11, 17] - CMAKE: [3.22.0] - NINJA: [1.10.2] - env: - CMAKE_EXE: C:\Tools\Kitware\CMake\${{matrix.CMAKE}}\bin\cmake.exe - CTEST_EXE: C:\Tools\Kitware\CMake\${{matrix.CMAKE}}\bin\ctest.exe - NINJA_EXE: C:\Tools\Ninja\ninja.exe + - name: Install Ninja + if: matrix.GEN == 'Ninja Multi-Config' && steps.ninja-install.outputs.cache-hit != 'true' + shell: pwsh + run: | + Invoke-WebRequest ${env:NINJA_URL} -OutFile ~\Downloads\ninja-win.zip + Expand-Archive ~\Downloads\ninja-win.zip -DestinationPath ${env:NINJA_ROOT}\ + Remove-Item ~\Downloads\* - steps: - name: Checkout OpenCL-ICD-Loader uses: actions/checkout@v3 @@ -69,180 +52,261 @@ jobs: repository: KhronosGroup/OpenCL-Headers path: external/OpenCL-Headers - - name: Restore CMake - uses: actions/cache@v3 - id: cmake - env: - cache-name: cache-cmake - with: - path: ~/Downloads/cmake-${{matrix.CMAKE}}-windows-x86_64.zip - key: ${{ runner.os }}-${{ env.cache-name }}-${{matrix.CMAKE}} - - - name: Restore Ninja - uses: actions/cache@v3 - id: ninja - env: - cache-name: cache-ninja - with: - path: ~/Downloads/ninja-win.zip - key: ${{ runner.os }}-${{ env.cache-name }}-${{matrix.NINJA}} - - - name: Create Build Environment - shell: pwsh - run: | - Expand-Archive ~\Downloads\cmake-${{matrix.CMAKE}}-windows-x86_64.zip -DestinationPath C:\Tools\Kitware\CMake\ - Rename-Item C:\Tools\Kitware\CMake\* ${{matrix.CMAKE}} - Expand-Archive ~\Downloads\ninja-win.zip -DestinationPath C:\Tools\Ninja\ - & ${env:CMAKE_EXE} --version - & ${env:NINJA_EXE} --version - - name: Build & install OpenCL-Headers (MSBuild) if: matrix.GEN == 'Visual Studio 17 2022' - shell: cmd + shell: pwsh run: | - set C_FLAGS="/W4 /WX" - if /I "${{matrix.BIN}}"=="x86" (set BIN=Win32) else (set BIN=x64) - %CMAKE_EXE% -G "${{matrix.GEN}}" -A %BIN% -T ${{matrix.VER}} -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%\external\OpenCL-Headers\install -D BUILD_TESTING=OFF -S %GITHUB_WORKSPACE%\external\OpenCL-Headers -B %GITHUB_WORKSPACE%\external\OpenCL-Headers\build - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/external/OpenCL-Headers/build --target install --config Release -- /verbosity:minimal /maxCpuCount /noLogo + $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} + $C_FLAGS='/W4 /WX' + & cmake ` + -G "${{matrix.GEN}}" ` + -A $BIN ` + -T ${{matrix.VER}} ` + -D BUILD_TESTING=OFF ` + -D CMAKE_C_FLAGS=$C_FLAGS ` + -D CMAKE_C_EXTENSIONS=OFF ` + -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` + -S ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers ` + -B ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build + & cmake ` + --build "${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build" ` + --target install ` + -- ` + /verbosity:minimal ` + /maxCpuCount ` + /noLogo ` - name: Build & install OpenCL-Headers (Ninja Multi-Config) if: matrix.GEN == 'Ninja Multi-Config' - shell: cmd + shell: pwsh run: | - set C_FLAGS="/W4 /WX" - if /I "${{matrix.VER}}"=="v140" (set VER=14.0) - if /I "${{matrix.VER}}"=="v141" (set VER=14.1) - if /I "${{matrix.VER}}"=="v142" (set VER=14.2) - if /I "${{matrix.VER}}"=="v143" (set VER=14.3) - call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{matrix.BIN}} /vcvars_ver=%VER% - %CMAKE_EXE% -G "${{matrix.GEN}}" -D CMAKE_MAKE_PROGRAM=%NINJA_EXE% -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%\external\OpenCL-Headers\install -D BUILD_TESTING=OFF -S %GITHUB_WORKSPACE%\external\OpenCL-Headers -B %GITHUB_WORKSPACE%\external\OpenCL-Headers\build - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/external/OpenCL-Headers/build --target install -- -j%NUMBER_OF_PROCESSORS% + $VER = switch ('${{matrix.VER}}') { ` + 'v141' {'14.1'} ` + 'v142' {'14.2'} ` + 'v143' {'14.3'} } + Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" + Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" + $C_FLAGS='/W4 /WX' + & cmake ` + -G "${{matrix.GEN}}" ` + -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` + -D BUILD_TESTING=OFF ` + -D CMAKE_C_FLAGS=$C_FLAGS ` + -D CMAKE_C_EXTENSIONS=OFF ` + -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` + -S ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers ` + -B ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build + & cmake ` + --build "${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build" ` + --target install ` + -- ` + -j ${env:NUMBER_OF_PROCESSORS} - name: Configure (MSBuild) if: matrix.GEN == 'Visual Studio 17 2022' - shell: cmd + shell: pwsh # no /WX during configuration because: - # warning C4459: declaration of 'platform' hides global declaration - # warning C4100: 'input_headers': unreferenced formal parameter + # error C2220: warning treated as error - no 'object' file generated run: | - set C_FLAGS="/W4" - if /I "${{matrix.BIN}}"=="x86" (set BIN=Win32) else (set BIN=x64) - %CMAKE_EXE% -G "${{matrix.GEN}}" -A %BIN% -T ${{matrix.VER}} -D BUILD_TESTING=ON -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%\install -D CMAKE_PREFIX_PATH=%GITHUB_WORKSPACE%\external\OpenCL-Headers\install -S %GITHUB_WORKSPACE% -B %GITHUB_WORKSPACE%\build + $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} + $C_FLAGS='/W4' + & cmake ` + -G "${{matrix.GEN}}" ` + -A $BIN ` + -T ${{matrix.VER}} ` + -D BUILD_TESTING=ON ` + -D CMAKE_C_FLAGS=$C_FLAGS ` + -D CMAKE_C_EXTENSIONS=OFF ` + -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\install ` + -D CMAKE_PREFIX_PATH=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` + -S ${env:GITHUB_WORKSPACE} ` + -B ${env:GITHUB_WORKSPACE}\build - name: Configure (Ninja Multi-Config) if: matrix.GEN == 'Ninja Multi-Config' - shell: cmd + shell: pwsh # no /WX during configuration because: - # warning C4459: declaration of 'platform' hides global declaration - # warning C4100: 'input_headers': unreferenced formal parameter + # error C2220: warning treated as error - no 'object' file generated run: | - set C_FLAGS="/W4" - if /I "${{matrix.VER}}"=="v140" (set VER=14.0) - if /I "${{matrix.VER}}"=="v141" (set VER=14.1) - if /I "${{matrix.VER}}"=="v142" (set VER=14.2) - if /I "${{matrix.VER}}"=="v143" (set VER=14.3) - call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{matrix.BIN}} /vcvars_ver=%VER% - %CMAKE_EXE% -G "${{matrix.GEN}}" -D CMAKE_MAKE_PROGRAM=%NINJA_EXE% -D BUILD_TESTING=ON -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%\install -D CMAKE_PREFIX_PATH=%GITHUB_WORKSPACE%\external\OpenCL-Headers\install -S %GITHUB_WORKSPACE% -B %GITHUB_WORKSPACE%\build + $VER = switch ('${{matrix.VER}}') { ` + 'v141' {'14.1'} ` + 'v142' {'14.2'} ` + 'v143' {'14.3'} } + Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" + Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" + $C_FLAGS='/W4' + & cmake ` + -G "${{matrix.GEN}}" ` + -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` + -D BUILD_TESTING=ON ` + -D CMAKE_C_FLAGS=$C_FLAGS ` + -D CMAKE_C_EXTENSIONS=OFF ` + -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` + -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\install ` + -D CMAKE_PREFIX_PATH=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` + -S ${env:GITHUB_WORKSPACE} ` + -B ${env:GITHUB_WORKSPACE}\build - name: Build (MSBuild) if: matrix.GEN == 'Visual Studio 17 2022' - shell: cmd + shell: pwsh run: | - %CMAKE_EXE% --build %GITHUB_WORKSPACE%\build --config Release -- /verbosity:minimal /maxCpuCount /noLogo - %CMAKE_EXE% --build %GITHUB_WORKSPACE%\build --config Debug -- /verbosity:minimal /maxCpuCount /noLogo + foreach ($Config in 'Release','Debug') { ` + & cmake ` + --build "${env:GITHUB_WORKSPACE}\build" ` + --config $Config ` + -- ` + /verbosity:minimal ` + /maxCpuCount ` + /noLogo + } - - name: Build (Ninja) + - name: Build (Ninja Multi-Config) if: matrix.GEN == 'Ninja Multi-Config' - shell: cmd + shell: pwsh run: | - if /I "${{matrix.VER}}"=="v140" set VER=14.0 - if /I "${{matrix.VER}}"=="v141" set VER=14.1 - if /I "${{matrix.VER}}"=="v142" set VER=14.2 - if /I "${{matrix.VER}}"=="v143" set VER=14.3 - call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{matrix.BIN}} /vcvars_ver=%VER% - %CMAKE_EXE% --build %GITHUB_WORKSPACE%\build --config Release - %CMAKE_EXE% --build %GITHUB_WORKSPACE%\build --config Debug + $VER = switch ('${{matrix.VER}}') { ` + 'v141' {'14.1'} ` + 'v142' {'14.2'} ` + 'v143' {'14.3'} } + Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" + Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" + foreach ($Config in 'Release','Debug') { ` + & cmake ` + --build "${env:GITHUB_WORKSPACE}\build" ` + --config $Config ` + -- ` + -j ${env:NUMBER_OF_PROCESSORS} + } - name: Test working-directory: ${{runner.workspace}}/OpenCL-ICD-Loader/build - shell: cmd + shell: pwsh run: | - if /I "${{matrix.BIN}}"=="x64" set REG=reg - if /I "${{matrix.BIN}}"=="x86" set REG=%systemroot%\Syswow64\reg.exe - %REG% ADD HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors /v %GITHUB_WORKSPACE%/build/Release/OpenCLDriverStub.dll /t REG_DWORD /d 0 - %CTEST_EXE% -C Release --output-on-failure --parallel %NUMBER_OF_PROCESSORS% - if errorlevel 1 ( - exit /b %errorlevel% - ) - %REG% DELETE HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors /v %GITHUB_WORKSPACE%/build/Release/OpenCLDriverStub.dll /f - %REG% ADD HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors /v %GITHUB_WORKSPACE%/build/Debug/OpenCLDriverStub.dll /t REG_DWORD /d 0 - %CTEST_EXE% -C Debug --output-on-failure --parallel %NUMBER_OF_PROCESSORS% - if errorlevel 1 ( - exit /b %errorlevel% - ) - %REG% DELETE HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors /v %GITHUB_WORKSPACE%/build/Debug/OpenCLDriverStub.dll /f + $REG = if('${{matrix.BIN}}' -eq 'x64') {"reg"} else {"${env:SystemRoot}\Syswow64\reg.exe"} + $KEY_NAME = "HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors" + foreach ($Config in 'Release','Debug') { + $VALUE_NAME = "${env:GITHUB_WORKSPACE}/build/$Config/OpenCLDriverStub.dll" + & $REG ADD $KEY_NAME /v $VALUE_NAME /t REG_DWORD /d 0 + ctest -C $Config --output-on-failure --parallel ${env:NUMBER_OF_PROCESSORS} + & $REG DELETE $KEY_NAME /v $VALUE_NAME /f + } - name: Install - shell: cmd + shell: pwsh run: | - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/build --config Release --target install + & cmake ` + --build "${env:GITHUB_WORKSPACE}\build" ` + --config Release ` + --target install - name: "Consume (MSBuild standalone): Configure/Build/Test" - shell: cmd + if: matrix.GEN == 'Visual Studio 17 2022' + shell: pwsh run: | - set C_FLAGS="/W4" - if /I "${{matrix.BIN}}"=="x86" (set BIN=Win32) else (set BIN=x64) - call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{matrix.BIN}} /vcvars_ver=%VER% - %CMAKE_EXE% -G "${{matrix.GEN}}" -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%\install -D CMAKE_PREFIX_PATH="%GITHUB_WORKSPACE%\external\OpenCL-Headers\install;%GITHUB_WORKSPACE%\install" -D DRIVER_STUB_PATH=%GITHUB_WORKSPACE%/build/Release/OpenCLDriverStub.dll -B %GITHUB_WORKSPACE%/build/downstream/bare -S %GITHUB_WORKSPACE%/test/pkgconfig/bare - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/test/pkgconfig/bare --config Release - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/test/pkgconfig/bare --config Debug - cd %GITHUB_WORKSPACE%/test/pkgconfig/bare - %CTEST_EXE% --output-on-failure -C Release - %CTEST_EXE% --output-on-failure -C Debug + $C_FLAGS = '/W4' + & cmake ` + -G '${{matrix.GEN}}' ` + -T ${{matrix.VER}} ` + -D CMAKE_C_FLAGS="$C_FLAGS" ` + -D CMAKE_C_EXTENSIONS=OFF ` + -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` + -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\install" ` + -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" ` + -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\bare" ` + -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" + foreach ($Config in 'Release','Debug') { ` + & cmake ` + --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" ` + --config $Config ` + & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare ` + & ctest ` + --output-on-failure -C $Config + } - - name: "Consume (MSBuild SDK): Configure/Build/Test" - shell: cmd + - name: "Consume (Ninja-Multi-Config standalone): Configure/Build/Test" + if: matrix.GEN == 'Ninja Multi-Config' + shell: pwsh run: | - set C_FLAGS="/W4" - if /I "${{matrix.BIN}}"=="x86" (set BIN=Win32) else (set BIN=x64) - %CMAKE_EXE% -E make_directory $GITHUB_WORKSPACE/install/share/cmake/OpenCL - echo -e 'include("/home/runner/work/OpenCL-ICD-Loader/OpenCL-ICD-Loader/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake")\ninclude("${CMAKE_CURRENT_LIST_DIR}/../OpenCLICDLoader/OpenCLICDLoaderTargets.cmake")' > $GITHUB_WORKSPACE/install/share/cmake/OpenCL/OpenCLConfig.cmake - %CMAKE_EXE% -G "${{matrix.GEN}}" -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%\install -D CMAKE_PREFIX_PATH="%GITHUB_WORKSPACE%\external\OpenCL-Headers\install;%GITHUB_WORKSPACE%\install" -D DRIVER_STUB_PATH=%GITHUB_WORKSPACE%/build/Release/OpenCLDriverStub.dll -B %GITHUB_WORKSPACE%/build/downstream/bare -S %GITHUB_WORKSPACE%/test/pkgconfig/bare - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/test/pkgconfig/bare --config Release - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/test/pkgconfig/bare --config Debug - cd %GITHUB_WORKSPACE%/test/pkgconfig/bare - %CTEST_EXE% --output-on-failure -C Release - %CTEST_EXE% --output-on-failure -C Debug + $VER = switch ('${{matrix.VER}}') { ` + 'v141' {'14.1'} ` + 'v142' {'14.2'} ` + 'v143' {'14.3'} } + Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" + Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" + $C_FLAGS = '/W4' + & cmake ` + -G '${{matrix.GEN}}' ` + -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` + -D CMAKE_C_FLAGS="$C_FLAGS" ` + -D CMAKE_C_EXTENSIONS=OFF ` + -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` + -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" ` + -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" ` + -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\bare" ` + -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" + foreach ($Config in 'Release','Debug') { ` + & cmake ` + --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" ` + --config $Config ` + & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare ` + & ctest ` + --output-on-failure -C $Config + } - - name: "Consume (Ninja-Multi-Config standalone): Configure/Build/Test" - shell: cmd + - name: Consume (Emulate SDK presence) + shell: pwsh run: | - set C_FLAGS="/W4" - if /I "${{matrix.VER}}"=="v140" (set VER=14.0) - if /I "${{matrix.VER}}"=="v141" (set VER=14.1) - if /I "${{matrix.VER}}"=="v142" (set VER=14.2) - if /I "${{matrix.VER}}"=="v143" (set VER=14.3) - call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" ${{matrix.BIN}} /vcvars_ver=%VER% - %CMAKE_EXE% -G "${{matrix.GEN}}" -D CMAKE_MAKE_PROGRAM=%NINJA_EXE% -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%\install -D CMAKE_PREFIX_PATH="%GITHUB_WORKSPACE%\external\OpenCL-Headers\install;%GITHUB_WORKSPACE%\install" -D DRIVER_STUB_PATH=%GITHUB_WORKSPACE%/build/Release/OpenCLDriverStub.dll -B %GITHUB_WORKSPACE%/build/downstream/bare -S %GITHUB_WORKSPACE%/test/pkgconfig/bare - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/test/pkgconfig/bare --config Release - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/test/pkgconfig/bare --config Debug - cd %GITHUB_WORKSPACE%/test/pkgconfig/bare - %CTEST_EXE% --output-on-failure -C Release - %CTEST_EXE% --output-on-failure -C Debug + New-Item -Type Directory -Path ${env:GITHUB_WORKSPACE}\install\share\cmake\OpenCL + New-Item -Type File -Path ${env:GITHUB_WORKSPACE}\install\share\cmake\OpenCL\OpenCLConfig.cmake -Value 'include("${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install\share\cmake\OpenCLHeaders\OpenCLHeadersTargets.cmake")\ninclude("${CMAKE_CURRENT_LIST_DIR}\..\OpenCLICDLoader\OpenCLICDLoaderTargets.cmake")' + + - name: "Consume (MSBuild SDK): Configure/Build/Test" + if: matrix.GEN == 'Visual Studio 17 2022' + shell: pwsh + run: | + $C_FLAGS = '/W4' + & cmake ` + -G '${{matrix.GEN}}' ` + -D CMAKE_C_FLAGS="$C_FLAGS" ` + -D CMAKE_C_EXTENSIONS=OFF ` + -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` + -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" ` + -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" ` + -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\sdk" ` + -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" + foreach ($Config in 'Release','Debug') { ` + & cmake ` + --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" ` + --config $Config ` + & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk ` + & ctest ` + --output-on-failure -C $Config + } - name: "Consume (Ninja-Multi-Config SDK): Configure/Build/Test" - shell: cmd + if: matrix.GEN == 'Ninja Multi-Config' + shell: pwsh run: | - set C_FLAGS="/W4" - if /I "${{matrix.VER}}"=="v140" (set VER=14.0) - if /I "${{matrix.VER}}"=="v141" (set VER=14.1) - if /I "${{matrix.VER}}"=="v142" (set VER=14.2) - if /I "${{matrix.VER}}"=="v143" (set VER=14.3) - %CMAKE_EXE% -E make_directory $GITHUB_WORKSPACE/install/share/cmake/OpenCL - echo -e 'include("/home/runner/work/OpenCL-ICD-Loader/OpenCL-ICD-Loader/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake")\ninclude("${CMAKE_CURRENT_LIST_DIR}/../OpenCLICDLoader/OpenCLICDLoaderTargets.cmake")' > $GITHUB_WORKSPACE/install/share/cmake/OpenCL/OpenCLConfig.cmake - %CMAKE_EXE% -G "${{matrix.GEN}}" -D CMAKE_MAKE_PROGRAM=%NINJA_EXE% -D CMAKE_C_FLAGS=%C_FLAGS% -D CMAKE_C_STANDARD=${{matrix.STD}} -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL -D CMAKE_INSTALL_PREFIX=%GITHUB_WORKSPACE%\install -D CMAKE_PREFIX_PATH="%GITHUB_WORKSPACE%\external\OpenCL-Headers\install;%GITHUB_WORKSPACE%\install" -D DRIVER_STUB_PATH=%GITHUB_WORKSPACE%/build/Release/OpenCLDriverStub.dll -B %GITHUB_WORKSPACE%/build/downstream/bare -S %GITHUB_WORKSPACE%/test/pkgconfig/bare - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/test/pkgconfig/bare --config Release - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/test/pkgconfig/bare --config Debug - cd %GITHUB_WORKSPACE%/test/pkgconfig/bare - %CTEST_EXE% --output-on-failure -C Release - %CTEST_EXE% --output-on-failure -C Debug + $VER = switch ('${{matrix.VER}}') { ` + 'v141' {'14.1'} ` + 'v142' {'14.2'} ` + 'v143' {'14.3'} } + $C_FLAGS = '/W4' + & cmake ` + -G '${{matrix.GEN}}' ` + -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` + -D CMAKE_C_FLAGS="$C_FLAGS" ` + -D CMAKE_C_EXTENSIONS=OFF ` + -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` + -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" ` + -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" ` + -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\sdk" ` + -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" + foreach ($Config in 'Release','Debug') { ` + & cmake ` + --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" ` + --config $Config ` + & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk ` + & ctest ` + --output-on-failure -C $Config + } From 13ddddf19a56f2e9a254736c21dfc61c31d6bc1f Mon Sep 17 00:00:00 2001 From: Beatriz Navidad Vilches Date: Thu, 3 Aug 2023 15:45:23 +0000 Subject: [PATCH 08/29] Migrate contents of windows.yml to presubmit.yml and delete it --- .github/workflows/presubmit.yml | 310 ++++++++++++++++++++++++++++++- .github/workflows/windows.yml | 312 -------------------------------- 2 files changed, 309 insertions(+), 313 deletions(-) delete mode 100644 .github/workflows/windows.yml diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index 98bf0377..2a25a358 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -4,7 +4,6 @@ on: [push, pull_request] jobs: linux: - if: false runs-on: ubuntu-latest strategy: matrix: @@ -233,3 +232,312 @@ jobs: exit 1; fi && pkg-config OpenCL --libs | `if [[ "${{matrix.CMAKE}}" != "3.1.3" ]]; then grep -q "\-L$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR \-lOpenCL"; else grep -q "\-lOpenCL"; fi` + + windows: + runs-on: windows-latest + needs: format + strategy: + matrix: + VER: [v141, v142, v143, clangcl] + GEN: [Visual Studio 17 2022, Ninja Multi-Config] + BIN: [x64] + exclude: + - VER: clangcl + GEN: Ninja Multi-Config + include: + - VER: v142 + GEN: Visual Studio 17 2022 + BIN: x86 + env: + NINJA_URL: https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip + NINJA_ROOT: C:\Tools\Ninja + VS_ROOT: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise' + UseMultiToolTask: true # Better parallel MSBuild execution + EnforceProcessCountAcrossBuilds: 'true' + MultiProcMaxCount: '3' + + steps: + - name: Cache Ninja install + if: matrix.GEN == 'Ninja Multi-Config' + id: ninja-install + uses: actions/cache@v3 + with: + path: | + C:\Tools\Ninja + key: ${{runner.os}}-ninja-${{env.NINJA_URL}} + + - name: Install Ninja + if: matrix.GEN == 'Ninja Multi-Config' && steps.ninja-install.outputs.cache-hit != 'true' + shell: pwsh + run: | + Invoke-WebRequest ${env:NINJA_URL} -OutFile ~\Downloads\ninja-win.zip + Expand-Archive ~\Downloads\ninja-win.zip -DestinationPath ${env:NINJA_ROOT}\ + Remove-Item ~\Downloads\* + + - name: Checkout OpenCL-ICD-Loader + uses: actions/checkout@v3 + + - name: Checkout OpenCL-Headers + uses: actions/checkout@v3 + with: + repository: KhronosGroup/OpenCL-Headers + path: external/OpenCL-Headers + + - name: Build & install OpenCL-Headers (MSBuild) + if: matrix.GEN == 'Visual Studio 17 2022' + shell: pwsh + run: | + $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} + $C_FLAGS='/W4 /WX' + & cmake ` + -G "${{matrix.GEN}}" ` + -A $BIN ` + -T ${{matrix.VER}} ` + -D BUILD_TESTING=OFF ` + -D CMAKE_C_FLAGS=$C_FLAGS ` + -D CMAKE_C_EXTENSIONS=OFF ` + -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` + -S ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers ` + -B ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build + & cmake ` + --build "${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build" ` + --target install ` + -- ` + /verbosity:minimal ` + /maxCpuCount ` + /noLogo ` + + - name: Build & install OpenCL-Headers (Ninja Multi-Config) + if: matrix.GEN == 'Ninja Multi-Config' + shell: pwsh + run: | + $VER = switch ('${{matrix.VER}}') { ` + 'v141' {'14.1'} ` + 'v142' {'14.2'} ` + 'v143' {'14.3'} } + Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" + Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" + $C_FLAGS='/W4 /WX' + & cmake ` + -G "${{matrix.GEN}}" ` + -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` + -D BUILD_TESTING=OFF ` + -D CMAKE_C_FLAGS=$C_FLAGS ` + -D CMAKE_C_EXTENSIONS=OFF ` + -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` + -S ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers ` + -B ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build + & cmake ` + --build "${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build" ` + --target install ` + -- ` + -j ${env:NUMBER_OF_PROCESSORS} + + - name: Configure (MSBuild) + if: matrix.GEN == 'Visual Studio 17 2022' + shell: pwsh + # no /WX during configuration because: + # error C2220: warning treated as error - no 'object' file generated + run: | + $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} + $C_FLAGS='/W4' + & cmake ` + -G "${{matrix.GEN}}" ` + -A $BIN ` + -T ${{matrix.VER}} ` + -D BUILD_TESTING=ON ` + -D CMAKE_C_FLAGS=$C_FLAGS ` + -D CMAKE_C_EXTENSIONS=OFF ` + -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\install ` + -D CMAKE_PREFIX_PATH=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` + -S ${env:GITHUB_WORKSPACE} ` + -B ${env:GITHUB_WORKSPACE}\build + + - name: Configure (Ninja Multi-Config) + if: matrix.GEN == 'Ninja Multi-Config' + shell: pwsh + # no /WX during configuration because: + # error C2220: warning treated as error - no 'object' file generated + run: | + $VER = switch ('${{matrix.VER}}') { ` + 'v141' {'14.1'} ` + 'v142' {'14.2'} ` + 'v143' {'14.3'} } + Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" + Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" + $C_FLAGS='/W4' + & cmake ` + -G "${{matrix.GEN}}" ` + -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` + -D BUILD_TESTING=ON ` + -D CMAKE_C_FLAGS=$C_FLAGS ` + -D CMAKE_C_EXTENSIONS=OFF ` + -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` + -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\install ` + -D CMAKE_PREFIX_PATH=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` + -S ${env:GITHUB_WORKSPACE} ` + -B ${env:GITHUB_WORKSPACE}\build + + - name: Build (MSBuild) + if: matrix.GEN == 'Visual Studio 17 2022' + shell: pwsh + run: | + foreach ($Config in 'Release','Debug') { ` + & cmake ` + --build "${env:GITHUB_WORKSPACE}\build" ` + --config $Config ` + -- ` + /verbosity:minimal ` + /maxCpuCount ` + /noLogo + } + + - name: Build (Ninja Multi-Config) + if: matrix.GEN == 'Ninja Multi-Config' + shell: pwsh + run: | + $VER = switch ('${{matrix.VER}}') { ` + 'v141' {'14.1'} ` + 'v142' {'14.2'} ` + 'v143' {'14.3'} } + Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" + Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" + foreach ($Config in 'Release','Debug') { ` + & cmake ` + --build "${env:GITHUB_WORKSPACE}\build" ` + --config $Config ` + -- ` + -j ${env:NUMBER_OF_PROCESSORS} + } + + - name: Test + working-directory: ${{runner.workspace}}/OpenCL-ICD-Loader/build + shell: pwsh + run: | + $REG = if('${{matrix.BIN}}' -eq 'x64') {"reg"} else {"${env:SystemRoot}\Syswow64\reg.exe"} + $KEY_NAME = "HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors" + foreach ($Config in 'Release','Debug') { + $VALUE_NAME = "${env:GITHUB_WORKSPACE}/build/$Config/OpenCLDriverStub.dll" + & $REG ADD $KEY_NAME /v $VALUE_NAME /t REG_DWORD /d 0 + ctest -C $Config --output-on-failure --parallel ${env:NUMBER_OF_PROCESSORS} + & $REG DELETE $KEY_NAME /v $VALUE_NAME /f + } + + - name: Install + shell: pwsh + run: | + & cmake ` + --build "${env:GITHUB_WORKSPACE}\build" ` + --config Release ` + --target install + + - name: "Consume (MSBuild standalone): Configure/Build/Test" + if: matrix.GEN == 'Visual Studio 17 2022' + shell: pwsh + run: | + $C_FLAGS = '/W4' + & cmake ` + -G '${{matrix.GEN}}' ` + -T ${{matrix.VER}} ` + -D CMAKE_C_FLAGS="$C_FLAGS" ` + -D CMAKE_C_EXTENSIONS=OFF ` + -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` + -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\install" ` + -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" ` + -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\bare" ` + -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" + foreach ($Config in 'Release','Debug') { ` + & cmake ` + --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" ` + --config $Config ` + & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare ` + & ctest ` + --output-on-failure -C $Config + } + + - name: "Consume (Ninja-Multi-Config standalone): Configure/Build/Test" + if: matrix.GEN == 'Ninja Multi-Config' + shell: pwsh + run: | + $VER = switch ('${{matrix.VER}}') { ` + 'v141' {'14.1'} ` + 'v142' {'14.2'} ` + 'v143' {'14.3'} } + Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" + Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" + $C_FLAGS = '/W4' + & cmake ` + -G '${{matrix.GEN}}' ` + -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` + -D CMAKE_C_FLAGS="$C_FLAGS" ` + -D CMAKE_C_EXTENSIONS=OFF ` + -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` + -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" ` + -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" ` + -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\bare" ` + -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" + foreach ($Config in 'Release','Debug') { ` + & cmake ` + --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" ` + --config $Config ` + & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare ` + & ctest ` + --output-on-failure -C $Config + } + + - name: Consume (Emulate SDK presence) + shell: pwsh + run: | + New-Item -Type Directory -Path ${env:GITHUB_WORKSPACE}\install\share\cmake\OpenCL + New-Item -Type File -Path ${env:GITHUB_WORKSPACE}\install\share\cmake\OpenCL\OpenCLConfig.cmake -Value 'include("${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install\share\cmake\OpenCLHeaders\OpenCLHeadersTargets.cmake")\ninclude("${CMAKE_CURRENT_LIST_DIR}\..\OpenCLICDLoader\OpenCLICDLoaderTargets.cmake")' + + - name: "Consume (MSBuild SDK): Configure/Build/Test" + if: matrix.GEN == 'Visual Studio 17 2022' + shell: pwsh + run: | + $C_FLAGS = '/W4' + & cmake ` + -G '${{matrix.GEN}}' ` + -D CMAKE_C_FLAGS="$C_FLAGS" ` + -D CMAKE_C_EXTENSIONS=OFF ` + -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` + -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" ` + -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" ` + -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\sdk" ` + -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" + foreach ($Config in 'Release','Debug') { ` + & cmake ` + --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" ` + --config $Config ` + & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk ` + & ctest ` + --output-on-failure -C $Config + } + + - name: "Consume (Ninja-Multi-Config SDK): Configure/Build/Test" + if: matrix.GEN == 'Ninja Multi-Config' + shell: pwsh + run: | + $VER = switch ('${{matrix.VER}}') { ` + 'v141' {'14.1'} ` + 'v142' {'14.2'} ` + 'v143' {'14.3'} } + $C_FLAGS = '/W4' + & cmake ` + -G '${{matrix.GEN}}' ` + -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` + -D CMAKE_C_FLAGS="$C_FLAGS" ` + -D CMAKE_C_EXTENSIONS=OFF ` + -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` + -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" ` + -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" ` + -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\sdk" ` + -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" + foreach ($Config in 'Release','Debug') { ` + & cmake ` + --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" ` + --config $Config ` + & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk ` + & ctest ` + --output-on-failure -C $Config + } diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml deleted file mode 100644 index 5be5f9aa..00000000 --- a/.github/workflows/windows.yml +++ /dev/null @@ -1,312 +0,0 @@ -name: Windows - -on: [push, pull_request] - -jobs: - windows: - runs-on: windows-2022 - strategy: - matrix: - VER: [v141, v142, v143, clangcl] - GEN: [Visual Studio 17 2022, Ninja Multi-Config] - BIN: [x64] - exclude: - - VER: clangcl - GEN: Ninja Multi-Config - include: - - VER: v142 - GEN: Visual Studio 17 2022 - BIN: x86 - env: - NINJA_URL: https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip - NINJA_ROOT: C:\Tools\Ninja - VS_ROOT: 'C:\Program Files\Microsoft Visual Studio\2022\Enterprise' - UseMultiToolTask: true # Better parallel MSBuild execution - EnforceProcessCountAcrossBuilds: 'true' - MultiProcMaxCount: '3' - - steps: - - name: Cache Ninja install - if: matrix.GEN == 'Ninja Multi-Config' - id: ninja-install - uses: actions/cache@v3 - with: - path: | - C:\Tools\Ninja - key: ${{runner.os}}-ninja-${{env.NINJA_URL}} - - - name: Install Ninja - if: matrix.GEN == 'Ninja Multi-Config' && steps.ninja-install.outputs.cache-hit != 'true' - shell: pwsh - run: | - Invoke-WebRequest ${env:NINJA_URL} -OutFile ~\Downloads\ninja-win.zip - Expand-Archive ~\Downloads\ninja-win.zip -DestinationPath ${env:NINJA_ROOT}\ - Remove-Item ~\Downloads\* - - - name: Checkout OpenCL-ICD-Loader - uses: actions/checkout@v3 - - - name: Checkout OpenCL-Headers - uses: actions/checkout@v3 - with: - repository: KhronosGroup/OpenCL-Headers - path: external/OpenCL-Headers - - - name: Build & install OpenCL-Headers (MSBuild) - if: matrix.GEN == 'Visual Studio 17 2022' - shell: pwsh - run: | - $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} - $C_FLAGS='/W4 /WX' - & cmake ` - -G "${{matrix.GEN}}" ` - -A $BIN ` - -T ${{matrix.VER}} ` - -D BUILD_TESTING=OFF ` - -D CMAKE_C_FLAGS=$C_FLAGS ` - -D CMAKE_C_EXTENSIONS=OFF ` - -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` - -S ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers ` - -B ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build - & cmake ` - --build "${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build" ` - --target install ` - -- ` - /verbosity:minimal ` - /maxCpuCount ` - /noLogo ` - - - name: Build & install OpenCL-Headers (Ninja Multi-Config) - if: matrix.GEN == 'Ninja Multi-Config' - shell: pwsh - run: | - $VER = switch ('${{matrix.VER}}') { ` - 'v141' {'14.1'} ` - 'v142' {'14.2'} ` - 'v143' {'14.3'} } - Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" - Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" - $C_FLAGS='/W4 /WX' - & cmake ` - -G "${{matrix.GEN}}" ` - -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` - -D BUILD_TESTING=OFF ` - -D CMAKE_C_FLAGS=$C_FLAGS ` - -D CMAKE_C_EXTENSIONS=OFF ` - -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` - -S ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers ` - -B ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build - & cmake ` - --build "${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build" ` - --target install ` - -- ` - -j ${env:NUMBER_OF_PROCESSORS} - - - name: Configure (MSBuild) - if: matrix.GEN == 'Visual Studio 17 2022' - shell: pwsh - # no /WX during configuration because: - # error C2220: warning treated as error - no 'object' file generated - run: | - $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} - $C_FLAGS='/W4' - & cmake ` - -G "${{matrix.GEN}}" ` - -A $BIN ` - -T ${{matrix.VER}} ` - -D BUILD_TESTING=ON ` - -D CMAKE_C_FLAGS=$C_FLAGS ` - -D CMAKE_C_EXTENSIONS=OFF ` - -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\install ` - -D CMAKE_PREFIX_PATH=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` - -S ${env:GITHUB_WORKSPACE} ` - -B ${env:GITHUB_WORKSPACE}\build - - - name: Configure (Ninja Multi-Config) - if: matrix.GEN == 'Ninja Multi-Config' - shell: pwsh - # no /WX during configuration because: - # error C2220: warning treated as error - no 'object' file generated - run: | - $VER = switch ('${{matrix.VER}}') { ` - 'v141' {'14.1'} ` - 'v142' {'14.2'} ` - 'v143' {'14.3'} } - Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" - Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" - $C_FLAGS='/W4' - & cmake ` - -G "${{matrix.GEN}}" ` - -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` - -D BUILD_TESTING=ON ` - -D CMAKE_C_FLAGS=$C_FLAGS ` - -D CMAKE_C_EXTENSIONS=OFF ` - -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` - -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\install ` - -D CMAKE_PREFIX_PATH=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` - -S ${env:GITHUB_WORKSPACE} ` - -B ${env:GITHUB_WORKSPACE}\build - - - name: Build (MSBuild) - if: matrix.GEN == 'Visual Studio 17 2022' - shell: pwsh - run: | - foreach ($Config in 'Release','Debug') { ` - & cmake ` - --build "${env:GITHUB_WORKSPACE}\build" ` - --config $Config ` - -- ` - /verbosity:minimal ` - /maxCpuCount ` - /noLogo - } - - - name: Build (Ninja Multi-Config) - if: matrix.GEN == 'Ninja Multi-Config' - shell: pwsh - run: | - $VER = switch ('${{matrix.VER}}') { ` - 'v141' {'14.1'} ` - 'v142' {'14.2'} ` - 'v143' {'14.3'} } - Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" - Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" - foreach ($Config in 'Release','Debug') { ` - & cmake ` - --build "${env:GITHUB_WORKSPACE}\build" ` - --config $Config ` - -- ` - -j ${env:NUMBER_OF_PROCESSORS} - } - - - name: Test - working-directory: ${{runner.workspace}}/OpenCL-ICD-Loader/build - shell: pwsh - run: | - $REG = if('${{matrix.BIN}}' -eq 'x64') {"reg"} else {"${env:SystemRoot}\Syswow64\reg.exe"} - $KEY_NAME = "HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors" - foreach ($Config in 'Release','Debug') { - $VALUE_NAME = "${env:GITHUB_WORKSPACE}/build/$Config/OpenCLDriverStub.dll" - & $REG ADD $KEY_NAME /v $VALUE_NAME /t REG_DWORD /d 0 - ctest -C $Config --output-on-failure --parallel ${env:NUMBER_OF_PROCESSORS} - & $REG DELETE $KEY_NAME /v $VALUE_NAME /f - } - - - name: Install - shell: pwsh - run: | - & cmake ` - --build "${env:GITHUB_WORKSPACE}\build" ` - --config Release ` - --target install - - - name: "Consume (MSBuild standalone): Configure/Build/Test" - if: matrix.GEN == 'Visual Studio 17 2022' - shell: pwsh - run: | - $C_FLAGS = '/W4' - & cmake ` - -G '${{matrix.GEN}}' ` - -T ${{matrix.VER}} ` - -D CMAKE_C_FLAGS="$C_FLAGS" ` - -D CMAKE_C_EXTENSIONS=OFF ` - -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` - -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\install" ` - -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" ` - -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\bare" ` - -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" - foreach ($Config in 'Release','Debug') { ` - & cmake ` - --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" ` - --config $Config ` - & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare ` - & ctest ` - --output-on-failure -C $Config - } - - - name: "Consume (Ninja-Multi-Config standalone): Configure/Build/Test" - if: matrix.GEN == 'Ninja Multi-Config' - shell: pwsh - run: | - $VER = switch ('${{matrix.VER}}') { ` - 'v141' {'14.1'} ` - 'v142' {'14.2'} ` - 'v143' {'14.3'} } - Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" - Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" - $C_FLAGS = '/W4' - & cmake ` - -G '${{matrix.GEN}}' ` - -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` - -D CMAKE_C_FLAGS="$C_FLAGS" ` - -D CMAKE_C_EXTENSIONS=OFF ` - -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` - -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" ` - -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" ` - -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\bare" ` - -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" - foreach ($Config in 'Release','Debug') { ` - & cmake ` - --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" ` - --config $Config ` - & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare ` - & ctest ` - --output-on-failure -C $Config - } - - - name: Consume (Emulate SDK presence) - shell: pwsh - run: | - New-Item -Type Directory -Path ${env:GITHUB_WORKSPACE}\install\share\cmake\OpenCL - New-Item -Type File -Path ${env:GITHUB_WORKSPACE}\install\share\cmake\OpenCL\OpenCLConfig.cmake -Value 'include("${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install\share\cmake\OpenCLHeaders\OpenCLHeadersTargets.cmake")\ninclude("${CMAKE_CURRENT_LIST_DIR}\..\OpenCLICDLoader\OpenCLICDLoaderTargets.cmake")' - - - name: "Consume (MSBuild SDK): Configure/Build/Test" - if: matrix.GEN == 'Visual Studio 17 2022' - shell: pwsh - run: | - $C_FLAGS = '/W4' - & cmake ` - -G '${{matrix.GEN}}' ` - -D CMAKE_C_FLAGS="$C_FLAGS" ` - -D CMAKE_C_EXTENSIONS=OFF ` - -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` - -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" ` - -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" ` - -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\sdk" ` - -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" - foreach ($Config in 'Release','Debug') { ` - & cmake ` - --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" ` - --config $Config ` - & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk ` - & ctest ` - --output-on-failure -C $Config - } - - - name: "Consume (Ninja-Multi-Config SDK): Configure/Build/Test" - if: matrix.GEN == 'Ninja Multi-Config' - shell: pwsh - run: | - $VER = switch ('${{matrix.VER}}') { ` - 'v141' {'14.1'} ` - 'v142' {'14.2'} ` - 'v143' {'14.3'} } - $C_FLAGS = '/W4' - & cmake ` - -G '${{matrix.GEN}}' ` - -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` - -D CMAKE_C_FLAGS="$C_FLAGS" ` - -D CMAKE_C_EXTENSIONS=OFF ` - -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` - -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" ` - -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" ` - -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\sdk" ` - -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" - foreach ($Config in 'Release','Debug') { ` - & cmake ` - --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" ` - --config $Config ` - & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk ` - & ctest ` - --output-on-failure -C $Config - } From 6a5cbdd40ef9b96b111e0e62d70952e445b1f535 Mon Sep 17 00:00:00 2001 From: Beatriz Navidad Vilches Date: Thu, 3 Aug 2023 16:15:26 +0000 Subject: [PATCH 09/29] Update MacOS CI --- .github/workflows/macos.yml | 124 ++++++++++++++++---------------- .github/workflows/presubmit.yml | 1 + 2 files changed, 64 insertions(+), 61 deletions(-) diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml index 585a99f8..3810b523 100644 --- a/.github/workflows/macos.yml +++ b/.github/workflows/macos.yml @@ -2,20 +2,28 @@ name: MacOS on: [push, pull_request] -env: - OPENCL_PKGCONFIG_PATHS: ${{ github.workspace }}/install/lib/pkgconfig:${{ github.workspace }}/external/OpenCL-Headers/install/share/pkgconfig - jobs: - macos-gcc: - if: false - #runs-on: macos-latest - runs-on: macos-11 # temporary, macos-latest only supports gcc-12 + macos: + runs-on: macos-latest strategy: matrix: - VER: [9, 10, 11] - EXT: [ON, OFF] - GEN: [Xcode, Ninja Multi-Config] - STD: [99, 11] # 90 results in errors + C_COMPILER: + - /usr/bin/gcc # Actually Clang 14 + - /usr/local/bin/gcc-11 + - /usr/local/bin/gcc-13 + GEN: + - Xcode + - Ninja Multi-Config + STD: [99, 11, 17] + exclude: + - C_COMPILER: /usr/bin/gcc + GEN: Ninja Multi-Config + - C_COMPILER: /usr/local/bin/gcc-11 + GEN: Xcode + - C_COMPILER: /usr/local/bin/gcc-13 + GEN: Xcode + env: + INSTALL_LIBDIR: lib steps: - name: Checkout OpenCL-ICD-Loader @@ -27,26 +35,24 @@ jobs: repository: KhronosGroup/OpenCL-Headers path: external/OpenCL-Headers - - name: Install gcc if required - run: | - if [[ ! `which /usr/local/bin/gcc-${{matrix.VER}}` ]]; then brew install gcc@${{matrix.VER}}; fi; - - name: Create Build Environment + shell: bash run: | - cmake -E make_directory $GITHUB_WORKSPACE/build; - cmake -E make_directory $GITHUB_WORKSPACE/install; - if [[ "${{matrix.GEN}}" == "Ninja Multi-Config" && ! `which ninja` ]]; then brew install ninja; fi; + cmake -E make_directory $GITHUB_WORKSPACE/build && + cmake -E make_directory $GITHUB_WORKSPACE/install && + if [[ "${{matrix.GEN}}" == "Ninja Multi-Config" && ! `which ninja` ]]; then brew install ninja; fi && # Install Ninja only if it's the selected generator and it's not available. + cmake --version - name: Build & install OpenCL-Headers + shell: bash run: cmake -G "${{matrix.GEN}}" + -D BUILD_TESTING=OFF -D CMAKE_C_FLAGS="-w" - -D CMAKE_C_COMPILER=/usr/local/bin/gcc-${{matrix.VER}} - -D CMAKE_C_STANDARD=${{matrix.STD}} - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} + -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} + -D CMAKE_C_EXTENSIONS=OFF -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install - -D BUILD_TESTING=OFF -S $GITHUB_WORKSPACE/external/OpenCL-Headers -B $GITHUB_WORKSPACE/external/OpenCL-Headers/build && cmake @@ -55,32 +61,23 @@ jobs: --config Release --parallel `sysctl -n hw.logicalcpu` - - name: Configure CMake - # no -Werror during configuration because: + - name: Configure + # no -Werror (-Wno-format) during configuration because: # warning: ISO C forbids assignment between function pointer and ‘void *’ [-Wpedantic] # warning: unused parameter [-Wunused-parameter] shell: bash run: cmake -G "${{matrix.GEN}}" -D BUILD_TESTING=ON - -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Wno-format" - -D CMAKE_C_COMPILER=/usr/local/bin/gcc-${{matrix.VER}} - -D CMAKE_C_STANDARD=${{matrix.STD}} - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} + -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror" + -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} + -D CMAKE_C_EXTENSIONS=OFF -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install -S $GITHUB_WORKSPACE -B $GITHUB_WORKSPACE/build - - name: Build (Xcode) - if: matrix.GEN == 'Xcode' - shell: bash - run: | - cmake --build $GITHUB_WORKSPACE/build --config Release --parallel `sysctl -n hw.logicalcpu` - cmake --build $GITHUB_WORKSPACE/build --config Debug --parallel `sysctl -n hw.logicalcpu` - - - name: Build (Ninja) - if: matrix.GEN == 'Ninja Multi-Config' + - name: Build shell: bash run: | cmake --build $GITHUB_WORKSPACE/build --config Release --parallel `sysctl -n hw.logicalcpu` @@ -93,41 +90,46 @@ jobs: ctest -C Release --output-on-failure --parallel `sysctl -n hw.logicalcpu` ctest -C Debug --output-on-failure --parallel `sysctl -n hw.logicalcpu` - - name: Install (Xcode) - if: matrix.GEN == 'Xcode' + - name: Test install shell: bash run: | cmake --build $GITHUB_WORKSPACE/build --config Release --target install - - name: Install (Ninja) - if: matrix.GEN == 'Ninja Multi-Config' + - name: Consume (install) shell: bash - run: | - cmake --build $GITHUB_WORKSPACE/build --config Release --target install - - - name: Test pkg-config --cflags + run: cmake + -G "${{matrix.GEN}}" + -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror" + -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} + -D CMAKE_C_EXTENSIONS=OFF + -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/install" + -S $GITHUB_WORKSPACE/test/pkgconfig/bare + -B $GITHUB_WORKSPACE/build_install && + cmake --build $GITHUB_WORKSPACE/build_install --config Release --parallel `sysctl -n hw.logicalcpu` `if [[ "${{matrix.GEN}}" == "Xcode" ]]; then echo "-- -quiet"; fi;` && + cmake --build $GITHUB_WORKSPACE/build_install --config Debug --parallel `sysctl -n hw.logicalcpu` `if [[ "${{matrix.GEN}}" == "Xcode" ]]; then echo "-- -quiet"; fi;` + + - name: Test pkg-config shell: bash run: | if [[ ! `which pkg-config` ]]; then brew install pkg-config; fi; - PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" - - - name: Test pkg-config --libs - shell: bash - run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/lib -lOpenCL" + export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig && + pkg-config OpenCL --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" && + pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/lib -lOpenCL" - name: Consume pkg-config shell: bash - run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" cmake + run: export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig && + cmake -G "${{matrix.GEN}}" - -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Wno-format" - -D CMAKE_C_COMPILER=/usr/local/bin/gcc-${{matrix.VER}} - -D CMAKE_C_STANDARD=${{matrix.STD}} - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} + -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror" + -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} + -D CMAKE_C_EXTENSIONS=OFF + -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install" -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/Release/libOpenCLDriverStub.dylib -B $GITHUB_WORKSPACE/build/downstream/pkgconfig - -S $GITHUB_WORKSPACE/test/pkgconfig/pkgconfig; - cmake --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Release; - cmake --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Debug; - cd $GITHUB_WORKSPACE/build/downstream/pkgconfig; - ctest --output-on-failure -C Release - ctest --output-on-failure -C Debug + -S $GITHUB_WORKSPACE/test/pkgconfig/pkgconfig && + cmake --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Release --parallel `sysctl -n hw.logicalcpu` `if [[ "${{matrix.GEN}}" == "Xcode" ]]; then echo "-- -quiet"; fi;` && + cmake --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Debug --parallel `sysctl -n hw.logicalcpu` `if [[ "${{matrix.GEN}}" == "Xcode" ]]; then echo "-- -quiet"; fi;` && + cd $GITHUB_WORKSPACE/build/downstream/pkgconfig && + ctest -C Release --output-on-failure --parallel `sysctl -n hw.logicalcpu` && + ctest -C Debug --output-on-failure --parallel `sysctl -n hw.logicalcpu` diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index 2a25a358..8bd5479e 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -4,6 +4,7 @@ on: [push, pull_request] jobs: linux: + if: false runs-on: ubuntu-latest strategy: matrix: From 6ccdfdda76ecd4f6b213b4cd5d01831b7ed65d17 Mon Sep 17 00:00:00 2001 From: Beatriz Navidad Vilches Date: Fri, 4 Aug 2023 08:14:52 +0000 Subject: [PATCH 10/29] Migrate contents of macos.yml to presubmit.yml and delete it --- .github/workflows/macos.yml | 135 -------------------------------- .github/workflows/presubmit.yml | 132 ++++++++++++++++++++++++++++++- 2 files changed, 131 insertions(+), 136 deletions(-) delete mode 100644 .github/workflows/macos.yml diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml deleted file mode 100644 index 3810b523..00000000 --- a/.github/workflows/macos.yml +++ /dev/null @@ -1,135 +0,0 @@ -name: MacOS - -on: [push, pull_request] - -jobs: - macos: - runs-on: macos-latest - strategy: - matrix: - C_COMPILER: - - /usr/bin/gcc # Actually Clang 14 - - /usr/local/bin/gcc-11 - - /usr/local/bin/gcc-13 - GEN: - - Xcode - - Ninja Multi-Config - STD: [99, 11, 17] - exclude: - - C_COMPILER: /usr/bin/gcc - GEN: Ninja Multi-Config - - C_COMPILER: /usr/local/bin/gcc-11 - GEN: Xcode - - C_COMPILER: /usr/local/bin/gcc-13 - GEN: Xcode - env: - INSTALL_LIBDIR: lib - - steps: - - name: Checkout OpenCL-ICD-Loader - uses: actions/checkout@v3 - - - name: Checkout OpenCL-Headers - uses: actions/checkout@v3 - with: - repository: KhronosGroup/OpenCL-Headers - path: external/OpenCL-Headers - - - name: Create Build Environment - shell: bash - run: | - cmake -E make_directory $GITHUB_WORKSPACE/build && - cmake -E make_directory $GITHUB_WORKSPACE/install && - if [[ "${{matrix.GEN}}" == "Ninja Multi-Config" && ! `which ninja` ]]; then brew install ninja; fi && - # Install Ninja only if it's the selected generator and it's not available. - cmake --version - - - name: Build & install OpenCL-Headers - shell: bash - run: cmake - -G "${{matrix.GEN}}" - -D BUILD_TESTING=OFF - -D CMAKE_C_FLAGS="-w" - -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} - -D CMAKE_C_EXTENSIONS=OFF - -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install - -S $GITHUB_WORKSPACE/external/OpenCL-Headers - -B $GITHUB_WORKSPACE/external/OpenCL-Headers/build && - cmake - --build $GITHUB_WORKSPACE/external/OpenCL-Headers/build - --target install - --config Release - --parallel `sysctl -n hw.logicalcpu` - - - name: Configure - # no -Werror (-Wno-format) during configuration because: - # warning: ISO C forbids assignment between function pointer and ‘void *’ [-Wpedantic] - # warning: unused parameter [-Wunused-parameter] - shell: bash - run: cmake - -G "${{matrix.GEN}}" - -D BUILD_TESTING=ON - -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror" - -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} - -D CMAKE_C_EXTENSIONS=OFF - -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install - -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install - -S $GITHUB_WORKSPACE - -B $GITHUB_WORKSPACE/build - - - name: Build - shell: bash - run: | - cmake --build $GITHUB_WORKSPACE/build --config Release --parallel `sysctl -n hw.logicalcpu` - cmake --build $GITHUB_WORKSPACE/build --config Debug --parallel `sysctl -n hw.logicalcpu` - - - name: Test - working-directory: ${{runner.workspace}}/OpenCL-ICD-Loader/build - shell: bash - run: | - ctest -C Release --output-on-failure --parallel `sysctl -n hw.logicalcpu` - ctest -C Debug --output-on-failure --parallel `sysctl -n hw.logicalcpu` - - - name: Test install - shell: bash - run: | - cmake --build $GITHUB_WORKSPACE/build --config Release --target install - - - name: Consume (install) - shell: bash - run: cmake - -G "${{matrix.GEN}}" - -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror" - -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} - -D CMAKE_C_EXTENSIONS=OFF - -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/install" - -S $GITHUB_WORKSPACE/test/pkgconfig/bare - -B $GITHUB_WORKSPACE/build_install && - cmake --build $GITHUB_WORKSPACE/build_install --config Release --parallel `sysctl -n hw.logicalcpu` `if [[ "${{matrix.GEN}}" == "Xcode" ]]; then echo "-- -quiet"; fi;` && - cmake --build $GITHUB_WORKSPACE/build_install --config Debug --parallel `sysctl -n hw.logicalcpu` `if [[ "${{matrix.GEN}}" == "Xcode" ]]; then echo "-- -quiet"; fi;` - - - name: Test pkg-config - shell: bash - run: | - if [[ ! `which pkg-config` ]]; then brew install pkg-config; fi; - export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig && - pkg-config OpenCL --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" && - pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/lib -lOpenCL" - - - name: Consume pkg-config - shell: bash - run: export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig && - cmake - -G "${{matrix.GEN}}" - -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror" - -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} - -D CMAKE_C_EXTENSIONS=OFF - -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install" - -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/Release/libOpenCLDriverStub.dylib - -B $GITHUB_WORKSPACE/build/downstream/pkgconfig - -S $GITHUB_WORKSPACE/test/pkgconfig/pkgconfig && - cmake --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Release --parallel `sysctl -n hw.logicalcpu` `if [[ "${{matrix.GEN}}" == "Xcode" ]]; then echo "-- -quiet"; fi;` && - cmake --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Debug --parallel `sysctl -n hw.logicalcpu` `if [[ "${{matrix.GEN}}" == "Xcode" ]]; then echo "-- -quiet"; fi;` && - cd $GITHUB_WORKSPACE/build/downstream/pkgconfig && - ctest -C Release --output-on-failure --parallel `sysctl -n hw.logicalcpu` && - ctest -C Debug --output-on-failure --parallel `sysctl -n hw.logicalcpu` diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index 8bd5479e..5fd2c564 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -4,7 +4,6 @@ on: [push, pull_request] jobs: linux: - if: false runs-on: ubuntu-latest strategy: matrix: @@ -542,3 +541,134 @@ jobs: & ctest ` --output-on-failure -C $Config } + + macos: + runs-on: macos-latest + strategy: + matrix: + C_COMPILER: + - /usr/bin/gcc # Actually Clang 14 + - /usr/local/bin/gcc-11 + - /usr/local/bin/gcc-13 + GEN: + - Xcode + - Ninja Multi-Config + STD: [99, 11, 17] + exclude: + - C_COMPILER: /usr/bin/gcc + GEN: Ninja Multi-Config + - C_COMPILER: /usr/local/bin/gcc-11 + GEN: Xcode + - C_COMPILER: /usr/local/bin/gcc-13 + GEN: Xcode + env: + INSTALL_LIBDIR: lib + + steps: + - name: Checkout OpenCL-ICD-Loader + uses: actions/checkout@v3 + + - name: Checkout OpenCL-Headers + uses: actions/checkout@v3 + with: + repository: KhronosGroup/OpenCL-Headers + path: external/OpenCL-Headers + + - name: Create Build Environment + shell: bash + run: | + cmake -E make_directory $GITHUB_WORKSPACE/build && + cmake -E make_directory $GITHUB_WORKSPACE/install && + if [[ "${{matrix.GEN}}" == "Ninja Multi-Config" && ! `which ninja` ]]; then brew install ninja; fi && + # Install Ninja only if it's the selected generator and it's not available. + cmake --version + + - name: Build & install OpenCL-Headers + shell: bash + run: cmake + -G "${{matrix.GEN}}" + -D BUILD_TESTING=OFF + -D CMAKE_C_FLAGS="-w" + -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} + -D CMAKE_C_EXTENSIONS=OFF + -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install + -S $GITHUB_WORKSPACE/external/OpenCL-Headers + -B $GITHUB_WORKSPACE/external/OpenCL-Headers/build && + cmake + --build $GITHUB_WORKSPACE/external/OpenCL-Headers/build + --target install + --config Release + --parallel `sysctl -n hw.logicalcpu` + + - name: Configure + # no -Werror (-Wno-format) during configuration because: + # warning: ISO C forbids assignment between function pointer and ‘void *’ [-Wpedantic] + # warning: unused parameter [-Wunused-parameter] + shell: bash + run: cmake + -G "${{matrix.GEN}}" + -D BUILD_TESTING=ON + -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror" + -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} + -D CMAKE_C_EXTENSIONS=OFF + -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install + -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install + -S $GITHUB_WORKSPACE + -B $GITHUB_WORKSPACE/build + + - name: Build + shell: bash + run: | + cmake --build $GITHUB_WORKSPACE/build --config Release --parallel `sysctl -n hw.logicalcpu` + cmake --build $GITHUB_WORKSPACE/build --config Debug --parallel `sysctl -n hw.logicalcpu` + + - name: Test + working-directory: ${{runner.workspace}}/OpenCL-ICD-Loader/build + shell: bash + run: | + ctest -C Release --output-on-failure --parallel `sysctl -n hw.logicalcpu` + ctest -C Debug --output-on-failure --parallel `sysctl -n hw.logicalcpu` + + - name: Test install + shell: bash + run: | + cmake --build $GITHUB_WORKSPACE/build --config Release --target install + + - name: Consume (install) + shell: bash + run: cmake + -G "${{matrix.GEN}}" + -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror" + -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} + -D CMAKE_C_EXTENSIONS=OFF + -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/install" + -S $GITHUB_WORKSPACE/test/pkgconfig/bare + -B $GITHUB_WORKSPACE/build_install && + cmake --build $GITHUB_WORKSPACE/build_install --config Release --parallel `sysctl -n hw.logicalcpu` `if [[ "${{matrix.GEN}}" == "Xcode" ]]; then echo "-- -quiet"; fi;` && + cmake --build $GITHUB_WORKSPACE/build_install --config Debug --parallel `sysctl -n hw.logicalcpu` `if [[ "${{matrix.GEN}}" == "Xcode" ]]; then echo "-- -quiet"; fi;` + + - name: Test pkg-config + shell: bash + run: | + if [[ ! `which pkg-config` ]]; then brew install pkg-config; fi; + export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig && + pkg-config OpenCL --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" && + pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/lib -lOpenCL" + + - name: Consume pkg-config + shell: bash + run: export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig && + cmake + -G "${{matrix.GEN}}" + -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror" + -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} + -D CMAKE_C_EXTENSIONS=OFF + -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install" + -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/Release/libOpenCLDriverStub.dylib + -B $GITHUB_WORKSPACE/build/downstream/pkgconfig + -S $GITHUB_WORKSPACE/test/pkgconfig/pkgconfig && + cmake --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Release --parallel `sysctl -n hw.logicalcpu` `if [[ "${{matrix.GEN}}" == "Xcode" ]]; then echo "-- -quiet"; fi;` && + cmake --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Debug --parallel `sysctl -n hw.logicalcpu` `if [[ "${{matrix.GEN}}" == "Xcode" ]]; then echo "-- -quiet"; fi;` && + cd $GITHUB_WORKSPACE/build/downstream/pkgconfig && + ctest -C Release --output-on-failure --parallel `sysctl -n hw.logicalcpu` && + ctest -C Debug --output-on-failure --parallel `sysctl -n hw.logicalcpu` From 429563c496a7f041dca8d1f2c4ea7c4d5c6c1589 Mon Sep 17 00:00:00 2001 From: Beatriz Navidad Vilches Date: Fri, 4 Aug 2023 08:16:59 +0000 Subject: [PATCH 11/29] Add format-checking script and job --- .github/workflows/presubmit.yml | 31 +++++++++++++++++++ cmake/Package.cmake | 10 +++--- scripts/check-format.sh | 55 +++++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+), 5 deletions(-) create mode 100755 scripts/check-format.sh diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index 5fd2c564..2f439fc8 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -3,8 +3,38 @@ name: Presubmit on: [push, pull_request] jobs: + get-branch: + runs-on: ubuntu-latest + steps: + - name: Get working branch + id: get-branch + run: | + if [[ ${{ github.event_name }} == "push" ]]; then + echo "branch=main" >> $GITHUB_OUTPUT + else + echo "branch=${{ github.base_ref }}" >> $GITHUB_OUTPUT + fi ; + echo $GITHUB_OUTPUT + outputs: + branch: ${{ steps.get-branch.outputs.branch }} + + format: + name: Code formatting + runs-on: ubuntu-latest + needs: get-branch + steps: + - uses: actions/checkout@v3 + with: + # repository: ${{ github.repository }} (default) + fetch-depth: 0 + - name: Install clang-format + run: sudo apt-get install clang-format + - name: Check format + run: $GITHUB_WORKSPACE/scripts/check-format.sh origin/${{ needs.get-branch.outputs.branch }} --binary clang-format + linux: runs-on: ubuntu-latest + needs: format strategy: matrix: CMAKE: [3.26.4] @@ -544,6 +574,7 @@ jobs: macos: runs-on: macos-latest + needs: format strategy: matrix: C_COMPILER: diff --git a/cmake/Package.cmake b/cmake/Package.cmake index b682a203..2e7fe131 100644 --- a/cmake/Package.cmake +++ b/cmake/Package.cmake @@ -36,11 +36,11 @@ endif() # Configure and install OpenCL.pc for the Debian package if(NOT (CMAKE_VERSION VERSION_LESS "3.5") OR (CMAKE_INSTALL_PREFIX STREQUAL CPACK_PACKAGING_INSTALL_PREFIX)) -set(PKGCONFIG_PREFIX "${CPACK_PACKAGING_INSTALL_PREFIX}") -configure_file( - OpenCL.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL.pc - @ONLY) + set(PKGCONFIG_PREFIX "${CPACK_PACKAGING_INSTALL_PREFIX}") + configure_file( + OpenCL.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL.pc + @ONLY) # We exclude the file from the normal installation when using CMake >= 3.5, because in that # case we already set a separate file for it diff --git a/scripts/check-format.sh b/scripts/check-format.sh new file mode 100755 index 00000000..24c61662 --- /dev/null +++ b/scripts/check-format.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash + +SOURCE_COMMIT="$1" +if [ "$#" -gt 0 ]; then + shift +fi + +# If no source commit is given target the default branch +if [ "x$SOURCE_COMMIT" = "x" ]; then + # If remote is not set use the remote of the current branch or fallback to "origin" + if [ "x$REMOTE" = "x" ]; then + BRANCH="$(git rev-parse --abbrev-ref HEAD)" + REMOTE="$(git config --local --get "branch.$BRANCH.remote" || echo 'origin')" + fi + SOURCE_COMMIT="remotes/$REMOTE/HEAD" +fi + +# Force colored diff output +DIFF_COLOR_SAVED="$(git config --local --get color.diff)" +if [ "x$DIFF_COLOR_SAVED" != "x" ]; then + git config --local --replace-all "color.diff" "always" +else + git config --local --add "color.diff" "always" +fi + +scratch="$(mktemp -t check-format.XXXXXXXXXX)" +finish () { + # Remove temporary file + rm -rf "$scratch" + # Restore setting + if [ "x$DIFF_COLOR_SAVED" != "x" ]; then + git config --local --replace-all "color.diff" "$DIFF_COLOR_SAVED" + else + git config --local --unset "color.diff" + fi +} +# The trap will be invoked whenever the script exits, even due to a signal, this is a bash only +# feature +trap finish EXIT + +GIT_CLANG_FORMAT="${GIT_CLANG_FORMAT:-git-clang-format}" +"$GIT_CLANG_FORMAT" --style=file --extensions=cc,cp,cpp,c++,cxx,cu,cuh,hh,hpp,hxx,hip,vert,frag --diff "$@" "$SOURCE_COMMIT" > "$scratch" + +# Check for no-ops +grep '^no modified files to format$\|^clang-format did not modify any files$' \ + "$scratch" > /dev/null && exit 0 + +# Dump formatting diff and signal failure +printf \ +"\033[31m==== FORMATTING VIOLATIONS DETECTED ====\033[0m +run '\033[33m%s --style=file %s %s\033[0m' to apply these formating changes\n\n" \ +"$GIT_CLANG_FORMAT" "$*" "$SOURCE_COMMIT" + +cat "$scratch" +exit 1 From 855ab66fd19d42ba9aed564d294074c4f6a7251d Mon Sep 17 00:00:00 2001 From: Beatriz Navidad Vilches Date: Fri, 4 Aug 2023 08:41:55 +0000 Subject: [PATCH 12/29] Build android binaries --- .github/workflows/presubmit.yml | 60 +++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index 2f439fc8..33a0d195 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -703,3 +703,63 @@ jobs: cd $GITHUB_WORKSPACE/build/downstream/pkgconfig && ctest -C Release --output-on-failure --parallel `sysctl -n hw.logicalcpu` && ctest -C Debug --output-on-failure --parallel `sysctl -n hw.logicalcpu` + + android: + runs-on: ubuntu-latest + needs: format + strategy: + matrix: + ABI: + - arm64-v8a + - x86_64 + API_LEVEL: + - android-19 + - android-33 + CONFIG: + - Debug + - Release + steps: + - name: Checkout OpenCL-ICD-Loader + uses: actions/checkout@v3 + + - name: Checkout OpenCL-Headers + uses: actions/checkout@v3 + with: + repository: KhronosGroup/OpenCL-Headers + path: external/OpenCL-Headers + + - name: Configure & install OpenCL-Headers + shell: bash + run: cmake + -G "Unix Makefiles" + -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} + -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror" + -D CMAKE_C_EXTENSIONS=OFF + -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install + -D BUILD_TESTING=OFF + -S $GITHUB_WORKSPACE/external/OpenCL-Headers + -B $GITHUB_WORKSPACE/external/OpenCL-Headers/build && + cmake + --build $GITHUB_WORKSPACE/external/OpenCL-Headers/build + --target install + -- + -j`nproc` + + - name: Configure + shell: bash + run: cmake + -G "Unix Makefiles" + -D BUILD_TESTING=ON + -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} + -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror" + -D CMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake + -D ANDROID_ABI=${{matrix.ABI}} + -D ANDROID_PLATFORM=${{matrix.API_LEVEL}} + -D CMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY + -D CMAKE_FIND_ROOT_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install + -S $GITHUB_WORKSPACE + -B $GITHUB_WORKSPACE/build + + - name: Build + shell: bash + run: cmake --build $GITHUB_WORKSPACE/build -j `nproc` From cd46f698e0776e4861dad717d63ea181dba2467f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc=20Serf=C5=91z=C5=91?= Date: Tue, 15 Aug 2023 15:51:18 +0200 Subject: [PATCH 13/29] CMake minimum 3.16 --- .clang-format | 123 +++++++++++++++++++++++++ .github/workflows/presubmit.yml | 156 +++++++++++--------------------- .gitignore | 3 + CMakeLists.txt | 4 +- cmake/Package.cmake | 60 +++++------- 5 files changed, 203 insertions(+), 143 deletions(-) create mode 100644 .clang-format diff --git a/.clang-format b/.clang-format new file mode 100644 index 00000000..d563a411 --- /dev/null +++ b/.clang-format @@ -0,0 +1,123 @@ +--- +Language: Cpp +AccessModifierOffset: -4 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlines: Right +AlignOperands: false +AlignTrailingComments: false +AllowAllArgumentsOnNextLine: true +AllowAllConstructorInitializersOnNextLine: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: true +AllowShortFunctionsOnASingleLine: All +AllowShortLambdasOnASingleLine: All +AllowShortIfStatementsOnASingleLine: WithoutElse +AllowShortLoopsOnASingleLine: true +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: MultiLine +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: true + AfterEnum: true + AfterFunction: true + AfterNamespace: false + AfterObjCDeclaration: false + AfterStruct: true + AfterUnion: false + AfterExternBlock: false + BeforeCatch: false + BeforeElse: true + IndentBraces: false + SplitEmptyFunction: false + SplitEmptyRecord: true + SplitEmptyNamespace: true +BreakBeforeBinaryOperators: NonAssignment +BreakBeforeBraces: Custom +BreakBeforeInheritanceComma: false +BreakInheritanceList: BeforeColon +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: BeforeColon +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: true +ColumnLimit: 80 +CommentPragmas: '^ IWYU pragma:' +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 +ContinuationIndentWidth: 4 +Cpp11BracedListStyle: false +DerivePointerAlignment: true +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: false +ForEachMacros: + - foreach + - Q_FOREACH + - BOOST_FOREACH +IncludeBlocks: Preserve +IncludeCategories: + - Regex: '^"(llvm|llvm-c|clang|clang-c)/' + Priority: 2 + - Regex: '^(<|"(gtest|gmock|isl|json)/)' + Priority: 3 + - Regex: '.*' + Priority: 1 +IncludeIsMainRegex: '(Test)?$' +IndentCaseLabels: true +IndentPPDirectives: None +IndentWidth: 4 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: true +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 2 +NamespaceIndentation: Inner +ObjCBinPackProtocolList: Auto +ObjCBlockIndentWidth: 4 +ObjCSpaceAfterProperty: true +ObjCSpaceBeforeProtocolList: true +PenaltyBreakAssignment: 2 +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakFirstLessLess: 120 +PenaltyBreakString: 1000 +PenaltyBreakTemplateDeclaration: 10 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Left +ReflowComments: true +SortIncludes: false +SortUsingDeclarations: true +SpaceAfterCStyleCast: false +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +SpaceBeforeCpp11BracedList: false +SpaceBeforeCtorInitializerColon: false +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: ControlStatements +SpaceBeforeRangeBasedForLoopColon: true +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp11 +StatementMacros: + - Q_UNUSED + - QT_REQUIRE_VERSION +TabWidth: 4 +UseTab: Never diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index 33a0d195..6a65d426 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -52,74 +52,55 @@ jobs: - GEN: Ninja Multi-Config CONFIG: Release IMAGE: - - streamhpc/opencl-sdk-intelcpu:ubuntu-22.04-20230717 + - streamhpc/opencl-sdk-base:ubuntu-22.04-20230717 include: - - CMAKE: 3.1.3 - C_COMPILER: gcc-7 + - CMAKE: system + C_COMPILER: gcc-9 BIN: 64 CONF: GEN: Unix Makefiles CONFIG: Debug - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-18.04-20220127 - - CMAKE: 3.1.3 - C_COMPILER: gcc-7 + IMAGE: streamhpc/opencl-sdk-base:ubuntu-20.04-20230717 + - CMAKE: system + C_COMPILER: gcc-9 BIN: 64 CONF: GEN: Unix Makefiles CONFIG: Release - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-18.04-20220127 - - CMAKE: 3.1.3 - C_COMPILER: gcc-7 + IMAGE: streamhpc/opencl-sdk-base:ubuntu-20.04-20230717 + - CMAKE: system + C_COMPILER: gcc-9 BIN: 32 CONF: GEN: Unix Makefiles CONFIG: Debug - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-18.04-20220127 - - CMAKE: 3.1.3 - C_COMPILER: gcc-7 + IMAGE: streamhpc/opencl-sdk-base:ubuntu-20.04-20230717 + - CMAKE: system + C_COMPILER: gcc-9 BIN: 32 CONF: GEN: Unix Makefiles CONFIG: Release - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-18.04-20220127 - - CMAKE: 3.1.3 - C_COMPILER: clang-8 - BIN: 64 - CONF: - GEN: Unix Makefiles - CONFIG: Debug - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-18.04-20220127 - - CMAKE: 3.1.3 - C_COMPILER: clang-8 - BIN: 64 - CONF: - GEN: Unix Makefiles - CONFIG: Release - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-18.04-20220127 - - CMAKE: 3.1.3 - C_COMPILER: clang-8 - BIN: 32 - CONF: - GEN: Unix Makefiles - CONFIG: Debug - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-18.04-20220127 - - CMAKE: 3.1.3 - C_COMPILER: clang-8 - BIN: 32 - CONF: - GEN: Unix Makefiles - CONFIG: Release - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-18.04-20220127 + IMAGE: streamhpc/opencl-sdk-base:ubuntu-20.04-20230717 container: ${{matrix.IMAGE}} env: CMAKE_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cmake CPACK_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cpack CTEST_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/ctest CC: ${{matrix.C_COMPILER}} + CFLAGS: -Wall -Wextra -Werror -pedantic -m${{matrix.BIN}} DEB_INSTALLATION_PATH: /usr INSTALL_LIBDIR: lib/x86_64-linux-gnu steps: + - name: Install system CMake + shell: bash + if: ${{matrix.CMAKE}} == 'system' + run: apt-get update -qq && apt-get install -y cmake && + echo "CMAKE_EXE=cmake" >> "$GITHUB_ENV" && + echo "CPACK_EXE=cpack" >> "$GITHUB_ENV" && + echo "CTEST_EXE=ctest" >> "$GITHUB_ENV" + - name: Checkout OpenCL-ICD-Loader uses: actions/checkout@v3 @@ -133,21 +114,18 @@ jobs: - name: Configure, install & package OpenCL-Headers shell: bash - run: mkdir $GITHUB_WORKSPACE/external/OpenCL-Headers/build && - cd $GITHUB_WORKSPACE/external/OpenCL-Headers/build && - $CMAKE_EXE + run: $CMAKE_EXE -G "${{matrix.CONF.GEN}}" `if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` - -D CMAKE_C_FLAGS="-w -m${{matrix.BIN}}" - -D CMAKE_INSTALL_PREFIX=`if [[ "${{matrix.CMAKE}}" != "3.1.3" ]]; then echo "$GITHUB_WORKSPACE/external/OpenCL-Headers/install"; else echo "$DEB_INSTALLATION_PATH"; fi` - `if [[ "${{matrix.CMAKE}}" != "3.1.3" ]]; then echo "-D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH"; fi` + -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install + -D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH -D BUILD_TESTING=OFF - $GITHUB_WORKSPACE/external/OpenCL-Headers && + -S $GITHUB_WORKSPACE/external/OpenCL-Headers + -B $GITHUB_WORKSPACE/external/OpenCL-Headers/build && $CMAKE_EXE --build $GITHUB_WORKSPACE/external/OpenCL-Headers/build --target install - -- - -j`nproc` && + --parallel `nproc` && $CPACK_EXE --config "$GITHUB_WORKSPACE/external/OpenCL-Headers/build/CPackConfig.cmake" -G DEB @@ -156,23 +134,21 @@ jobs: - name: Configure shell: bash - run: mkdir $GITHUB_WORKSPACE/build && - cd $GITHUB_WORKSPACE/build && - $CMAKE_EXE + run: $CMAKE_EXE -G "${{matrix.CONF.GEN}}" - -D BUILD_TESTING=ON `if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` - -D CMAKE_C_FLAGS="-Wall -Wextra -Werror -pedantic -m${{matrix.BIN}}" - -D CMAKE_INSTALL_PREFIX=`if [[ "${{matrix.CMAKE}}" != "3.1.3" ]]; then echo "$GITHUB_WORKSPACE/install"; else echo "$DEB_INSTALLATION_PATH"; fi` - `if [[ "${{matrix.CMAKE}}" != "3.1.3" ]]; then echo "-D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH"; fi` - `if [[ "${{matrix.CMAKE}}" != "3.1.3" ]]; then echo "-D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install"; fi` - $GITHUB_WORKSPACE + -D BUILD_TESTING=ON + -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install + -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install + -D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH + -S $GITHUB_WORKSPACE + -B $GITHUB_WORKSPACE/build - name: Build shell: bash run: if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then - $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config ${{matrix.CONF.CONFIG}} -- -j `nproc`; + $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config ${{matrix.CONF.CONFIG}} --parallel `nproc`; else $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Debug; $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Release; @@ -201,16 +177,14 @@ jobs: shell: bash run: dpkg -i $GITHUB_WORKSPACE/external/OpenCL-Headers/package-deb/*.deb && dpkg -i $GITHUB_WORKSPACE/package-deb/*.deb && - mkdir $GITHUB_WORKSPACE/build_package && - cd $GITHUB_WORKSPACE/build_package && $CMAKE_EXE -G "${{matrix.CONF.GEN}}" `if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` - -D CMAKE_C_FLAGS="-Wall -Wextra -Werror -pedantic -m${{matrix.BIN}}" - $GITHUB_WORKSPACE/test/pkgconfig/bare && + -S $GITHUB_WORKSPACE/test/pkgconfig/bare + -B $GITHUB_WORKSPACE/build_package && if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then - $CMAKE_EXE --build $GITHUB_WORKSPACE/build_package --config ${{matrix.CONF.CONFIG}} -- -j `nproc`; + $CMAKE_EXE --build $GITHUB_WORKSPACE/build_package --config ${{matrix.CONF.CONFIG}} --parallel `nproc`; else $CMAKE_EXE --build $GITHUB_WORKSPACE/build_package --config Debug; $CMAKE_EXE --build $GITHUB_WORKSPACE/build_package --config Release; @@ -231,37 +205,33 @@ jobs: - name: Test install shell: bash - run: $CMAKE_EXE --build $GITHUB_WORKSPACE/build --target install --config ${{matrix.CONF.CONFIG}} -- -j`nproc` + run: $CMAKE_EXE --build $GITHUB_WORKSPACE/build --target install --config ${{matrix.CONF.CONFIG}} --parallel `nproc` - name: Consume (install) shell: bash - run: mkdir $GITHUB_WORKSPACE/build_install && cd $GITHUB_WORKSPACE/build_install && - $CMAKE_EXE + run: $CMAKE_EXE -G "${{matrix.CONF.GEN}}" `if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` - -D CMAKE_C_FLAGS="-Wall -Wextra -Werror -pedantic -m${{matrix.BIN}}" -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/install - $GITHUB_WORKSPACE/test/pkgconfig/bare && + -S $GITHUB_WORKSPACE/test/pkgconfig/bare + -B $GITHUB_WORKSPACE/build_install && if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then - $CMAKE_EXE --build $GITHUB_WORKSPACE/build_install -- -j`nproc`; + $CMAKE_EXE --build $GITHUB_WORKSPACE/build_install --parallel `nproc`; else - $CMAKE_EXE --build $GITHUB_WORKSPACE/build_install --config Debug -- -j`nproc`; - $CMAKE_EXE --build $GITHUB_WORKSPACE/build_install --config Release -- -j`nproc`; + $CMAKE_EXE --build $GITHUB_WORKSPACE/build_install --config Debug; + $CMAKE_EXE --build $GITHUB_WORKSPACE/build_install --config Release; fi - name: Test pkg-config (install) shell: bash # We expect no pre-processor and compile flags (--cflags) but we do expect link flags (--libs) - run: if [[ "${{matrix.CMAKE}}" != "3.1.3" ]]; - then - export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR/pkgconfig; - fi && + run: export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR/pkgconfig && if [[ $(pkg-config OpenCL --cflags) ]]; then exit 1; fi && - pkg-config OpenCL --libs | `if [[ "${{matrix.CMAKE}}" != "3.1.3" ]]; then grep -q "\-L$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR \-lOpenCL"; else grep -q "\-lOpenCL"; fi` + pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR \-lOpenCL" windows: runs-on: windows-latest @@ -318,13 +288,11 @@ jobs: shell: pwsh run: | $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} - $C_FLAGS='/W4 /WX' & cmake ` -G "${{matrix.GEN}}" ` -A $BIN ` -T ${{matrix.VER}} ` -D BUILD_TESTING=OFF ` - -D CMAKE_C_FLAGS=$C_FLAGS ` -D CMAKE_C_EXTENSIONS=OFF ` -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` -S ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers ` @@ -347,12 +315,10 @@ jobs: 'v143' {'14.3'} } Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" - $C_FLAGS='/W4 /WX' & cmake ` -G "${{matrix.GEN}}" ` -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` -D BUILD_TESTING=OFF ` - -D CMAKE_C_FLAGS=$C_FLAGS ` -D CMAKE_C_EXTENSIONS=OFF ` -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` -S ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers ` @@ -370,13 +336,11 @@ jobs: # error C2220: warning treated as error - no 'object' file generated run: | $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} - $C_FLAGS='/W4' & cmake ` -G "${{matrix.GEN}}" ` -A $BIN ` -T ${{matrix.VER}} ` -D BUILD_TESTING=ON ` - -D CMAKE_C_FLAGS=$C_FLAGS ` -D CMAKE_C_EXTENSIONS=OFF ` -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\install ` -D CMAKE_PREFIX_PATH=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` @@ -395,12 +359,10 @@ jobs: 'v143' {'14.3'} } Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" - $C_FLAGS='/W4' & cmake ` -G "${{matrix.GEN}}" ` -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` -D BUILD_TESTING=ON ` - -D CMAKE_C_FLAGS=$C_FLAGS ` -D CMAKE_C_EXTENSIONS=OFF ` -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\install ` @@ -465,11 +427,9 @@ jobs: if: matrix.GEN == 'Visual Studio 17 2022' shell: pwsh run: | - $C_FLAGS = '/W4' & cmake ` -G '${{matrix.GEN}}' ` -T ${{matrix.VER}} ` - -D CMAKE_C_FLAGS="$C_FLAGS" ` -D CMAKE_C_EXTENSIONS=OFF ` -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\install" ` @@ -495,11 +455,9 @@ jobs: 'v143' {'14.3'} } Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" - $C_FLAGS = '/W4' & cmake ` -G '${{matrix.GEN}}' ` -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` - -D CMAKE_C_FLAGS="$C_FLAGS" ` -D CMAKE_C_EXTENSIONS=OFF ` -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" ` @@ -525,10 +483,8 @@ jobs: if: matrix.GEN == 'Visual Studio 17 2022' shell: pwsh run: | - $C_FLAGS = '/W4' & cmake ` -G '${{matrix.GEN}}' ` - -D CMAKE_C_FLAGS="$C_FLAGS" ` -D CMAKE_C_EXTENSIONS=OFF ` -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" ` @@ -552,11 +508,9 @@ jobs: 'v141' {'14.1'} ` 'v142' {'14.2'} ` 'v143' {'14.3'} } - $C_FLAGS = '/W4' & cmake ` -G '${{matrix.GEN}}' ` -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` - -D CMAKE_C_FLAGS="$C_FLAGS" ` -D CMAKE_C_EXTENSIONS=OFF ` -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" ` @@ -594,6 +548,7 @@ jobs: GEN: Xcode env: INSTALL_LIBDIR: lib + CFLAGS: -Wall -Wextra -pedantic -Werror steps: - name: Checkout OpenCL-ICD-Loader @@ -619,7 +574,6 @@ jobs: run: cmake -G "${{matrix.GEN}}" -D BUILD_TESTING=OFF - -D CMAKE_C_FLAGS="-w" -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} -D CMAKE_C_EXTENSIONS=OFF -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install @@ -632,14 +586,10 @@ jobs: --parallel `sysctl -n hw.logicalcpu` - name: Configure - # no -Werror (-Wno-format) during configuration because: - # warning: ISO C forbids assignment between function pointer and ‘void *’ [-Wpedantic] - # warning: unused parameter [-Wunused-parameter] shell: bash run: cmake -G "${{matrix.GEN}}" -D BUILD_TESTING=ON - -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror" -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} -D CMAKE_C_EXTENSIONS=OFF -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install @@ -669,7 +619,6 @@ jobs: shell: bash run: cmake -G "${{matrix.GEN}}" - -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror" -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} -D CMAKE_C_EXTENSIONS=OFF -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/install" @@ -691,7 +640,6 @@ jobs: run: export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig && cmake -G "${{matrix.GEN}}" - -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror" -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} -D CMAKE_C_EXTENSIONS=OFF -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install" @@ -718,6 +666,8 @@ jobs: CONFIG: - Debug - Release + env: + CFLAGS: -Wall -Wextra -pedantic -Werror steps: - name: Checkout OpenCL-ICD-Loader uses: actions/checkout@v3 @@ -733,7 +683,6 @@ jobs: run: cmake -G "Unix Makefiles" -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} - -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror" -D CMAKE_C_EXTENSIONS=OFF -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install -D BUILD_TESTING=OFF @@ -751,7 +700,6 @@ jobs: -G "Unix Makefiles" -D BUILD_TESTING=ON -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} - -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror" -D CMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake -D ANDROID_ABI=${{matrix.ABI}} -D ANDROID_PLATFORM=${{matrix.API_LEVEL}} @@ -762,4 +710,4 @@ jobs: - name: Build shell: bash - run: cmake --build $GITHUB_WORKSPACE/build -j `nproc` + run: cmake --build $GITHUB_WORKSPACE/build --parallel `nproc` diff --git a/.gitignore b/.gitignore index 3939ee71..5b3b4af9 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,6 @@ inc/KHR/ # CMake CMakeFiles/ + +# Visual Studio Code +.vscode diff --git a/CMakeLists.txt b/CMakeLists.txt index dac00ce5..f65b8a50 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required (VERSION 3.1) +cmake_minimum_required (VERSION 3.16) # Include guard for including this project multiple times if(TARGET OpenCL) @@ -57,7 +57,7 @@ cmake_dependent_option(ENABLE_OPENCL_LAYERINFO "Enable building cllayerinfo tool include(GNUInstallDirs) -if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin" OR (CMAKE_VERSION VERSION_LESS "3.15")) +if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}) else() set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}/x86_64-linux-gnu) diff --git a/cmake/Package.cmake b/cmake/Package.cmake index 2e7fe131..d81d5c79 100644 --- a/cmake/Package.cmake +++ b/cmake/Package.cmake @@ -23,41 +23,27 @@ set(pkg_config_location ${INSTALL_LIBDIR}/pkgconfig) set(PKGCONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}") # Configure and install OpenCL.pc for installing the project -if(NOT (CMAKE_VERSION VERSION_LESS "3.5")) - configure_file( - OpenCL.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL.pc - @ONLY) - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL.pc - DESTINATION ${pkg_config_location} - COMPONENT pkgconfig_install) -endif() +configure_file( + OpenCL.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL.pc + @ONLY) +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL.pc + DESTINATION ${pkg_config_location} + COMPONENT pkgconfig_install) # Configure and install OpenCL.pc for the Debian package -if(NOT (CMAKE_VERSION VERSION_LESS "3.5") OR (CMAKE_INSTALL_PREFIX STREQUAL CPACK_PACKAGING_INSTALL_PREFIX)) - set(PKGCONFIG_PREFIX "${CPACK_PACKAGING_INSTALL_PREFIX}") - configure_file( - OpenCL.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL.pc - @ONLY) - - # We exclude the file from the normal installation when using CMake >= 3.5, because in that - # case we already set a separate file for it - set(EXTRA_ARGS) - if(NOT (CMAKE_VERSION VERSION_LESS "3.5")) - list(APPEND EXTRA_ARGS EXCLUDE_FROM_ALL) - endif() - - install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL.pc - DESTINATION ${pkg_config_location} - COMPONENT dev - ${EXTRA_ARGS}) -else() - message(FATAL_ERROR "When using CMake version < 3.5, CPACK_PACKAGING_INSTALL_PREFIX should not be set," - " or should be the same as CMAKE_INSTALL_PREFIX") -endif() +set(PKGCONFIG_PREFIX "${CPACK_PACKAGING_INSTALL_PREFIX}") +configure_file( + OpenCL.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL.pc + @ONLY) + +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL.pc + DESTINATION ${pkg_config_location} + COMPONENT dev + EXCLUDE_FROM_ALL) # DEB packaging configuration set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_VENDOR}) @@ -72,8 +58,8 @@ set(CPACK_DEBIAN_PACKAGE_RELEASE "1") # debian_revision (because this is a set(PACKAGE_VERSION_REVISION "${CPACK_DEBIAN_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_RELEASE}") # Get architecture -execute_process(COMMAND dpkg "--print-architecture" OUTPUT_VARIABLE CPACK_PACKAGE_ARCHITECTURE) -string(STRIP "${CPACK_PACKAGE_ARCHITECTURE}" CPACK_PACKAGE_ARCHITECTURE) +execute_process(COMMAND dpkg "--print-architecture" OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE) +string(STRIP "${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}" CPACK_DEBIAN_PACKAGE_ARCHITECTURE) ########################################################## # Components # @@ -92,7 +78,7 @@ set(CPACK_DEBIAN_RUNTIME_PACKAGE_NAME # Package file name in deb format: # _-_.deb -set(CPACK_DEBIAN_RUNTIME_FILE_NAME "${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_PACKAGE_ARCHITECTURE}.deb") +set(CPACK_DEBIAN_RUNTIME_FILE_NAME "${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") # Dependencies set(CPACK_DEBIAN_RUNTIME_PACKAGE_DEPENDS "libc6") @@ -106,7 +92,7 @@ set(CPACK_DEBIAN_DEV_PACKAGE_NAME # Package file name in deb format: # _-_.deb -set(CPACK_DEBIAN_DEV_FILE_NAME "${CPACK_DEBIAN_DEV_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_PACKAGE_ARCHITECTURE}.deb") +set(CPACK_DEBIAN_DEV_FILE_NAME "${CPACK_DEBIAN_DEV_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") # Dependencies set(CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS ON) # Component dependencies are reflected in package relationships From 476054f0413fad7151c8404beec665ab6ccc7d45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc=20Serf=C5=91z=C5=91?= Date: Tue, 5 Sep 2023 13:52:59 +0200 Subject: [PATCH 14/29] Added release workflow --- .github/workflows/presubmit.yml | 10 +- .github/workflows/release.yml | 80 ++++++++++++++++ CMakeLists.txt | 14 +-- cmake/DebSourcePkg.cmake | 135 +++++++++++++++++++++++++++ cmake/Package.cmake | 158 +++++++++++++++++++++----------- 5 files changed, 333 insertions(+), 64 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 cmake/DebSourcePkg.cmake diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index 6a65d426..108368ff 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -90,7 +90,7 @@ jobs: CC: ${{matrix.C_COMPILER}} CFLAGS: -Wall -Wextra -Werror -pedantic -m${{matrix.BIN}} DEB_INSTALLATION_PATH: /usr - INSTALL_LIBDIR: lib/x86_64-linux-gnu + INSTALL_LIBDIR: lib steps: - name: Install system CMake @@ -110,7 +110,7 @@ jobs: path: external/OpenCL-Headers # ToDo: Change to KhronosGroup/OpenCL-Headers:main repository: StreamHPC/OpenCL-Headers - ref: update-ci + ref: release-cd - name: Configure, install & package OpenCL-Headers shell: bash @@ -199,9 +199,13 @@ jobs: fi && pkg-config OpenCL --libs | grep -q "\-lOpenCL" + - name: Test cllayerinfo (DEB) + shell: bash + run: cllayerinfo + - name: Uninstall (DEB) shell: bash - run: apt-get remove -y ocl-icd-opencl-dev ocl-icd-libopencl1 + run: apt-get remove -y "khronos-opencl-loader*" - name: Test install shell: bash diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..f9eb6ff5 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,80 @@ +name: Release + +on: + push: + tags: + - "*" +env: + distroseries: jammy + +jobs: + release: + runs-on: ubuntu-latest + steps: + - name: Add PPA + shell: bash + run: sudo add-apt-repository -y ppa:${{ vars.PPA }} + + - name: Install prerequisites + shell: bash + run: sudo apt-get update -qq && sudo apt-get install -y cmake devscripts debhelper-compat=13 opencl-c-headers + + - name: Import GPG signing key + shell: bash + run: echo "${{ secrets.DEB_SIGNING_KEY }}" | gpg --import + + - name: Download and extract source code + shell: bash + run: | + wget -O $GITHUB_WORKSPACE/source.orig.tar.gz https://github.com/$GITHUB_REPOSITORY/archive/refs/tags/$GITHUB_REF_NAME.tar.gz + tar -xvf $GITHUB_WORKSPACE/source.orig.tar.gz + + - name: Configure project out-of-tree + shell: bash + run: cmake + -S $GITHUB_WORKSPACE/OpenCL-ICD-Loader* + -B $GITHUB_WORKSPACE/../build + -D CMAKE_BUILD_TYPE=Release + -D CMAKE_INSTALL_PREFIX=/usr + -D BUILD_TESTING=OFF + -D LATEST_RELEASE_VERSION=$GITHUB_REF_NAME + -D CPACK_DEBIAN_PACKAGE_MAINTAINER="${{ vars.DEB_MAINTAINER }}" + -D DEBIAN_VERSION_SUFFIX=${{ vars.DEB_VERSION_SUFFIX }} + + - name: Generate packaging scripts + shell: bash + run: cmake + -D CMAKE_CACHE_PATH=$GITHUB_WORKSPACE/../build/CMakeCache.txt + -D ORIG_ARCHIVE=$GITHUB_WORKSPACE/source.orig.tar.gz + -D LATEST_RELEASE_VERSION=$GITHUB_REF_NAME + -D DEBIAN_DISTROSERIES=${{ env.distroseries }} + -D DEBIAN_PACKAGE_MAINTAINER="${{ vars.DEB_MAINTAINER }}" + -D DEBIAN_VERSION_SUFFIX=${{ vars.DEB_VERSION_SUFFIX }} + -P $GITHUB_WORKSPACE/OpenCL-ICD-Loader*/cmake/DebSourcePkg.cmake + + - name: List packaging scripts + shell: bash + run: cat $GITHUB_WORKSPACE/OpenCL-ICD-Loader*/debian/* + + - name: Build source package + shell: bash + run: | + cd $GITHUB_WORKSPACE/OpenCL-ICD-Loader*/ + debuild -S -sa + + - name: Build binary package + shell: bash + run: cpack + -G DEB + -C Release + -B $GITHUB_WORKSPACE/../build + --config $GITHUB_WORKSPACE/../build/CPackConfig.cmake + + - name: Push source package to the PPA + shell: bash + run: dput ppa:${{ vars.PPA }} $GITHUB_WORKSPACE/*source.changes + + - name: Create GitHub release + uses: softprops/action-gh-release@v1 + with: + files: ${{ github.workspace }}/../build/*.deb diff --git a/CMakeLists.txt b/CMakeLists.txt index f65b8a50..b33a532c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -57,12 +57,6 @@ cmake_dependent_option(ENABLE_OPENCL_LAYERINFO "Enable building cllayerinfo tool include(GNUInstallDirs) -if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") - set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}) -else() - set(INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}/x86_64-linux-gnu) -endif() - set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake") include(CheckFunctionExists) include(JoinPaths) @@ -232,7 +226,7 @@ install( TARGETS OpenCL EXPORT OpenCLICDLoaderTargets LIBRARY - DESTINATION ${INSTALL_LIBDIR} # obtained from GNUInstallDirs + DESTINATION ${CMAKE_INSTALL_LIBDIR} # obtained from GNUInstallDirs ) install( # FILES $ is cleanest, but is MSVC link.exe specific. LLVM's lld.exe and lld-link.exe don't support it (configure-time error) @@ -248,7 +242,7 @@ if (ENABLE_OPENCL_LAYERINFO) EXPORT OpenCLICDLoaderTargets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - COMPONENT runtime + COMPONENT cllayerinfo ) endif() @@ -292,12 +286,12 @@ install( # Separate namelink from shared library and symlink for DEB packaging install (TARGETS OpenCL LIBRARY - DESTINATION ${INSTALL_LIBDIR} + DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT runtime NAMELINK_SKIP) install (TARGETS OpenCL LIBRARY - DESTINATION ${INSTALL_LIBDIR} + DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT dev NAMELINK_ONLY) diff --git a/cmake/DebSourcePkg.cmake b/cmake/DebSourcePkg.cmake new file mode 100644 index 00000000..09dd1a99 --- /dev/null +++ b/cmake/DebSourcePkg.cmake @@ -0,0 +1,135 @@ +# This script produces the changelog, control and rules file in the debian +# directory. These files are needed to build a Debian source package from the repository. +# Run this in CMake script mode, e.g. +# $ cd OpenCL-ICD-Loader +# $ cmake -S . -B ../build -D BUILD_TESTING=OFF +# $ cmake +# -DCMAKE_CACHE_PATH=../build/CMakeCache.txt +# -DCPACK_DEBIAN_PACKAGE_MAINTAINER="Example Name " +# -DDEBIAN_DISTROSERIES=jammy +# -DORIG_ARCHIVE=../OpenCL-ICD-Loader.tar.gz +# -DLATEST_RELEASE_VERSION=v2023.08.29 +# -P cmake/DebSourcePkg.cmake +# $ debuild -S -sa + +cmake_minimum_required(VERSION 3.21) # file(COPY_FILE) is added in CMake 3.21 + +if(NOT EXISTS "${CMAKE_CACHE_PATH}") + message(FATAL_ERROR "CMAKE_CACHE_PATH is not set or does not exist") +endif() +if(NOT DEFINED DEBIAN_PACKAGE_MAINTAINER) + message(FATAL_ERROR "DEBIAN_PACKAGE_MAINTAINER is not set") +endif() +if(NOT DEFINED DEBIAN_DISTROSERIES) + message(FATAL_ERROR "DEBIAN_DISTROSERIES is not set") +endif() +if(NOT DEFINED ORIG_ARCHIVE) + message(WARNING "ORIG_ARCHIVE is not set") +endif() +if(NOT DEFINED LATEST_RELEASE_VERSION) + message(WARNING "LATEST_RELEASE_VERSION is not set") +endif() +if(NOT DEFINED DEBIAN_VERSION_SUFFIX) + message(WARNING "DEBIAN_VERSION_SUFFIX is not set") +endif() + +# Extracting the project version from the main CMakeLists.txt via regex +file(READ "${CMAKE_CACHE_PATH}" CMAKE_CACHE) +string(REGEX MATCH "CMAKE_PROJECT_VERSION[^=]*=([^\n]*)" REGEX_MATCH "${CMAKE_CACHE}") +if(NOT REGEX_MATCH) + message(FATAL_ERROR "Could not extract project version from CMakeLists.txt") +endif() +set(PROJECT_VERSION "${CMAKE_MATCH_1}") + +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") +# Package.cmake contains all details for packaging +include(Package) + +string(REPLACE "\n" "\n " CPACK_DEBIAN_DEV_DESCRIPTION "${CPACK_DEBIAN_DEV_DESCRIPTION}") +string(REPLACE "\n" "\n " CPACK_DEBIAN_RUNTIME_DESCRIPTION "${CPACK_DEBIAN_RUNTIME_DESCRIPTION}") +string(REPLACE "\n" "\n " CPACK_DEBIAN_CLLAYERINFO_DESCRIPTION "${CPACK_DEBIAN_CLLAYERINFO_DESCRIPTION}") +set(DEB_SOURCE_PKG_DIR "${CMAKE_CURRENT_LIST_DIR}/../debian") +# Write debian/control +file(WRITE "${DEB_SOURCE_PKG_DIR}/control" +"Source: ${PACKAGE_NAME_PREFIX} +Section: ${CPACK_DEBIAN_DEV_PACKAGE_SECTION} +Priority: optional +Maintainer: ${DEBIAN_PACKAGE_MAINTAINER} +Build-Depends: cmake, debhelper-compat (=13), ${CPACK_DEBIAN_DEV_PACKAGE_DEPENDS} +Rules-Requires-Root: no +Homepage: ${CPACK_DEBIAN_PACKAGE_HOMEPAGE} +Standards-Version: 4.6.2 + +Package: ${CPACK_DEBIAN_DEV_PACKAGE_NAME} +Architecture: any +Multi-Arch: same +Depends: ${CPACK_DEBIAN_DEV_PACKAGE_DEPENDS}, ${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME} (=${PACKAGE_VERSION_REVISION}) +Recommends: ${CPACK_DEBIAN_DEV_PACKAGE_RECOMMENDS} +Conflicts: ${CPACK_DEBIAN_DEV_PACKAGE_CONFLICTS} +Breaks: ${CPACK_DEBIAN_DEV_PACKAGE_BREAKS} +Replaces: ${CPACK_DEBIAN_DEV_PACKAGE_REPLACES} +Provides: ${CPACK_DEBIAN_DEV_PACKAGE_PROVIDES} +Description: ${CPACK_DEBIAN_DEV_DESCRIPTION} + +Package: ${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME} +Section: ${CPACK_DEBIAN_RUNTIME_PACKAGE_SECTION} +Architecture: any +Multi-Arch: same +Depends: ${CPACK_DEBIAN_RUNTIME_PACKAGE_DEPENDS} +Conflicts: ${CPACK_DEBIAN_RUNTIME_PACKAGE_CONFLICTS} +Replaces: ${CPACK_DEBIAN_RUNTIME_PACKAGE_REPLACES} +Provides: ${CPACK_DEBIAN_RUNTIME_PACKAGE_PROVIDES} +Description: ${CPACK_DEBIAN_RUNTIME_DESCRIPTION} + +Package: ${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_NAME} +Section: ${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_SECTION} +Architecture: any +Depends: ${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_DEPENDS}, ${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME} (=${PACKAGE_VERSION_REVISION}) +Conflicts: ${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_CONFLICTS} +Replaces: ${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_REPLACES} +Provides: ${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_PROVIDES} +Description: ${CPACK_DEBIAN_CLLAYERINFO_DESCRIPTION} +" +) +# Write debian/changelog +string(TIMESTAMP CURRENT_TIMESTAMP "%a, %d %b %Y %H:%M:%S +0000" UTC) +file(WRITE "${DEB_SOURCE_PKG_DIR}/changelog" +"${PACKAGE_NAME_PREFIX} (${PACKAGE_VERSION_REVISION}) ${DEBIAN_DISTROSERIES}; urgency=medium + + * Released version ${PACKAGE_VERSION_REVISION} + + -- ${DEBIAN_PACKAGE_MAINTAINER} ${CURRENT_TIMESTAMP} +") +# Write debian/rules +file(WRITE "${DEB_SOURCE_PKG_DIR}/rules" +"#!/usr/bin/make -f +%: +\tdh $@ + +override_dh_auto_configure: +\tdh_auto_configure -- -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF +") +file(WRITE "${DEB_SOURCE_PKG_DIR}/${CPACK_DEBIAN_DEV_PACKAGE_NAME}.install" +"usr/lib/*/pkgconfig +usr/lib/*/lib*.so +usr/share +") +file(WRITE "${DEB_SOURCE_PKG_DIR}/${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME}.install" +"usr/lib/*/lib*.so.* +") +file(WRITE "${DEB_SOURCE_PKG_DIR}/${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_NAME}.install" +"usr/bin +") + +if(DEFINED ORIG_ARCHIVE) + # Copy the passed orig.tar.gz file. The target filename is deduced from the version number, as expected by debuild + cmake_path(IS_ABSOLUTE ORIG_ARCHIVE IS_ORIG_ARCHIVE_ABSOLUTE) + if (NOT IS_ORIG_ARCHIVE_ABSOLUTE) + message(FATAL_ERROR "ORIG_ARCHIVE must be an absolute path (passed: \"${ORIG_ARCHIVE}\")") + endif() + cmake_path(GET ORIG_ARCHIVE EXTENSION ORIG_ARCHIVE_EXT) + cmake_path(GET ORIG_ARCHIVE PARENT_PATH ORIG_ARCHIVE_PARENT) + set(TARGET_PATH "${ORIG_ARCHIVE_PARENT}/${PACKAGE_NAME_PREFIX}_${CPACK_DEBIAN_PACKAGE_VERSION}${ORIG_ARCHIVE_EXT}") + message(STATUS "Copying \"${ORIG_ARCHIVE}\" to \"${TARGET_PATH}\"") + file(COPY_FILE "${ORIG_ARCHIVE}" "${TARGET_PATH}") +endif() diff --git a/cmake/Package.cmake b/cmake/Package.cmake index d81d5c79..aa4e841d 100644 --- a/cmake/Package.cmake +++ b/cmake/Package.cmake @@ -1,6 +1,34 @@ set(CPACK_PACKAGE_VENDOR "khronos") -set(CPACK_DEBIAN_DESCRIPTION "Khronos OpenCL ICD Loader") +set(CPACK_DEBIAN_RUNTIME_DESCRIPTION "Generic OpenCL ICD Loader +OpenCL (Open Computing Language) is a multivendor open standard for +general-purpose parallel programming of heterogeneous systems that include +CPUs, GPUs and other processors. +. +This package contains an installable client driver loader (ICD Loader) +library that can be used to load any (free or non-free) installable client +driver (ICD) for OpenCL. It acts as a demultiplexer so several ICD can +be installed and used together.") + +set(CPACK_DEBIAN_DEV_DESCRIPTION "OpenCL development files +OpenCL (Open Computing Language) is a multivendor open standard for +general-purpose parallel programming of heterogeneous systems that include +CPUs, GPUs and other processors. +. +This package provides the development files: headers and libraries. +. +It also ensures that the ocl-icd ICD loader is installed so its additional +features (compared to the OpenCL norm) can be used: .pc file, ability to +select an ICD without root privilege, etc.") + +set(CPACK_DEBIAN_CLLAYERINFO_DESCRIPTION "Query OpenCL Layer system information +OpenCL (Open Computing Language) is a multivendor open standard for +general-purpose parallel programming of heterogeneous systems that include +CPUs, GPUs and other processors. It supports system and user configured layers +to intercept OpenCL API calls. +. +This package contains a tool that lists the layers loaded by the the ocl-icd +OpenCL ICD Loader.") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") @@ -10,41 +38,6 @@ if(NOT CPACK_PACKAGING_INSTALL_PREFIX) set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") endif() -# Configuring pkgconfig - -# We need two different instances of OpenCL.pc -# One for installing (cmake --install), which contains CMAKE_INSTALL_PREFIX as prefix -# And another for the Debian development package, which contains CPACK_PACKAGING_INSTALL_PREFIX as prefix - -join_paths(OPENCL_INCLUDEDIR_PC "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}") -join_paths(OPENCL_LIBDIR_PC "\${exec_prefix}" "${INSTALL_LIBDIR}") - -set(pkg_config_location ${INSTALL_LIBDIR}/pkgconfig) -set(PKGCONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}") - -# Configure and install OpenCL.pc for installing the project -configure_file( - OpenCL.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL.pc - @ONLY) -install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL.pc - DESTINATION ${pkg_config_location} - COMPONENT pkgconfig_install) - -# Configure and install OpenCL.pc for the Debian package -set(PKGCONFIG_PREFIX "${CPACK_PACKAGING_INSTALL_PREFIX}") -configure_file( - OpenCL.pc.in - ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL.pc - @ONLY) - -install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL.pc - DESTINATION ${pkg_config_location} - COMPONENT dev - EXCLUDE_FROM_ALL) - # DEB packaging configuration set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_VENDOR}) @@ -53,9 +46,19 @@ set(CPACK_DEBIAN_PACKAGE_HOMEPAGE # Version number [epoch:]upstream_version[-debian_revision] set(CPACK_DEBIAN_PACKAGE_VERSION "${PROJECT_VERSION}") # upstream_version +if(DEFINED LATEST_RELEASE_VERSION) + # Remove leading "v", if exists + string(LENGTH "${LATEST_RELEASE_VERSION}" LATEST_RELEASE_VERSION_LENGTH) + string(SUBSTRING "${LATEST_RELEASE_VERSION}" 0 1 LATEST_RELEASE_VERSION_FRONT) + if(LATEST_RELEASE_VERSION_FRONT STREQUAL "v") + string(SUBSTRING "${LATEST_RELEASE_VERSION}" 1 ${LATEST_RELEASE_VERSION_LENGTH} LATEST_RELEASE_VERSION) + endif() + + string(APPEND CPACK_DEBIAN_PACKAGE_VERSION "~${LATEST_RELEASE_VERSION}") +endif() set(CPACK_DEBIAN_PACKAGE_RELEASE "1") # debian_revision (because this is a # non-native pkg) -set(PACKAGE_VERSION_REVISION "${CPACK_DEBIAN_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_RELEASE}") +set(PACKAGE_VERSION_REVISION "${CPACK_DEBIAN_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_RELEASE}${DEBIAN_VERSION_SUFFIX}") # Get architecture execute_process(COMMAND dpkg "--print-architecture" OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE) @@ -66,39 +69,92 @@ string(STRIP "${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}" CPACK_DEBIAN_PACKAGE_ARCHITE ########################################################## set(CPACK_DEB_COMPONENT_INSTALL ON) -set(CPACK_COMPONENTS_ALL runtime dev) +set(CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS ON) # Component dependencies are reflected in package relationships +set(CPACK_COMPONENTS_ALL runtime dev cllayerinfo) -set(DEBIAN_FILE_NAME "ocl-icd") +set(PACKAGE_NAME_PREFIX "khronos-opencl-loader") ## Package runtime component -set(DEBIAN_RUNTIME_PACKAGE_SUFIX "libopencl1") -set(CPACK_DEBIAN_RUNTIME_PACKAGE_NAME - "${DEBIAN_FILE_NAME}-${DEBIAN_RUNTIME_PACKAGE_SUFIX}" - CACHE STRING "Package name" FORCE) +set(CPACK_DEBIAN_RUNTIME_PACKAGE_NAME "${PACKAGE_NAME_PREFIX}-libopencl1") # Package file name in deb format: # _-_.deb set(CPACK_DEBIAN_RUNTIME_FILE_NAME "${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") - +set(CPACK_DEBIAN_RUNTIME_PACKAGE_SECTION "libs") # Dependencies set(CPACK_DEBIAN_RUNTIME_PACKAGE_DEPENDS "libc6") - +set(CPACK_DEBIAN_RUNTIME_PACKAGE_SUGGESTS "opencl-icd") +set(CPACK_DEBIAN_RUNTIME_PACKAGE_CONFLICTS "amd-app, libopencl1, nvidia-libopencl1-dev") +set(CPACK_DEBIAN_RUNTIME_PACKAGE_REPLACES "amd-app, libopencl1, nvidia-libopencl1-dev") +set(CPACK_DEBIAN_RUNTIME_PACKAGE_PROVIDES "libopencl-1.1-1, libopencl-1.2-1, libopencl-2.0-1, libopencl-2.1-1, libopencl-2.2-1, libopencl-3.0-1, libopencl1") ## Package dev component -set(DEBIAN_DEV_PACKAGE_SUFIX "opencl-dev") -set(CPACK_DEBIAN_DEV_PACKAGE_NAME - "${DEBIAN_FILE_NAME}-${DEBIAN_DEV_PACKAGE_SUFIX}" - CACHE STRING "Package name" FORCE) +set(CPACK_DEBIAN_DEV_PACKAGE_NAME "${PACKAGE_NAME_PREFIX}-opencl-dev") # Package file name in deb format: # _-_.deb set(CPACK_DEBIAN_DEV_FILE_NAME "${CPACK_DEBIAN_DEV_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") +set(CPACK_DEBIAN_DEV_PACKAGE_SECTION "libdevel") # Dependencies -set(CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS ON) # Component dependencies are reflected in package relationships -set(CPACK_DEBIAN_DEV_PACKAGE_DEPENDS "opencl-c-headers") +set(CPACK_DEBIAN_DEV_PACKAGE_DEPENDS "opencl-c-headers (>= ${CPACK_DEBIAN_PACKAGE_VERSION}) | opencl-headers (>= ${CPACK_DEBIAN_PACKAGE_VERSION})") +set(CPACK_DEBIAN_DEV_PACKAGE_RECOMMENDS "libgl1-mesa-dev | libgl-dev") +set(CPACK_DEBIAN_DEV_PACKAGE_CONFLICTS "opencl-dev") +set(CPACK_DEBIAN_DEV_PACKAGE_BREAKS "amd-libopencl1, nvidia-libopencl1, ocl-icd-libopencl1 (<< ${CPACK_DEBIAN_PACKAGE_VERSION})") +set(CPACK_DEBIAN_DEV_PACKAGE_REPLACES "amd-libopencl1, nvidia-libopencl1, ocl-icd-libopencl1 (<< ${CPACK_DEBIAN_PACKAGE_VERSION}), opencl-dev") +set(CPACK_DEBIAN_DEV_PACKAGE_PROVIDES "opencl-dev") set(CPACK_COMPONENT_DEV_DEPENDS runtime) +## Package cllayerinfo component +set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_NAME "${PACKAGE_NAME_PREFIX}-cllayerinfo") +set(CPACK_DEBIAN_CLLAYERINFO_FILE_NAME "${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") +# Dependencies +set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_DEPENDS "libc6") +set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_SECTION "admin") +set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_CONFLICTS "cllayerinfo") +set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_REPLACES "cllayerinfo") +set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_PROVIDES "cllayerinfo") +set(CPACK_COMPONENT_CLLAYERINFO_DEPENDS runtime) + +if (NOT CMAKE_SCRIPT_MODE_FILE) # Don't run in script mode + +# Configuring pkgconfig + +# We need two different instances of OpenCL.pc +# One for installing (cmake --install), which contains CMAKE_INSTALL_PREFIX as prefix +# And another for the Debian development package, which contains CPACK_PACKAGING_INSTALL_PREFIX as prefix + +join_paths(OPENCL_INCLUDEDIR_PC "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}") +join_paths(OPENCL_LIBDIR_PC "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}") + +set(pkg_config_location ${CMAKE_INSTALL_LIBDIR}/pkgconfig) +set(PKGCONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Configure and install OpenCL.pc for installing the project +configure_file( + OpenCL.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL.pc + @ONLY) +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL.pc + DESTINATION ${pkg_config_location} + COMPONENT pkgconfig_install) + +# Configure and install OpenCL.pc for the Debian package +set(PKGCONFIG_PREFIX "${CPACK_PACKAGING_INSTALL_PREFIX}") +configure_file( + OpenCL.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL.pc + @ONLY) + +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL.pc + DESTINATION ${pkg_config_location} + COMPONENT dev + EXCLUDE_FROM_ALL) + set(CPACK_DEBIAN_PACKAGE_DEBUG ON) include(CPack) + +endif() From 1e97d81649cf807249c2683ed244f500aec0ed30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc=20Serf=C5=91z=C5=91?= Date: Fri, 26 Apr 2024 10:31:50 +0200 Subject: [PATCH 15/29] Update workflows to match the rest of the ecosystem --- .github/workflows/presubmit.yml | 301 +++++++++++++++++--------------- .github/workflows/release.yml | 21 +-- 2 files changed, 172 insertions(+), 150 deletions(-) diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index 108368ff..1dc093bb 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -3,25 +3,12 @@ name: Presubmit on: [push, pull_request] jobs: - get-branch: - runs-on: ubuntu-latest - steps: - - name: Get working branch - id: get-branch - run: | - if [[ ${{ github.event_name }} == "push" ]]; then - echo "branch=main" >> $GITHUB_OUTPUT - else - echo "branch=${{ github.base_ref }}" >> $GITHUB_OUTPUT - fi ; - echo $GITHUB_OUTPUT - outputs: - branch: ${{ steps.get-branch.outputs.branch }} - format: name: Code formatting runs-on: ubuntu-latest - needs: get-branch + defaults: + run: + shell: bash steps: - uses: actions/checkout@v3 with: @@ -30,11 +17,16 @@ jobs: - name: Install clang-format run: sudo apt-get install clang-format - name: Check format - run: $GITHUB_WORKSPACE/scripts/check-format.sh origin/${{ needs.get-branch.outputs.branch }} --binary clang-format + run: $GITHUB_WORKSPACE/scripts/check-format.sh + origin/`if [[ "${{ github.event_name }}" == "push" ]]; then echo "main"; else echo "${{ github.base_ref }}"; fi` + --binary clang-format linux: runs-on: ubuntu-latest needs: format + defaults: + run: + shell: bash strategy: matrix: CMAKE: [3.26.4] @@ -52,7 +44,7 @@ jobs: - GEN: Ninja Multi-Config CONFIG: Release IMAGE: - - streamhpc/opencl-sdk-base:ubuntu-22.04-20230717 + - streamhpc/opencl-sdk-intelcpu:ubuntu-22.04-20230717 include: - CMAKE: system C_COMPILER: gcc-9 @@ -60,28 +52,28 @@ jobs: CONF: GEN: Unix Makefiles CONFIG: Debug - IMAGE: streamhpc/opencl-sdk-base:ubuntu-20.04-20230717 + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-20.04-20230717 - CMAKE: system C_COMPILER: gcc-9 BIN: 64 CONF: GEN: Unix Makefiles CONFIG: Release - IMAGE: streamhpc/opencl-sdk-base:ubuntu-20.04-20230717 + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-20.04-20230717 - CMAKE: system C_COMPILER: gcc-9 BIN: 32 CONF: GEN: Unix Makefiles CONFIG: Debug - IMAGE: streamhpc/opencl-sdk-base:ubuntu-20.04-20230717 + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-20.04-20230717 - CMAKE: system C_COMPILER: gcc-9 BIN: 32 CONF: GEN: Unix Makefiles CONFIG: Release - IMAGE: streamhpc/opencl-sdk-base:ubuntu-20.04-20230717 + IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-20.04-20230717 container: ${{matrix.IMAGE}} env: CMAKE_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cmake @@ -90,11 +82,9 @@ jobs: CC: ${{matrix.C_COMPILER}} CFLAGS: -Wall -Wextra -Werror -pedantic -m${{matrix.BIN}} DEB_INSTALLATION_PATH: /usr - INSTALL_LIBDIR: lib steps: - name: Install system CMake - shell: bash if: ${{matrix.CMAKE}} == 'system' run: apt-get update -qq && apt-get install -y cmake && echo "CMAKE_EXE=cmake" >> "$GITHUB_ENV" && @@ -113,7 +103,6 @@ jobs: ref: release-cd - name: Configure, install & package OpenCL-Headers - shell: bash run: $CMAKE_EXE -G "${{matrix.CONF.GEN}}" `if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` @@ -133,7 +122,6 @@ jobs: -B "$GITHUB_WORKSPACE/external/OpenCL-Headers/package-deb" - name: Configure - shell: bash run: $CMAKE_EXE -G "${{matrix.CONF.GEN}}" `if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` @@ -145,7 +133,6 @@ jobs: -B $GITHUB_WORKSPACE/build - name: Build - shell: bash run: if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config ${{matrix.CONF.CONFIG}} --parallel `nproc`; @@ -155,18 +142,16 @@ jobs: fi - name: Test - shell: bash working-directory: ${{runner.workspace}}/OpenCL-ICD-Loader/build run: if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then - $CTEST_EXE --output-on-failure --parallel `nproc`; + $CTEST_EXE --output-on-failure --no-tests=error --parallel `nproc`; else - $CTEST_EXE --output-on-failure -C Debug --parallel `nproc`; - $CTEST_EXE --output-on-failure -C Release --parallel `nproc`; + $CTEST_EXE --output-on-failure --no-tests=error -C Debug --parallel `nproc`; + $CTEST_EXE --output-on-failure --no-tests=error -C Release --parallel `nproc`; fi - name: Package DEB - shell: bash run: $CPACK_EXE --config "$GITHUB_WORKSPACE/build/CPackConfig.cmake" -G DEB @@ -174,12 +159,12 @@ jobs: -B "$GITHUB_WORKSPACE/package-deb" - name: Consume (DEB) - shell: bash run: dpkg -i $GITHUB_WORKSPACE/external/OpenCL-Headers/package-deb/*.deb && dpkg -i $GITHUB_WORKSPACE/package-deb/*.deb && $CMAKE_EXE -G "${{matrix.CONF.GEN}}" `if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` + -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/`if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "libOpenCLDriverStub.so"; else echo "${{ matrix.CONF.CONFIG }}/libOpenCLDriverStub.so"; fi` -S $GITHUB_WORKSPACE/test/pkgconfig/bare -B $GITHUB_WORKSPACE/build_package && if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; @@ -190,8 +175,18 @@ jobs: $CMAKE_EXE --build $GITHUB_WORKSPACE/build_package --config Release; fi + - name: Run consume test (DEB) + if: matrix.BIN != 32 + working-directory: ${{runner.workspace}}/OpenCL-ICD-Loader/build_package + run: if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; + then + $CTEST_EXE -C ${{matrix.CONF.CONFIG}} --output-on-failure --no-tests=error --parallel `nproc`; + else + $CTEST_EXE -C Debug --output-on-failure --no-tests=error --parallel `nproc`; + $CTEST_EXE -C Release --output-on-failure --no-tests=error --parallel `nproc`; + fi + - name: Test pkg-config (DEB) - shell: bash # We expect no pre-processor and compile flags (--cflags) but we do expect link flags (--libs) run: if [[ $(pkg-config OpenCL --cflags) ]]; then @@ -200,23 +195,20 @@ jobs: pkg-config OpenCL --libs | grep -q "\-lOpenCL" - name: Test cllayerinfo (DEB) - shell: bash run: cllayerinfo - name: Uninstall (DEB) - shell: bash - run: apt-get remove -y "khronos-opencl-loader*" + run: apt-get remove -y "khronos-opencl-loader*" opencl-c-headers - name: Test install - shell: bash run: $CMAKE_EXE --build $GITHUB_WORKSPACE/build --target install --config ${{matrix.CONF.CONFIG}} --parallel `nproc` - name: Consume (install) - shell: bash run: $CMAKE_EXE -G "${{matrix.CONF.GEN}}" `if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` - -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/install + -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/install;$GITHUB_WORKSPACE/external/OpenCL-Headers/install" + -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/`if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "libOpenCLDriverStub.so"; else echo "${{ matrix.CONF.CONFIG }}/libOpenCLDriverStub.so"; fi` -S $GITHUB_WORKSPACE/test/pkgconfig/bare -B $GITHUB_WORKSPACE/build_install && if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; @@ -227,19 +219,29 @@ jobs: $CMAKE_EXE --build $GITHUB_WORKSPACE/build_install --config Release; fi + - name: Run consume test (install) + if: matrix.BIN != 32 + working-directory: ${{runner.workspace}}/OpenCL-ICD-Loader/build_install + run: if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; + then + $CTEST_EXE -C ${{matrix.CONF.CONFIG}} --output-on-failure --no-tests=error --parallel `nproc`; + else + $CTEST_EXE -C Debug --output-on-failure --no-tests=error --parallel `nproc`; + $CTEST_EXE -C Release --output-on-failure --no-tests=error --parallel `nproc`; + fi + - name: Test pkg-config (install) - shell: bash # We expect no pre-processor and compile flags (--cflags) but we do expect link flags (--libs) - run: export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR/pkgconfig && - if [[ $(pkg-config OpenCL --cflags) ]]; - then - exit 1; - fi && - pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR \-lOpenCL" + run: export PKG_CONFIG_PATH="$GITHUB_WORKSPACE/install/lib/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig" && + pkg-config OpenCL --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" && + pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/lib \-lOpenCL" windows: runs-on: windows-latest needs: format + defaults: + run: + shell: pwsh strategy: matrix: VER: [v141, v142, v143, clangcl] @@ -249,9 +251,9 @@ jobs: - VER: clangcl GEN: Ninja Multi-Config include: - - VER: v142 - GEN: Visual Studio 17 2022 - BIN: x86 + - VER: v142 + GEN: Visual Studio 17 2022 + BIN: x86 env: NINJA_URL: https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip NINJA_ROOT: C:\Tools\Ninja @@ -259,6 +261,10 @@ jobs: UseMultiToolTask: true # Better parallel MSBuild execution EnforceProcessCountAcrossBuilds: 'true' MultiProcMaxCount: '3' + # C4152: nonstandard extension, function/data pointer conversion in expression + # C4201: nonstandard extension used: nameless struct/union + # C4310: cast truncates constant value + CFLAGS: /W4 /WX /wd4152 /wd4201 /wd4310 steps: - name: Cache Ninja install @@ -272,7 +278,6 @@ jobs: - name: Install Ninja if: matrix.GEN == 'Ninja Multi-Config' && steps.ninja-install.outputs.cache-hit != 'true' - shell: pwsh run: | Invoke-WebRequest ${env:NINJA_URL} -OutFile ~\Downloads\ninja-win.zip Expand-Archive ~\Downloads\ninja-win.zip -DestinationPath ${env:NINJA_ROOT}\ @@ -289,7 +294,6 @@ jobs: - name: Build & install OpenCL-Headers (MSBuild) if: matrix.GEN == 'Visual Studio 17 2022' - shell: pwsh run: | $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} & cmake ` @@ -301,17 +305,18 @@ jobs: -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` -S ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers ` -B ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build + if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-Headers failed." } & cmake ` --build "${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build" ` --target install ` -- ` /verbosity:minimal ` /maxCpuCount ` - /noLogo ` + /noLogo + if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-Headers failed." } - name: Build & install OpenCL-Headers (Ninja Multi-Config) if: matrix.GEN == 'Ninja Multi-Config' - shell: pwsh run: | $VER = switch ('${{matrix.VER}}') { ` 'v141' {'14.1'} ` @@ -327,17 +332,16 @@ jobs: -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` -S ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers ` -B ${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build + if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-Headers failed." } & cmake ` --build "${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\build" ` --target install ` -- ` -j ${env:NUMBER_OF_PROCESSORS} + if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-Headers failed." } - name: Configure (MSBuild) if: matrix.GEN == 'Visual Studio 17 2022' - shell: pwsh - # no /WX during configuration because: - # error C2220: warning treated as error - no 'object' file generated run: | $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} & cmake ` @@ -350,12 +354,10 @@ jobs: -D CMAKE_PREFIX_PATH=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` -S ${env:GITHUB_WORKSPACE} ` -B ${env:GITHUB_WORKSPACE}\build + if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-ICD-Loader failed." } - name: Configure (Ninja Multi-Config) if: matrix.GEN == 'Ninja Multi-Config' - shell: pwsh - # no /WX during configuration because: - # error C2220: warning treated as error - no 'object' file generated run: | $VER = switch ('${{matrix.VER}}') { ` 'v141' {'14.1'} ` @@ -373,12 +375,12 @@ jobs: -D CMAKE_PREFIX_PATH=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` -S ${env:GITHUB_WORKSPACE} ` -B ${env:GITHUB_WORKSPACE}\build + if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-ICD-Loader failed." } - name: Build (MSBuild) if: matrix.GEN == 'Visual Studio 17 2022' - shell: pwsh run: | - foreach ($Config in 'Release','Debug') { ` + foreach ($Config in 'Release','Debug') { & cmake ` --build "${env:GITHUB_WORKSPACE}\build" ` --config $Config ` @@ -386,11 +388,11 @@ jobs: /verbosity:minimal ` /maxCpuCount ` /noLogo + if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-ICD-Loader in $Config failed." } } - name: Build (Ninja Multi-Config) if: matrix.GEN == 'Ninja Multi-Config' - shell: pwsh run: | $VER = switch ('${{matrix.VER}}') { ` 'v141' {'14.1'} ` @@ -398,60 +400,70 @@ jobs: 'v143' {'14.3'} } Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" - foreach ($Config in 'Release','Debug') { ` + foreach ($Config in 'Release','Debug') { & cmake ` --build "${env:GITHUB_WORKSPACE}\build" ` --config $Config ` -- ` -j ${env:NUMBER_OF_PROCESSORS} + if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-ICD-Loader in $Config failed." } } - name: Test working-directory: ${{runner.workspace}}/OpenCL-ICD-Loader/build - shell: pwsh run: | $REG = if('${{matrix.BIN}}' -eq 'x64') {"reg"} else {"${env:SystemRoot}\Syswow64\reg.exe"} $KEY_NAME = "HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors" foreach ($Config in 'Release','Debug') { $VALUE_NAME = "${env:GITHUB_WORKSPACE}/build/$Config/OpenCLDriverStub.dll" & $REG ADD $KEY_NAME /v $VALUE_NAME /t REG_DWORD /d 0 - ctest -C $Config --output-on-failure --parallel ${env:NUMBER_OF_PROCESSORS} + & ctest -C $Config --output-on-failure --no-tests=error --parallel ${env:NUMBER_OF_PROCESSORS} + if ($LASTEXITCODE -ne 0) { throw "Testing OpenCL-ICD-Loader in $Config failed." } & $REG DELETE $KEY_NAME /v $VALUE_NAME /f } - name: Install - shell: pwsh run: | & cmake ` --build "${env:GITHUB_WORKSPACE}\build" ` --config Release ` --target install + if ($LASTEXITCODE -ne 0) { throw "Installing OpenCL-ICD-Loader failed." } - name: "Consume (MSBuild standalone): Configure/Build/Test" if: matrix.GEN == 'Visual Studio 17 2022' - shell: pwsh run: | + $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} & cmake ` -G '${{matrix.GEN}}' ` + -A $BIN ` -T ${{matrix.VER}} ` -D CMAKE_C_EXTENSIONS=OFF ` -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` - -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\install" ` + -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" ` -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" ` - -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\bare" ` + -S "${env:GITHUB_WORKSPACE}\test\pkgconfig\bare" ` -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" - foreach ($Config in 'Release','Debug') { ` + if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-ICD-Loader standalone consume test failed." } + $REG = if('${{matrix.BIN}}' -eq 'x64') {"reg"} else {"${env:SystemRoot}\Syswow64\reg.exe"} + $KEY_NAME = "HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors" + $VALUE_NAME = "${env:GITHUB_WORKSPACE}/build/Release/OpenCLDriverStub.dll" + & $REG ADD $KEY_NAME /v $VALUE_NAME /t REG_DWORD /d 0 + if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." } + foreach ($Config in 'Release','Debug') { & cmake ` --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" ` - --config $Config ` - & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare ` - & ctest ` - --output-on-failure -C $Config + --config $Config + if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-ICD-Loader standalone consume test in $Config failed." } + & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare + & ctest --output-on-failure --no-tests=error -C $Config + if ($LASTEXITCODE -ne 0) { throw "Running OpenCL-ICD-Loader standalone consume test in $Config failed." } } + & $REG DELETE $KEY_NAME /v $VALUE_NAME /f + if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." } - name: "Consume (Ninja-Multi-Config standalone): Configure/Build/Test" if: matrix.GEN == 'Ninja Multi-Config' - shell: pwsh run: | $VER = switch ('${{matrix.VER}}') { ` 'v141' {'14.1'} ` @@ -466,52 +478,73 @@ jobs: -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" ` -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" ` - -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\bare" ` + -S "${env:GITHUB_WORKSPACE}\test\pkgconfig\bare" ` -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" - foreach ($Config in 'Release','Debug') { ` + if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-ICD-Loader standalone consume test failed." } + $REG = if('${{matrix.BIN}}' -eq 'x64') {"reg"} else {"${env:SystemRoot}\Syswow64\reg.exe"} + $KEY_NAME = "HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors" + $VALUE_NAME = "${env:GITHUB_WORKSPACE}/build/Release/OpenCLDriverStub.dll" + & $REG ADD $KEY_NAME /v $VALUE_NAME /t REG_DWORD /d 0 + if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." } + foreach ($Config in 'Release','Debug') { & cmake ` --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare" ` - --config $Config ` - & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare ` - & ctest ` - --output-on-failure -C $Config + --config $Config + if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-ICD-Loader standalone consume test in $Config failed." } + & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\bare + & ctest --output-on-failure --no-tests=error -C $Config + if ($LASTEXITCODE -ne 0) { throw "Running OpenCL-ICD-Loader standalone consume test in $Config failed." } } + & $REG DELETE $KEY_NAME /v $VALUE_NAME /f + if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." } - name: Consume (Emulate SDK presence) - shell: pwsh run: | New-Item -Type Directory -Path ${env:GITHUB_WORKSPACE}\install\share\cmake\OpenCL - New-Item -Type File -Path ${env:GITHUB_WORKSPACE}\install\share\cmake\OpenCL\OpenCLConfig.cmake -Value 'include("${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install\share\cmake\OpenCLHeaders\OpenCLHeadersTargets.cmake")\ninclude("${CMAKE_CURRENT_LIST_DIR}\..\OpenCLICDLoader\OpenCLICDLoaderTargets.cmake")' + $workspace = ${env:GITHUB_WORKSPACE}.replace("\", "/") + New-Item -Type File -Path ${env:GITHUB_WORKSPACE}\install\share\cmake\OpenCL\OpenCLConfig.cmake -Value "include(`"$workspace/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake`")`r`ninclude(`"`${CMAKE_CURRENT_LIST_DIR}/../OpenCLICDLoader/OpenCLICDLoaderTargets.cmake`")" - name: "Consume (MSBuild SDK): Configure/Build/Test" if: matrix.GEN == 'Visual Studio 17 2022' - shell: pwsh run: | + $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} & cmake ` -G '${{matrix.GEN}}' ` + -A $BIN ` + -T ${{matrix.VER}} ` -D CMAKE_C_EXTENSIONS=OFF ` -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" ` -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" ` - -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\sdk" ` + -S "${env:GITHUB_WORKSPACE}\test\pkgconfig\sdk" ` -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" - foreach ($Config in 'Release','Debug') { ` + if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-ICD-Loader in-SDK consume test failed." } + $REG = if('${{matrix.BIN}}' -eq 'x64') {"reg"} else {"${env:SystemRoot}\Syswow64\reg.exe"} + $KEY_NAME = "HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors" + $VALUE_NAME = "${env:GITHUB_WORKSPACE}/build/Release/OpenCLDriverStub.dll" + & $REG ADD $KEY_NAME /v $VALUE_NAME /t REG_DWORD /d 0 + if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." } + foreach ($Config in 'Release','Debug') { & cmake ` --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" ` - --config $Config ` - & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk ` - & ctest ` - --output-on-failure -C $Config + --config $Config + if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-ICD-Loader in-SDK consume test in $Config failed." } + & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk + & ctest --output-on-failure --no-tests=error -C $Config + if ($LASTEXITCODE -ne 0) { throw "Running OpenCL-ICD-Loader in-SDK consume test in $Config failed." } } + & $REG DELETE $KEY_NAME /v $VALUE_NAME /f + if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." } - name: "Consume (Ninja-Multi-Config SDK): Configure/Build/Test" if: matrix.GEN == 'Ninja Multi-Config' - shell: pwsh run: | $VER = switch ('${{matrix.VER}}') { ` 'v141' {'14.1'} ` 'v142' {'14.2'} ` 'v143' {'14.3'} } + Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" + Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" & cmake ` -G '${{matrix.GEN}}' ` -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` @@ -519,40 +552,51 @@ jobs: -D CMAKE_EXE_LINKER_FLAGS=/INCREMENTAL ` -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\install" ` -D DRIVER_STUB_PATH="${env:GITHUB_WORKSPACE}\build\Release\OpenCLDriverStub.dll" ` - -S "${env:GITHUB_WORKSPACE}\tests\pkgconfig\sdk" ` + -S "${env:GITHUB_WORKSPACE}\test\pkgconfig\sdk" ` -B "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" - foreach ($Config in 'Release','Debug') { ` + if ($LASTEXITCODE -ne 0) { throw "Configuring OpenCL-ICD-Loader in-SDK consume test failed." } + $REG = if('${{matrix.BIN}}' -eq 'x64') {"reg"} else {"${env:SystemRoot}\Syswow64\reg.exe"} + $KEY_NAME = "HKEY_LOCAL_MACHINE\SOFTWARE\Khronos\OpenCL\Vendors" + $VALUE_NAME = "${env:GITHUB_WORKSPACE}/build/Release/OpenCLDriverStub.dll" + & $REG ADD $KEY_NAME /v $VALUE_NAME /t REG_DWORD /d 0 + if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." } + foreach ($Config in 'Release','Debug') { & cmake ` --build "${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk" ` - --config $Config ` - & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk ` - & ctest ` - --output-on-failure -C $Config + --config $Config + if ($LASTEXITCODE -ne 0) { throw "Building OpenCL-ICD-Loader in-SDK consume test in $Config failed." } + & cd ${env:GITHUB_WORKSPACE}\downstream\pkgconfig\sdk + & ctest --output-on-failure --no-tests=error -C $Config + if ($LASTEXITCODE -ne 0) { throw "Running OpenCL-ICD-Loader in-SDK consume test in $Config failed." } } + & $REG DELETE $KEY_NAME /v $VALUE_NAME /f + if ($LASTEXITCODE -ne 0) { throw "Editing registry failed." } macos: runs-on: macos-latest needs: format + defaults: + run: + shell: bash strategy: matrix: C_COMPILER: - - /usr/bin/gcc # Actually Clang 14 - - /usr/local/bin/gcc-11 - - /usr/local/bin/gcc-13 + - /usr/bin/clang + - gcc-11 + - gcc-13 GEN: - Xcode - Ninja Multi-Config STD: [99, 11, 17] exclude: - - C_COMPILER: /usr/bin/gcc - GEN: Ninja Multi-Config - - C_COMPILER: /usr/local/bin/gcc-11 + # These entries are excluded, since XCode selects its own compiler + - C_COMPILER: gcc-11 GEN: Xcode - - C_COMPILER: /usr/local/bin/gcc-13 + - C_COMPILER: gcc-13 GEN: Xcode env: - INSTALL_LIBDIR: lib CFLAGS: -Wall -Wextra -pedantic -Werror + CC: ${{ matrix.C_COMPILER }} steps: - name: Checkout OpenCL-ICD-Loader @@ -565,20 +609,16 @@ jobs: path: external/OpenCL-Headers - name: Create Build Environment - shell: bash run: | - cmake -E make_directory $GITHUB_WORKSPACE/build && - cmake -E make_directory $GITHUB_WORKSPACE/install && - if [[ "${{matrix.GEN}}" == "Ninja Multi-Config" && ! `which ninja` ]]; then brew install ninja; fi && # Install Ninja only if it's the selected generator and it's not available. + if [[ "${{matrix.GEN}}" == "Ninja Multi-Config" && ! `which ninja` ]]; then brew install ninja; fi && + if [[ ! `which pkg-config` ]]; then brew install pkg-config; fi && cmake --version - name: Build & install OpenCL-Headers - shell: bash run: cmake -G "${{matrix.GEN}}" -D BUILD_TESTING=OFF - -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} -D CMAKE_C_EXTENSIONS=OFF -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install -S $GITHUB_WORKSPACE/external/OpenCL-Headers @@ -590,11 +630,9 @@ jobs: --parallel `sysctl -n hw.logicalcpu` - name: Configure - shell: bash run: cmake -G "${{matrix.GEN}}" -D BUILD_TESTING=ON - -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} -D CMAKE_C_EXTENSIONS=OFF -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install @@ -602,63 +640,57 @@ jobs: -B $GITHUB_WORKSPACE/build - name: Build - shell: bash run: | cmake --build $GITHUB_WORKSPACE/build --config Release --parallel `sysctl -n hw.logicalcpu` cmake --build $GITHUB_WORKSPACE/build --config Debug --parallel `sysctl -n hw.logicalcpu` - name: Test working-directory: ${{runner.workspace}}/OpenCL-ICD-Loader/build - shell: bash run: | - ctest -C Release --output-on-failure --parallel `sysctl -n hw.logicalcpu` - ctest -C Debug --output-on-failure --parallel `sysctl -n hw.logicalcpu` + ctest -C Release --output-on-failure --no-tests=error --parallel `sysctl -n hw.logicalcpu` + ctest -C Debug --output-on-failure --no-tests=error --parallel `sysctl -n hw.logicalcpu` - name: Test install - shell: bash run: | cmake --build $GITHUB_WORKSPACE/build --config Release --target install - name: Consume (install) - shell: bash run: cmake -G "${{matrix.GEN}}" - -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} -D CMAKE_C_EXTENSIONS=OFF -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/install" -S $GITHUB_WORKSPACE/test/pkgconfig/bare -B $GITHUB_WORKSPACE/build_install && - cmake --build $GITHUB_WORKSPACE/build_install --config Release --parallel `sysctl -n hw.logicalcpu` `if [[ "${{matrix.GEN}}" == "Xcode" ]]; then echo "-- -quiet"; fi;` && - cmake --build $GITHUB_WORKSPACE/build_install --config Debug --parallel `sysctl -n hw.logicalcpu` `if [[ "${{matrix.GEN}}" == "Xcode" ]]; then echo "-- -quiet"; fi;` + cmake --build $GITHUB_WORKSPACE/build_install --config Release --parallel `sysctl -n hw.logicalcpu` && + cmake --build $GITHUB_WORKSPACE/build_install --config Debug --parallel `sysctl -n hw.logicalcpu` - name: Test pkg-config - shell: bash run: | - if [[ ! `which pkg-config` ]]; then brew install pkg-config; fi; - export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig && + export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/lib/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig && pkg-config OpenCL --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" && pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/lib -lOpenCL" - name: Consume pkg-config - shell: bash - run: export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/$INSTALL_LIBDIR/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig && + run: export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/lib/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig && cmake -G "${{matrix.GEN}}" - -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} -D CMAKE_C_EXTENSIONS=OFF -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install" -D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/Release/libOpenCLDriverStub.dylib -B $GITHUB_WORKSPACE/build/downstream/pkgconfig -S $GITHUB_WORKSPACE/test/pkgconfig/pkgconfig && - cmake --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Release --parallel `sysctl -n hw.logicalcpu` `if [[ "${{matrix.GEN}}" == "Xcode" ]]; then echo "-- -quiet"; fi;` && - cmake --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Debug --parallel `sysctl -n hw.logicalcpu` `if [[ "${{matrix.GEN}}" == "Xcode" ]]; then echo "-- -quiet"; fi;` && + cmake --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Release --parallel `sysctl -n hw.logicalcpu` && + cmake --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Debug --parallel `sysctl -n hw.logicalcpu` && cd $GITHUB_WORKSPACE/build/downstream/pkgconfig && - ctest -C Release --output-on-failure --parallel `sysctl -n hw.logicalcpu` && - ctest -C Debug --output-on-failure --parallel `sysctl -n hw.logicalcpu` + ctest -C Release --output-on-failure --no-tests=error --parallel `sysctl -n hw.logicalcpu` && + ctest -C Debug --output-on-failure --no-tests=error --parallel `sysctl -n hw.logicalcpu` android: runs-on: ubuntu-latest needs: format + defaults: + run: + shell: bash strategy: matrix: ABI: @@ -683,7 +715,6 @@ jobs: path: external/OpenCL-Headers - name: Configure & install OpenCL-Headers - shell: bash run: cmake -G "Unix Makefiles" -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} @@ -699,7 +730,6 @@ jobs: -j`nproc` - name: Configure - shell: bash run: cmake -G "Unix Makefiles" -D BUILD_TESTING=ON @@ -713,5 +743,4 @@ jobs: -B $GITHUB_WORKSPACE/build - name: Build - shell: bash run: cmake --build $GITHUB_WORKSPACE/build --parallel `nproc` diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f9eb6ff5..cf4cf530 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,34 +3,32 @@ name: Release on: push: tags: - - "*" + - "v*" env: distroseries: jammy jobs: release: runs-on: ubuntu-latest + defaults: + run: + shell: bash steps: - name: Add PPA - shell: bash run: sudo add-apt-repository -y ppa:${{ vars.PPA }} - name: Install prerequisites - shell: bash run: sudo apt-get update -qq && sudo apt-get install -y cmake devscripts debhelper-compat=13 opencl-c-headers - name: Import GPG signing key - shell: bash run: echo "${{ secrets.DEB_SIGNING_KEY }}" | gpg --import - name: Download and extract source code - shell: bash run: | wget -O $GITHUB_WORKSPACE/source.orig.tar.gz https://github.com/$GITHUB_REPOSITORY/archive/refs/tags/$GITHUB_REF_NAME.tar.gz tar -xvf $GITHUB_WORKSPACE/source.orig.tar.gz - name: Configure project out-of-tree - shell: bash run: cmake -S $GITHUB_WORKSPACE/OpenCL-ICD-Loader* -B $GITHUB_WORKSPACE/../build @@ -42,7 +40,6 @@ jobs: -D DEBIAN_VERSION_SUFFIX=${{ vars.DEB_VERSION_SUFFIX }} - name: Generate packaging scripts - shell: bash run: cmake -D CMAKE_CACHE_PATH=$GITHUB_WORKSPACE/../build/CMakeCache.txt -D ORIG_ARCHIVE=$GITHUB_WORKSPACE/source.orig.tar.gz @@ -52,26 +49,22 @@ jobs: -D DEBIAN_VERSION_SUFFIX=${{ vars.DEB_VERSION_SUFFIX }} -P $GITHUB_WORKSPACE/OpenCL-ICD-Loader*/cmake/DebSourcePkg.cmake - - name: List packaging scripts - shell: bash - run: cat $GITHUB_WORKSPACE/OpenCL-ICD-Loader*/debian/* - - name: Build source package - shell: bash run: | cd $GITHUB_WORKSPACE/OpenCL-ICD-Loader*/ debuild -S -sa - name: Build binary package - shell: bash run: cpack -G DEB -C Release -B $GITHUB_WORKSPACE/../build --config $GITHUB_WORKSPACE/../build/CPackConfig.cmake + # The following step does not depend on the previous step "Build binary package", + # but if the binary package build is unsuccessful, it is better not to push the + # source packages to the PPA - name: Push source package to the PPA - shell: bash run: dput ppa:${{ vars.PPA }} $GITHUB_WORKSPACE/*source.changes - name: Create GitHub release From 4c1b971b167d4815409e5f6755da90b28b939cb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc=20Serf=C5=91z=C5=91?= Date: Fri, 26 Apr 2024 10:32:49 +0200 Subject: [PATCH 16/29] Add DEB packaging --- .gitignore | 3 - CMakeLists.txt | 3 +- cmake/DebSourcePkg.cmake | 7 ++- cmake/Package.cmake | 122 +-------------------------------------- cmake/PackageSetup.cmake | 117 +++++++++++++++++++++++++++++++++++++ 5 files changed, 125 insertions(+), 127 deletions(-) create mode 100644 cmake/PackageSetup.cmake diff --git a/.gitignore b/.gitignore index 5b3b4af9..8a9dc701 100644 --- a/.gitignore +++ b/.gitignore @@ -18,8 +18,5 @@ inc/CL/ inc/EGL/ inc/KHR/ -# CMake -CMakeFiles/ - # Visual Studio Code .vscode diff --git a/CMakeLists.txt b/CMakeLists.txt index b33a532c..a1617d0f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,7 +46,7 @@ if(DEFINED BUILD_SHARED_LIBS) else() set(OPENCL_ICD_LOADER_BUILD_SHARED_LIBS_DEFAULT ON) endif() - option(OPENCL_ICD_LOADER_BUILD_SHARED_LIBS "Build OpenCL ICD Loader as shared library" ${OPENCL_ICD_LOADER_BUILD_SHARED_LIBS_DEFAULT}) +option(OPENCL_ICD_LOADER_BUILD_SHARED_LIBS "Build OpenCL ICD Loader as shared library" ${OPENCL_ICD_LOADER_BUILD_SHARED_LIBS_DEFAULT}) # This option enables/disables support for OpenCL layers in the ICD loader. # It is currently needed default while the specification is being formalized, @@ -239,7 +239,6 @@ install( if (ENABLE_OPENCL_LAYERINFO) install( TARGETS cllayerinfo - EXPORT OpenCLICDLoaderTargets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT cllayerinfo diff --git a/cmake/DebSourcePkg.cmake b/cmake/DebSourcePkg.cmake index 09dd1a99..5fe87e37 100644 --- a/cmake/DebSourcePkg.cmake +++ b/cmake/DebSourcePkg.cmake @@ -25,6 +25,8 @@ if(NOT DEFINED DEBIAN_DISTROSERIES) endif() if(NOT DEFINED ORIG_ARCHIVE) message(WARNING "ORIG_ARCHIVE is not set") +elseif(NOT EXISTS "${ORIG_ARCHIVE}") + message(FATAL_ERROR "ORIG_ARCHIVE is defined, but the file does not exist at \"${ORIG_ARCHIVE}\"") endif() if(NOT DEFINED LATEST_RELEASE_VERSION) message(WARNING "LATEST_RELEASE_VERSION is not set") @@ -43,11 +45,14 @@ set(PROJECT_VERSION "${CMAKE_MATCH_1}") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}") # Package.cmake contains all details for packaging -include(Package) +include(PackageSetup) +# Append a space after every newline in the description. This format is required +# in the control file. string(REPLACE "\n" "\n " CPACK_DEBIAN_DEV_DESCRIPTION "${CPACK_DEBIAN_DEV_DESCRIPTION}") string(REPLACE "\n" "\n " CPACK_DEBIAN_RUNTIME_DESCRIPTION "${CPACK_DEBIAN_RUNTIME_DESCRIPTION}") string(REPLACE "\n" "\n " CPACK_DEBIAN_CLLAYERINFO_DESCRIPTION "${CPACK_DEBIAN_CLLAYERINFO_DESCRIPTION}") + set(DEB_SOURCE_PKG_DIR "${CMAKE_CURRENT_LIST_DIR}/../debian") # Write debian/control file(WRITE "${DEB_SOURCE_PKG_DIR}/control" diff --git a/cmake/Package.cmake b/cmake/Package.cmake index aa4e841d..adfa5056 100644 --- a/cmake/Package.cmake +++ b/cmake/Package.cmake @@ -1,122 +1,4 @@ -set(CPACK_PACKAGE_VENDOR "khronos") - -set(CPACK_DEBIAN_RUNTIME_DESCRIPTION "Generic OpenCL ICD Loader -OpenCL (Open Computing Language) is a multivendor open standard for -general-purpose parallel programming of heterogeneous systems that include -CPUs, GPUs and other processors. -. -This package contains an installable client driver loader (ICD Loader) -library that can be used to load any (free or non-free) installable client -driver (ICD) for OpenCL. It acts as a demultiplexer so several ICD can -be installed and used together.") - -set(CPACK_DEBIAN_DEV_DESCRIPTION "OpenCL development files -OpenCL (Open Computing Language) is a multivendor open standard for -general-purpose parallel programming of heterogeneous systems that include -CPUs, GPUs and other processors. -. -This package provides the development files: headers and libraries. -. -It also ensures that the ocl-icd ICD loader is installed so its additional -features (compared to the OpenCL norm) can be used: .pc file, ability to -select an ICD without root privilege, etc.") - -set(CPACK_DEBIAN_CLLAYERINFO_DESCRIPTION "Query OpenCL Layer system information -OpenCL (Open Computing Language) is a multivendor open standard for -general-purpose parallel programming of heterogeneous systems that include -CPUs, GPUs and other processors. It supports system and user configured layers -to intercept OpenCL API calls. -. -This package contains a tool that lists the layers loaded by the the ocl-icd -OpenCL ICD Loader.") - -set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") - -set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md") - -if(NOT CPACK_PACKAGING_INSTALL_PREFIX) - set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") -endif() - -# DEB packaging configuration -set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_VENDOR}) - -set(CPACK_DEBIAN_PACKAGE_HOMEPAGE - "https://github.com/KhronosGroup/OpenCL-ICD-Loader") - -# Version number [epoch:]upstream_version[-debian_revision] -set(CPACK_DEBIAN_PACKAGE_VERSION "${PROJECT_VERSION}") # upstream_version -if(DEFINED LATEST_RELEASE_VERSION) - # Remove leading "v", if exists - string(LENGTH "${LATEST_RELEASE_VERSION}" LATEST_RELEASE_VERSION_LENGTH) - string(SUBSTRING "${LATEST_RELEASE_VERSION}" 0 1 LATEST_RELEASE_VERSION_FRONT) - if(LATEST_RELEASE_VERSION_FRONT STREQUAL "v") - string(SUBSTRING "${LATEST_RELEASE_VERSION}" 1 ${LATEST_RELEASE_VERSION_LENGTH} LATEST_RELEASE_VERSION) - endif() - - string(APPEND CPACK_DEBIAN_PACKAGE_VERSION "~${LATEST_RELEASE_VERSION}") -endif() -set(CPACK_DEBIAN_PACKAGE_RELEASE "1") # debian_revision (because this is a - # non-native pkg) -set(PACKAGE_VERSION_REVISION "${CPACK_DEBIAN_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_RELEASE}${DEBIAN_VERSION_SUFFIX}") - -# Get architecture -execute_process(COMMAND dpkg "--print-architecture" OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE) -string(STRIP "${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}" CPACK_DEBIAN_PACKAGE_ARCHITECTURE) - -########################################################## -# Components # -########################################################## - -set(CPACK_DEB_COMPONENT_INSTALL ON) -set(CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS ON) # Component dependencies are reflected in package relationships -set(CPACK_COMPONENTS_ALL runtime dev cllayerinfo) - -set(PACKAGE_NAME_PREFIX "khronos-opencl-loader") - -## Package runtime component -set(CPACK_DEBIAN_RUNTIME_PACKAGE_NAME "${PACKAGE_NAME_PREFIX}-libopencl1") - -# Package file name in deb format: -# _-_.deb -set(CPACK_DEBIAN_RUNTIME_FILE_NAME "${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") -set(CPACK_DEBIAN_RUNTIME_PACKAGE_SECTION "libs") -# Dependencies -set(CPACK_DEBIAN_RUNTIME_PACKAGE_DEPENDS "libc6") -set(CPACK_DEBIAN_RUNTIME_PACKAGE_SUGGESTS "opencl-icd") -set(CPACK_DEBIAN_RUNTIME_PACKAGE_CONFLICTS "amd-app, libopencl1, nvidia-libopencl1-dev") -set(CPACK_DEBIAN_RUNTIME_PACKAGE_REPLACES "amd-app, libopencl1, nvidia-libopencl1-dev") -set(CPACK_DEBIAN_RUNTIME_PACKAGE_PROVIDES "libopencl-1.1-1, libopencl-1.2-1, libopencl-2.0-1, libopencl-2.1-1, libopencl-2.2-1, libopencl-3.0-1, libopencl1") - -## Package dev component -set(CPACK_DEBIAN_DEV_PACKAGE_NAME "${PACKAGE_NAME_PREFIX}-opencl-dev") - -# Package file name in deb format: -# _-_.deb -set(CPACK_DEBIAN_DEV_FILE_NAME "${CPACK_DEBIAN_DEV_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") -set(CPACK_DEBIAN_DEV_PACKAGE_SECTION "libdevel") - -# Dependencies -set(CPACK_DEBIAN_DEV_PACKAGE_DEPENDS "opencl-c-headers (>= ${CPACK_DEBIAN_PACKAGE_VERSION}) | opencl-headers (>= ${CPACK_DEBIAN_PACKAGE_VERSION})") -set(CPACK_DEBIAN_DEV_PACKAGE_RECOMMENDS "libgl1-mesa-dev | libgl-dev") -set(CPACK_DEBIAN_DEV_PACKAGE_CONFLICTS "opencl-dev") -set(CPACK_DEBIAN_DEV_PACKAGE_BREAKS "amd-libopencl1, nvidia-libopencl1, ocl-icd-libopencl1 (<< ${CPACK_DEBIAN_PACKAGE_VERSION})") -set(CPACK_DEBIAN_DEV_PACKAGE_REPLACES "amd-libopencl1, nvidia-libopencl1, ocl-icd-libopencl1 (<< ${CPACK_DEBIAN_PACKAGE_VERSION}), opencl-dev") -set(CPACK_DEBIAN_DEV_PACKAGE_PROVIDES "opencl-dev") -set(CPACK_COMPONENT_DEV_DEPENDS runtime) - -## Package cllayerinfo component -set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_NAME "${PACKAGE_NAME_PREFIX}-cllayerinfo") -set(CPACK_DEBIAN_CLLAYERINFO_FILE_NAME "${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") -# Dependencies -set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_DEPENDS "libc6") -set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_SECTION "admin") -set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_CONFLICTS "cllayerinfo") -set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_REPLACES "cllayerinfo") -set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_PROVIDES "cllayerinfo") -set(CPACK_COMPONENT_CLLAYERINFO_DEPENDS runtime) - -if (NOT CMAKE_SCRIPT_MODE_FILE) # Don't run in script mode +include("${CMAKE_CURRENT_LIST_DIR}/PackageSetup.cmake") # Configuring pkgconfig @@ -156,5 +38,3 @@ install( set(CPACK_DEBIAN_PACKAGE_DEBUG ON) include(CPack) - -endif() diff --git a/cmake/PackageSetup.cmake b/cmake/PackageSetup.cmake new file mode 100644 index 00000000..35b37360 --- /dev/null +++ b/cmake/PackageSetup.cmake @@ -0,0 +1,117 @@ +set(CPACK_PACKAGE_VENDOR "khronos") + +set(CPACK_DEBIAN_RUNTIME_DESCRIPTION "Generic OpenCL ICD Loader +OpenCL (Open Computing Language) is a multivendor open standard for +general-purpose parallel programming of heterogeneous systems that include +CPUs, GPUs and other processors. +. +This package contains an installable client driver loader (ICD Loader) +library that can be used to load any (free or non-free) installable client +driver (ICD) for OpenCL. It acts as a demultiplexer so several ICD can +be installed and used together.") + +set(CPACK_DEBIAN_DEV_DESCRIPTION "OpenCL development files +OpenCL (Open Computing Language) is a multivendor open standard for +general-purpose parallel programming of heterogeneous systems that include +CPUs, GPUs and other processors. +. +This package provides the development files: headers and libraries. +. +It also ensures that the ocl-icd ICD loader is installed so its additional +features (compared to the OpenCL norm) can be used: .pc file, ability to +select an ICD without root privilege, etc.") + +set(CPACK_DEBIAN_CLLAYERINFO_DESCRIPTION "Query OpenCL Layer system information +OpenCL (Open Computing Language) is a multivendor open standard for +general-purpose parallel programming of heterogeneous systems that include +CPUs, GPUs and other processors. It supports system and user configured layers +to intercept OpenCL API calls. +. +This package contains a tool that lists the layers loaded by the the ocl-icd +OpenCL ICD Loader.") + +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") + +set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md") + +if(NOT CPACK_PACKAGING_INSTALL_PREFIX) + set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") +endif() + +# DEB packaging configuration +set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_VENDOR}) + +set(CPACK_DEBIAN_PACKAGE_HOMEPAGE + "https://github.com/KhronosGroup/OpenCL-ICD-Loader") + +# Version number [epoch:]upstream_version[-debian_revision] +set(CPACK_DEBIAN_PACKAGE_VERSION "${PROJECT_VERSION}") # upstream_version +if(DEFINED LATEST_RELEASE_VERSION) + # Remove leading "v", if exists + string(LENGTH "${LATEST_RELEASE_VERSION}" LATEST_RELEASE_VERSION_LENGTH) + string(SUBSTRING "${LATEST_RELEASE_VERSION}" 0 1 LATEST_RELEASE_VERSION_FRONT) + if(LATEST_RELEASE_VERSION_FRONT STREQUAL "v") + string(SUBSTRING "${LATEST_RELEASE_VERSION}" 1 ${LATEST_RELEASE_VERSION_LENGTH} LATEST_RELEASE_VERSION) + endif() + + string(APPEND CPACK_DEBIAN_PACKAGE_VERSION "~${LATEST_RELEASE_VERSION}") +endif() +set(CPACK_DEBIAN_PACKAGE_RELEASE "1") # debian_revision (because this is a + # non-native pkg) +set(PACKAGE_VERSION_REVISION "${CPACK_DEBIAN_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_RELEASE}${DEBIAN_VERSION_SUFFIX}") + +# Get architecture +execute_process(COMMAND dpkg "--print-architecture" OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE) +string(STRIP "${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}" CPACK_DEBIAN_PACKAGE_ARCHITECTURE) + +########################################################## +# Components # +########################################################## + +set(CPACK_DEB_COMPONENT_INSTALL ON) +set(CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS ON) # Component dependencies are reflected in package relationships +set(CPACK_COMPONENTS_ALL runtime dev cllayerinfo) + +set(PACKAGE_NAME_PREFIX "khronos-opencl-loader") + +## Package runtime component +set(CPACK_DEBIAN_RUNTIME_PACKAGE_NAME "${PACKAGE_NAME_PREFIX}-libopencl1") + +# Package file name in deb format: +# _-_.deb +set(CPACK_DEBIAN_RUNTIME_FILE_NAME "${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") +set(CPACK_DEBIAN_RUNTIME_PACKAGE_SECTION "libs") +# Dependencies +set(CPACK_DEBIAN_RUNTIME_PACKAGE_DEPENDS "libc6") +set(CPACK_DEBIAN_RUNTIME_PACKAGE_SUGGESTS "opencl-icd") +set(CPACK_DEBIAN_RUNTIME_PACKAGE_CONFLICTS "amd-app, libopencl1, nvidia-libopencl1-dev") +set(CPACK_DEBIAN_RUNTIME_PACKAGE_REPLACES "amd-app, libopencl1, nvidia-libopencl1-dev") +set(CPACK_DEBIAN_RUNTIME_PACKAGE_PROVIDES "libopencl-1.1-1, libopencl-1.2-1, libopencl-2.0-1, libopencl-2.1-1, libopencl-2.2-1, libopencl-3.0-1, libopencl1") + +## Package dev component +set(CPACK_DEBIAN_DEV_PACKAGE_NAME "${PACKAGE_NAME_PREFIX}-opencl-dev") + +# Package file name in deb format: +# _-_.deb +set(CPACK_DEBIAN_DEV_FILE_NAME "${CPACK_DEBIAN_DEV_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") +set(CPACK_DEBIAN_DEV_PACKAGE_SECTION "libdevel") + +# Dependencies +set(CPACK_DEBIAN_DEV_PACKAGE_DEPENDS "opencl-c-headers (>= ${CPACK_DEBIAN_PACKAGE_VERSION}) | opencl-headers (>= ${CPACK_DEBIAN_PACKAGE_VERSION})") +set(CPACK_DEBIAN_DEV_PACKAGE_RECOMMENDS "libgl1-mesa-dev | libgl-dev") +set(CPACK_DEBIAN_DEV_PACKAGE_CONFLICTS "opencl-dev") +set(CPACK_DEBIAN_DEV_PACKAGE_BREAKS "amd-libopencl1, nvidia-libopencl1, ocl-icd-libopencl1 (<< ${CPACK_DEBIAN_PACKAGE_VERSION})") +set(CPACK_DEBIAN_DEV_PACKAGE_REPLACES "amd-libopencl1, nvidia-libopencl1, ocl-icd-libopencl1 (<< ${CPACK_DEBIAN_PACKAGE_VERSION}), opencl-dev") +set(CPACK_DEBIAN_DEV_PACKAGE_PROVIDES "opencl-dev") +set(CPACK_COMPONENT_DEV_DEPENDS runtime) + +## Package cllayerinfo component +set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_NAME "${PACKAGE_NAME_PREFIX}-cllayerinfo") +set(CPACK_DEBIAN_CLLAYERINFO_FILE_NAME "${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") +# Dependencies +set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_DEPENDS "libc6") +set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_SECTION "admin") +set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_CONFLICTS "cllayerinfo") +set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_REPLACES "cllayerinfo") +set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_PROVIDES "cllayerinfo") +set(CPACK_COMPONENT_CLLAYERINFO_DEPENDS runtime) From 5e8aaf0f4cf369d53aec270ba8d8e326fa6278bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc=20Serf=C5=91z=C5=91?= Date: Fri, 26 Apr 2024 10:33:06 +0200 Subject: [PATCH 17/29] Update pkgconfig tests --- test/pkgconfig/bare/CMakeLists.txt | 15 ++++++++++----- test/pkgconfig/pkgconfig.c | 14 ++++++++++++++ test/pkgconfig/pkgconfig/CMakeLists.txt | 15 ++++++++++----- test/pkgconfig/sdk/CMakeLists.txt | 15 ++++++++++----- 4 files changed, 44 insertions(+), 15 deletions(-) diff --git a/test/pkgconfig/bare/CMakeLists.txt b/test/pkgconfig/bare/CMakeLists.txt index 5e4c099e..f58f21e9 100644 --- a/test/pkgconfig/bare/CMakeLists.txt +++ b/test/pkgconfig/bare/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.16) project(PkgConfigTest LANGUAGES C @@ -35,7 +35,12 @@ add_test( COMMAND ${PROJECT_NAME} ) -set_tests_properties(${PROJECT_NAME} - PROPERTIES - ENVIRONMENT "OCL_ICD_FILENAMES=${DRIVER_STUB_PATH}" -) +if(DEFINED DRIVER_STUB_PATH) + file(TO_CMAKE_PATH "${DRIVER_STUB_PATH}" DRIVER_STUB_PATH_CMAKE) + string(REGEX MATCH ".*/" DRIVER_STUB_DIR "${DRIVER_STUB_PATH_CMAKE}") + set_tests_properties(${PROJECT_NAME} + PROPERTIES + ENVIRONMENT "OCL_ICD_FILENAMES=${DRIVER_STUB_PATH}" + WORKING_DIRECTORY "${DRIVER_STUB_DIR}" + ) +endif() diff --git a/test/pkgconfig/pkgconfig.c b/test/pkgconfig/pkgconfig.c index 6335dc86..aadd25f1 100644 --- a/test/pkgconfig/pkgconfig.c +++ b/test/pkgconfig/pkgconfig.c @@ -7,6 +7,7 @@ #include // printf #include // malloc #include // UINTMAX_MAX +#include // strcmp void checkErr(cl_int err, const char * name) { @@ -21,6 +22,7 @@ int main(void) { cl_int CL_err = CL_SUCCESS; cl_uint numPlatforms = 0; + cl_int stub_platform_found = CL_FALSE; CL_err = clGetPlatformIDs(0, NULL, &numPlatforms); checkErr(CL_err, "clGetPlatformIDs(numPlatforms)"); @@ -48,9 +50,21 @@ int main(void) checkErr(CL_err, "clGetPlatformInfo(CL_PLATFORM_VENDOR, vendor_length, platform_name)"); printf("%s\n", platform_name); + + if (strcmp(platform_name, "stubvendorxxx") == 0) + { + stub_platform_found = CL_TRUE; + } + fflush(NULL); free(platform_name); } + if (!stub_platform_found) + { + printf("Did not locate stub platform\n"); + return -1; + } + return 0; } diff --git a/test/pkgconfig/pkgconfig/CMakeLists.txt b/test/pkgconfig/pkgconfig/CMakeLists.txt index cffce75d..436fffdb 100644 --- a/test/pkgconfig/pkgconfig/CMakeLists.txt +++ b/test/pkgconfig/pkgconfig/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.16) find_package(PkgConfig REQUIRED) project(PkgConfigTest @@ -49,7 +49,12 @@ add_test( COMMAND ${PROJECT_NAME} ) -set_tests_properties(${PROJECT_NAME} - PROPERTIES - ENVIRONMENT "OCL_ICD_FILENAMES=${DRIVER_STUB_PATH}" -) +if(DEFINED DRIVER_STUB_PATH) + file(TO_CMAKE_PATH "${DRIVER_STUB_PATH}" DRIVER_STUB_PATH_CMAKE) + string(REGEX MATCH ".*/" DRIVER_STUB_DIR "${DRIVER_STUB_PATH_CMAKE}") + set_tests_properties(${PROJECT_NAME} + PROPERTIES + ENVIRONMENT "OCL_ICD_FILENAMES=${DRIVER_STUB_PATH}" + WORKING_DIRECTORY "${DRIVER_STUB_DIR}" + ) +endif() diff --git a/test/pkgconfig/sdk/CMakeLists.txt b/test/pkgconfig/sdk/CMakeLists.txt index fced859b..83a52b70 100644 --- a/test/pkgconfig/sdk/CMakeLists.txt +++ b/test/pkgconfig/sdk/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.16) project(PkgConfigTest LANGUAGES C @@ -34,7 +34,12 @@ add_test( COMMAND ${PROJECT_NAME} ) -set_tests_properties(${PROJECT_NAME} - PROPERTIES - ENVIRONMENT "OCL_ICD_FILENAMES=${DRIVER_STUB_PATH}" -) +if(DEFINED DRIVER_STUB_PATH) + file(TO_CMAKE_PATH "${DRIVER_STUB_PATH}" DRIVER_STUB_PATH_CMAKE) + string(REGEX MATCH ".*/" DRIVER_STUB_DIR "${DRIVER_STUB_PATH_CMAKE}") + set_tests_properties(${PROJECT_NAME} + PROPERTIES + ENVIRONMENT "OCL_ICD_FILENAMES=${DRIVER_STUB_PATH}" + WORKING_DIRECTORY "${DRIVER_STUB_DIR}" + ) +endif() From 91472a5409218703d3df3ebb23ff9b6d7ebae1be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc=20Serf=C5=91z=C5=91?= Date: Fri, 26 Apr 2024 12:26:10 +0200 Subject: [PATCH 18/29] Warning fixes --- loader/windows/icd_windows.c | 4 ++ test/driver_stub/cl.c | 58 +++++++++---------------- test/loader_test/test_program_objects.c | 10 ++--- 3 files changed, 29 insertions(+), 43 deletions(-) diff --git a/loader/windows/icd_windows.c b/loader/windows/icd_windows.c index d7716253..44a8a98f 100644 --- a/loader/windows/icd_windows.c +++ b/loader/windows/icd_windows.c @@ -185,6 +185,10 @@ void layerFree(WinLayer *pWinLayer) // for each vendor encountered BOOL CALLBACK khrIcdOsVendorsEnumerate(PINIT_ONCE InitOnce, PVOID Parameter, PVOID *lpContext) { + (void)InitOnce; + (void)Parameter; + (void)lpContext; + LONG result; BOOL status = FALSE, currentStatus = FALSE; const char* platformsName = "SOFTWARE\\Khronos\\OpenCL\\Vendors"; diff --git a/test/driver_stub/cl.c b/test/driver_stub/cl.c index 398fee8b..ba37a851 100644 --- a/test/driver_stub/cl.c +++ b/test/driver_stub/cl.c @@ -93,11 +93,9 @@ clGetPlatformIDs(cl_uint num_entries , } CL_API_ENTRY cl_int CL_API_CALL -clGetPlatformInfo(cl_platform_id platform, - cl_platform_info param_name, - size_t param_value_size, - void * param_value, - size_t * param_value_size_ret) CL_API_SUFFIX__VERSION_1_0 +clGetPlatformInfo(cl_platform_id platform_id, cl_platform_info param_name, + size_t param_value_size, void *param_value, + size_t *param_value_size_ret) CL_API_SUFFIX__VERSION_1_0 { cl_int ret = CL_SUCCESS; const char *returnString = NULL; @@ -116,23 +114,15 @@ clGetPlatformInfo(cl_platform_id platform, } // select the string to return switch(param_name) { - case CL_PLATFORM_PROFILE: - returnString = platform->profile; - break; - case CL_PLATFORM_VERSION: - returnString = platform->version; - break; - case CL_PLATFORM_NAME: - returnString = platform->name; - break; - case CL_PLATFORM_VENDOR: - returnString = platform->vendor; - break; + case CL_PLATFORM_PROFILE: returnString = platform_id->profile; break; + case CL_PLATFORM_VERSION: returnString = platform_id->version; break; + case CL_PLATFORM_NAME: returnString = platform_id->name; break; + case CL_PLATFORM_VENDOR: returnString = platform_id->vendor; break; case CL_PLATFORM_EXTENSIONS: - returnString = platform->extensions; + returnString = platform_id->extensions; break; case CL_PLATFORM_ICD_SUFFIX_KHR: - returnString = platform->suffix; + returnString = platform_id->suffix; break; default: ret = CL_INVALID_VALUE; @@ -162,12 +152,9 @@ clGetPlatformInfo(cl_platform_id platform, /* Device APIs */ -CL_API_ENTRY cl_int CL_API_CALL -clGetDeviceIDs(cl_platform_id platform, - cl_device_type device_type, - cl_uint num_entries, - cl_device_id * devices, - cl_uint * num_devices) CL_API_SUFFIX__VERSION_1_0 +CL_API_ENTRY cl_int CL_API_CALL clGetDeviceIDs( + cl_platform_id platform_id, cl_device_type device_type, cl_uint num_entries, + cl_device_id *devices, cl_uint *num_devices) CL_API_SUFFIX__VERSION_1_0 { cl_int ret = CL_SUCCESS; @@ -186,12 +173,8 @@ clGetDeviceIDs(cl_platform_id platform, } done: - test_icd_stub_log("clGetDeviceIDs(%p, %x, %u, %p, %p)\n", - platform, - device_type, - num_entries, - devices, - num_devices); + test_icd_stub_log("clGetDeviceIDs(%p, %x, %u, %p, %p)\n", platform_id, + device_type, num_entries, devices, num_devices); test_icd_stub_log("Value returned: %d\n", ret); return ret; } @@ -950,10 +933,10 @@ clLinkProgram(cl_context context , CL_API_ENTRY cl_int CL_API_CALL -clUnloadPlatformCompiler(cl_platform_id platform) CL_API_SUFFIX__VERSION_1_2 +clUnloadPlatformCompiler(cl_platform_id platform_id) CL_API_SUFFIX__VERSION_1_2 { cl_int return_value = CL_OUT_OF_RESOURCES; - test_icd_stub_log("clUnloadPlatformCompiler(%p)\n", platform); + test_icd_stub_log("clUnloadPlatformCompiler(%p)\n", platform_id); test_icd_stub_log("Value returned: %d\n", return_value); return return_value; } @@ -1837,14 +1820,13 @@ clEnqueueNativeKernel(cl_command_queue command_queue , static void extFunc(void) { } -CL_API_ENTRY void * CL_API_CALL -clGetExtensionFunctionAddressForPlatform(cl_platform_id platform , - const char * func_name) CL_API_SUFFIX__VERSION_1_2 +CL_API_ENTRY void *CL_API_CALL clGetExtensionFunctionAddressForPlatform( + cl_platform_id platform_id, + const char *func_name) CL_API_SUFFIX__VERSION_1_2 { void *return_value = (void *)(size_t)&extFunc; test_icd_stub_log("clGetExtensionFunctionAddressForPlatform(%p, %p)\n", - platform, - func_name); + platform_id, func_name); test_icd_stub_log("Value returned: %p\n", return_value); return return_value; diff --git a/test/loader_test/test_program_objects.c b/test/loader_test/test_program_objects.c index 6150abce..ec59da16 100644 --- a/test/loader_test/test_program_objects.c +++ b/test/loader_test/test_program_objects.c @@ -123,7 +123,7 @@ int test_clCompileProgram(const struct clCompileProgram_st *data) int test_clLinkProgram(const struct clLinkProgram_st *data) { - cl_program program; + cl_program linked_program; cl_int ret_val; test_icd_app_log("clLinkProgram(%p, %u, %p, %p, %u, %p, %p, %p, %p)\n", context, @@ -136,7 +136,7 @@ int test_clLinkProgram(const struct clLinkProgram_st *data) data->user_data, data->errcode_ret); - program=clLinkProgram(context, + linked_program=clLinkProgram(context, data->num_devices, data->device_list, data->options, @@ -146,10 +146,10 @@ int test_clLinkProgram(const struct clLinkProgram_st *data) data->user_data, data->errcode_ret); - test_icd_app_log("Value returned: %p\n", program); + test_icd_app_log("Value returned: %p\n", linked_program); - test_icd_app_log("clReleaseProgram(%p)\n", program); - ret_val = clReleaseProgram(program); + test_icd_app_log("clReleaseProgram(%p)\n", linked_program); + ret_val = clReleaseProgram(linked_program); test_icd_app_log("Value returned: %d\n", ret_val); return 0; From a54a21f641b8d1c3afe0d51f04c113d6925f635d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc=20Serf=C5=91z=C5=91?= Date: Wed, 27 Sep 2023 15:27:51 +0200 Subject: [PATCH 19/29] Added update-alternatives to the Debian source package --- cmake/DebSourcePkg.cmake | 28 ++++++++++++++++++++++++---- cmake/PackageSetup.cmake | 13 ++++--------- 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/cmake/DebSourcePkg.cmake b/cmake/DebSourcePkg.cmake index 5fe87e37..eb10e6a0 100644 --- a/cmake/DebSourcePkg.cmake +++ b/cmake/DebSourcePkg.cmake @@ -60,7 +60,7 @@ file(WRITE "${DEB_SOURCE_PKG_DIR}/control" Section: ${CPACK_DEBIAN_DEV_PACKAGE_SECTION} Priority: optional Maintainer: ${DEBIAN_PACKAGE_MAINTAINER} -Build-Depends: cmake, debhelper-compat (=13), ${CPACK_DEBIAN_DEV_PACKAGE_DEPENDS} +Build-Depends: cmake, debhelper-compat (=13), opencl-c-headers Rules-Requires-Root: no Homepage: ${CPACK_DEBIAN_PACKAGE_HOMEPAGE} Standards-Version: 4.6.2 @@ -81,8 +81,10 @@ Section: ${CPACK_DEBIAN_RUNTIME_PACKAGE_SECTION} Architecture: any Multi-Arch: same Depends: ${CPACK_DEBIAN_RUNTIME_PACKAGE_DEPENDS} -Conflicts: ${CPACK_DEBIAN_RUNTIME_PACKAGE_CONFLICTS} -Replaces: ${CPACK_DEBIAN_RUNTIME_PACKAGE_REPLACES} +# Conflicts and replaces deliberately not added +# The runtime package provides libOpenCL.so.1.0.0 and libOpenCL.so.1 via update-alternatives +# Conflicts: ${CPACK_DEBIAN_RUNTIME_PACKAGE_CONFLICTS} +# Replaces: ${CPACK_DEBIAN_RUNTIME_PACKAGE_REPLACES} Provides: ${CPACK_DEBIAN_RUNTIME_PACKAGE_PROVIDES} Description: ${CPACK_DEBIAN_RUNTIME_DESCRIPTION} @@ -113,14 +115,32 @@ file(WRITE "${DEB_SOURCE_PKG_DIR}/rules" override_dh_auto_configure: \tdh_auto_configure -- -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF + +GENERATED_MAINTAINER_SCRIPTS := $(patsubst %.in,%,$(wildcard debian/*.alternatives.in)) + +$(GENERATED_MAINTAINER_SCRIPTS): %: %.in +\tsed \"s%@DEB_HOST_MULTIARCH@%$(DEB_HOST_MULTIARCH)%g\" < $< > $@ + +execute_before_dh_install: $(GENERATED_MAINTAINER_SCRIPTS) +\ttrue # An empty rule would confuse dh ") file(WRITE "${DEB_SOURCE_PKG_DIR}/${CPACK_DEBIAN_DEV_PACKAGE_NAME}.install" "usr/lib/*/pkgconfig usr/lib/*/lib*.so usr/share ") +# The .so files are installed to a different directory, and then linked back +# the the original location via update-alternatives. file(WRITE "${DEB_SOURCE_PKG_DIR}/${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME}.install" -"usr/lib/*/lib*.so.* +"usr/lib/*/lib*.so.* usr/lib/\${DEB_HOST_MULTIARCH}/KhronosOpenCLICDLoader +") +file(WRITE "${DEB_SOURCE_PKG_DIR}/${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME}.alternatives.in" +"Name: libOpenCL.so.1.0.0-@DEB_HOST_MULTIARCH@ +Link: /usr/lib/@DEB_HOST_MULTIARCH@/libOpenCL.so.1.0.0 +Alternative: /usr/lib/@DEB_HOST_MULTIARCH@/KhronosOpenCLICDLoader/libOpenCL.so.1.0.0 +Dependents: + /usr/lib/@DEB_HOST_MULTIARCH@/libOpenCL.so.1 libOpenCL.so.1-@DEB_HOST_MULTIARCH@ /usr/lib/@DEB_HOST_MULTIARCH@/KhronosOpenCLICDLoader/libOpenCL.so.1 +Priority: 100 ") file(WRITE "${DEB_SOURCE_PKG_DIR}/${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_NAME}.install" "usr/bin diff --git a/cmake/PackageSetup.cmake b/cmake/PackageSetup.cmake index 35b37360..b4aade8a 100644 --- a/cmake/PackageSetup.cmake +++ b/cmake/PackageSetup.cmake @@ -69,7 +69,7 @@ string(STRIP "${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}" CPACK_DEBIAN_PACKAGE_ARCHITE ########################################################## set(CPACK_DEB_COMPONENT_INSTALL ON) -set(CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS ON) # Component dependencies are reflected in package relationships +set(CPACK_DEBIAN_ENABLE_COMPONENT_DEPENDS OFF) # Component dependencies are NOT reflected in package relationships set(CPACK_COMPONENTS_ALL runtime dev cllayerinfo) set(PACKAGE_NAME_PREFIX "khronos-opencl-loader") @@ -97,13 +97,12 @@ set(CPACK_DEBIAN_DEV_FILE_NAME "${CPACK_DEBIAN_DEV_PACKAGE_NAME}_${PACKAGE_VERSI set(CPACK_DEBIAN_DEV_PACKAGE_SECTION "libdevel") # Dependencies -set(CPACK_DEBIAN_DEV_PACKAGE_DEPENDS "opencl-c-headers (>= ${CPACK_DEBIAN_PACKAGE_VERSION}) | opencl-headers (>= ${CPACK_DEBIAN_PACKAGE_VERSION})") +set(CPACK_DEBIAN_DEV_PACKAGE_DEPENDS "opencl-c-headers (>= ${CPACK_DEBIAN_PACKAGE_VERSION}) | opencl-headers (>= ${CPACK_DEBIAN_PACKAGE_VERSION}), ${CPACK_DEBIAN_RUNTIME_PACKAGE_NAME} (>= ${CPACK_DEBIAN_PACKAGE_VERSION}) | libopencl1") set(CPACK_DEBIAN_DEV_PACKAGE_RECOMMENDS "libgl1-mesa-dev | libgl-dev") set(CPACK_DEBIAN_DEV_PACKAGE_CONFLICTS "opencl-dev") -set(CPACK_DEBIAN_DEV_PACKAGE_BREAKS "amd-libopencl1, nvidia-libopencl1, ocl-icd-libopencl1 (<< ${CPACK_DEBIAN_PACKAGE_VERSION})") -set(CPACK_DEBIAN_DEV_PACKAGE_REPLACES "amd-libopencl1, nvidia-libopencl1, ocl-icd-libopencl1 (<< ${CPACK_DEBIAN_PACKAGE_VERSION}), opencl-dev") +set(CPACK_DEBIAN_DEV_PACKAGE_BREAKS "amd-libopencl1, nvidia-libopencl1") +set(CPACK_DEBIAN_DEV_PACKAGE_REPLACES "amd-libopencl1, nvidia-libopencl1, opencl-dev") set(CPACK_DEBIAN_DEV_PACKAGE_PROVIDES "opencl-dev") -set(CPACK_COMPONENT_DEV_DEPENDS runtime) ## Package cllayerinfo component set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_NAME "${PACKAGE_NAME_PREFIX}-cllayerinfo") @@ -111,7 +110,3 @@ set(CPACK_DEBIAN_CLLAYERINFO_FILE_NAME "${CPACK_DEBIAN_CLLAYERINFO_PACKAGE_NAME} # Dependencies set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_DEPENDS "libc6") set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_SECTION "admin") -set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_CONFLICTS "cllayerinfo") -set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_REPLACES "cllayerinfo") -set(CPACK_DEBIAN_CLLAYERINFO_PACKAGE_PROVIDES "cllayerinfo") -set(CPACK_COMPONENT_CLLAYERINFO_DEPENDS runtime) From 05e0bc0b14ef34add13c9a99c25918149c7d4052 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc=20Serf=C5=91z=C5=91?= Date: Thu, 28 Sep 2023 15:38:49 +0200 Subject: [PATCH 20/29] Removed unneeded STD in macos ci --- .github/workflows/presubmit.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index 1dc093bb..480d9122 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -587,7 +587,6 @@ jobs: GEN: - Xcode - Ninja Multi-Config - STD: [99, 11, 17] exclude: # These entries are excluded, since XCode selects its own compiler - C_COMPILER: gcc-11 From 3237bfd5ec5d04162ac9cf39c39e00e4a7a6f801 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Ferenc=20Nagy-Egri?= Date: Tue, 5 Dec 2023 17:17:07 +0100 Subject: [PATCH 21/29] Ignore Markdown changes in CI --- .github/workflows/presubmit.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index 480d9122..aeb372f2 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -1,6 +1,12 @@ name: Presubmit -on: [push, pull_request] +on: + push: + paths-ignore: + - '**/*.md' + pull_request: + paths-ignore: + - '**/*.md' jobs: format: From b54bac940092820e58202a7b943d19f6954c299e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc=20Serf=C5=91z=C5=91?= Date: Fri, 17 May 2024 16:22:59 +0200 Subject: [PATCH 22/29] fix(ci): Using actions/checkout@v4 --- .github/workflows/presubmit.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index aeb372f2..9588c8fb 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -16,7 +16,7 @@ jobs: run: shell: bash steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: # repository: ${{ github.repository }} (default) fetch-depth: 0 @@ -98,10 +98,10 @@ jobs: echo "CTEST_EXE=ctest" >> "$GITHUB_ENV" - name: Checkout OpenCL-ICD-Loader - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Checkout OpenCL-Headers - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: path: external/OpenCL-Headers # ToDo: Change to KhronosGroup/OpenCL-Headers:main @@ -290,10 +290,10 @@ jobs: Remove-Item ~\Downloads\* - name: Checkout OpenCL-ICD-Loader - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Checkout OpenCL-Headers - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: KhronosGroup/OpenCL-Headers path: external/OpenCL-Headers @@ -605,10 +605,10 @@ jobs: steps: - name: Checkout OpenCL-ICD-Loader - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Checkout OpenCL-Headers - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: KhronosGroup/OpenCL-Headers path: external/OpenCL-Headers @@ -711,10 +711,10 @@ jobs: CFLAGS: -Wall -Wextra -pedantic -Werror steps: - name: Checkout OpenCL-ICD-Loader - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Checkout OpenCL-Headers - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: KhronosGroup/OpenCL-Headers path: external/OpenCL-Headers From 45b622de78dce205f7c8cc8d4e060bcb7c3cbcd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc=20Serf=C5=91z=C5=91?= Date: Fri, 17 May 2024 16:23:46 +0200 Subject: [PATCH 23/29] fix(ci): Removed VC++ v141 from Windows matrix --- .github/workflows/presubmit.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index 9588c8fb..dc831c47 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -250,7 +250,7 @@ jobs: shell: pwsh strategy: matrix: - VER: [v141, v142, v143, clangcl] + VER: [v142, v143, clangcl] GEN: [Visual Studio 17 2022, Ninja Multi-Config] BIN: [x64] exclude: @@ -325,7 +325,6 @@ jobs: if: matrix.GEN == 'Ninja Multi-Config' run: | $VER = switch ('${{matrix.VER}}') { ` - 'v141' {'14.1'} ` 'v142' {'14.2'} ` 'v143' {'14.3'} } Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" @@ -366,7 +365,6 @@ jobs: if: matrix.GEN == 'Ninja Multi-Config' run: | $VER = switch ('${{matrix.VER}}') { ` - 'v141' {'14.1'} ` 'v142' {'14.2'} ` 'v143' {'14.3'} } Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" @@ -401,7 +399,6 @@ jobs: if: matrix.GEN == 'Ninja Multi-Config' run: | $VER = switch ('${{matrix.VER}}') { ` - 'v141' {'14.1'} ` 'v142' {'14.2'} ` 'v143' {'14.3'} } Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" @@ -472,7 +469,6 @@ jobs: if: matrix.GEN == 'Ninja Multi-Config' run: | $VER = switch ('${{matrix.VER}}') { ` - 'v141' {'14.1'} ` 'v142' {'14.2'} ` 'v143' {'14.3'} } Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" @@ -546,7 +542,6 @@ jobs: if: matrix.GEN == 'Ninja Multi-Config' run: | $VER = switch ('${{matrix.VER}}') { ` - 'v141' {'14.1'} ` 'v142' {'14.2'} ` 'v143' {'14.3'} } Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" From fd158ad8231a8f17724c72192912c13e2d1463f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc=20Serf=C5=91z=C5=91?= Date: Wed, 22 May 2024 14:22:37 +0200 Subject: [PATCH 24/29] fix(ci): Referencing upstream Headers repo in Linux jobs --- .github/workflows/presubmit.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index dc831c47..1765d4f5 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -104,9 +104,7 @@ jobs: uses: actions/checkout@v4 with: path: external/OpenCL-Headers - # ToDo: Change to KhronosGroup/OpenCL-Headers:main - repository: StreamHPC/OpenCL-Headers - ref: release-cd + repository: KhronosGroup/OpenCL-Headers - name: Configure, install & package OpenCL-Headers run: $CMAKE_EXE From a845947effa4352fa010d813aa211c7be0b29865 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc=20Serf=C5=91z=C5=91?= Date: Wed, 22 May 2024 14:39:50 +0200 Subject: [PATCH 25/29] fix(ci): Using actions/cache@v4 --- .github/workflows/presubmit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index 1765d4f5..6ac92d91 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -274,7 +274,7 @@ jobs: - name: Cache Ninja install if: matrix.GEN == 'Ninja Multi-Config' id: ninja-install - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: | C:\Tools\Ninja From ed508720247a253572dc81250169588db01d8fec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc=20Serf=C5=91z=C5=91?= Date: Wed, 5 Jun 2024 10:00:54 +0200 Subject: [PATCH 26/29] Removed clang-format and formatting check --- .clang-format | 123 -------------------------------- .github/workflows/presubmit.yml | 22 ------ scripts/check-format.sh | 55 -------------- 3 files changed, 200 deletions(-) delete mode 100644 .clang-format delete mode 100755 scripts/check-format.sh diff --git a/.clang-format b/.clang-format deleted file mode 100644 index d563a411..00000000 --- a/.clang-format +++ /dev/null @@ -1,123 +0,0 @@ ---- -Language: Cpp -AccessModifierOffset: -4 -AlignAfterOpenBracket: Align -AlignConsecutiveAssignments: false -AlignConsecutiveDeclarations: false -AlignEscapedNewlines: Right -AlignOperands: false -AlignTrailingComments: false -AllowAllArgumentsOnNextLine: true -AllowAllConstructorInitializersOnNextLine: true -AllowAllParametersOfDeclarationOnNextLine: true -AllowShortBlocksOnASingleLine: false -AllowShortCaseLabelsOnASingleLine: true -AllowShortFunctionsOnASingleLine: All -AllowShortLambdasOnASingleLine: All -AllowShortIfStatementsOnASingleLine: WithoutElse -AllowShortLoopsOnASingleLine: true -AlwaysBreakAfterDefinitionReturnType: None -AlwaysBreakAfterReturnType: None -AlwaysBreakBeforeMultilineStrings: false -AlwaysBreakTemplateDeclarations: MultiLine -BinPackArguments: true -BinPackParameters: true -BraceWrapping: - AfterCaseLabel: false - AfterClass: false - AfterControlStatement: true - AfterEnum: true - AfterFunction: true - AfterNamespace: false - AfterObjCDeclaration: false - AfterStruct: true - AfterUnion: false - AfterExternBlock: false - BeforeCatch: false - BeforeElse: true - IndentBraces: false - SplitEmptyFunction: false - SplitEmptyRecord: true - SplitEmptyNamespace: true -BreakBeforeBinaryOperators: NonAssignment -BreakBeforeBraces: Custom -BreakBeforeInheritanceComma: false -BreakInheritanceList: BeforeColon -BreakBeforeTernaryOperators: true -BreakConstructorInitializersBeforeComma: false -BreakConstructorInitializers: BeforeColon -BreakAfterJavaFieldAnnotations: false -BreakStringLiterals: true -ColumnLimit: 80 -CommentPragmas: '^ IWYU pragma:' -CompactNamespaces: false -ConstructorInitializerAllOnOneLineOrOnePerLine: false -ConstructorInitializerIndentWidth: 4 -ContinuationIndentWidth: 4 -Cpp11BracedListStyle: false -DerivePointerAlignment: true -DisableFormat: false -ExperimentalAutoDetectBinPacking: false -FixNamespaceComments: false -ForEachMacros: - - foreach - - Q_FOREACH - - BOOST_FOREACH -IncludeBlocks: Preserve -IncludeCategories: - - Regex: '^"(llvm|llvm-c|clang|clang-c)/' - Priority: 2 - - Regex: '^(<|"(gtest|gmock|isl|json)/)' - Priority: 3 - - Regex: '.*' - Priority: 1 -IncludeIsMainRegex: '(Test)?$' -IndentCaseLabels: true -IndentPPDirectives: None -IndentWidth: 4 -IndentWrappedFunctionNames: false -JavaScriptQuotes: Leave -JavaScriptWrapImports: true -KeepEmptyLinesAtTheStartOfBlocks: true -MacroBlockBegin: '' -MacroBlockEnd: '' -MaxEmptyLinesToKeep: 2 -NamespaceIndentation: Inner -ObjCBinPackProtocolList: Auto -ObjCBlockIndentWidth: 4 -ObjCSpaceAfterProperty: true -ObjCSpaceBeforeProtocolList: true -PenaltyBreakAssignment: 2 -PenaltyBreakBeforeFirstCallParameter: 19 -PenaltyBreakComment: 300 -PenaltyBreakFirstLessLess: 120 -PenaltyBreakString: 1000 -PenaltyBreakTemplateDeclaration: 10 -PenaltyExcessCharacter: 1000000 -PenaltyReturnTypeOnItsOwnLine: 60 -PointerAlignment: Left -ReflowComments: true -SortIncludes: false -SortUsingDeclarations: true -SpaceAfterCStyleCast: false -SpaceAfterLogicalNot: false -SpaceAfterTemplateKeyword: true -SpaceBeforeAssignmentOperators: true -SpaceBeforeCpp11BracedList: false -SpaceBeforeCtorInitializerColon: false -SpaceBeforeInheritanceColon: true -SpaceBeforeParens: ControlStatements -SpaceBeforeRangeBasedForLoopColon: true -SpaceInEmptyParentheses: false -SpacesBeforeTrailingComments: 1 -SpacesInAngles: false -SpacesInContainerLiterals: true -SpacesInCStyleCastParentheses: false -SpacesInParentheses: false -SpacesInSquareBrackets: false -Standard: Cpp11 -StatementMacros: - - Q_UNUSED - - QT_REQUIRE_VERSION -TabWidth: 4 -UseTab: Never diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index 6ac92d91..a844fa5a 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -9,27 +9,8 @@ on: - '**/*.md' jobs: - format: - name: Code formatting - runs-on: ubuntu-latest - defaults: - run: - shell: bash - steps: - - uses: actions/checkout@v4 - with: - # repository: ${{ github.repository }} (default) - fetch-depth: 0 - - name: Install clang-format - run: sudo apt-get install clang-format - - name: Check format - run: $GITHUB_WORKSPACE/scripts/check-format.sh - origin/`if [[ "${{ github.event_name }}" == "push" ]]; then echo "main"; else echo "${{ github.base_ref }}"; fi` - --binary clang-format - linux: runs-on: ubuntu-latest - needs: format defaults: run: shell: bash @@ -242,7 +223,6 @@ jobs: windows: runs-on: windows-latest - needs: format defaults: run: shell: pwsh @@ -573,7 +553,6 @@ jobs: macos: runs-on: macos-latest - needs: format defaults: run: shell: bash @@ -685,7 +664,6 @@ jobs: android: runs-on: ubuntu-latest - needs: format defaults: run: shell: bash diff --git a/scripts/check-format.sh b/scripts/check-format.sh deleted file mode 100755 index 24c61662..00000000 --- a/scripts/check-format.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash - -SOURCE_COMMIT="$1" -if [ "$#" -gt 0 ]; then - shift -fi - -# If no source commit is given target the default branch -if [ "x$SOURCE_COMMIT" = "x" ]; then - # If remote is not set use the remote of the current branch or fallback to "origin" - if [ "x$REMOTE" = "x" ]; then - BRANCH="$(git rev-parse --abbrev-ref HEAD)" - REMOTE="$(git config --local --get "branch.$BRANCH.remote" || echo 'origin')" - fi - SOURCE_COMMIT="remotes/$REMOTE/HEAD" -fi - -# Force colored diff output -DIFF_COLOR_SAVED="$(git config --local --get color.diff)" -if [ "x$DIFF_COLOR_SAVED" != "x" ]; then - git config --local --replace-all "color.diff" "always" -else - git config --local --add "color.diff" "always" -fi - -scratch="$(mktemp -t check-format.XXXXXXXXXX)" -finish () { - # Remove temporary file - rm -rf "$scratch" - # Restore setting - if [ "x$DIFF_COLOR_SAVED" != "x" ]; then - git config --local --replace-all "color.diff" "$DIFF_COLOR_SAVED" - else - git config --local --unset "color.diff" - fi -} -# The trap will be invoked whenever the script exits, even due to a signal, this is a bash only -# feature -trap finish EXIT - -GIT_CLANG_FORMAT="${GIT_CLANG_FORMAT:-git-clang-format}" -"$GIT_CLANG_FORMAT" --style=file --extensions=cc,cp,cpp,c++,cxx,cu,cuh,hh,hpp,hxx,hip,vert,frag --diff "$@" "$SOURCE_COMMIT" > "$scratch" - -# Check for no-ops -grep '^no modified files to format$\|^clang-format did not modify any files$' \ - "$scratch" > /dev/null && exit 0 - -# Dump formatting diff and signal failure -printf \ -"\033[31m==== FORMATTING VIOLATIONS DETECTED ====\033[0m -run '\033[33m%s --style=file %s %s\033[0m' to apply these formating changes\n\n" \ -"$GIT_CLANG_FORMAT" "$*" "$SOURCE_COMMIT" - -cat "$scratch" -exit 1 From 95b2cf6a6bd5027b2e0345eef785228d0773693a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C5=91rinc=20Serf=C5=91z=C5=91?= Date: Wed, 5 Jun 2024 10:02:14 +0200 Subject: [PATCH 27/29] Disabled macos/gcc-13 due to a problem with __API_AVAILABLE --- .github/workflows/presubmit.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index a844fa5a..83cd274a 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -561,7 +561,8 @@ jobs: C_COMPILER: - /usr/bin/clang - gcc-11 - - gcc-13 + # Disabled due to problems with the __API_AVAILABLE macro + # - gcc-13 GEN: - Xcode - Ninja Multi-Config From 7ffa942bdd3133314e242941723faaa4cd4c22cb Mon Sep 17 00:00:00 2001 From: Beatriz Navidad Vilches Date: Mon, 17 Jun 2024 22:01:37 +0000 Subject: [PATCH 28/29] Update docker images --- .github/workflows/presubmit.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index 83cd274a..a287e680 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -31,7 +31,7 @@ jobs: - GEN: Ninja Multi-Config CONFIG: Release IMAGE: - - streamhpc/opencl-sdk-intelcpu:ubuntu-22.04-20230717 + - khronosgroup/docker-images:opencl-sdk-intelcpu-ubuntu-22.04.20230717 include: - CMAKE: system C_COMPILER: gcc-9 @@ -39,28 +39,28 @@ jobs: CONF: GEN: Unix Makefiles CONFIG: Debug - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-20.04-20230717 + IMAGE: khronosgroup/docker-images:opencl-sdk-intelcpu-ubuntu-20.04.20230717 - CMAKE: system C_COMPILER: gcc-9 BIN: 64 CONF: GEN: Unix Makefiles CONFIG: Release - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-20.04-20230717 + IMAGE: khronosgroup/docker-images:opencl-sdk-intelcpu-ubuntu-20.04.20230717 - CMAKE: system C_COMPILER: gcc-9 BIN: 32 CONF: GEN: Unix Makefiles CONFIG: Debug - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-20.04-20230717 + IMAGE: khronosgroup/docker-images:opencl-sdk-intelcpu-ubuntu-20.04.20230717 - CMAKE: system C_COMPILER: gcc-9 BIN: 32 CONF: GEN: Unix Makefiles CONFIG: Release - IMAGE: streamhpc/opencl-sdk-intelcpu:ubuntu-20.04-20230717 + IMAGE: khronosgroup/docker-images:opencl-sdk-intelcpu-ubuntu-20.04.20230717 container: ${{matrix.IMAGE}} env: CMAKE_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cmake From 20afaf572269b1d0549cc1780601c17b2e91ff6c Mon Sep 17 00:00:00 2001 From: Beatriz Navidad Vilches Date: Tue, 18 Jun 2024 08:33:44 +0000 Subject: [PATCH 29/29] Fix MSVC compiler toolset version --- .github/workflows/presubmit.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml index a287e680..52b7eb0b 100644 --- a/.github/workflows/presubmit.yml +++ b/.github/workflows/presubmit.yml @@ -304,7 +304,7 @@ jobs: run: | $VER = switch ('${{matrix.VER}}') { ` 'v142' {'14.2'} ` - 'v143' {'14.3'} } + 'v143' {'14.4'} } Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" & cmake ` @@ -344,7 +344,7 @@ jobs: run: | $VER = switch ('${{matrix.VER}}') { ` 'v142' {'14.2'} ` - 'v143' {'14.3'} } + 'v143' {'14.4'} } Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" & cmake ` @@ -378,7 +378,7 @@ jobs: run: | $VER = switch ('${{matrix.VER}}') { ` 'v142' {'14.2'} ` - 'v143' {'14.3'} } + 'v143' {'14.4'} } Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" foreach ($Config in 'Release','Debug') { @@ -448,7 +448,7 @@ jobs: run: | $VER = switch ('${{matrix.VER}}') { ` 'v142' {'14.2'} ` - 'v143' {'14.3'} } + 'v143' {'14.4'} } Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" & cmake ` @@ -521,7 +521,7 @@ jobs: run: | $VER = switch ('${{matrix.VER}}') { ` 'v142' {'14.2'} ` - 'v143' {'14.3'} } + 'v143' {'14.4'} } Import-Module "${env:VS_ROOT}\Common7\Tools\Microsoft.VisualStudio.DevShell.dll" Enter-VsDevShell -VsInstallPath ${env:VS_ROOT} -SkipAutomaticLocation -DevCmdArguments "-host_arch=x64 -arch=${{matrix.BIN}} -vcvars_ver=$VER" & cmake `