meson: Support installing without wrapper packages

Currently we are using wrapper packages to provide new GBM API and
vendor package.

But that requires the API clients honor our package config(.pc) files.

Adding an option to disable wrappers for the ones that don't follow the
rules.

Change-Id: Ie55aa712311c1df21ba0c11b924454febecca9f6
Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
This commit is contained in:
Jeffy Chen 2021-03-26 21:35:07 +08:00
parent daa080f3e7
commit 86ad51dbe0
6 changed files with 68 additions and 23 deletions

17
fixup_dummy.sh Executable file
View file

@ -0,0 +1,17 @@
#!/bin/sh -e
[ $# -lt 2 ] && {
echo "usage: $0 <dest dir> <source library>"
exit 1
}
DEST_DIR="${MESON_INSTALL_DESTDIR_PREFIX:-/usr}/$1"
SOURCE="$(basename $2)"
# Replace dummy library
cd "$DEST_DIR"
cp $SOURCE libmali.so
cp -a libmali.so $SOURCE
# For old DDK(e.g. utgard)
cp -a libmali.so libMali.so.*

15
fixup_wrappers.sh Executable file
View file

@ -0,0 +1,15 @@
#!/bin/sh -e
[ $# -lt 1 ] && {
echo "usage: $0 <dest dir>"
exit 1
}
BUILD_DIR="${MESON_BUILD_ROOT:-build}"
DEST_DIR="${MESON_INSTALL_DESTDIR_PREFIX:-/usr}/$1"
# Cleanup wrappers
cd "$DEST_DIR"
for f in $(cd $BUILD_DIR && find . -maxdepth 1 -type f -name "lib*"); do
echo $f | grep -q libmali.so || cp -a libmali.so $f
done

View file

@ -20,6 +20,7 @@ subversion = get_option('subversion')
platform = get_option('platform') platform = get_option('platform')
opencl_icd = get_option('opencl-icd') opencl_icd = get_option('opencl-icd')
vendor_package = get_option('vendor-package') vendor_package = get_option('vendor-package')
wrapper_packages = get_option('wrapper-packages')
message('Building for ' + '|'.join([arch, gpu, version, subversion, platform])) message('Building for ' + '|'.join([arch, gpu, version, subversion, platform]))
@ -30,10 +31,27 @@ libs = cmd.stdout().strip().split('\n')
# Use the first one as default library # Use the first one as default library
default_lib = libs[0] default_lib = libs[0]
if default_lib == '' if default_lib == ''
error('failed to find matched library.') error('Failed to find matched library')
endif endif
message('building for @0@'.format(libs)) message('Source libraries: @0@'.format(libs))
if wrapper_packages
message('Provide wrapper packages')
else
# The vendor package requires soname of wrapper packages.
if vendor_package
error('Cannot provide vendor package without wrapper packages')
endif
endif
# Install wrapper libraries into vendor dir
if vendor_package
message('Build vendor package')
wrapper_libdir = get_option('libdir') / 'mali'
else
wrapper_libdir = get_option('libdir')
endif
# Wrap library name : version # Wrap library name : version
mali_wrappers = {'Mali' : '1'} mali_wrappers = {'Mali' : '1'}
@ -65,10 +83,13 @@ cl_headers = {
'include/CL' : 'CL', 'include/CL' : 'CL',
} }
# Provide newer GBM version with wrapper packages
gbm_version = wrapper_packages ? '20.1.5' : '10.4.0'
# Package name : required symbol, wrappers, headers, package version # Package name : required symbol, wrappers, headers, package version
map = { map = {
'Mali' : ['', mali_wrappers, mali_headers, mali_version], 'Mali' : ['', mali_wrappers, mali_headers, mali_version],
'gbm' : ['gbm_create_device', gbm_wrappers, gbm_headers, '20.1.5'], 'gbm' : ['gbm_create_device', gbm_wrappers, gbm_headers, gbm_version],
'egl' : ['eglCreateContext', egl_wrappers, egl_headers, '7.10'], 'egl' : ['eglCreateContext', egl_wrappers, egl_headers, '7.10'],
'glesv1_cm' : ['eglCreateContext', glesv1_wrappers, glesv1_headers, '7.10'], 'glesv1_cm' : ['eglCreateContext', glesv1_wrappers, glesv1_headers, '7.10'],
'glesv2' : ['eglCreateContext', glesv2_wrappers, glesv2_headers, '7.10'], 'glesv2' : ['eglCreateContext', glesv2_wrappers, glesv2_headers, '7.10'],
@ -91,12 +112,6 @@ pkgconfig.generate(
libmali, libmali,
description : 'Mali GPU User-Space Binary Driver') description : 'Mali GPU User-Space Binary Driver')
if vendor_package
wrapper_libdir = get_option('libdir') / 'mali'
else
wrapper_libdir = get_option('libdir')
endif
# The gbm functions might be missing # The gbm functions might be missing
gbm_check_funcs = [ gbm_check_funcs = [
'gbm_bo_map', 'gbm_bo_map',
@ -155,7 +170,6 @@ foreach name, values : map
wrapper_ldflags = [] wrapper_ldflags = []
is_opencl_icd = opencl_icd and name == 'OpenCL' is_opencl_icd = opencl_icd and name == 'OpenCL'
# TODO: Use readelf -s ?
if run_command('grep', '-q', symbol, default_lib).returncode() != 0 if run_command('grep', '-q', symbol, default_lib).returncode() != 0
continue continue
endif endif
@ -240,6 +254,13 @@ elif get_option('khr-header')
rename : 'khrplatform.h') rename : 'khrplatform.h')
endif endif
# Install target libraries and replace the dummy one # Install target libraries
install_data(libs, install_dir : get_option('libdir')) install_data(libs, install_dir : get_option('libdir'))
meson.add_install_script('postinst.sh', get_option('libdir'), default_lib)
# Fixup dummy library
meson.add_install_script('fixup_dummy.sh', get_option('libdir'), default_lib)
if not wrapper_packages
# Fixup wrappers
meson.add_install_script('fixup_wrappers.sh', get_option('libdir'))
endif

View file

@ -16,3 +16,5 @@ option('khr-header', type: 'boolean', value: 'false',
description: 'Install KHR header (default: false)') description: 'Install KHR header (default: false)')
option('vendor-package', type: 'boolean', value: 'false', option('vendor-package', type: 'boolean', value: 'false',
description: 'Install as vendor package (default: false)') description: 'Install as vendor package (default: false)')
option('wrapper-packages', type: 'boolean', value: 'true',
description: 'Install with wrapper packages (default: true)')

View file

@ -11,7 +11,7 @@ parse_name() {
GPU=$(echo $1|cut -d'-' -f'2,3') GPU=$(echo $1|cut -d'-' -f'2,3')
VERSION=$(echo $1|cut -d'-' -f4) VERSION=$(echo $1|cut -d'-' -f4)
PLATFORM=$(echo $1 | grep -owE "gbm|wayland|x11|only-cl|dummy") PLATFORM=$(echo $1|grep -owE "gbm|wayland|x11|only-cl|dummy")
[ -z "$PLATFORM" ] && PLATFORM=x11 [ -z "$PLATFORM" ] && PLATFORM=x11
SUBVERSION=$(echo ${1%-$PLATFORM}|cut -d'-' -f'5-') SUBVERSION=$(echo ${1%-$PLATFORM}|cut -d'-' -f'5-')

View file

@ -1,10 +0,0 @@
#!/bin/sh
[ $# -lt 2 ] && exit
LIB_DIR="${MESON_INSTALL_DESTDIR_PREFIX:-/usr}/$1"
LIBMALI="$(basename $2)"
cd $LIB_DIR && \
cp "$LIBMALI" libmali.so && \
ln -sf libmali.so "$LIBMALI"