summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
authorDenys Fedoryshchenko <denys.f@collabora.com>2026-08-30 03:10:39 +0300
committerDenys Fedoryshchenko <denys.f@collabora.com>2026-08-30 03:10:39 +0300
commitdbc9d0fb6863026b16f4805709acc7e4977d7e66 (patch)
treeac241e6e1ace4e126c50364bebf65688a314151b /cmake
parent89637ee2417fc7f42e4213d417da38aa814047e4 (diff)
downloadaccel-ppp-dbc9d0fb6863026b16f4805709acc7e4977d7e66.tar.gz
accel-ppp-dbc9d0fb6863026b16f4805709acc7e4977d7e66.zip
cmake: fix kernel module installation
Install each module from its real build directory, propagate staged install roots, and fail when kbuild modules_install fails. Add a rootless CTest and CI regression for successful and failed installs. Best practices followed: Use the standard CMake DESTDIR and kbuild INSTALL_MOD_PATH staging interfaces: https://cmake.org/cmake/help/latest/envvar/DESTDIR.html https://docs.kernel.org/kbuild/modules.html#install-mod-path Check child command status with execute_process RESULT_VARIABLE: https://cmake.org/cmake/help/latest/command/execute_process.html Register repeatable tests with CTest add_test: https://cmake.org/cmake/help/latest/command/add_test.html
Diffstat (limited to 'cmake')
-rw-r--r--cmake/install-kernel-module.cmake35
1 files changed, 35 insertions, 0 deletions
diff --git a/cmake/install-kernel-module.cmake b/cmake/install-kernel-module.cmake
new file mode 100644
index 00000000..1350e7c9
--- /dev/null
+++ b/cmake/install-kernel-module.cmake
@@ -0,0 +1,35 @@
+if (NOT DEFINED KERNEL_BUILD_DIR OR KERNEL_BUILD_DIR STREQUAL "")
+ message(FATAL_ERROR "Kernel build directory is not set")
+endif ()
+
+if (NOT DEFINED KERNEL_MODULE_BUILD_DIR OR
+ KERNEL_MODULE_BUILD_DIR STREQUAL "")
+ message(FATAL_ERROR "Kernel module build directory is not set")
+endif ()
+
+set(_install_command
+ make -C "${KERNEL_BUILD_DIR}"
+ "M=${KERNEL_MODULE_BUILD_DIR}"
+ modules_install
+)
+
+# DESTDIR is the conventional CMake staging root. The kernel build system
+# uses INSTALL_MOD_PATH for the same purpose, so propagate it explicitly.
+if (NOT "$ENV{DESTDIR}" STREQUAL "")
+ list(APPEND _install_command "INSTALL_MOD_PATH=$ENV{DESTDIR}")
+endif ()
+
+execute_process(
+ COMMAND ${_install_command}
+ RESULT_VARIABLE _install_result
+)
+
+if (NOT "${_install_result}" STREQUAL "0")
+ message(FATAL_ERROR
+ "Failed to install kernel module from "
+ "${KERNEL_MODULE_BUILD_DIR} (exit status: ${_install_result})"
+ )
+endif ()
+
+unset(_install_command)
+unset(_install_result)