CC := gcc CFLAGS = -std=c99 -Wall -Wextra -Wpedantic -g SRCD := src OBJD := obj BIND := bin SRCS = $(shell find $(SRCD)/$(SUBD) -type f) OBJS = $(SRCS:$(SRCD)/$(SUBD)/%.c=$(OBJD)/$(SUBD)/%.o) DAEMON_TARGET_NAME := daemon CLIENT_TARGET_NAME := client MODULE_TARGET_NAME := keylogger.ko TESTS_TARGET_NAME := tests KERNEL_NAME := kernel-$(shell uname -r) INITFS_NAME := initramfs.img export all: daemon client module tests vm daemon client module tests: $(MAKE) $(BIND)/$($(shell echo $@ | tr '[:lower:]' '[:upper:]')_TARGET_NAME) SUBD=$@ clean: rm -rf $(BIND) rm -rf $(OBJD) # generic build $(BIND)/%: $(OBJS) mkdir -p $(dir $@) $(CC) $(CFLAGS) $(SFLAGS) $^ -o $@ $(OBJD)/$(SUBD)/%.o: $(SRCD)/$(SUBD)/%.c mkdir -p $(dir $@) $(CC) $(CFLAGS) $(SFLAGS) -c $^ -o $@ # build a module $(BIND)/%.ko: $(SRCS) mkdir -p $(dir $@); mkdir -p $(OBJD)/$(SUBD) make -C $(SRCD)/$(SUBD) name=$(@:$(BIND)/%.ko=%) mv $(SRCD)/$(SUBD)/*.o $(OBJD)/$(SUBD) mv $(SRCD)/$(SUBD)/*.ko $@ make -C $(SRCD)/$(SUBD) clean # copy the test files $(BIND)/tests: $(SRCS) mkdir -p $(BIND) cp -r $(SRCD)/$(SUBD) $(BIND) # VM things vm: vm.sh $(BIND)/$(INITFS_NAME) $(BIND)/$(KERNEL_NAME) ./vm.sh run $(BIND)/$(INITFS_NAME): $(SRCD)/initramfs-init.sh module ./vm.sh initramfs $@ $^ $(BIND)/$(KERNEL_NAME): ./vm.sh kernel $@