blob: a4ffd8cb32077ea7a160ab7abaa80c4051d89992 (
plain) (
tree)
|
|
#------------------------------------------------------------------------------
# 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
|