-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
76 lines (59 loc) · 1.33 KB
/
Makefile
File metadata and controls
76 lines (59 loc) · 1.33 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
ELF_TARGET_64 = taskman
CC ?= x86_64-elf-gcc
ELF_BIN_DIR_64 = bin
ELF_OBJ_DIR_64 = $(ELF_BIN_DIR_64)/obj
LIB_DIR = sysroot/lib
LIBC = $(LIB_DIR)/blibc.a
CRT0 = $(LIB_DIR)/start.o
BLIBC_REPO = https://codeberg.org/Bleed-Kernel/blibc.git
BLIBC_DIR = external/blibc
COMMON_CFLAGS = \
-ffreestanding \
-fno-stack-protector \
-fno-stack-check \
-Wall -Wextra -Werror \
-nostdlib \
-no-pie \
-m64 \
-Iinclude \
-Isysroot/include \
-Isysroot/libc \
-nostdinc
LDFLAGS = \
-static \
-nostdlib \
-no-pie \
-m64 \
-Iinclude \
-L$(LIB_DIR) \
-Isysroot/include \
-Isysroot/lib
SRCS = $(shell find src -name '*.c')
ELF_OBJS_64 = $(patsubst src/%.c,$(ELF_OBJ_DIR_64)/%.o,$(SRCS))
all: $(ELF_TARGET_64)
$(ELF_TARGET_64): blibc $(ELF_OBJS_64)
@mkdir -p $(ELF_BIN_DIR_64)
$(CC) $(LDFLAGS) \
-o $(ELF_BIN_DIR_64)/$(ELF_TARGET_64) \
$(CRT0) \
$(ELF_OBJS_64) \
-l:blibc.a
$(ELF_OBJ_DIR_64)/%.o: src/%.c
@mkdir -p $(dir $@)
$(CC) $(COMMON_CFLAGS) -c $< -o $@
blibc: $(LIBC)
$(LIBC):
@echo "[BLIBC] Preparing blibc"
@if [ ! -d "$(BLIBC_DIR)" ]; then \
git clone $(BLIBC_REPO) $(BLIBC_DIR); \
fi
$(MAKE) -C $(BLIBC_DIR)
@echo "[BLIBC] Syncing sysroot"
@mkdir -p sysroot
@cp -r $(BLIBC_DIR)/sysroot/* sysroot/
build: $(ELF_TARGET_64)
clean:
rm -rf bin
distclean:
rm -rf bin sysroot external
.PHONY: all clean distclean blibc