[PATCH 3/6] optee-client: fix udev and systemd handling

Gyorgy Szing <[email protected]>
Newsgroups org.yoctoproject.lists.meta-arm
Message-ID <[email protected]>
Eliminate the systemd specific install content fix-up commands appended
to do_install.
  - patch optee-client to allow controlling installation of systemd and
    udev specific configuration files.
  - pass driver group names to optee-client build

Signed-off-by: Gyorgy Szing <[email protected]>
Signed-off-by: Ross Burton <[email protected]>
---
 .../recipes-security/optee/optee-client.inc   | 12 ++-
 ...ant-update-udev-systemd-install-code.patch | 78 +++++++++++++++++++
 .../optee/optee-client_4.3.0.bb               |  3 +-
 .../optee/optee-client_4.4.0.bb               |  1 +
 4 files changed, 89 insertions(+), 5 deletions(-)
 create mode 100644 meta-arm/recipes-security/optee/optee-client/0001-tee-supplicant-update-udev-systemd-install-code.patch

diff --git a/meta-arm/recipes-security/optee/optee-client.inc b/meta-arm/recipes-security/optee/optee-client.inc
index fc48c302..519041d6 100644
--- a/meta-arm/recipes-security/optee/optee-client.inc
+++ b/meta-arm/recipes-security/optee/optee-client.inc
@@ -18,14 +18,16 @@ S = "${WORKDIR}/git"
 
 EXTRA_OECMAKE = " \
     -DBUILD_SHARED_LIBS=ON \
+    -DCFG_USE_PKGCONFIG=ON \
 "
+
+EXTRA_OECMAKE += " -DCFG_ENABLE_SYSTEMD=On -DSYSTEMD_UNIT_DIR=${systemd_system_unitdir}/"
+EXTRA_OECMAKE += " -DCFG_ENABLE_UDEV=On -DUDEV_UDEV_DIR=${nonarch_base_libdir}/udev/rules.d/"
+EXTRA_OECMAKE += " -DCFG_TEE_GROUP=tee -DCFG_TEEPRIV_GROUP=teepriv"
+
 EXTRA_OECMAKE:append:toolchain-clang = " -DCFG_WERROR=0"
 
 do_install:append() {
-    # installed by default
-    if ! ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'true', 'false', d)}; then
-        rm -rf ${D}${libdir}/systemd
-    fi
     if ${@bb.utils.contains('DISTRO_FEATURES', 'sysvinit', 'true', 'false', d)}; then
         install -D -p -m0755 ${UNPACKDIR}/tee-supplicant.sh ${D}${sysconfdir}/init.d/tee-supplicant
         sed -i -e s:@sysconfdir@:${sysconfdir}:g \
@@ -41,6 +43,8 @@ INITSCRIPT_PACKAGES = "${PN}"
 INITSCRIPT_NAME:${PN} = "tee-supplicant"
 INITSCRIPT_PARAMS:${PN} = "start 10 1 2 3 4 5 . stop 90 0 6 ."
 
+FILES:${PN} += "${nonarch_base_libdir}/udev/rules.d/"
+
 # Users and groups:
 # tee group to access /dev/tee*
 # teepriv group to acess /dev/teepriv*, only tee-supplicant
diff --git a/meta-arm/recipes-security/optee/optee-client/0001-tee-supplicant-update-udev-systemd-install-code.patch b/meta-arm/recipes-security/optee/optee-client/0001-tee-supplicant-update-udev-systemd-install-code.patch
new file mode 100644
index 00000000..d243f297
--- /dev/null
+++ b/meta-arm/recipes-security/optee/optee-client/0001-tee-supplicant-update-udev-systemd-install-code.patch
@@ -0,0 +1,78 @@
+From 5ddaac7c0770a423eca0cb727403b2f06657ffea Mon Sep 17 00:00:00 2001
+From: Gyorgy Szing <[email protected]>
+Date: Tue, 14 Jan 2025 09:42:25 +0100
+Subject: [PATCH 1/1] tee-supplicant: update udev & systemd install code
+
+- Allow optionally using pkg-config to discover install location of
+  systemd service and udev rule files.
+- Make systemd service file generation and installation optional.
+- Make udev rule file generation and installation optional.
+
+Changes are backwards compatible and the default operation is unchanged.
+
+Upstream-Status: Pending
+
+Signed-off-by: Gyorgy Szing <[email protected]>
+---
+ tee-supplicant/CMakeLists.txt | 39 +++++++++++++++++++++++++++++++----
+ 1 file changed, 35 insertions(+), 4 deletions(-)
+
+diff --git a/tee-supplicant/CMakeLists.txt b/tee-supplicant/CMakeLists.txt
+index 8df9bef..ae1f5a4 100644
+--- a/tee-supplicant/CMakeLists.txt
++++ b/tee-supplicant/CMakeLists.txt
+@@ -7,6 +7,9 @@ option(RPMB_EMU "Enable tee-supplicant to emulate RPMB" ON)
+ option(CFG_TA_GPROF_SUPPORT "Enable tee-supplicant support for TAs instrumented with gprof" ON)
+ option(CFG_FTRACE_SUPPORT "Enable tee-supplicant support for TAs instrumented with ftrace" ON)
+ option(CFG_TEE_SUPP_PLUGINS "Enable tee-supplicant plugin support" ON)
++option(CFG_ENABLE_SYSTEMD "Enable systemd service unit file generation." ON)
++option(CFG_ENABLE_UDEV "Enable udev rules file generation." ON)
++option(CFG_USE_PKGCONFIG "Use pkg-config for discovering install target directory for systemd and udev files." OFF)
+ 
+ set(CFG_TEE_SUPP_LOG_LEVEL "1" CACHE STRING "tee-supplicant log level")
+ # FIXME: Question is, is this really needed? Should just use defaults from # GNUInstallDirs?
+@@ -117,8 +120,36 @@ endif()
+ ################################################################################
+ # Install targets
+ ################################################################################
++# Discover target install location of the systemd and udev files using pkg-config
++if (CFG_USE_PKGCONFIG)
++	# Note: pkg-config should return setting valid for the target platform and not the host.
++	include(FindPkgConfig)
++	if (PKG_CONFIG_FOUND)
++		pkg_search_module(SYSTEMD systemd)
++		if (SYSTEMD_FOUND AND CFG_ENABLE_SYSTEMD)
++			pkg_get_variable(UNIT_DIR systemd systemd_system_unit_dir)
++			set(SYSTEMD_UNIT_DIR "${UNIT_DIR}" CACHE PATH "Location of systemd unit files.")
++			unset(UNIT_DIR)
++		endif()
++		pkg_search_module(UDEV udev)
++		if (UDEV_FOUND)
++			pkg_get_variable(UDEV_DIR udev udev_dir)
++			set(UDEV_UDEV_DIR "${UDEV_DIR}" CACHE PATH "Location of udev files.")
++			unset(UDEV_DIR)
++		endif()
++	endif()
++endif()
++
++# Some sane defaults is discovering through pkgconfig fails or is disabled.
++set(SYSTEMD_UNIT_DIR "${CMAKE_INSTALL_LIBDIR}/systemd/system" CACHE PATH "Location of systemd unit files.")
++set(UDEV_UDEV_DIR "${CMAKE_INSTALL_SYSCONFDIR}/udev/rules.d" CACHE PATH "Location of udev files.")
++
+ install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_SBINDIR})
+-configure_file([email protected] [email protected] @ONLY)
+-install(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}/[email protected] DESTINATION ${CMAKE_INSTALL_LIBDIR}/systemd/system)
+-configure_file(optee-udev.rules.in optee-udev.rules @ONLY)
+-install(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}/optee-udev.rules DESTINATION ${CMAKE_INSTALL_SYSCONFDIR}/udev/rules.d)
++if (CFG_ENABLE_SYSTEMD)
++	configure_file([email protected] [email protected] @ONLY)
++	install(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}/[email protected] DESTINATION ${SYSTEMD_UNIT_DIR})
++endif()
++if (CFG_ENABLE_UDEV)
++	configure_file(optee-udev.rules.in optee-udev.rules @ONLY)
++	install(FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}/optee-udev.rules DESTINATION ${UDEV_UDEV_DIR})
++endif()
+\ No newline at end of file
+-- 
+2.43.0
+
diff --git a/meta-arm/recipes-security/optee/optee-client_4.3.0.bb b/meta-arm/recipes-security/optee/optee-client_4.3.0.bb
index edab4583..fae453ad 100644
--- a/meta-arm/recipes-security/optee/optee-client_4.3.0.bb
+++ b/meta-arm/recipes-security/optee/optee-client_4.3.0.bb
@@ -2,7 +2,8 @@ require recipes-security/optee/optee-client.inc
 
 SRCREV = "a5b1ffcd26e328af0bbf18ab448a38ecd558e05c"
 
-SRC_URI += "file://0001-tee-supplicant-add-udev-rule-and-systemd-service-fil.patch"
+SRC_URI += "file://0001-tee-supplicant-add-udev-rule-and-systemd-service-fil.patch \
+            file://0001-tee-supplicant-update-udev-systemd-install-code.patch"
 
 inherit pkgconfig
 DEPENDS += "util-linux"
diff --git a/meta-arm/recipes-security/optee/optee-client_4.4.0.bb b/meta-arm/recipes-security/optee/optee-client_4.4.0.bb
index fa7b9564..8bd03868 100644
--- a/meta-arm/recipes-security/optee/optee-client_4.4.0.bb
+++ b/meta-arm/recipes-security/optee/optee-client_4.4.0.bb
@@ -2,6 +2,7 @@ require recipes-security/optee/optee-client.inc
 
 # v4.4.0
 SRCREV = "d221676a58b305bddbf97db00395205b3038de8e"
+SRC_URI += "file://0001-tee-supplicant-update-udev-systemd-install-code.patch"
 
 inherit pkgconfig
 DEPENDS += "util-linux"
-- 
2.43.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.