summaryrefslogtreecommitdiffstats
path: root/src/kernel
diff options
context:
space:
mode:
authorManuel Bentele2020-10-16 17:15:49 +0200
committerManuel Bentele2020-10-16 17:15:49 +0200
commit969496f15e1e0359e26c2c6e995ad4ef82720f86 (patch)
tree358466216630eb10e8ee91b9ede490424f6db848 /src/kernel
parent[FUSE] turn on compiler optimization to fix warning (diff)
downloaddnbd3-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.txt48
-rw-r--r--src/kernel/Kbuild5
-rw-r--r--src/kernel/blk.c2
-rw-r--r--src/kernel/blk.h2
-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.c4
-rw-r--r--src/kernel/net.h2
l---------src/kernel/serialize.c1
-rw-r--r--src/kernel/serialize_kmod.c5
-rw-r--r--src/kernel/sysfs.h2
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);