diff options
author | Manuel Bentele | 2020-10-16 17:15:49 +0200 |
---|---|---|
committer | Manuel Bentele | 2020-10-16 17:15:49 +0200 |
commit | 969496f15e1e0359e26c2c6e995ad4ef82720f86 (patch) | |
tree | 358466216630eb10e8ee91b9ede490424f6db848 /src/kernel | |
parent | [FUSE] turn on compiler optimization to fix warning (diff) | |
download | dnbd3-969496f15e1e0359e26c2c6e995ad4ef82720f86.tar.gz dnbd3-969496f15e1e0359e26c2c6e995ad4ef82720f86.tar.xz dnbd3-969496f15e1e0359e26c2c6e995ad4ef82720f86.zip |
[BUILD] rewrite CMake build system to track changes of source files
This change restructures the source code directories, separates shared
form non-shared application code and adds CMake dependencies. These
dependencies allow the tracking of changes and trigger a rebuild of
those build targets where changed files are involved.
WARNING: Note that the support of the DNBD3_SERVER_AFL build option is
not supported yet. Thus, the option should be never turned on.
Diffstat (limited to 'src/kernel')
-rw-r--r-- | src/kernel/CMakeLists.txt | 48 | ||||
-rw-r--r-- | src/kernel/Kbuild | 5 | ||||
-rw-r--r-- | src/kernel/blk.c | 2 | ||||
-rw-r--r-- | src/kernel/blk.h | 2 | ||||
-rw-r--r-- | src/kernel/dnbd3_main.c (renamed from src/kernel/core.c) | 8 | ||||
-rw-r--r-- | src/kernel/dnbd3_main.h (renamed from src/kernel/dnbd3.h) | 7 | ||||
-rw-r--r-- | src/kernel/net.c | 4 | ||||
-rw-r--r-- | src/kernel/net.h | 2 | ||||
l--------- | src/kernel/serialize.c | 1 | ||||
-rw-r--r-- | src/kernel/serialize_kmod.c | 5 | ||||
-rw-r--r-- | src/kernel/sysfs.h | 2 |
11 files changed, 68 insertions, 18 deletions
diff --git a/src/kernel/CMakeLists.txt b/src/kernel/CMakeLists.txt new file mode 100644 index 0000000..bf1eb3a --- /dev/null +++ b/src/kernel/CMakeLists.txt @@ -0,0 +1,48 @@ +cmake_minimum_required(VERSION 3.10) + +# set the project name +project(dnbd3-kernel-module) + +# include macros to define Linux kernel build targets +include(Kernel) + +# set C flags for a Linux kernel module +set(KERNEL_C_FLAGS "-DDNBD3_KERNEL_MODULE -I ${PROJECT_INCLUDE_TMP_DIR}" + CACHE STRING "C flags to be used for building the dnbd3 kernel module") +# set C flags for the debug mode of a Linux kernel module +set(KERNEL_C_FLAGS_DEBUG "-g -DDEBUG" + CACHE STRING "Additional C flags to be used for building the dnbd3 kernel module in debug mode") + +# append include directories to the C flags +get_property(KERNEL_INCLUDE_DIRS DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES) +foreach(KERNEL_INCLUDE_DIR ${KERNEL_INCLUDE_DIRS}) + set(KERNEL_C_FLAGS "${KERNEL_C_FLAGS} -I ${KERNEL_INCLUDE_DIR}") +endforeach(KERNEL_INCLUDE_DIR ${KERNEL_INCLUDE_DIRS}) + +# append debug C flags if debug mode is enabled +if(CMAKE_BUILD_TYPE MATCHES Debug) + set(KERNEL_C_FLAGS "${KERNEL_C_FLAGS} ${KERNEL_C_FLAGS_DEBUG}") +endif(CMAKE_BUILD_TYPE MATCHES Debug) + +# dnbd3 Linux kernel module +set(KERNEL_MODULE_DNBD3_SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/blk.c + ${CMAKE_CURRENT_SOURCE_DIR}/dnbd3_main.c + ${CMAKE_CURRENT_SOURCE_DIR}/net.c + ${CMAKE_CURRENT_SOURCE_DIR}/serialize.c + ${CMAKE_CURRENT_SOURCE_DIR}/sysfs.c + ${CMAKE_CURRENT_SOURCE_DIR}/utils.c + ${PROJECT_VERSION_FILE}) +set(KERNEL_MODULE_DNBD3_HEADER_FILES ${CMAKE_CURRENT_SOURCE_DIR}/blk.h + ${CMAKE_CURRENT_SOURCE_DIR}/dnbd3_main.h + ${CMAKE_CURRENT_SOURCE_DIR}/net.h + ${CMAKE_CURRENT_SOURCE_DIR}/sysfs.h + ${CMAKE_CURRENT_SOURCE_DIR}/utils.h) +add_kernel_module(dnbd3 "${KERNEL_BUILD_DIR}" + "${KERNEL_INSTALL_DIR}" + "CONFIG_BLK_DEV_DNBD3=m" + "${KERNEL_MODULE_DNBD3_SOURCE_FILES}" + "${KERNEL_MODULE_DNBD3_HEADER_FILES}" + ${CMAKE_CURRENT_SOURCE_DIR}/Kbuild) + +# add dependency to generate ${PROJECT_VERSION_FILE} before dnbd3.ko is built +add_dependencies(dnbd3 dnbd3-generate-version) diff --git a/src/kernel/Kbuild b/src/kernel/Kbuild new file mode 100644 index 0000000..385a5ff --- /dev/null +++ b/src/kernel/Kbuild @@ -0,0 +1,5 @@ +# SPDX-License-Identifier: GPL-2.0 + +# Linux kernel module dnbd3 +obj-$(CONFIG_BLK_DEV_DNBD3) := dnbd3.o +dnbd3-y += dnbd3_main.o blk.o net.o serialize.o sysfs.o utils.o diff --git a/src/kernel/blk.c b/src/kernel/blk.c index 2c46b67..00c3f8f 100644 --- a/src/kernel/blk.c +++ b/src/kernel/blk.c @@ -18,7 +18,7 @@ * */ -#include "clientconfig.h" +#include <dnbd3/config/client.h> #include "blk.h" #include "net.h" #include "sysfs.h" diff --git a/src/kernel/blk.h b/src/kernel/blk.h index 3377406..5f7f2db 100644 --- a/src/kernel/blk.h +++ b/src/kernel/blk.h @@ -21,7 +21,7 @@ #ifndef BLK_H_ #define BLK_H_ -#include "dnbd3.h" +#include "dnbd3_main.h" #define REQ_TYPE_SPECIAL REQ_TYPE_DRV_PRIV diff --git a/src/kernel/core.c b/src/kernel/dnbd3_main.c index 6e7d052..27e8eed 100644 --- a/src/kernel/core.c +++ b/src/kernel/dnbd3_main.c @@ -20,8 +20,9 @@ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt -#include "clientconfig.h" -#include "dnbd3.h" +#include <dnbd3/config/client.h> +#include <dnbd3/version.h> +#include "dnbd3_main.h" #include "blk.h" int major; @@ -48,7 +49,7 @@ static int __init dnbd3_init(void) return -EIO; } - pr_info("kernel module loaded\n"); + pr_info("kernel module in version %s loaded\n", DNBD3_VERSION); pr_debug("machine type " ENDIAN_MODE "\n"); // add MAX_NUMBER_DEVICES devices @@ -86,6 +87,7 @@ module_exit(dnbd3_exit); MODULE_DESCRIPTION("Distributed Network Block Device 3"); MODULE_LICENSE("GPL"); +MODULE_VERSION(DNBD3_VERSION); module_param(max_devs, int, 0444); MODULE_PARM_DESC(max_devs, "number of network block devices to initialize (default: 8)"); diff --git a/src/kernel/dnbd3.h b/src/kernel/dnbd3_main.h index 4e06d70..124426b 100644 --- a/src/kernel/dnbd3.h +++ b/src/kernel/dnbd3_main.h @@ -28,10 +28,9 @@ #include <linux/blk-mq.h> #include <net/sock.h> -#define KERNEL_MODULE -#include "config.h" -#include "types.h" -#include "serialize.h" +#include <dnbd3/config.h> +#include <dnbd3/types.h> +#include <dnbd3/shared/serialize.h> extern int major; diff --git a/src/kernel/net.c b/src/kernel/net.c index b387c1d..46c369a 100644 --- a/src/kernel/net.c +++ b/src/kernel/net.c @@ -18,12 +18,12 @@ * */ -#include "clientconfig.h" +#include <dnbd3/config/client.h> #include "net.h" #include "blk.h" #include "utils.h" -#include "serialize.h" +#include <dnbd3/shared/serialize.h> #include <linux/time.h> #include <linux/ktime.h> diff --git a/src/kernel/net.h b/src/kernel/net.h index 8a2bc22..e7accd0 100644 --- a/src/kernel/net.h +++ b/src/kernel/net.h @@ -21,7 +21,7 @@ #ifndef NET_H_ #define NET_H_ -#include "dnbd3.h" +#include "dnbd3_main.h" #define init_msghdr(h) do { \ h.msg_name = NULL; \ diff --git a/src/kernel/serialize.c b/src/kernel/serialize.c new file mode 120000 index 0000000..5a4e4ac --- /dev/null +++ b/src/kernel/serialize.c @@ -0,0 +1 @@ +../shared/serialize.c
\ No newline at end of file diff --git a/src/kernel/serialize_kmod.c b/src/kernel/serialize_kmod.c deleted file mode 100644 index 50746df..0000000 --- a/src/kernel/serialize_kmod.c +++ /dev/null @@ -1,5 +0,0 @@ -#include <linux/kernel.h> -#include <linux/string.h> - -#define KERNEL_MODULE -#include "serialize.c" diff --git a/src/kernel/sysfs.h b/src/kernel/sysfs.h index 0a747a5..a90840b 100644 --- a/src/kernel/sysfs.h +++ b/src/kernel/sysfs.h @@ -21,7 +21,7 @@ #ifndef SYSFS_H_ #define SYSFS_H_ -#include "dnbd3.h" +#include "dnbd3_main.h" void dnbd3_sysfs_init(dnbd3_device_t *dev); |