Skip to content

Commit b71f80a

Browse files
mfepMathiasMagnus
authored andcommitted
Updated CMakeLists to produce binary deb package
1 parent 52321c8 commit b71f80a

6 files changed

Lines changed: 125 additions & 16 deletions

File tree

CMakeLists.txt

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
cmake_minimum_required(VERSION 3.0)
2-
cmake_policy(VERSION 3.0...3.22)
1+
cmake_minimum_required(VERSION 3.16)
2+
cmake_policy(VERSION 3.16...3.26)
33

44
# Include guard for including this project multiple times
55
if(TARGET Headers)
66
return()
77
endif()
88

99
project(OpenCLHeaders
10-
VERSION 2.2
10+
VERSION 3.0
1111
LANGUAGES C # Ideally should be NONE, but GNUInstallDirs detects platform arch using try_compile
1212
# https://stackoverflow.com/questions/43379311/why-does-project-affect-cmakes-opinion-on-cmake-sizeof-void-p
1313
)
@@ -16,9 +16,9 @@ option(OPENCL_HEADERS_BUILD_TESTING "Enable support for OpenCL C headers testing
1616
option(OPENCL_HEADERS_BUILD_CXX_TESTS "Enable support for OpenCL C headers testing in C++ mode." ON)
1717

1818
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
19-
include(JoinPaths)
20-
2119
include(GNUInstallDirs)
20+
include(JoinPaths)
21+
include(Package)
2222

2323
add_library(Headers INTERFACE)
2424
add_library(OpenCL::Headers ALIAS Headers)
@@ -140,11 +140,3 @@ if(CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME)
140140
set_target_properties(headers_generate PROPERTIES FOLDER "Generation")
141141
set_target_properties(headers_copy PROPERTIES FOLDER "Generation")
142142
endif()
143-
144-
join_paths(OPENCL_INCLUDEDIR_PC "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
145-
146-
configure_file(OpenCL-Headers.pc.in OpenCL-Headers.pc @ONLY)
147-
set(pkg_config_location ${CMAKE_INSTALL_DATADIR}/pkgconfig)
148-
install(
149-
FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCL-Headers.pc
150-
DESTINATION ${pkg_config_location})

OpenCL-Headers.pc.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
prefix=@CMAKE_INSTALL_PREFIX@
1+
prefix=@PKGCONFIG_PREFIX@
22
includedir=@OPENCL_INCLUDEDIR_PC@
33

44
Name: OpenCL-Headers

cmake/Package.cmake

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
include("${CMAKE_CURRENT_LIST_DIR}/PackageSetup.cmake")
2+
3+
# Configuring pkgconfig
4+
5+
# We need two different instances of OpenCL-Headers.pc
6+
# One for installing (cmake --install), which contains CMAKE_INSTALL_PREFIX as prefix
7+
# And another for the Debian package, which contains CPACK_PACKAGING_INSTALL_PREFIX as prefix
8+
9+
join_paths(OPENCL_INCLUDEDIR_PC "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
10+
11+
set(pkg_config_location ${CMAKE_INSTALL_DATADIR}/pkgconfig)
12+
set(PKGCONFIG_PREFIX "${CMAKE_INSTALL_PREFIX}")
13+
configure_file(
14+
OpenCL-Headers.pc.in
15+
${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL-Headers.pc
16+
@ONLY)
17+
install(
18+
FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_install/OpenCL-Headers.pc
19+
DESTINATION ${pkg_config_location}
20+
COMPONENT pkgconfig_install)
21+
22+
set(PKGCONFIG_PREFIX "${CPACK_PACKAGING_INSTALL_PREFIX}")
23+
configure_file(
24+
OpenCL-Headers.pc.in
25+
${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL-Headers.pc
26+
@ONLY)
27+
# This install component is only needed in the Debian package
28+
install(
29+
FILES ${CMAKE_CURRENT_BINARY_DIR}/pkgconfig_package/OpenCL-Headers.pc
30+
DESTINATION ${pkg_config_location}
31+
COMPONENT pkgconfig_package
32+
EXCLUDE_FROM_ALL)
33+
34+
# By using component based packaging, component pkgconfig_install
35+
# can be excluded from the package, and component pkgconfig_package
36+
# can be included.
37+
set(CPACK_DEB_COMPONENT_INSTALL ON)
38+
set(CPACK_COMPONENTS_GROUPING "ALL_COMPONENTS_IN_ONE")
39+
40+
include(CPackComponent)
41+
cpack_add_component(pkgconfig_install)
42+
cpack_add_component(pkgconfig_package)
43+
set(CPACK_COMPONENTS_ALL "Unspecified;pkgconfig_package")
44+
45+
set(CPACK_DEBIAN_PACKAGE_DEBUG ON)
46+
47+
include(CPack)

cmake/PackageSetup.cmake

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
set(CPACK_PACKAGE_VENDOR "khronos")
2+
3+
set(CPACK_PACKAGE_DESCRIPTION "OpenCL (Open Computing Language) C header files
4+
OpenCL (Open Computing Language) is a multi-vendor open standard for
5+
general-purpose parallel programming of heterogeneous systems that include
6+
CPUs, GPUs and other processors.
7+
.
8+
This package provides the C development header files for the OpenCL API
9+
as published by The Khronos Group Inc. The corresponding specification and
10+
documentation can be found on the Khronos website.")
11+
12+
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
13+
14+
set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
15+
16+
if(NOT CPACK_PACKAGING_INSTALL_PREFIX)
17+
set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
18+
endif()
19+
20+
# DEB packaging configuration
21+
if(NOT DEFINED CPACK_DEBIAN_PACKAGE_MAINTAINER)
22+
set(CPACK_DEBIAN_PACKAGE_MAINTAINER ${CPACK_PACKAGE_VENDOR})
23+
endif()
24+
25+
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE
26+
"https://github.com/KhronosGroup/OpenCL-Headers")
27+
28+
# Version number [epoch:]upstream_version[-debian_revision]
29+
set(CPACK_DEBIAN_PACKAGE_VERSION "${PROJECT_VERSION}") # upstream_version
30+
if(DEFINED LATEST_RELEASE_VERSION)
31+
# Remove leading "v", if exists
32+
string(LENGTH "${LATEST_RELEASE_VERSION}" LATEST_RELEASE_VERSION_LENGTH)
33+
string(SUBSTRING "${LATEST_RELEASE_VERSION}" 0 1 LATEST_RELEASE_VERSION_FRONT)
34+
if(LATEST_RELEASE_VERSION_FRONT STREQUAL "v")
35+
string(SUBSTRING "${LATEST_RELEASE_VERSION}" 1 ${LATEST_RELEASE_VERSION_LENGTH} LATEST_RELEASE_VERSION)
36+
endif()
37+
38+
string(APPEND CPACK_DEBIAN_PACKAGE_VERSION "~${LATEST_RELEASE_VERSION}")
39+
endif()
40+
set(CPACK_DEBIAN_PACKAGE_RELEASE "1") # debian_revision (because this is a
41+
# non-native pkg)
42+
set(PACKAGE_VERSION_REVISION "${CPACK_DEBIAN_PACKAGE_VERSION}-${CPACK_DEBIAN_PACKAGE_RELEASE}${DEBIAN_VERSION_SUFFIX}")
43+
44+
set(DEBIAN_PACKAGE_NAME "opencl-c-headers")
45+
set(CPACK_DEBIAN_PACKAGE_NAME
46+
"${DEBIAN_PACKAGE_NAME}"
47+
CACHE STRING "Package name" FORCE)
48+
49+
set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "all")
50+
set(CPACK_DEBIAN_PACKAGE_SECTION "libdevel")
51+
set(CPACK_DEBIAN_PACKAGE_BREAKS "opencl-headers (<< ${CPACK_DEBIAN_PACKAGE_VERSION}), opencl-clhpp-headers (<< ${CPACK_DEBIAN_PACKAGE_VERSION})")
52+
set(CPACK_DEBIAN_PACKAGE_REPLACES "opencl-headers (<< ${CPACK_DEBIAN_PACKAGE_VERSION})")
53+
54+
# Package file name in deb format:
55+
# <PackageName>_<VersionNumber>-<DebianRevisionNumber>_<DebianArchitecture>.deb
56+
set(CPACK_DEBIAN_FILE_NAME "${DEBIAN_PACKAGE_NAME}_${PACKAGE_VERSION_REVISION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}.deb")

tests/pkgconfig/bare/CMakeLists.txt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.0)
1+
cmake_minimum_required(VERSION 3.16)
22

33
project(PkgConfigTest
44
LANGUAGES C
@@ -21,3 +21,10 @@ target_compile_definitions(${PROJECT_NAME}
2121
PRIVATE
2222
CL_TARGET_OPENCL_VERSION=120
2323
)
24+
25+
include(CTest)
26+
27+
add_test(
28+
NAME ${PROJECT_NAME}
29+
COMMAND ${PROJECT_NAME}
30+
)

tests/pkgconfig/sdk/CMakeLists.txt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
cmake_minimum_required(VERSION 3.0)
1+
cmake_minimum_required(VERSION 3.16)
22

33
project(PkgConfigTest
44
LANGUAGES C
@@ -22,3 +22,10 @@ target_compile_definitions(${PROJECT_NAME}
2222
PRIVATE
2323
CL_TARGET_OPENCL_VERSION=120
2424
)
25+
26+
include(CTest)
27+
28+
add_test(
29+
NAME ${PROJECT_NAME}
30+
COMMAND ${PROJECT_NAME}
31+
)

0 commit comments

Comments
 (0)