#------------------------------------------------------------------------------ # Makefile - builds the entire project with all subprojects #------------------------------------------------------------------------------ # author: Manuel Bentele # date : 10.07.2019 #------------------------------------------------------------------------------ #------------------------------------------------------------------------------ # Global configuration (file paths and config) #------------------------------------------------------------------------------ KERNEL_SRC_DIR := $(shell pwd)/implementation/loop KERNEL_MOD_PATH := drivers/block/loop/ KERNEL_HDR_DIR := /lib/modules/$(shell uname -r)/build LOSETUP_SRC_DIR := $(shell pwd)/implementation/losetup KERNEL_MOD_CONFIG := $(shell pwd)/config/kernel-qcow2_x86-64_module.config LOCAL_MOD_CONFIG += CONFIG_BLK_DEV_LOOP=m LOCAL_MOD_CONFIG += CONFIG_BLK_DEV_LOOP_FILE_FMT_RAW=m LOCAL_MOD_CONFIG += CONFIG_BLK_DEV_LOOP_FILE_FMT_QCOW=m LOCAL_MOD_CONFIG += CONFIG_ZLIB_INFLATE=y LOCAL_MOD_CONFIG += CONFIG_ZLIB_DEFLATE=y LOCAL_MOD_CONFIG += CONFIG_DEBUG_FS=y BUILD ?= vanilla KERNEL_DIR ?= $(KERNEL_SRC_DIR) CONFIG ?= KCONFIG_CONFIG=$(KERNEL_MOD_CONFIG) TARGET_PATH_PREFX ?= $(KERNEL_MOD_PATH) ifeq ($(BUILD),out-of-tree) PATCH = patch KERNEL_DIR = $(KERNEL_HDR_DIR) CONFIG = $(LOCAL_MOD_CONFIG) M=$(KERNEL_SRC_DIR)/drivers/block/loop TARGET_PATH_PREFX = endif #------------------------------------------------------------------------------ # Target definitions #------------------------------------------------------------------------------ all: modules losetup clean: clean_modules clean_losetup modules: loop.ko loop_file_fmt_raw.ko loop_file_fmt_qcow.ko clean_modules: $(call print_heading,"Clean all kernel modules") @$(MAKE) --no-print-directory -C $(KERNEL_DIR) $(CONFIG) clean patch: $(call print_heading, "Patch kernel headers") @sudo cp -f $(KERNEL_SRC_DIR)/include/uapi/linux/loop.h \ $(KERNEL_HDR_DIR)/include/uapi/linux/loop.h @sudo cp -f $(KERNEL_SRC_DIR)/drivers/block/Kconfig \ $(KERNEL_HDR_DIR)/drivers/block/Kconfig @sudo mkdir -p $(KERNEL_HDR_DIR)/drivers/block/loop @sudo cp -f $(KERNEL_SRC_DIR)/drivers/block/loop/loop_main.h \ $(KERNEL_HDR_DIR)/drivers/block/loop/loop_main.h @sudo cp -f $(KERNEL_SRC_DIR)/drivers/block/loop/loop_file_fmt.h \ $(KERNEL_HDR_DIR)/drivers/block/loop/loop_file_fmt.h @sudo cp -f $(KERNEL_SRC_DIR)/drivers/block/loop/Kconfig \ $(KERNEL_HDR_DIR)/drivers/block/loop/Kconfig loop.ko: loop_file_fmt_raw.ko: loop_file_fmt_qcow.ko: %.ko: $(PATCH) $(call print_heading,"Build $@ kernel module") @$(MAKE) --no-print-directory -C $(KERNEL_DIR) $(CONFIG) \ $(TARGET_PATH_PREFX)$@ losetup: $(call print_heading,"Build $@ utility") @cd $(LOSETUP_SRC_DIR) && \ ./tools/config-gen all && \ $(MAKE) --no-print-directory losetup clean_losetup: $(call print_heading,"Clean $@ utility") @cd $(LOSETUP_SRC_DIR) && \ $(MAKE) --no-print-directory clean ifeq ($(BUILD),out-of-tree) loop.load: loop.ko loop_file_fmt_raw.load: loop_file_fmt_raw.ko loop.load loop_file_fmt_qcow.load: loop_file_fmt_qcow.ko loop.load loop.unload: loop_file_fmt_raw.unload loop_file_fmt_qcow.unload loop_file_fmt_raw.unload: loop_file_fmt_qcow.unload: load_modules: loop.load loop_file_fmt_raw.load loop_file_fmt_qcow.load unload_modules: loop_file_fmt_qcow.unload loop_file_fmt_raw.unload loop.unload %.load: $(call print_heading,"Load kernel module $(basename $@)") sudo insmod $(KERNEL_SRC_DIR)/$(KERNEL_MOD_PATH)$(basename $@).ko %.unload: $(call print_heading,"Unload kernel module $(basename $@)") sudo rmmod $(basename $@) endif #------------------------------------------------------------------------------ # Function definitions #------------------------------------------------------------------------------ define print_heading @echo "#--------------------------------------------------------------" @echo "# [BUILD: $(BUILD)] $(1)" @echo "#--------------------------------------------------------------" endef