From 2db194373ce3cb9b7aa3c8107995145f46c829b6 Mon Sep 17 00:00:00 2001 From: Beatriz Navidad Vilches Date: Wed, 14 Jun 2023 15:33:39 +0000 Subject: [PATCH 1/3] Add Package CMake module --- .gitignore | 12 ++++++++++++ CMakeLists.txt | 1 + cmake/Package.cmake | 44 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 57 insertions(+) create mode 100644 .gitignore create mode 100644 cmake/Package.cmake diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..708e035e --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +# Build dir +[Bb]uild/ + +# Package dir +[Pp]ackage[-_\s\d]*/ + +# Test dir +[Tt]esting/ + +# CMake +CMakeCache.txt +CMakeFiles/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 7002c372..b1eba897 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,7 @@ option(OPENCL_HEADERS_BUILD_CXX_TESTS "Enable support for OpenCL C headers testi set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake") include(JoinPaths) +include(Package) include(GNUInstallDirs) diff --git a/cmake/Package.cmake b/cmake/Package.cmake new file mode 100644 index 00000000..1c5fd812 --- /dev/null +++ b/cmake/Package.cmake @@ -0,0 +1,44 @@ +set(CPACK_PACKAGE_VENDOR "khronos") + +set(CPACK_PACKAGE_DESCRIPTION "OpenCL API C headers") + +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() + +if(NOT CPACK_SOURCE_IGNORE_FILES) + set(CPACK_SOURCE_IGNORE_FILES="/.github/") +endif() + +# DEB packaging configuration +set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_VENDOR}) + +set(CPACK_DEBIAN_PACKAGE_HOMEPAGE + "https://github.com/KhronosGroup/OpenCL-Headers") + +# Get Debian package name from project name +string(TOLOWER ${PROJECT_NAME} DEBIAN_PACKAGE_NAME) +string(REPLACE "opencl" "opencl-" DEBIAN_PACKAGE_NAME ${DEBIAN_PACKAGE_NAME}) + +# Version number [epoch:]upstream_version[-debian_revision] +set(CPACK_DEBIAN_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION}) # upstream_version +set(CPACK_DEBIAN_PACKAGE_RELEASE "1") # devian_revision (because this is a + # non-native pkg) + +set(CPACK_DEBIAN_PACKAGE_NAME + "${CPACK_PACKAGE_VENDOR}-${DEBIAN_PACKAGE_NAME}" + CACHE STRING "Package name" FORCE) + +set(CPACK_DEBIAN_PACKAGE_FILE_NAME "${CPACK_DEBIAN_PACKAGE_NAME}-${CPACK_DEBIAN_PACKAGE_VERSION}") + +# Package file name in deb format: +# _-_.deb +set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT) + +set(CPACK_DEBIAN_PACKAGE_DEBUG ON) + +include(CPack) From 5130a09daa7584c47d8e8640548ca6787ebfc2ab Mon Sep 17 00:00:00 2001 From: Beatriz Navidad Vilches Date: Wed, 14 Jun 2023 15:50:11 +0000 Subject: [PATCH 2/3] Add github action for DEB packaging and consuming --- .github/workflows/linux.yml | 37 +++++++++++++++++++++++++++++++++++-- cmake/Package.cmake | 2 +- 2 files changed, 36 insertions(+), 3 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 9c1733b0..c8dcf8c3 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -158,12 +158,13 @@ jobs: BIN: 32 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-Headers uses: actions/checkout@v3 - + - name: Configure shell: bash run: $CMAKE_EXE @@ -190,6 +191,38 @@ jobs: $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Release -- -j`nproc`; fi; + - name: Package DEB + shell: bash + run: $CPACK_EXE + --config "$GITHUB_WORKSPACE/build/CPackSourceConfig.cmake" + -G DEB + -C Release + -B "$GITHUB_WORKSPACE/package-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 \ + `if [[ "${{matrix.GEN}}" == "Unix Makefiles" ]]; then echo -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}}; fi;` \ + -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror -m${{matrix.BIN}}" \ + -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} \ + -D CMAKE_C_EXTENSIONS=OFF \ + -D CMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -Werror -m${{matrix.BIN}}" \ + -D CMAKE_CXX_COMPILER=${{matrix.CXX_COMPILER}} \ + -D CMAKE_CXX_EXTENSIONS=OFF \ + -B$GITHUB_WORKSPACE/build \ + -H$GITHUB_WORKSPACE + if [[ "${{matrix.GEN}}" == "Unix Makefiles" ]]; then + $CMAKE_EXE --build $GITHUB_WORKSPACE/build -- -j`nproc` + else + $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Debug -- -j`nproc` + $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Release -- -j`nproc` + fi + - name: Test shell: bash working-directory: ${{runner.workspace}}/OpenCL-Headers/build @@ -212,4 +245,4 @@ jobs: - name: Test pkg-config shell: bash - run: PKG_CONFIG_PATH="$GITHUB_WORKSPACE/install/share/pkgconfig" pkg-config OpenCL-Headers --cflags | grep -q "\-I$GITHUB_WORKSPACE/install/include" + run: pkg-config OpenCL-Headers --cflags | grep -q "\-I/usr/local/include" diff --git a/cmake/Package.cmake b/cmake/Package.cmake index 1c5fd812..6e97e130 100644 --- a/cmake/Package.cmake +++ b/cmake/Package.cmake @@ -11,7 +11,7 @@ if(NOT CPACK_PACKAGING_INSTALL_PREFIX) endif() if(NOT CPACK_SOURCE_IGNORE_FILES) - set(CPACK_SOURCE_IGNORE_FILES="/.github/") + set(CPACK_SOURCE_IGNORE_FILES="/.github/;/build/") endif() # DEB packaging configuration From f5893a8be50b84709eacc6282c802420ce10a372 Mon Sep 17 00:00:00 2001 From: Beatriz Navidad Vilches Date: Thu, 15 Jun 2023 14:41:17 +0000 Subject: [PATCH 3/3] Fixes from review: now packaging the install tree; Debian package name and installation prefix fixed --- .github/workflows/linux.yml | 68 ++++++++++++++++++------------------- .gitignore | 3 ++ CMakeLists.txt | 2 +- cmake/Package.cmake | 25 ++++++-------- 4 files changed, 49 insertions(+), 49 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index c8dcf8c3..2c044f72 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -167,7 +167,8 @@ jobs: - name: Configure shell: bash - run: $CMAKE_EXE + run: mkdir $GITHUB_WORKSPACE/build && cd $GITHUB_WORKSPACE/build && + $CMAKE_EXE -G "${{matrix.GEN}}" -D BUILD_TESTING=ON `if [[ "${{matrix.GEN}}" == "Unix Makefiles" ]]; then echo -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}}; fi;` @@ -178,8 +179,8 @@ jobs: -D CMAKE_CXX_COMPILER=${{matrix.CXX_COMPILER}} -D CMAKE_CXX_EXTENSIONS=OFF -D CMAKE_INSTALL_PREFIX=$GITHUB_WORKSPACE/install - -B$GITHUB_WORKSPACE/build - -H$GITHUB_WORKSPACE + -D CPACK_PACKAGING_INSTALL_PREFIX=/usr + $GITHUB_WORKSPACE - name: Build shell: bash @@ -191,47 +192,46 @@ jobs: $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Release -- -j`nproc`; fi; + - name: Test + shell: bash + working-directory: ${{runner.workspace}}/OpenCL-Headers/build + run: if [[ "${{matrix.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/CPackSourceConfig.cmake" + --config "$GITHUB_WORKSPACE/build/CPackConfig.cmake" -G DEB -C Release -B "$GITHUB_WORKSPACE/package-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 \ - `if [[ "${{matrix.GEN}}" == "Unix Makefiles" ]]; then echo -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}}; fi;` \ - -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror -m${{matrix.BIN}}" \ - -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} \ - -D CMAKE_C_EXTENSIONS=OFF \ - -D CMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -Werror -m${{matrix.BIN}}" \ - -D CMAKE_CXX_COMPILER=${{matrix.CXX_COMPILER}} \ - -D CMAKE_CXX_EXTENSIONS=OFF \ - -B$GITHUB_WORKSPACE/build \ - -H$GITHUB_WORKSPACE - if [[ "${{matrix.GEN}}" == "Unix Makefiles" ]]; then - $CMAKE_EXE --build $GITHUB_WORKSPACE/build -- -j`nproc` - else - $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Debug -- -j`nproc` - $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Release -- -j`nproc` - fi - - - name: Test - shell: bash - working-directory: ${{runner.workspace}}/OpenCL-Headers/build - run: if [[ "${{matrix.GEN}}" == "Unix Makefiles" ]]; + run: dpkg -i $GITHUB_WORKSPACE/package-deb/*.deb && + mkdir $GITHUB_WORKSPACE/build_package && cd $GITHUB_WORKSPACE/build_package && + $CMAKE_EXE + -G "${{matrix.GEN}}" + -D BUILD_TESTING=ON + `if [[ "${{matrix.GEN}}" == "Unix Makefiles" ]]; then echo -D CMAKE_BUILD_TYPE=${{matrix.CONFIG}}; fi;` + -D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Werror -m${{matrix.BIN}}" + -D CMAKE_C_COMPILER=${{matrix.C_COMPILER}} + -D CMAKE_C_EXTENSIONS=OFF + -D CMAKE_CXX_FLAGS="-Wall -Wextra -pedantic -Werror -m${{matrix.BIN}}" + -D CMAKE_CXX_COMPILER=${{matrix.CXX_COMPILER}} + -D CMAKE_CXX_EXTENSIONS=OFF + $GITHUB_WORKSPACE/tests/pkgconfig/bare && + if [[ "${{matrix.GEN}}" == "Unix Makefiles" ]]; then - $CTEST_EXE --output-on-failure --parallel `nproc`; + $CMAKE_EXE --build $GITHUB_WORKSPACE/build -- -j`nproc`; else - $CTEST_EXE --output-on-failure -C Debug --parallel `nproc`; - $CTEST_EXE --output-on-failure -C Release --parallel `nproc`; + $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Debug -- -j`nproc`; + $CMAKE_EXE --build $GITHUB_WORKSPACE/build --config Release -- -j`nproc`; fi; - name: Test install @@ -245,4 +245,4 @@ jobs: - name: Test pkg-config shell: bash - run: pkg-config OpenCL-Headers --cflags | grep -q "\-I/usr/local/include" + run: PKG_CONFIG_PATH="$GITHUB_WORKSPACE/install/share/pkgconfig" pkg-config OpenCL-Headers --cflags | grep -q "\-I$GITHUB_WORKSPACE/install/include" diff --git a/.gitignore b/.gitignore index 708e035e..78760ca1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,9 @@ # Build dir [Bb]uild/ +# Install dir +[Ii]nstall/ + # Package dir [Pp]ackage[-_\s\d]*/ diff --git a/CMakeLists.txt b/CMakeLists.txt index b1eba897..9339a8c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ if(TARGET Headers) endif() project(OpenCLHeaders - VERSION 2.2 + VERSION 3.0 LANGUAGES C # Ideally should be NONE, but GNUInstallDirs detects platform arch using try_compile # https://stackoverflow.com/questions/43379311/why-does-project-affect-cmakes-opinion-on-cmake-sizeof-void-p ) diff --git a/cmake/Package.cmake b/cmake/Package.cmake index 6e97e130..8ba7d479 100644 --- a/cmake/Package.cmake +++ b/cmake/Package.cmake @@ -1,6 +1,6 @@ set(CPACK_PACKAGE_VENDOR "khronos") -set(CPACK_PACKAGE_DESCRIPTION "OpenCL API C headers") +set(CPACK_PACKAGE_DESCRIPTION "OpenCL (Open Computing Language) C header files") set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE") @@ -10,34 +10,31 @@ if(NOT CPACK_PACKAGING_INSTALL_PREFIX) set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") endif() -if(NOT CPACK_SOURCE_IGNORE_FILES) - set(CPACK_SOURCE_IGNORE_FILES="/.github/;/build/") -endif() - # DEB packaging configuration set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_VENDOR}) set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/KhronosGroup/OpenCL-Headers") -# Get Debian package name from project name -string(TOLOWER ${PROJECT_NAME} DEBIAN_PACKAGE_NAME) -string(REPLACE "opencl" "opencl-" DEBIAN_PACKAGE_NAME ${DEBIAN_PACKAGE_NAME}) - # Version number [epoch:]upstream_version[-debian_revision] -set(CPACK_DEBIAN_PACKAGE_VERSION ${CPACK_PACKAGE_VERSION}) # upstream_version -set(CPACK_DEBIAN_PACKAGE_RELEASE "1") # devian_revision (because this is a +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-c-headers") set(CPACK_DEBIAN_PACKAGE_NAME - "${CPACK_PACKAGE_VENDOR}-${DEBIAN_PACKAGE_NAME}" + "${DEBIAN_PACKAGE_NAME}" CACHE STRING "Package name" FORCE) -set(CPACK_DEBIAN_PACKAGE_FILE_NAME "${CPACK_DEBIAN_PACKAGE_NAME}-${CPACK_DEBIAN_PACKAGE_VERSION}") +# 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 DEB-DEFAULT) +set(CPACK_DEBIAN_FILE_NAME "${CPACK_PACKAGE_VENDOR}-${DEBIAN_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb") set(CPACK_DEBIAN_PACKAGE_DEBUG ON)