Skip to content

Commit 6ceb5d2

Browse files
Kerilkmmuetzel
andauthored
Added OpenCL.pc file. (#190)
* Added OpenCL.pc file. * Updated pkg-config support to only be deacitvated when MSVC is used. Thanks @mmuetzel * Update OpenCL.pc.in Co-authored-by: Markus Mützel <65065102+mmuetzel@users.noreply.github.com> * Add CI for pkg-config for Linux. * Added CI for pkg-config for MacOS. * Fix typo. * Add consume pkg-config test for Linux. * Attempt to fix old CMake (ugly...). * Revert "Attempt to fix old CMake (ugly...)." This reverts commit 72f8e04. * Attempt fix. * Attempt MacOS. * Add hopefully correct pkg-config / CMake integration. * Update OpenCL.pc.in * Update OpenCL.pc.in * Add Headers to PKG_CONFIG_PATH and remove symlink to headers. Co-authored-by: Markus Mützel <65065102+mmuetzel@users.noreply.github.com>
1 parent 9a3e962 commit 6ceb5d2

6 files changed

Lines changed: 178 additions & 1 deletion

File tree

.github/workflows/linux.yml

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,29 @@ jobs:
132132
cd $GITHUB_WORKSPACE/build/downstream/sdk ;
133133
$CTEST_EXE --output-on-failure
134134

135+
- name: Test pkg-config --cflags
136+
shell: bash
137+
run: PKG_CONFIG_PATH="$GITHUB_WORKSPACE/install/lib/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/lib/pkgconfig" pkg-config OpenCL --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include"
138+
139+
- name: Test pkg-config --libs
140+
shell: bash
141+
run: PKG_CONFIG_PATH="$GITHUB_WORKSPACE/install/lib/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/lib/pkgconfig" pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/lib -lOpenCL"
142+
143+
- name: Consume pkg-config
144+
shell: bash
145+
run: PKG_CONFIG_PATH="$GITHUB_WORKSPACE/install/lib/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/lib/pkgconfig" $CMAKE_EXE
146+
-G "${{matrix.GEN}}"
147+
-D CMAKE_C_COMPILER=${{matrix.COMPILER}}
148+
-D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}"
149+
-D CMAKE_C_STANDARD=${{matrix.STD}}
150+
-D CMAKE_C_EXTENSIONS=${{matrix.EXT}}
151+
-D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/libOpenCLDriverStub.so
152+
-B$GITHUB_WORKSPACE/build/downstream/pkgconfig
153+
-H$GITHUB_WORKSPACE/test/pkgconfig/pkgconfig ;
154+
$CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/pkgconfig ;
155+
cd $GITHUB_WORKSPACE/build/downstream/pkgconfig ;
156+
$CTEST_EXE --output-on-failure
157+
135158

136159

137160

@@ -266,3 +289,28 @@ jobs:
266289
cd $GITHUB_WORKSPACE/build/downstream/sdk;
267290
$CTEST_EXE --output-on-failure -C Release;
268291
$CTEST_EXE --output-on-failure -C Debug;
292+
293+
- name: Test pkg-config --cflags
294+
shell: bash
295+
run: PKG_CONFIG_PATH="$GITHUB_WORKSPACE/install/lib/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/lib/pkgconfig" pkg-config OpenCL --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include"
296+
297+
- name: Test pkg-config --libs
298+
shell: bash
299+
run: PKG_CONFIG_PATH="$GITHUB_WORKSPACE/install/lib/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/lib/pkgconfig" pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/lib -lOpenCL"
300+
301+
- name: Consume pkg-config
302+
shell: bash
303+
run: PKG_CONFIG_PATH="$GITHUB_WORKSPACE/install/lib/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/lib/pkgconfig" $CMAKE_EXE
304+
-G "${{matrix.GEN}}"
305+
-D CMAKE_C_COMPILER=${{matrix.COMPILER}}
306+
-D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -m${{matrix.BIN}}"
307+
-D CMAKE_C_STANDARD=${{matrix.STD}}
308+
-D CMAKE_C_EXTENSIONS=${{matrix.EXT}}
309+
-D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/Release/libOpenCLDriverStub.so
310+
-B $GITHUB_WORKSPACE/build/downstream/pkgconfig
311+
-S $GITHUB_WORKSPACE/test/pkgconfig/pkgconfig;
312+
$CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Release;
313+
$CMAKE_EXE --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Debug;
314+
cd $GITHUB_WORKSPACE/build/downstream/pkgconfig;
315+
$CTEST_EXE --output-on-failure -C Release;
316+
$CTEST_EXE --output-on-failure -C Debug;

.github/workflows/macos.yml

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,4 +94,29 @@ jobs:
9494
if: matrix.GEN == 'Ninja Multi-Config'
9595
shell: bash
9696
run: |
97-
cmake --build $GITHUB_WORKSPACE/build --config Release --target install
97+
cmake --build $GITHUB_WORKSPACE/build --config Release --target install
98+
99+
- name: Test pkg-config --cflags
100+
shell: bash
101+
run: PKG_CONFIG_PATH="$GITHUB_WORKSPACE/install/lib/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/lib/pkgconfig" pkg-config OpenCL --cflags | grep -q "\-I$GITHUB_WORKSPACE/external/OpenCL-Headers/install/include"
102+
103+
- name: Test pkg-config --libs
104+
shell: bash
105+
run: PKG_CONFIG_PATH="$GITHUB_WORKSPACE/install/lib/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/lib/pkgconfig" pkg-config OpenCL --libs | grep -q "\-L$GITHUB_WORKSPACE/install/lib -lOpenCL"
106+
107+
- name: Consume pkg-config
108+
shell: bash
109+
run: PKG_CONFIG_PATH="$GITHUB_WORKSPACE/install/lib/pkgconfig:$GITHUB_WORKSPACE/external/OpenCL-Headers/install/lib/pkgconfig" cmake
110+
-G "${{matrix.GEN}}"
111+
-D CMAKE_C_FLAGS="-Wall -Wextra -pedantic -Wno-format"
112+
-D CMAKE_C_COMPILER=/usr/local/bin/gcc-${{matrix.VER}}
113+
-D CMAKE_C_STANDARD=${{matrix.STD}}
114+
-D CMAKE_C_EXTENSIONS=${{matrix.EXT}}
115+
-D DRIVER_STUB_PATH=$GITHUB_WORKSPACE/build/Release/libOpenCLDriverStub.dylib
116+
-B $GITHUB_WORKSPACE/build/downstream/pkgconfig
117+
-S $GITHUB_WORKSPACE/test/pkgconfig/pkgconfig;
118+
cmake --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Release;
119+
cmake --build $GITHUB_WORKSPACE/build/downstream/pkgconfig --config Debug;
120+
cd $GITHUB_WORKSPACE/build/downstream/pkgconfig;
121+
ctest --output-on-failure -C Release
122+
ctest --output-on-failure -C Debug

CMakeLists.txt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ endif()
5353
# and to study the performance impact.
5454
option (ENABLE_OPENCL_LAYERS "Enable OpenCL Layers" ON)
5555

56+
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
57+
include(JoinPaths)
58+
5659
include(CheckFunctionExists)
5760
check_function_exists(secure_getenv HAVE_SECURE_GETENV)
5861
check_function_exists(__secure_getenv HAVE___SECURE_GETENV)
@@ -226,3 +229,14 @@ install (TARGETS OpenCL
226229
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
227230
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
228231
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
232+
233+
join_paths(OPENCL_LIBDIR_PC "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}")
234+
join_paths(OPENCL_INCLUDEDIR_PC "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
235+
236+
if (NOT MSVC)
237+
configure_file(OpenCL.pc.in OpenCL.pc @ONLY)
238+
set(pkg_config_location ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
239+
install(
240+
FILES ${CMAKE_CURRENT_BINARY_DIR}/OpenCL.pc
241+
DESTINATION ${pkg_config_location})
242+
endif()

OpenCL.pc.in

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
prefix=@CMAKE_INSTALL_PREFIX@
2+
exec_prefix=${prefix}
3+
libdir=@OPENCL_LIBDIR_PC@
4+
5+
Name: OpenCL
6+
Description: Khronos OpenCL ICD Loader
7+
Requires: OpenCL-Headers
8+
Version: 3.0
9+
Libs: -L${libdir} -lOpenCL

cmake/JoinPaths.cmake

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# This module provides function for joining paths
2+
# known from from most languages
3+
#
4+
# Original license:
5+
# SPDX-License-Identifier: (MIT OR CC0-1.0)
6+
# Explicit permission given to distribute this module under
7+
# the terms of the project as described in /LICENSE.rst.
8+
# Copyright 2020 Jan Tojnar
9+
# https://github.com/jtojnar/cmake-snips
10+
#
11+
# Modelled after Python’s os.path.join
12+
# https://docs.python.org/3.7/library/os.path.html#os.path.join
13+
# Windows not supported
14+
function(join_paths joined_path first_path_segment)
15+
set(temp_path "${first_path_segment}")
16+
foreach(current_segment IN LISTS ARGN)
17+
if(NOT ("${current_segment}" STREQUAL ""))
18+
if(IS_ABSOLUTE "${current_segment}")
19+
set(temp_path "${current_segment}")
20+
else()
21+
set(temp_path "${temp_path}/${current_segment}")
22+
endif()
23+
endif()
24+
endforeach()
25+
set(${joined_path} "${temp_path}" PARENT_SCOPE)
26+
endfunction()
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
cmake_minimum_required(VERSION 3.1)
2+
find_package(PkgConfig REQUIRED)
3+
4+
project(PkgConfigTest
5+
LANGUAGES C
6+
)
7+
8+
pkg_check_modules(OPENCL REQUIRED OpenCL)
9+
10+
if(CMAKE_VERSION VERSION_LESS 3.12)
11+
link_directories("${OPENCL_LIBRARY_DIRS}")
12+
endif()
13+
14+
add_executable(${PROJECT_NAME}
15+
../pkgconfig.c
16+
)
17+
18+
target_include_directories(${PROJECT_NAME}
19+
PRIVATE
20+
${OPENCL_INCLUDE_DIRS}
21+
)
22+
23+
if(CMAKE_VERSION VERSION_LESS 3.12)
24+
target_link_libraries(${PROJECT_NAME}
25+
PRIVATE
26+
${OPENCL_LIBRARIES}
27+
)
28+
else()
29+
target_link_libraries(${PROJECT_NAME}
30+
PRIVATE
31+
${OPENCL_LINK_LIBRARIES}
32+
)
33+
endif()
34+
35+
target_compile_options(${PROJECT_NAME}
36+
PRIVATE
37+
${OPENCL_CFLAGS_OTHER}
38+
)
39+
40+
target_compile_definitions(${PROJECT_NAME}
41+
PRIVATE
42+
CL_TARGET_OPENCL_VERSION=120
43+
)
44+
45+
include(CTest)
46+
47+
add_test(
48+
NAME ${PROJECT_NAME}
49+
COMMAND ${PROJECT_NAME}
50+
)
51+
52+
set_tests_properties(${PROJECT_NAME}
53+
PROPERTIES
54+
ENVIRONMENT "OCL_ICD_FILENAMES=${DRIVER_STUB_PATH}"
55+
)

0 commit comments

Comments
 (0)