aboutsummaryrefslogtreecommitdiff
path: root/Makefile
blob: a4a891180f6dbf9525badcda19ce14797ab4d99a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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

KERNEL_NAME := kernel-$(shell uname -r)
INITFS_NAME := initramfs.img

export

all: daemon client module

daemon client module:
	$(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

# 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 $@