From 089692e6f92df0fe597bdaee4e9b19fd0470bbb2 Mon Sep 17 00:00:00 2001 From: Jeffy Chen Date: Mon, 24 Jul 2023 16:31:55 +0800 Subject: [PATCH] meson: Detect CL version Different DDK might have different CL versions. Change-Id: I7384a0f653e3e774cc46a4c545a5697986a31e27 Signed-off-by: Jeffy Chen --- meson.build | 28 +++++++++++++++++++++++++++- scripts/fixup_cl.sh | 19 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100755 scripts/fixup_cl.sh diff --git a/meson.build b/meson.build index 90e8645..c6ea835 100644 --- a/meson.build +++ b/meson.build @@ -146,6 +146,23 @@ cl_headers = { 'include/CL' : 'CL', } +if cc.has_function('clCreateBufferWithProperties', dependencies : mali) + cl_version = '3.0' + cl_target_version = '300' +elif cc.has_function('clSetProgramReleaseCallback', dependencies : mali) + cl_version = '2.2' + cl_target_version = '220' +elif cc.has_function('clCloneKernel', dependencies : mali) + cl_version = '2.1' + cl_target_version = '210' +elif cc.has_function('clCreatePipe', dependencies : mali) + cl_version = '2.0' + cl_target_version = '200' +else + cl_version = '1.2' + cl_target_version = '120' +endif + # Package name : required symbol, wrappers, headers, package version map = { 'gbm' : ['gbm_create_device', gbm_wrappers, gbm_headers, gbm_version], @@ -154,7 +171,7 @@ map = { 'glesv2' : ['eglCreateContext', glesv2_wrappers, glesv2_headers, '7.10'], 'wayland-egl' : ['wl_egl_window_create', wayland_wrappers, wayland_egl_headers, '18.1.0'], - 'OpenCL' : ['clCreateContext', cl_wrappers, cl_headers, '1.2'], + 'OpenCL' : ['clCreateContext', cl_wrappers, cl_headers, cl_version], 'vulkan' : ['vk_icdGetInstanceProcAddr', vk_wrappers, {}, mali_version], } @@ -204,6 +221,7 @@ foreach name, values : map wrapper_libs = values[1] headers = values[2] pkg_version = values[3] + pkg_cflags = [] is_opencl_icd = opencl_icd and name == 'OpenCL' is_vulkan_icd = name == 'vulkan' @@ -268,8 +286,16 @@ foreach name, values : map get_option('includedir')) endif + if name == 'OpenCL' + pkg_cflags += ['-DCL_TARGET_OPENCL_VERSION=' + cl_target_version] + + meson.add_install_script('scripts/fixup_cl.sh', + get_option('includedir'), cl_version) + endif + pkgconfig.generate( libraries : mali_ldflags, + extra_cflags : pkg_cflags, requires : requires, version : pkg_version, name : name, diff --git a/scripts/fixup_cl.sh b/scripts/fixup_cl.sh new file mode 100755 index 0000000..8d67e33 --- /dev/null +++ b/scripts/fixup_cl.sh @@ -0,0 +1,19 @@ +#!/bin/sh -e + +[ $# -lt 2 ] && { + echo "usage: $0 " + exit 1 +} + +HEADER="${MESON_INSTALL_DESTDIR_PREFIX:-/usr}/$1/CL/cl_version.h" + +if [ -f "$HEADER" ]; then + VER="$2" + TARGET_VER=$(echo "$VER * 100" | bc | sed "s/\.0$//") + + sed -i -e "s/\(Defaulting to \).* ([^)]*/\1$TARGET_VER (OpenCL $VER/" \ + -e "s/\(^#define CL_TARGET_OPENCL_VERSION \).*/\1$TARGET_VER/" \ + "$HEADER" +fi + +exit 0