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/linux.yml b/.github/workflows/linux.yml deleted file mode 100644 index 5792620f..00000000 --- a/.github/workflows/linux.yml +++ /dev/null @@ -1,334 +0,0 @@ -name: Linux - -on: [push, pull_request] - -env: - OPENCL_PKGCONFIG_PATHS: ${{ github.workspace }}/install/share/pkgconfig:${{ github.workspace }}/external/OpenCL-Headers/install/share/pkgconfig:${{ github.workspace }}/external/OpenCL-ICD-Loader/install/lib/pkgconfig - -jobs: - cmake-minimum: - runs-on: ${{ matrix.OS }} - container: streamhpc/opencl-sdk-base:ubuntu-18.04-20220127 - strategy: - matrix: - OS: [ubuntu-20.04] - VER: [7] # gcc-8, clang-8, clang-10 - EXT: [ON, OFF] - GEN: [Unix Makefiles] - CONFIG: [Debug, Release] - STD: [11, 14] - BIN: [64] # Temporarily disable cross-compilation (will need toolchain files) - CMAKE: [3.1.3] - env: - CMAKE_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cmake - CTEST_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/ctest - # Workaround for https://github.com/actions/runner/issues/2058 - OPENCL_PKGCONFIG_PATHS: /__w/OpenCL-CLHPP/OpenCL-CLHPP/install/share/pkgconfig:/__w/OpenCL-CLHPP/OpenCL-CLHPP/external/OpenCL-Headers/install/share/pkgconfig:/__w/OpenCL-CLHPP/OpenCL-CLHPP/external/OpenCL-ICD-Loader/install/lib/pkgconfig - - - steps: - - name: Checkout OpenCL-CLHPP - uses: actions/checkout@v3 - with: - submodules: recursive - - - name: Checkout OpenCL-Headers - uses: actions/checkout@v3 - with: - repository: KhronosGroup/OpenCL-Headers - path: external/OpenCL-Headers - - - name: Checkout OpenCL-ICD-Loader - uses: actions/checkout@v3 - with: - repository: KhronosGroup/OpenCL-ICD-Loader - path: external/OpenCL-ICD-Loader - - - name: Build & install 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=gcc-${{matrix.VER}} - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install - -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` - - - name: Build & install OpenCL-ICD-Loader - run: $CMAKE_EXE - -G "${{matrix.GEN}}" - -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} - -D CMAKE_C_FLAGS="-w -m${{matrix.BIN}}" - -D CMAKE_C_COMPILER=gcc-${{matrix.VER}} - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install - -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install - -D BUILD_TESTING=OFF - -B$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build - -H$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader && - $CMAKE_EXE - --build $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build - --target install - -- - -j`nproc` - - - name: Configure - shell: bash - # no -Werror during configuration because: - # warning: ISO C forbids assignment between function pointer and ‘void *’ [-Wpedantic] - # warning: unused parameter [-Wunused-parameter] - run: - $CMAKE_EXE - -G "${{matrix.GEN}}" - -D BUILD_TESTING=ON - -D BUILD_EXAMPLES=ON - -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} - -D CMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" - -D CMAKE_CXX_COMPILER=g++-${{matrix.VER}} - -D CMAKE_CXX_STANDARD=${{matrix.STD}} - -D CMAKE_CXX_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install - -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install" - -B$GITHUB_WORKSPACE/build - -H$GITHUB_WORKSPACE - - - name: Build - shell: bash - run: $CMAKE_EXE - --build $GITHUB_WORKSPACE/build - -- - -j`nproc` - - - name: Test - working-directory: ${{runner.workspace}}/OpenCL-CLHPP/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: "Consume (standalone): Configure/Build/Test" - shell: bash - run: $CMAKE_EXE - -G "${{matrix.GEN}}" - -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} - -D CMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" - -D CMAKE_CXX_COMPILER=g++-${{matrix.VER}} - -D CMAKE_CXX_STANDARD=${{matrix.STD}} - -D CMAKE_CXX_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install;$GITHUB_WORKSPACE/install" - -B$GITHUB_WORKSPACE/build/downstream/bare - -H$GITHUB_WORKSPACE/tests/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 $GITHUB_WORKSPACE/install/share/cmake/OpenCL ; - echo -e "include(\"$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake\")\ninclude(\"$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install/share/cmake/OpenCLICDLoader/OpenCLICDLoaderTargets.cmake\")\ninclude(\"\${CMAKE_CURRENT_LIST_DIR}/../OpenCLHeadersCpp/OpenCLHeadersCppTargets.cmake\")" > $GITHUB_WORKSPACE/install/share/cmake/OpenCL/OpenCLConfig.cmake ; - $CMAKE_EXE - -G "${{matrix.GEN}}" - -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} - -D CMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" - -D CMAKE_CXX_COMPILER=g++-${{matrix.VER}} - -D CMAKE_CXX_STANDARD=${{matrix.STD}} - -D CMAKE_CXX_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install;$GITHUB_WORKSPACE/install" - -B$GITHUB_WORKSPACE/build/downstream/sdk - -H$GITHUB_WORKSPACE/tests/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 - shell: bash - run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL-CLHPP --cflags | grep -q "\-I$GITHUB_WORKSPACE/install/include" - - - name: Test pkg-config dependency - shell: bash - run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL-CLHPP --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" - - - - - - cmake-latest: - runs-on: ${{ matrix.OS }} - strategy: - matrix: - OS : [ubuntu-20.04] - VER: [9, 11] # clang-11, clang-13 - EXT: [ON, OFF] - GEN: [Ninja Multi-Config] - STD: [11, 14] - BIN: [64] # Temporarily disable cross-compilation (will need toolchain files) - 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 - CMAKE_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/cmake - CTEST_EXE: /opt/Kitware/CMake/${{ matrix.CMAKE }}/bin/ctest - - - steps: - - name: Checkout OpenCL-CLHPP - uses: actions/checkout@v3 - with: - submodules: recursive - - - name: Checkout OpenCL-Headers - uses: actions/checkout@v3 - with: - repository: KhronosGroup/OpenCL-Headers - path: external/OpenCL-Headers - - - name: Checkout OpenCL-ICD-Loader - uses: actions/checkout@v3 - with: - repository: KhronosGroup/OpenCL-ICD-Loader - path: external/OpenCL-ICD-Loader - - - name: Create Build Environment - run: sudo apt-get update -q; - if [[ "${{matrix.GEN}}" =~ "Ninja" && ! `which ninja` ]]; then sudo apt install -y ninja-build; fi; - sudo apt install gcc-${{matrix.VER}} g++-${{matrix.VER}}; - if [[ "${{matrix.BIN}}" == "32" ]]; - then sudo apt install gcc-${COMPILER_VER}-multilib; - fi; - mkdir -p /opt/Kitware/CMake; - wget -c $CMAKE_URL -O - | tar -xz --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 OpenCL-Headers - run: $CMAKE_EXE - -G "${{matrix.GEN}}" - -D CMAKE_C_FLAGS="-w -m${{matrix.BIN}}" - -D CMAKE_C_COMPILER=gcc-${{matrix.VER}} - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install - -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 - --config Release - -- - -j`nproc` - - - name: Build & install OpenCL-ICD-Loader - run: $CMAKE_EXE - -G "${{matrix.GEN}}" - -D CMAKE_C_FLAGS="-w -m${{matrix.BIN}}" - -D CMAKE_C_COMPILER=gcc-${{matrix.VER}} - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install - -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install - -D BUILD_TESTING=OFF - -B$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build - -H$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader && - $CMAKE_EXE - --build $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build - --target install - --config Release - -- - -j`nproc` - - - name: Configure - shell: bash - # no -Werror during configuration because: - # warning: ISO C forbids assignment between function pointer and ‘void *’ [-Wpedantic] - # warning: unused parameter [-Wunused-parameter] - run: $CMAKE_EXE - -G "${{matrix.GEN}}" - -D BUILD_TESTING=ON - -D BUILD_EXAMPLES=ON - -D CMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" - -D CMAKE_CXX_COMPILER=g++-${{matrix.VER}} - -D CMAKE_CXX_STANDARD=${{matrix.STD}} - -D CMAKE_CXX_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install - -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install" - -B$GITHUB_WORKSPACE/build - -H$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: Test - working-directory: ${{runner.workspace}}/OpenCL-CLHPP/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: "Consume (standalone): Configure/Build/Test" - shell: bash - run: $CMAKE_EXE - -G "${{matrix.GEN}}" - -D CMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" - -D CMAKE_CXX_COMPILER=g++-${{matrix.VER}} - -D CMAKE_CXX_STANDARD=${{matrix.STD}} - -D CMAKE_CXX_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install;$GITHUB_WORKSPACE/install" - -B$GITHUB_WORKSPACE/build/downstream/bare - -H$GITHUB_WORKSPACE/tests/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 $GITHUB_WORKSPACE/install/share/cmake/OpenCL ; - echo -e "include(\"$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake\")\ninclude(\"$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install/share/cmake/OpenCLICDLoader/OpenCLICDLoaderTargets.cmake\")\ninclude(\"\${CMAKE_CURRENT_LIST_DIR}/../OpenCLHeadersCpp/OpenCLHeadersCppTargets.cmake\")" > $GITHUB_WORKSPACE/install/share/cmake/OpenCL/OpenCLConfig.cmake ; - $CMAKE_EXE - -G "${{matrix.GEN}}" - -D CMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}" - -D CMAKE_CXX_COMPILER=g++-${{matrix.VER}} - -D CMAKE_CXX_STANDARD=${{matrix.STD}} - -D CMAKE_CXX_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install;$GITHUB_WORKSPACE/install" - -B$GITHUB_WORKSPACE/build/downstream/sdk - -H$GITHUB_WORKSPACE/tests/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 - shell: bash - run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL-CLHPP --cflags | grep -q "\-I$GITHUB_WORKSPACE/install/include" - - - name: Test pkg-config dependency - shell: bash - run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL-CLHPP --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml deleted file mode 100644 index b0a9f40a..00000000 --- a/.github/workflows/macos.yml +++ /dev/null @@ -1,179 +0,0 @@ -name: MacOS - -on: [push, pull_request] - -env: - OPENCL_PKGCONFIG_PATHS: ${{ github.workspace }}/install/share/pkgconfig:${{ github.workspace }}/external/OpenCL-Headers/install/share/pkgconfig:${{ github.workspace }}/external/OpenCL-ICD-Loader/install/lib/pkgconfig - -jobs: - macos-gcc: - #runs-on: macos-latest - runs-on: macos-11 # temporary, macos-latest only supports gcc-12 - strategy: - matrix: - VER: [9, 11] - EXT: [ON, OFF] - GEN: [Xcode, Ninja Multi-Config] - STD: [11, 17] - - steps: - - name: Checkout OpenCL-CLHPP - uses: actions/checkout@v3 - with: - submodules: recursive - - - name: Checkout OpenCL-Headers - uses: actions/checkout@v3 - with: - repository: KhronosGroup/OpenCL-Headers - path: external/OpenCL-Headers - - - name: Checkout OpenCL-ICD-Loader - uses: actions/checkout@v3 - with: - repository: KhronosGroup/OpenCL-ICD-Loader - path: external/OpenCL-ICD-Loader - - - 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 - 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. - - - name: Build & install OpenCL-Headers - run: cmake - -G "${{matrix.GEN}}" - -D CMAKE_C_FLAGS="-w" - -D CMAKE_C_COMPILER=/usr/local/bin/gcc-${{matrix.VER}} - -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 - --build $GITHUB_WORKSPACE/external/OpenCL-Headers/build - --target install - --config Release - --parallel `sysctl -n hw.logicalcpu` && - ls -al $GITHUB_WORKSPACE/external/OpenCL-Headers/install && - ls -al $GITHUB_WORKSPACE/external/OpenCL-Headers/install/include && - ls -al $GITHUB_WORKSPACE/external/OpenCL-Headers/install/include/CL && - ls -al $GITHUB_WORKSPACE/external/OpenCL-Headers/install/include/OpenCL - - - name: Build & install OpenCL-ICD-Loader - run: cmake - -G "${{matrix.GEN}}" - -D CMAKE_C_FLAGS="-w -m64" - -D CMAKE_C_COMPILER=/usr/local/bin/gcc-${{matrix.VER}} - -D CMAKE_C_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install - -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install - -D BUILD_TESTING=OFF - -S $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader - -B $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build && - cmake - --build $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build - --target install - --config Release - --parallel `sysctl -n hw.logicalcpu` - - - name: Configure CMake - # no -Werror 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_CXX_FLAGS="-Wall -Wextra -pedantic -Wno-format -m64" - -D CMAKE_CXX_COMPILER=/usr/local/bin/g++-${{matrix.VER}} - -D CMAKE_CXX_STANDARD=${{matrix.STD}} - -D CMAKE_CXX_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install - -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/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' - 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-CLHPP/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: Install (Xcode) - if: matrix.GEN == 'Xcode' - shell: bash - run: | - cmake --build $GITHUB_WORKSPACE/build --config Release --target install - - - name: Install (Ninja) - if: matrix.GEN == 'Ninja Multi-Config' - shell: bash - run: | - cmake --build $GITHUB_WORKSPACE/build --config Release --target install - - - name: "Consume (standalone): Configure/Build/Test" - shell: bash - run: cmake - -G "${{matrix.GEN}}" - -D CMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -m64" - -D CMAKE_CXX_COMPILER=/usr/local/bin/g++-${{matrix.VER}} - -D CMAKE_CXX_STANDARD=${{matrix.STD}} - -D CMAKE_CXX_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install;$GITHUB_WORKSPACE/install" - -B$GITHUB_WORKSPACE/build/downstream/bare - -H$GITHUB_WORKSPACE/tests/pkgconfig/bare ; - cmake --build $GITHUB_WORKSPACE/build/downstream/bare --config Release ; - cmake --build $GITHUB_WORKSPACE/build/downstream/bare --config Debug ; - cd $GITHUB_WORKSPACE/build/downstream/bare ; - ctest --output-on-failure -C Release ; - ctest --output-on-failure -C Debug - - - name: "Consume (SDK): Configure/Build/Test" - shell: bash - run: cmake -E make_directory $GITHUB_WORKSPACE/install/share/cmake/OpenCL ; - echo -e 'include("/Users/runner/work/OpenCL-CLHPP/OpenCL-CLHPP/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake")\ninclude("/Users/runner/work/OpenCL-CLHPP/OpenCL-CLHPP/external/OpenCL-ICD-Loader/install/share/cmake/OpenCLICDLoader/OpenCLICDLoaderTargets.cmake")\ninclude("${CMAKE_CURRENT_LIST_DIR}/../OpenCLHeadersCpp/OpenCLHeadersCppTargets.cmake")' > $GITHUB_WORKSPACE/install/share/cmake/OpenCL/OpenCLConfig.cmake ; - cmake - -G "${{matrix.GEN}}" - -D CMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -m64" - -D CMAKE_CXX_COMPILER=/usr/local/bin/g++-${{matrix.VER}} - -D CMAKE_CXX_STANDARD=${{matrix.STD}} - -D CMAKE_CXX_EXTENSIONS=${{matrix.EXT}} - -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install;$GITHUB_WORKSPACE/install" - -B$GITHUB_WORKSPACE/build/downstream/sdk - -H$GITHUB_WORKSPACE/tests/pkgconfig/sdk ; - cmake --build $GITHUB_WORKSPACE/build/downstream/sdk --config Release ; - cmake --build $GITHUB_WORKSPACE/build/downstream/sdk --config Debug ; - cd $GITHUB_WORKSPACE/build/downstream/sdk ; - ctest --output-on-failure -C Release ; - ctest --output-on-failure -C Debug - - - 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-CLHPP --cflags | grep -q "\-I$GITHUB_WORKSPACE/install/include" - - - name: Test pkg-config dependency - shell: bash - run: PKG_CONFIG_PATH="$OPENCL_PKGCONFIG_PATHS" pkg-config OpenCL-CLHPP --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" diff --git a/.github/workflows/presubmit.yml b/.github/workflows/presubmit.yml new file mode 100644 index 00000000..def9951c --- /dev/null +++ b/.github/workflows/presubmit.yml @@ -0,0 +1,884 @@ +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] + COMPILER: + - C_NAME: gcc + CXX_NAME: g++ + VER: 11 + - C_NAME: gcc + CXX_NAME: g++ + VER: 13 + - C_NAME: clang + CXX_NAME: clang++ + VER: 14 + - C_NAME: clang + CXX_NAME: clang++ + VER: 16 + BIN: [64] + CXXSTD: [11, 17] + CONF: + - GEN: Unix Makefiles + CONFIG: Debug + - GEN: Unix Makefiles + CONFIG: Release + - GEN: Ninja Multi-Config + CONFIG: Release + IMAGE: + - streamhpc/opencl-sdk-base:ubuntu-22.04-20230717 + include: + - CMAKE: system + COMPILER: + C_NAME: gcc + CXX_NAME: g++ + VER: 9 + BIN: 64 + CXXSTD: 11 + CONF: + GEN: Unix Makefiles + CONFIG: Debug + IMAGE: streamhpc/opencl-sdk-base:ubuntu-20.04-20230717 + - CMAKE: system + COMPILER: + C_NAME: gcc + CXX_NAME: g++ + VER: 9 + BIN: 64 + CXXSTD: 11 + CONF: + GEN: Unix Makefiles + CONFIG: Release + IMAGE: streamhpc/opencl-sdk-base:ubuntu-20.04-20230717 + - CMAKE: system + COMPILER: + C_NAME: gcc + CXX_NAME: g++ + VER: 9 + BIN: 32 + CXXSTD: 11 + CONF: + GEN: Unix Makefiles + CONFIG: Debug + IMAGE: streamhpc/opencl-sdk-base:ubuntu-20.04-20230717 + - CMAKE: system + COMPILER: + C_NAME: gcc + CXX_NAME: g++ + VER: 9 + BIN: 32 + CXXSTD: 11 + CONF: + GEN: Unix Makefiles + CONFIG: Release + 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 + DEB_INSTALLATION_PATH: /usr + CC: ${{matrix.COMPILER.C_NAME}}-${{matrix.COMPILER.VER}} + CXX: ${{matrix.COMPILER.CXX_NAME}}-${{matrix.COMPILER.VER}} + CFLAGS: -Wall -Wextra -pedantic -Werror -m${{matrix.BIN}} + CXXFLAGS: -Wall -Wextra -pedantic -Werror -m${{matrix.BIN}} + + 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-CLHPP + uses: actions/checkout@v3 + with: + submodules: recursive + + - 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: Checkout OpenCL-ICD-Loader + uses: actions/checkout@v3 + with: + path: external/OpenCL-ICD-Loader + # ToDo: Change to KhronosGroup/OpenCL-ICD-Loader:main + repository: StreamHPC/OpenCL-ICD-Loader + ref: update-ci + + - name: Configure, install & package OpenCL-Headers + 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_EXTENSIONS=OFF + -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-Headers/install + -D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH + -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 + --parallel `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 & install OpenCL-ICD-Loader + 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_EXTENSIONS=OFF + -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install + -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install + -D BUILD_TESTING=OFF + -S $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader + -B $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build && + $CMAKE_EXE + --build $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build + --target install + --parallel `nproc` + + - name: Configure + shell: bash + run: $CMAKE_EXE + -G "${{matrix.CONF.GEN}}" + -D BUILD_TESTING=ON + -D BUILD_EXAMPLES=ON + `if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; then echo "-D CMAKE_BUILD_TYPE=${{matrix.CONF.CONFIG}}"; fi` + -D CMAKE_CXX_STANDARD=${{matrix.CXXSTD}} + -D CMAKE_CXX_EXTENSIONS=OFF + -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install + -D CPACK_PACKAGING_INSTALL_PREFIX=$DEB_INSTALLATION_PATH + -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install" + -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}} --parallel `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-CLHPP/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" + + - 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 CMAKE_CXX_STANDARD=${{matrix.CXXSTD}} + -D CMAKE_CXX_EXTENSIONS=OFF + -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install + -S $GITHUB_WORKSPACE/tests/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}} --parallel `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 + # /usr/include is already on the include search path, + # we don't expect any output + run: | + pkg-config OpenCL-CLHPP --cflags + if [[ "$(pkg-config OpenCL-CLHPP --cflags)" ]]; + then + exit 1; + fi; + + - name: Uninstall (DEB) + shell: bash + run: apt-get remove -y opencl-clhpp-headers + + - 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: $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/external/OpenCL-ICD-Loader/install;$GITHUB_WORKSPACE/install" + -S $GITHUB_WORKSPACE/tests/pkgconfig/bare + -B $GITHUB_WORKSPACE/build_install && + if [[ "${{matrix.CONF.GEN}}" == "Unix Makefiles" ]]; + then + $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`; + fi + + - name: Test pkg-config (install) + shell: bash + run: PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/share/pkgconfig + pkg-config OpenCL-CLHPP --cflags | grep -q "\-I$GITHUB_WORKSPACE/install/include" + + windows: + runs-on: windows-latest + needs: format + strategy: + matrix: + VER: [v141, v142, v143, clangcl] + GEN: [Visual Studio 17 2022, Ninja Multi-Config] + BIN: [x64] + CXXSTD: [11, 17] + exclude: + - VER: clangcl + GEN: Ninja Multi-Config + include: + - VER: v142 + GEN: Visual Studio 17 2022 + BIN: x86 + CXXSTD: 11 + 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' # -=- + WindowsSDKVersion: '10.0.22621.0' + CFLAGS: /W4 /WX + CXXFLAGS: /W4 /WX + + 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-CLHPP + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Checkout OpenCL-Headers + uses: actions/checkout@v3 + with: + repository: KhronosGroup/OpenCL-Headers + path: external/OpenCL-Headers + + - name: Checkout OpenCL-ICD-Loader + uses: actions/checkout@v3 + with: + repository: KhronosGroup/OpenCL-ICD-Loader + path: external/OpenCL-ICD-Loader + + - 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 ` + -G '${{matrix.GEN}}' ` + -A $BIN ` + -T ${{matrix.VER}} ` + -D BUILD_TESTING=OFF ` + -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` + -D CMAKE_SYSTEM_VERSION="${env:WindowsSDKVersion}" ` + -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 ` + --config Release ` + -- ` + /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" + & cmake ` + -G '${{matrix.GEN}}' ` + -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` + -D BUILD_TESTING=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 ` + --config Release ` + -- ` + -j ${env:NUMBER_OF_PROCESSORS} + + - name: Build & install OpenCL-ICD-Loader (MSBuild) + 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 BUILD_TESTING=OFF ` + -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\install ` + -D CMAKE_PREFIX_PATH=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` + -D CMAKE_SYSTEM_VERSION="${env:WindowsSDKVersion}" ` + -S ${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader ` + -B ${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\build + & cmake ` + --build "${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\build" ` + --target install ` + --config Release ` + -- ` + /verbosity:minimal ` + /maxCpuCount ` + /noLogo ` + + - name: Build & install OpenCL-ICD-Loader (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" + & cmake ` + -G '${{matrix.GEN}}' ` + -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` + -D BUILD_TESTING=OFF ` + -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` + -D CMAKE_PREFIX_PATH=${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install ` + -S ${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader ` + -B ${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\build + & cmake ` + --build "${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\build" ` + --target install ` + --config Release ` + -- ` + -j ${env:NUMBER_OF_PROCESSORS} + + - name: Configure (MSBuild) + if: matrix.GEN == 'Visual Studio 17 2022' + shell: pwsh + run: | + $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} + $BUILD_TESTS = if('clangcl' -eq 'clangcl') {'OFF'} else {'ON'} + & cmake ` + -G '${{matrix.GEN}}' ` + -A $BIN ` + -T ${{matrix.VER}} ` + -D BUILD_TESTING=$BUILD_TESTS ` + -D CMAKE_CXX_STANDARD=${{matrix.CXXSTD}} ` + -D CMAKE_CXX_EXTENSIONS=OFF ` + -D CMAKE_INSTALL_PREFIX=${env:GITHUB_WORKSPACE}\install ` + -D CMAKE_PREFIX_PATH="${env:GITHUB_WORKSPACE}\external\OpenCL-Headers\install;${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\install" ` + -D CMAKE_SYSTEM_VERSION="${env:WindowsSDKVersion}" ` + -S ${env:GITHUB_WORKSPACE} ` + -B ${env:GITHUB_WORKSPACE}\build + + - name: Configure (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" + & cmake ` + -G '${{matrix.GEN}}' ` + -D CMAKE_MAKE_PROGRAM="${env:NINJA_ROOT}\ninja.exe" ` + -D BUILD_TESTING=ON ` + -D CMAKE_CXX_STANDARD=${{matrix.CXXSTD}} ` + -D CMAKE_CXX_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;${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\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) + 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 + shell: pwsh + run: | + foreach ($Config in 'Release','Debug') { ` + & ctest ` + --test-dir "${env:GITHUB_WORKSPACE}\build" ` + --build-config ${Config} ` + --output-on-failure ` + --parallel ${env:NUMBER_OF_PROCESSORS} + } + + - name: Install + shell: pwsh + run: | + & cmake ` + --install "${env:GITHUB_WORKSPACE}\build" ` + --prefix "${env:GITHUB_WORKSPACE}\install" ` + --config Release + + - name: "Consume (MSBuild standalone): Configure/Build/Test" + shell: pwsh + run: | + $BIN = if('${{matrix.BIN}}' -eq 'x86') {'Win32'} else {'x64'} + & cmake ` + -G '${{matrix.GEN}}' ` + -A ${BIN} ` + -T ${{matrix.VER}} ` + -D CMAKE_CXX_STANDARD=${{matrix.CXXSTD}} ` + -D CMAKE_CXX_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" ` + -D CMAKE_SYSTEM_VERSION="${env:WindowsSDKVersion}" ` + -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: 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" ` + -D CMAKE_CXX_STANDARD=${{matrix.CXXSTD}} ` + -D CMAKE_CXX_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("${env:GITHUB_WORKSPACE}\external\OpenCL-ICD-Loader\install\share\cmake\OpenCLICDLoader\OpenCLICDLoaderTargets.cmake")\ninclude("${CMAKE_CURRENT_LIST_DIR}/../OpenCLHeadersCpp/OpenCLHeadersCppTargets.cmake")' + + - name: "Consume (MSBuild SDK): Configure/Build/Test" + shell: pwsh + run: | + & cmake ` + -G '${{matrix.GEN}}' ` + -D CMAKE_CXX_STANDARD=${{matrix.CXXSTD}} ` + -D CMAKE_CXX_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" ` + -D CMAKE_SYSTEM_VERSION="${env:WindowsSDKVersion}" ` + -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: 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" ` + -D CMAKE_CXX_STANDARD=${{matrix.CXXSTD}} ` + -D CMAKE_CXX_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} + } + + macos: + runs-on: macos-latest + needs: format + strategy: + matrix: + COMPILER: + - C_NAME: /usr/bin/gcc + CXX_NAME: /usr/bin/g++ + - C_NAME: /usr/local/bin/gcc-11 + CXX_NAME: /usr/local/bin/g++-11 + - C_NAME: /usr/local/bin/gcc-13 + CXX_NAME: /usr/local/bin/g++-13 + GEN: + - Xcode + - Ninja Multi-Config + CXXSTD: [11, 17] + exclude: + - COMPILER: + C_NAME: /usr/bin/gcc + CXX_NAME: /usr/bin/g++ + GEN: Ninja Multi-Config + - COMPILER: + C_NAME: /usr/local/bin/gcc-11 + CXX_NAME: /usr/local/bin/g++-11 + GEN: Xcode + - COMPILER: + C_NAME: /usr/local/bin/gcc-13 + CXX_NAME: /usr/local/bin/g++-13 + GEN: Xcode + env: + CC: ${{matrix.COMPILER.C_NAME}} + CCX: ${{matrix.COMPILER.CXX_NAME}} + CFLAGS: -Wall -Wextra -pedantic -Wno-format -Werror + CXXFLAGS: -Wall -Wextra -pedantic -Wno-format -Werror + + steps: + - name: Checkout OpenCL-CLHPP + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Checkout OpenCL-Headers + uses: actions/checkout@v3 + with: + repository: KhronosGroup/OpenCL-Headers + path: external/OpenCL-Headers + + - name: Checkout OpenCL-ICD-Loader + uses: actions/checkout@v3 + with: + repository: KhronosGroup/OpenCL-ICD-Loader + path: external/OpenCL-ICD-Loader + + - name: Create Build Environment + 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 + run: cmake + -G "${{matrix.GEN}}" + -D BUILD_TESTING=OFF + -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: Build & install OpenCL-ICD-Loader + run: cmake + -G "${{matrix.GEN}}" + -D BUILD_TESTING=OFF + -D CMAKE_C_EXTENSIONS=OFF + -D CMAKE_PREFIX_PATH=$GITHUB_WORKSPACE/external/OpenCL-Headers/install + -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install + -S $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader + -B $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build && + cmake + --build $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build + --target install + --config Release + --parallel `sysctl -n hw.logicalcpu` + + - name: Configure + shell: bash + run: cmake + -G "${{matrix.GEN}}" + -D BUILD_TESTING=ON + -D CMAKE_CXX_STANDARD=${{matrix.CXXSTD}} + -D CMAKE_CXX_EXTENSIONS=OFF + -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install + -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/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-CLHPP/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_CXX_STANDARD=${{matrix.CXXSTD}} + -D CMAKE_CXX_EXTENSIONS=OFF + -D CMAKE_CXX_STANDARD_REQUIRED=ON + -D CMAKE_PREFIX_PATH="$GITHUB_WORKSPACE/external/OpenCL-Headers/install;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install;$GITHUB_WORKSPACE/install" + -S $GITHUB_WORKSPACE/tests/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/share/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install/lib/pkgconfig + pkg-config OpenCL-CLHPP --cflags | grep -q "\-I$GITHUB_WORKSPACE/install/include" + + - name: Test pkg-config dependency + shell: bash + run: | + if [[ ! `which pkg-config` ]]; then brew install pkg-config; fi; + export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/install/share/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/share/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install/lib/pkgconfig + pkg-config OpenCL-CLHPP --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include" + + android: + runs-on: ubuntu-latest + needs: format + strategy: + matrix: + ABI: + - arm64-v8a + - x86_64 + API_LEVEL: + - android-19 + - android-33 + CONFIG: + - Debug + - Release + env: + CFLAGS: -Wall -Wextra -pedantic -Werror + CXXFLAGS: -Wall -Wextra -pedantic -Werror + steps: + - name: Checkout OpenCL-CLHPP + uses: actions/checkout@v3 + with: + submodules: recursive + + - name: Checkout OpenCL-Headers + uses: actions/checkout@v3 + with: + repository: KhronosGroup/OpenCL-Headers + path: external/OpenCL-Headers + + - name: Checkout OpenCL-ICD-Loader + uses: actions/checkout@v3 + with: + repository: KhronosGroup/OpenCL-ICD-Loader + path: external/OpenCL-ICD-Loader + + - name: Configure & install OpenCL-Headers + shell: bash + run: cmake + -G "Unix Makefiles" + -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} + -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 & install OpenCL-ICD-Loader + run: cmake + -G "Unix Makefiles" + -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} + -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install + -D BUILD_TESTING=ON + -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/external/OpenCL-ICD-Loader + -B $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build && + sudo cmake + --build $GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/build + --target install + -- + -j`nproc` + + - name: Configure + shell: bash + run: cmake + -G "Unix Makefiles" + -D BUILD_TESTING=ON + -D BUILD_EXAMPLES=ON + -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}} + -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;$GITHUB_WORKSPACE/external/OpenCL-ICD-Loader/install" + -S $GITHUB_WORKSPACE + -B $GITHUB_WORKSPACE/build + + - name: Build + shell: bash + run: cmake --build $GITHUB_WORKSPACE/build -j `nproc` diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml deleted file mode 100644 index fbcf6bfa..00000000 --- a/.github/workflows/windows.yml +++ /dev/null @@ -1,213 +0,0 @@ -name: Windows - -on: [push, pull_request] - -jobs: - msvc: - runs-on: windows-2022 - strategy: - matrix: - VER: [v141, v142, v143] - EXT: [ON] # OFF: error C2079: 'statbuf' uses undefined struct 'stat' - GEN: [Visual Studio 17 2022, Ninja Multi-Config] - BIN: [x64, x86] - STD: [11, 17] - CMAKE: [3.22.0] - env: - CMAKE_URL: https://github.com/Kitware/CMake/releases/download/v${{matrix.CMAKE}}/cmake-${{matrix.CMAKE}}-windows-x86_64.zip - CMAKE_EXE: C:\Tools\Kitware\CMake\${{matrix.CMAKE}}\bin\cmake.exe - CTEST_EXE: C:\Tools\Kitware\CMake\${{matrix.CMAKE}}\bin\ctest.exe - NINJA_URL: https://github.com/ninja-build/ninja/releases/download/v1.10.2/ninja-win.zip - NINJA_EXE: C:\Tools\Ninja\ninja.exe - - steps: - - name: Checkout OpenCL-CLHPP - uses: actions/checkout@v3 - with: - submodules: recursive - - - name: Checkout OpenCL-Headers - uses: actions/checkout@v3 - with: - repository: KhronosGroup/OpenCL-Headers - path: external/OpenCL-Headers - - - name: Checkout OpenCL-ICD-Loader - uses: actions/checkout@v3 - with: - repository: KhronosGroup/OpenCL-ICD-Loader - path: external/OpenCL-ICD-Loader - - - name: Create Build Environment - shell: pwsh - run: | - Invoke-WebRequest ${env:CMAKE_URL} -OutFile ~\Downloads\cmake-${{matrix.CMAKE}}-windows-x86_64.zip - Expand-Archive ~\Downloads\cmake-${{matrix.CMAKE}}-windows-x86_64.zip -DestinationPath C:\Tools\Kitware\CMake\ - Rename-Item C:\Tools\Kitware\CMake\* ${{matrix.CMAKE}} - Invoke-WebRequest ${env:NINJA_URL} -OutFile ~\Downloads\ninja-win.zip - Expand-Archive ~\Downloads\ninja-win.zip -DestinationPath C:\Tools\Ninja\ - Remove-Item ~\Downloads\* - & ${env:CMAKE_EXE} --version - & ${env:NINJA_EXE} --version - - - name: Build & install OpenCL-Headers (MSBuild) - if: matrix.GEN == 'Visual Studio 17 2022' - shell: cmd - run: | - set C_FLAGS="/w" - 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 - - - name: Build & install OpenCL-Headers (Ninja Multi-Config) - if: matrix.GEN == 'Ninja Multi-Config' - shell: cmd - run: | - set C_FLAGS="/w" - 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% - - - name: Build & install OpenCL-ICD-Loader (MSBuild) - if: matrix.GEN == 'Visual Studio 17 2022' - shell: cmd - run: | - set C_FLAGS="/w" - 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-ICD-Loader\install -D CMAKE_PREFIX_PATH=%GITHUB_WORKSPACE%\external\OpenCL-Headers\install -D BUILD_TESTING=OFF -S %GITHUB_WORKSPACE%\external\OpenCL-ICD-Loader -B %GITHUB_WORKSPACE%\external\OpenCL-ICD-Loader\build - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/external/OpenCL-ICD-Loader/build --target install --config Release -- /verbosity:minimal /maxCpuCount /noLogo - - - name: Build & install OpenCL-ICD-Loader (Ninja Multi-Config) - if: matrix.GEN == 'Ninja Multi-Config' - shell: cmd - run: | - set C_FLAGS="/w" - 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-ICD-Loader\install -D CMAKE_PREFIX_PATH=%GITHUB_WORKSPACE%\external\OpenCL-Headers\install -D BUILD_TESTING=OFF -S %GITHUB_WORKSPACE%\external\OpenCL-ICD-Loader -B %GITHUB_WORKSPACE%\external\OpenCL-ICD-Loader\build - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/external/OpenCL-ICD-Loader/build --target install --config Release -- -j%NUMBER_OF_PROCESSORS% - - - name: Configure (MSBuild) - if: matrix.GEN == 'Visual Studio 17 2022' - shell: cmd - # no /WX during configuration because: - # warning C4459: declaration of 'platform' hides global declaration - # warning C4100: 'input_headers': unreferenced formal parameter - 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;%GITHUB_WORKSPACE%\external\OpenCL-ICD-Loader\install" -S %GITHUB_WORKSPACE% -B %GITHUB_WORKSPACE%\build - - - name: Configure (Ninja Multi-Config) - if: matrix.GEN == 'Ninja Multi-Config' - shell: cmd - # no /WX during configuration because: - # warning C4459: declaration of 'platform' hides global declaration - # warning C4100: 'input_headers': unreferenced formal parameter - 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;%GITHUB_WORKSPACE%\external\OpenCL-ICD-Loader\install" -S %GITHUB_WORKSPACE% -B %GITHUB_WORKSPACE%\build - - - name: Build (MSBuild) - if: matrix.GEN == 'Visual Studio 17 2022' - shell: cmd - 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 - - - name: Build (Ninja) - if: matrix.GEN == 'Ninja Multi-Config' - shell: cmd - 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 - - - name: Test - continue-on-error: true - working-directory: ${{runner.workspace}}/OpenCL-CLHPP/build - shell: cmd - run: | - %CTEST_EXE% -C Release --output-on-failure --parallel %NUMBER_OF_PROCESSORS% - %CTEST_EXE% -C Debug --output-on-failure --parallel %NUMBER_OF_PROCESSORS% - - - name: Install - shell: cmd - run: | - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/build --config Release --target install - - - name: "Consume (MSBuild standalone): Configure/Build/Test" - shell: cmd - 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%/tests/pkgconfig/bare - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/tests/pkgconfig/bare --config Release - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/tests/pkgconfig/bare --config Debug - cd %GITHUB_WORKSPACE%/tests/pkgconfig/bare - %CTEST_EXE% --output-on-failure -C Release - %CTEST_EXE% --output-on-failure -C Debug - - - name: "Consume (MSBuild SDK): Configure/Build/Test" - shell: cmd - 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-CLHPP/OpenCL-CLHPP/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake")\ninclude("/home/runner/work/OpenCL-CLHPP/OpenCL-CLHPP/external/OpenCL-ICD-Loader/install/share/cmake/OpenCLICDLoader/OpenCLICDLoaderTargets.cmake")\ninclude("${CMAKE_CURRENT_LIST_DIR}/../OpenCLHeadersCpp/OpenCLHeadersCppTargets.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%/tests/pkgconfig/bare - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/tests/pkgconfig/bare --config Release - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/tests/pkgconfig/bare --config Debug - cd %GITHUB_WORKSPACE%/tests/pkgconfig/bare - %CTEST_EXE% --output-on-failure -C Release - %CTEST_EXE% --output-on-failure -C Debug - - - name: "Consume (Ninja-Multi-Config standalone): Configure/Build/Test" - shell: cmd - 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%/tests/pkgconfig/bare - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/tests/pkgconfig/bare --config Release - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/tests/pkgconfig/bare --config Debug - cd %GITHUB_WORKSPACE%/tests/pkgconfig/bare - %CTEST_EXE% --output-on-failure -C Release - %CTEST_EXE% --output-on-failure -C Debug - - - name: "Consume (Ninja-Multi-Config SDK): Configure/Build/Test" - shell: cmd - 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-CLHPP/OpenCL-CLHPP/external/OpenCL-Headers/install/share/cmake/OpenCLHeaders/OpenCLHeadersTargets.cmake")\ninclude("/home/runner/work/OpenCL-CLHPP/OpenCL-CLHPP/external/OpenCL-ICD-Loader/install/share/cmake/OpenCLICDLoader/OpenCLICDLoaderTargets.cmake")\ninclude("${CMAKE_CURRENT_LIST_DIR}/../OpenCLHeadersCpp/OpenCLHeadersCppTargets.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%/tests/pkgconfig/bare - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/tests/pkgconfig/bare --config Release - %CMAKE_EXE% --build %GITHUB_WORKSPACE%/tests/pkgconfig/bare --config Debug - cd %GITHUB_WORKSPACE%/tests/pkgconfig/bare - %CTEST_EXE% --output-on-failure -C Release - %CTEST_EXE% --output-on-failure -C Debug diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..2ba69600 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +# Build dir +[Bb]uild/ + +# Install dir +[Ii]nstall/ + +# Package dir +[Pp]ackage[-_\s\d]*/ + +# External dir +[Ee]xternal/ + +# Visual Studio Code +.vscode diff --git a/CMakeLists.txt b/CMakeLists.txt index b9689cca..138d3dde 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.16) project(OpenCLHeadersCpp VERSION 3.0 @@ -73,10 +73,11 @@ install( EXPORT OpenCLHeadersCppTargets ) +include(GNUInstallDirs) + set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake") include(JoinPaths) - -include(GNUInstallDirs) +include(Package) install( DIRECTORY include/CL @@ -130,11 +131,3 @@ endif(BUILD_EXAMPLES) if(CLHPP_BUILD_TESTS) add_subdirectory(tests) endif(CLHPP_BUILD_TESTS) - -join_paths(OPENCLHPP_INCLUDEDIR_PC "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}") - -configure_file(OpenCL-CLHPP.pc.in OpenCL-CLHPP.pc @ONLY) -set(pkg_config_location ${CMAKE_INSTALL_DATADIR}/pkgconfig) -install( - FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCL-CLHPP.pc - DESTINATION ${pkg_config_location}) diff --git a/OpenCL-CLHPP.pc.in b/OpenCL-CLHPP.pc.in index 763bd1c7..5d4a07b9 100644 --- a/OpenCL-CLHPP.pc.in +++ b/OpenCL-CLHPP.pc.in @@ -1,4 +1,4 @@ -prefix=@CMAKE_INSTALL_PREFIX@ +prefix=@PKGCONFIG_PREFIX@ includedir=@OPENCLHPP_INCLUDEDIR_PC@ Name: OpenCL-CLHPP diff --git a/cmake/Package.cmake b/cmake/Package.cmake new file mode 100644 index 00000000..046c589c --- /dev/null +++ b/cmake/Package.cmake @@ -0,0 +1,86 @@ +set(CPACK_PACKAGE_VENDOR "khronos") + +set(CPACK_DEBIAN_DESCRIPTION "C++ headers for OpenCL development") + +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt") + +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() + +# 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(OPENCLHPP_INCLUDEDIR_PC "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}") + +set(pkg_config_location ${CMAKE_INSTALL_DATADIR}/pkgconfig) +set(PKGCONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}") +configure_file( + OpenCL-CLHPP.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL-CLHPP.pc + @ONLY) +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL-CLHPP.pc + DESTINATION ${pkg_config_location} + COMPONENT pkgconfig_install) + +set(PKGCONFIG_PREFIX "${CPACK_PACKAGING_INSTALL_PREFIX}") +configure_file( + OpenCL-CLHPP.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL-CLHPP.pc + @ONLY) +# This install component is only needed in the Debian package +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL-CLHPP.pc + DESTINATION ${pkg_config_location} + COMPONENT pkgconfig_package + EXCLUDE_FROM_ALL) + +# By using component based packaging, component pkgconfig_install +# can be excluded from the package, and component pkgconfig_package +# can be included. +set(CPACK_DEB_COMPONENT_INSTALL ON) +set(CPACK_COMPONENTS_GROUPING "ALL_COMPONENTS_IN_ONE") + +include(CPackComponent) +cpack_add_component(pkgconfig_install) +cpack_add_component(pkgconfig_package) +set(CPACK_COMPONENTS_ALL "Unspecified;pkgconfig_package") + +# DEB packaging configuration +set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_VENDOR}) + +set(CPACK_DEBIAN_PACKAGE_HOMEPAGE + "https://github.com/KhronosGroup/OpenCL-CLHPP") + +# Version number [epoch:]upstream_version[-debian_revision] +set(LATEST_RELEASE_VERSION "2023.04.17") +set(CPACK_DEBIAN_PACKAGE_VERSION "${PROJECT_VERSION}~${LATEST_RELEASE_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}") + +set(DEBIAN_PACKAGE_NAME "opencl-clhpp-headers") +set(CPACK_DEBIAN_PACKAGE_NAME + "${DEBIAN_PACKAGE_NAME}" + CACHE STRING "Package name" FORCE) + +# Get architecture +execute_process(COMMAND dpkg "--print-architecture" OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE) +string(STRIP "${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}" CPACK_DEBIAN_PACKAGE_ARCHITECTURE) + +# Package file name in deb format: +# _-_.deb +set(CPACK_DEBIAN_FILE_NAME "${CPACK_PACKAGE_VENDOR}-${DEBIAN_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") + +# Dependencies +set(CPACK_DEBIAN_PACKAGE_DEPENDS "opencl-c-headers (>= 3.0~2021.04.29)") + +set(CPACK_DEBIAN_PACKAGE_DEBUG ON) + +include(CPack) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 99df70e9..27e4941e 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,3 +1 @@ -cmake_minimum_required(VERSION 3.0) - add_subdirectory(src) diff --git a/external/CMock b/external/CMock index 379a9a8d..c548629a 160000 --- a/external/CMock +++ b/external/CMock @@ -1 +1 @@ -Subproject commit 379a9a8d5dd5cdff8fd345710dd70ae26f966c71 +Subproject commit c548629a478ef07f89db8b86c1dd4041a1cf4053 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 diff --git a/tests/cmock.yml b/tests/cmock.yml index 0cd67b53..0a837a51 100644 --- a/tests/cmock.yml +++ b/tests/cmock.yml @@ -1,5 +1,6 @@ :cmock: :includes: + - stdlib.h - CL/cl_platform.h :treat_externs: :include :enforce_strict_ordering: :true diff --git a/tests/test_openclhpp.cpp b/tests/test_openclhpp.cpp index 64b70d29..2db32236 100644 --- a/tests/test_openclhpp.cpp +++ b/tests/test_openclhpp.cpp @@ -272,28 +272,27 @@ static cl_int clGetPlatformInfo_version_3_0( class RefcountTable { private: - size_t n; // number of objects - void * const *objects; // object IDs - int *refcounts; // current refcounts + size_t n_; // number of objects + void *const *objects_; // object IDs + int *refcounts_; // current refcounts size_t find(void *object) { size_t idx = 0; - while (idx < n && objects[idx] != object) - idx++; - TEST_ASSERT(idx < n); - TEST_ASSERT(refcounts[idx] > 0); // otherwise object has been destroyed + while (idx < n_ && objects_[idx] != object) idx++; + TEST_ASSERT(idx < n_); + TEST_ASSERT(refcounts_[idx] > 0); // otherwise object has been destroyed return idx; } public: - RefcountTable() : n(0), objects(nullptr), refcounts(nullptr) {} + RefcountTable(): n_(0), objects_(nullptr), refcounts_(nullptr) {} - void init(size_t n, void * const *objects, int *refcounts) + void init(size_t n, void *const *objects, int *refcounts) { - this->n = n; - this->objects = objects; - this->refcounts = refcounts; + this->n_ = n; + this->objects_ = objects; + this->refcounts_ = refcounts; } void reset() @@ -304,14 +303,14 @@ class RefcountTable cl_int retain(void *object) { size_t idx = find(object); - ++refcounts[idx]; + ++refcounts_[idx]; return CL_SUCCESS; } cl_int release(void *object) { size_t idx = find(object); - --refcounts[idx]; + --refcounts_[idx]; return CL_SUCCESS; } }; @@ -1195,7 +1194,7 @@ static cl_mem clCreateBuffer_testBufferConstructorContextIterator( (void) num_calls; TEST_ASSERT_EQUAL_PTR(make_context(0), context); - TEST_ASSERT_BITS(CL_MEM_COPY_HOST_PTR, flags, !CL_MEM_COPY_HOST_PTR); + TEST_ASSERT_BITS(CL_MEM_COPY_HOST_PTR, flags, CL_MEM_COPY_HOST_PTR != 0); TEST_ASSERT_BITS(CL_MEM_READ_ONLY, flags, CL_MEM_READ_ONLY); TEST_ASSERT_EQUAL(sizeof(int)*1024, size); TEST_ASSERT_NULL(host_ptr); @@ -1305,6 +1304,7 @@ void testBufferConstructorQueueIterator(void) clReleaseCommandQueue_ExpectAndReturn(make_command_queue(0), CL_SUCCESS); } +#if CL_HPP_TARGET_OPENCL_VERSION >= 300 static cl_mem clCreateBufferWithProperties_testBufferWithProperties( cl_context context, const cl_mem_properties *properties, @@ -1326,6 +1326,7 @@ static cl_mem clCreateBufferWithProperties_testBufferWithProperties( return make_mem(0); } +#endif void testBufferWithProperties(void) { @@ -1782,7 +1783,7 @@ void testKernelSetArgLocal(void) kernelPool[0].setArg(2, cl::Local(123)); } -void testKernelSetArgBySetKernelArgSVMPointerWithUniquePtrType() +void testKernelSetArgBySetKernelArgSVMPointerWithUniquePtrType(void) { #if CL_HPP_TARGET_OPENCL_VERSION >= 200 std::unique_ptr buffer(new int(1000)); @@ -1791,7 +1792,7 @@ void testKernelSetArgBySetKernelArgSVMPointerWithUniquePtrType() #endif } -void testKernelSetArgBySetKernelArgSVMPointerWithVectorType() +void testKernelSetArgBySetKernelArgSVMPointerWithVectorType(void) { #if CL_HPP_TARGET_OPENCL_VERSION >= 200 VECTOR_CLASS vec(1000); @@ -1800,7 +1801,7 @@ void testKernelSetArgBySetKernelArgSVMPointerWithVectorType() #endif } -void testKernelSetArgBySetKernelArgSVMPointerWithPointerType() +void testKernelSetArgBySetKernelArgSVMPointerWithPointerType(void) { #if CL_HPP_TARGET_OPENCL_VERSION >= 200 cl_mem *memory = &bufferPool[1](); @@ -2621,7 +2622,6 @@ static cl_int clGetKernelSubGroupInfo_testSubGroups(cl_kernel kernel, } else { TEST_ABORT(); - return CL_INVALID_OPERATION; } } #endif @@ -3191,7 +3191,8 @@ static cl_int clGetDeviceInfo_uuid_pci_bus_info( (param_name == CL_DEVICE_UUID_KHR) ? 1 : (param_name == CL_DRIVER_UUID_KHR) ? 2 : 0; - for (int i = 0; i < CL_UUID_SIZE_KHR; i++) { + for (cl_uchar i = 0; i < CL_UUID_SIZE_KHR; i++) + { pUUID[i] = i + start; } } @@ -3215,7 +3216,8 @@ static cl_int clGetDeviceInfo_uuid_pci_bus_info( if (param_value_size == CL_LUID_SIZE_KHR && param_value) { cl_uchar* pLUID = static_cast(param_value); cl_uchar start = 3; - for (int i = 0; i < CL_LUID_SIZE_KHR; i++) { + for (cl_uchar i = 0; i < CL_LUID_SIZE_KHR; i++) + { pLUID[i] = i + start; } } @@ -3507,7 +3509,8 @@ void testMoveAssignSemaphoreNonNull(void); void testMoveAssignSemaphoreNull(void); void testMoveConstructSemaphoreNonNull(void); void testMoveConstructSemaphoreNull(void); -MAKE_MOVE_TESTS(Semaphore, make_semaphore_khr, clReleaseSemaphoreKHR, semaphorePool); +MAKE_MOVE_TESTS(Semaphore, make_semaphore_khr, clReleaseSemaphoreKHR, + semaphorePool) #else void testMoveAssignSemaphoreNonNull(void) {} void testMoveAssignSemaphoreNull(void) {} @@ -3645,16 +3648,14 @@ void testSemaphoreWithProperties(void) } static cl_int clGetSemaphoreInfoKHR_testSemaphoreGetContext( - cl_semaphore_khr sema_object, - cl_semaphore_info_khr param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret, - int num_calls) + cl_semaphore_khr sema_object, cl_semaphore_info_khr param_name, + size_t param_value_size, void *param_value, size_t *param_value_size_ret, + int /*num_calls*/) { TEST_ASSERT_EQUAL_PTR(semaphorePool[0](), sema_object); TEST_ASSERT_EQUAL_HEX(CL_SEMAPHORE_CONTEXT_KHR, param_name); - TEST_ASSERT(param_value == nullptr || param_value_size >= sizeof(cl_context)); + TEST_ASSERT(param_value == nullptr + || param_value_size >= sizeof(cl_context)); if (param_value_size_ret != nullptr) *param_value_size_ret = sizeof(cl_context); if (param_value != nullptr) @@ -3679,12 +3680,9 @@ void testSemaphoreGetInfoContext(void) } static cl_int clGetSemaphoreInfoKHR_testSemaphoreGetReferenceCount( - cl_semaphore_khr sema_object, - cl_semaphore_info_khr param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret, - int num_calls) + cl_semaphore_khr sema_object, cl_semaphore_info_khr param_name, + size_t param_value_size, void *param_value, size_t *param_value_size_ret, + int /*num_calls*/) { TEST_ASSERT_EQUAL_PTR(semaphorePool[0](), sema_object); TEST_ASSERT_EQUAL_HEX(CL_SEMAPHORE_REFERENCE_COUNT_KHR, param_name); @@ -3710,24 +3708,24 @@ void testSemaphoreGetInfoReferenceCount(void) } static cl_int clGetSemaphoreInfoKHR_testSemaphoreGetProperties( - cl_semaphore_khr sema_object, - cl_semaphore_info_khr param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret, - int num_calls) + cl_semaphore_khr sema_object, cl_semaphore_info_khr param_name, + size_t param_value_size, void *param_value, size_t *param_value_size_ret, + int /*num_calls*/) { - static const cl_semaphore_properties_khr test_properties[] = - {CL_SEMAPHORE_TYPE_KHR, - CL_SEMAPHORE_TYPE_BINARY_KHR}; + static const cl_semaphore_properties_khr test_properties[] = { + CL_SEMAPHORE_TYPE_KHR, CL_SEMAPHORE_TYPE_BINARY_KHR + }; TEST_ASSERT_EQUAL_PTR(semaphorePool[0](), sema_object); TEST_ASSERT_EQUAL_HEX(CL_SEMAPHORE_PROPERTIES_KHR, param_name); - TEST_ASSERT(param_value == nullptr || param_value_size >= sizeof(test_properties)); + TEST_ASSERT(param_value == nullptr + || param_value_size >= sizeof(test_properties)); if (param_value_size_ret != nullptr) *param_value_size_ret = sizeof(test_properties); if (param_value != nullptr) { - static_cast(param_value)[0] = test_properties[0]; - static_cast(param_value)[1] = test_properties[1]; + static_cast(param_value)[0] = + test_properties[0]; + static_cast(param_value)[1] = + test_properties[1]; } return CL_SUCCESS; @@ -3748,20 +3746,19 @@ void testSemaphoreGetInfoProperties(void) } static cl_int clGetSemaphoreInfoKHR_testSemaphoreGetType( - cl_semaphore_khr sema_object, - cl_semaphore_info_khr param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret, - int num_calls) + cl_semaphore_khr sema_object, cl_semaphore_info_khr param_name, + size_t param_value_size, void *param_value, size_t *param_value_size_ret, + int /*num_calls*/) { TEST_ASSERT_EQUAL_PTR(semaphorePool[0](), sema_object); TEST_ASSERT_EQUAL_HEX(CL_SEMAPHORE_TYPE_KHR, param_name); - TEST_ASSERT(param_value == nullptr || param_value_size >= sizeof(cl_semaphore_type_khr)); + TEST_ASSERT(param_value == nullptr + || param_value_size >= sizeof(cl_semaphore_type_khr)); if (param_value_size_ret != nullptr) *param_value_size_ret = sizeof(cl_semaphore_type_khr); if (param_value != nullptr) - *static_cast(param_value) = CL_SEMAPHORE_TYPE_BINARY_KHR; + *static_cast(param_value) = + CL_SEMAPHORE_TYPE_BINARY_KHR; return CL_SUCCESS; } @@ -3779,16 +3776,14 @@ void testSemaphoreGetInfoType(void) } static cl_int clGetSemaphoreInfoKHR_testSemaphoreGetPayload( - cl_semaphore_khr sema_object, - cl_semaphore_info_khr param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret, - int num_calls) + cl_semaphore_khr sema_object, cl_semaphore_info_khr param_name, + size_t param_value_size, void *param_value, size_t *param_value_size_ret, + int /*num_calls*/) { TEST_ASSERT_EQUAL_PTR(semaphorePool[0](), sema_object); TEST_ASSERT_EQUAL_HEX(CL_SEMAPHORE_PAYLOAD_KHR, param_name); - TEST_ASSERT(param_value == nullptr || param_value_size >= sizeof(cl_semaphore_payload_khr)); + TEST_ASSERT(param_value == nullptr + || param_value_size >= sizeof(cl_semaphore_payload_khr)); if (param_value_size_ret != nullptr) *param_value_size_ret = sizeof(cl_semaphore_payload_khr); if (param_value != nullptr) @@ -3810,18 +3805,16 @@ void testSemaphoreGetInfoPayload(void) } static cl_int clGetSemaphoreInfoKHR_testSemaphoreGetDevices( - cl_semaphore_khr sema_object, - cl_semaphore_info_khr param_name, - size_t param_value_size, - void* param_value, - size_t* param_value_size_ret, - int num_calls) + cl_semaphore_khr sema_object, cl_semaphore_info_khr param_name, + size_t param_value_size, void *param_value, size_t *param_value_size_ret, + int /*num_calls*/) { - static const cl_device_id test_devices[] = - {make_device_id(0), make_device_id(1)}; + static const cl_device_id test_devices[] = { make_device_id(0), + make_device_id(1) }; TEST_ASSERT_EQUAL_PTR(semaphorePool[0](), sema_object); TEST_ASSERT_EQUAL_HEX(CL_DEVICE_HANDLE_LIST_KHR, param_name); - TEST_ASSERT(param_value == nullptr || param_value_size >= sizeof(test_devices)); + TEST_ASSERT(param_value == nullptr + || param_value_size >= sizeof(test_devices)); if (param_value_size_ret != nullptr) *param_value_size_ret = sizeof(test_devices); if (param_value != nullptr) { @@ -3898,16 +3891,12 @@ static int make_external_semaphore_fd( } static cl_int clGetSemaphoreHandleForTypeKHR_GetHandles( - cl_semaphore_khr sema_object, - cl_device_id device, - cl_external_semaphore_handle_type_khr handle_type, - size_t handle_size, - void* handle_ptr, - size_t* handle_size_ret, - int num_calls) + cl_semaphore_khr sema_object, cl_device_id device, + cl_external_semaphore_handle_type_khr handle_type, size_t handle_size, + void *handle_ptr, size_t *handle_size_ret, int /*num_calls*/) { - (void) sema_object; - (void) device; + (void)sema_object; + (void)device; switch (handle_type) { #if defined(cl_khr_external_semaphore_dx_fence) @@ -3973,7 +3962,7 @@ static cl_int clGetSemaphoreHandleForTypeKHR_GetHandles( return CL_INVALID_OPERATION; } -void testTemplateGetSemaphoreHandleForTypeKHR() +void testTemplateGetSemaphoreHandleForTypeKHR(void) { clGetDeviceInfo_StubWithCallback(clGetDeviceInfo_platform); clGetPlatformInfo_StubWithCallback(clGetPlatformInfo_version_2_0); @@ -3981,7 +3970,8 @@ void testTemplateGetSemaphoreHandleForTypeKHR() cl::Device device(make_device_id(0)); - clGetSemaphoreHandleForTypeKHR_StubWithCallback(clGetSemaphoreHandleForTypeKHR_GetHandles); + clGetSemaphoreHandleForTypeKHR_StubWithCallback( + clGetSemaphoreHandleForTypeKHR_GetHandles); cl::Semaphore semaphore; #if defined(cl_khr_external_semaphore_dx_fence)