computing-offload/qtfs/qtfs_server/CMakeLists.txt
Yikun Jiang a68570b5d9 Add computing offloading code
1. Add computing offloading code
2. Add script.md
3. Add virsh_demo.xml

Change-Id: Id9ef883e2f0eb727eb5448b9d1c47767f46b1021
Signed-off-by: Yikun Jiang <yikunkero@gmail.com>
2023-10-23 19:29:57 +08:00

69 lines
3.0 KiB
CMake

# Build Kernel modules
set(MODULE_NAME qtfs_server)
## First, find the kernel build directory
execute_process(
COMMAND uname -r
OUTPUT_VARIABLE KERNEL_RELEASE
OUTPUT_STRIP_TRAILING_WHITESPACE)
set(KBUILD_DIR /lib/modules/${KERNEL_RELEASE}/build/)
find_file(KERNEL_MAKEFILE NAMES Makefile PATHS ${KBUILD_DIR} NO_DEFAULT_PATH)
if (NOT KERNEL_MAKEFILE)
message(FATAL_ERROR "There is no Makefile in ${KBUILD_DIR}!")
endif ()
## Second, gather the source files
set(COMM_SRC_FILES
${QTFS_BASE_DIR}/qtfs_common/conn.c
${QTFS_BASE_DIR}/qtfs_common/misc.c
${QTFS_BASE_DIR}/qtfs_common/qtfs_check.c
${QTFS_BASE_DIR}/qtfs_common/socket.c
${QTFS_BASE_DIR}/qtfs_common/symbol_wrapper.c)
set(QTFS_SERVER_SRC_FILES
${QTFS_BASE_DIR}/qtfs_server/fsops.c
${QTFS_BASE_DIR}/qtfs_server/qtfs-server.c)
set(QTFS_SERVER_MODULE_SRC ${COMM_SRC_FILES} ${QTFS_SERVER_SRC_FILES})
## Third, make the src files accessible to the kernel Makefile
set(MODULE_BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/)
set(QTFS_SERVER_KBUILD_FILE "obj-m := ${MODULE_NAME}.o")
foreach (file ${QTFS_SERVER_MODULE_SRC})
file(RELATIVE_PATH file "${CMAKE_CURRENT_SOURCE_DIR}" "${file}")
configure_file(${file} ${file} COPYONLY)
string(REPLACE ".c" ".o" file_obj "${file}")
set(QTFS_SERVER_KBUILD_FILE "${QTFS_SERVER_KBUILD_FILE}\n${MODULE_NAME}-y += ${file_obj}")
endforeach ()
set(QTFS_SERVER_KBUILD_FILE "${QTFS_SERVER_KBUILD_FILE}\nccflags-y += -I${QTFS_BASE_DIR}/include")
set(QTFS_SERVER_KBUILD_FILE "${QTFS_SERVER_KBUILD_FILE}\nccflags-y += -I${QTFS_BASE_DIR}/ipc")
set(QTFS_SERVER_KBUILD_FILE "${QTFS_SERVER_KBUILD_FILE}\nccflags-y += -I${QTFS_BASE_DIR}/qtfs_server")
set(QTFS_SERVER_KBUILD_FILE "${QTFS_SERVER_KBUILD_FILE}\nccflags-y += -DQTFS_SERVER")
if (DEFINED UDS_TEST_MODE OR DEFINED QTFS_TEST_MODE)
set(QTFS_SERVER_KBUILD_FILE "${QTFS_SERVER_KBUILD_FILE}\nccflags-y += -DQTFS_TEST_MODE")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DUDS_TEST_MODE")
endif ()
## Forth, generate a Kbuild file
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/Kbuild ${QTFS_SERVER_KBUILD_FILE})
## Fifth, add a custom target to build the module
set(MODULE_CMD ${CMAKE_MAKE_PROGRAM} -C ${KBUILD_DIR} M=${CMAKE_CURRENT_BINARY_DIR})
add_custom_command(OUTPUT ${MODULE_NAME}.ko
COMMAND ${MODULE_CMD} modules
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS ${QTFS_SERVER_MODULE_SRC} ${CMAKE_CURRENT_BINARY_DIR}/Kbuild
VERBATIM)
add_custom_target(${MODULE_NAME} DEPENDS ${MODULE_NAME}.ko)
add_custom_target(${MODULE_NAME}-clean COMMAND ${MODULE_CMD} clean)
# This target helps parsing C files for IDEs like CLion
add_library(dummy-${MODULE_NAME} EXCLUDE_FROM_ALL ${QTFS_SERVER_MODULE_SRC})
target_include_directories(dummy-${MODULE_NAME} PRIVATE
${KBUILD_DIR}/include
${QTFS_BASE_DIR}/include
${QTFS_BASE_DIR}/ipc
${QTFS_BASE_DIR}/qtfs_server)
set_target_properties(dummy-${MODULE_NAME} PROPERTIES DEPRECATION "DO NOT BUILD THIS TARGET")