-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathMakefile
More file actions
103 lines (83 loc) · 3.6 KB
/
Copy pathMakefile
File metadata and controls
103 lines (83 loc) · 3.6 KB
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
CC ?= gcc
CFLAGS ?= -O2 -g
LDFLAGS ?=
PREFIX ?= /usr/local
DESTDIR ?=
INSTALL ?= install
ifeq ($(STATIC),1)
CC = musl-gcc
LDFLAGS += -static
endif
WARN = -Wall -Wextra -Werror -Wshadow -Wmissing-prototypes
CPPFLAGS = -D_GNU_SOURCE -Iinclude -Ilib/fdt -DKMORPHD_PATH='"$(PREFIX)/bin/kmorphd"'
ALL_CFLAGS = -std=gnu11 $(CFLAGS) $(CPPFLAGS)
BUILD = build
FDT_SRCS = $(wildcard lib/fdt/*.c)
LIB_SRCS = $(wildcard lib/*.c)
KMORPHD_SRCS = $(filter-out kmorphd/main.c,$(wildcard kmorphd/*.c))
KMORPH_SRCS = $(filter-out kmorph/main.c,$(wildcard kmorph/*.c))
TEST_SRCS = $(wildcard tests/test_*.c)
FDT_OBJS = $(FDT_SRCS:%.c=$(BUILD)/%.o)
LIB_OBJS = $(LIB_SRCS:%.c=$(BUILD)/%.o)
KMORPHD_OBJS = $(KMORPHD_SRCS:%.c=$(BUILD)/%.o)
KMORPH_OBJS = $(KMORPH_SRCS:%.c=$(BUILD)/%.o)
TEST_BINS = $(TEST_SRCS:tests/%.c=$(BUILD)/tests/%)
LIBKMORPH = $(BUILD)/libkmorph.a
BIN = $(BUILD)/bin
all: $(BIN)/kmorphd $(BIN)/kmorph static-kmorphd
$(BIN)/kmorphd: $(BUILD)/kmorphd/main.o $(KMORPHD_OBJS) $(LIBKMORPH)
@mkdir -p $(dir $@)
$(CC) $(LDFLAGS) -o $@ $^
$(BIN)/kmorph: $(BUILD)/kmorph/main.o $(KMORPH_OBJS) $(LIBKMORPH)
@mkdir -p $(dir $@)
$(CC) $(LDFLAGS) -o $@ $^
# The successor runs kmorphd from an image with no libc, so the installed
# kmorphd is static, built with musl in its own directory to keep the
# objects apart from the host build the tests link against.
ifeq ($(STATIC),1)
KMORPHD_INSTALL = $(BIN)/kmorphd
static-kmorphd:
else
KMORPHD_INSTALL = $(BUILD)/static/bin/kmorphd
static-kmorphd:
$(MAKE) BUILD=$(BUILD)/static STATIC=1 $(BUILD)/static/bin/kmorphd
endif
$(LIBKMORPH): $(LIB_OBJS) $(FDT_OBJS)
$(AR) rcs $@ $^
$(BUILD)/lib/fdt/%.o: lib/fdt/%.c
@mkdir -p $(dir $@)
$(CC) $(ALL_CFLAGS) -c -o $@ $<
$(BUILD)/%.o: %.c
@mkdir -p $(dir $@)
$(CC) $(ALL_CFLAGS) $(WARN) -MMD -MP -c -o $@ $<
$(BUILD)/tests/%: tests/%.c $(KMORPHD_OBJS) $(KMORPH_OBJS) $(LIBKMORPH)
@mkdir -p $(dir $@)
$(CC) $(ALL_CFLAGS) $(WARN) -Itests -Ikmorphd -Ikmorph $(LDFLAGS) -o $@ $^
check: $(TEST_BINS)
@for t in $(TEST_BINS); do echo "== $$t"; $$t || exit 1; done
@echo "all tests passed"
DRACUTDIR = $(PREFIX)/lib/dracut/modules.d/99kmorph
LIBDIR = $(PREFIX)/lib/kmorph
UNITDIR = $(PREFIX)/lib/systemd/system
KINSTDIR = $(PREFIX)/lib/kernel/install.d
POSTINSTDIR = /etc/kernel/postinst.d
IRTDIR = $(PREFIX)/share/initramfs-tools
install: all
$(INSTALL) -d $(DESTDIR)$(PREFIX)/bin $(DESTDIR)/etc/kmorph
$(INSTALL) -m 0755 $(BIN)/kmorph $(KMORPHD_INSTALL) $(DESTDIR)$(PREFIX)/bin/
$(INSTALL) -m 0644 kmorph.conf.example $(DESTDIR)/etc/kmorph/
$(INSTALL) -d $(DESTDIR)$(DRACUTDIR) $(DESTDIR)$(LIBDIR) $(DESTDIR)$(UNITDIR) $(DESTDIR)$(KINSTDIR) $(DESTDIR)$(POSTINSTDIR)
$(INSTALL) -d $(DESTDIR)$(IRTDIR)/hooks $(DESTDIR)$(IRTDIR)/scripts/init-premount
$(INSTALL) -m 0755 dist/dracut/99kmorph/module-setup.sh $(DESTDIR)$(DRACUTDIR)/
$(INSTALL) -m 0644 dist/dracut/99kmorph/kmorphd-initrd.service $(DESTDIR)$(DRACUTDIR)/
$(INSTALL) -m 0755 dist/dracut/kmorph-mkimage $(DESTDIR)$(LIBDIR)/
$(INSTALL) -m 0644 dist/systemd/kmorph.service $(DESTDIR)$(UNITDIR)/
$(INSTALL) -m 0755 dist/kernel-install/60-kmorph.install $(DESTDIR)$(KINSTDIR)/
$(INSTALL) -m 0755 dist/kernel-install/60-kmorph.install $(DESTDIR)$(POSTINSTDIR)/zz-kmorph
$(INSTALL) -m 0755 dist/initramfs-tools/hooks/kmorph $(DESTDIR)$(IRTDIR)/hooks/
$(INSTALL) -m 0755 dist/initramfs-tools/scripts/init-premount/kmorph $(DESTDIR)$(IRTDIR)/scripts/init-premount/
clean:
rm -rf $(BUILD)
-include $(LIB_OBJS:.o=.d) $(KMORPHD_OBJS:.o=.d) $(KMORPH_OBJS:.o=.d)
-include $(BUILD)/kmorphd/main.d $(BUILD)/kmorph/main.d
.PHONY: all check static-kmorphd install clean