aboutsummaryrefslogtreecommitdiff
path: root/Makefile
blob: 4278311cb06f49ac4c958d728be69ec61d2f089e (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
53
54
55
56
57
58
59
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 $@