This repository has been archived by the owner on Mar 5, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Makefile
89 lines (67 loc) · 2.48 KB
/
Makefile
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
########################################################################################################################
# Build config
########################################################################################################################
# Should debug be enabled
DEBUG ?= 1
# Should qemu debugger be enabled
DEBUGGER ?= 0
# Qemu acceleration
QEMU_ACCEL ?= 0
# Prefix to the compiler
PREFIX ?=
########################################################################################################################
# Build constants
########################################################################################################################
CC := $(PREFIX)clang
LD := $(PREFIX)ld.lld
CFLAGS := -Wall -Werror -Wno-unused-label
CFLAGS += -target x86_64-unknown-elf
CFLAGS += -mno-sse -mno-sse2 -mno-mmx -mno-80387 -m64
CFLAGS += -mno-red-zone -fno-builtin -mcmodel=kernel
CFLAGS += -march=nehalem -fcoroutines-ts
CFLAGS += -fstack-protector -ffreestanding -fno-pic
CFLAGS += -O2 -flto -g
CFLAGS += -Ikernel
LDFLAGS := -nostdlib -no-pie
LDFLAGS += --oformat elf_amd64
LDFLAGS += -z max-page-size=0x1000
LDFLAGS += -T kernel/linker.ld
SRCS := $(shell find kernel -name '*.c')
ifeq ($(DEBUG), 1)
CFLAGS += -D__TOMATOS_DEBUG__
CFLAGS += -fsanitize=undefined
BIN_DIR := bin/DEBUG
BUILD_DIR := build/DEBUG
else
BIN_DIR := bin/RELEASE
BUILD_DIR := build/RELEASE
endif
########################################################################################################################
# Phony
########################################################################################################################
.PHONY: default qemu image clean clean-all
default: image
########################################################################################################################
# Targets
########################################################################################################################
OBJS := $(SRCS:%=$(BUILD_DIR)/%.o)
DEPS := $(OBJS:%.o=%.d)
BINS ?=
-include $(DEPS)
$(BIN_DIR)/tomatos.elf: $(BINS) $(OBJS)
@echo LD $@
@mkdir -p $(@D)
@$(LD) $(LDFLAGS) -o $@ $(OBJS)
$(BUILD_DIR)/%.c.o: %.c
@echo CC $@
@mkdir -p $(@D)
@$(CC) $(CFLAGS) -MMD -D__FILENAME__="\"$<\"" -D__MODULE__="\"$(notdir $(basename $<))\"" -c $< -o $@
$(BUILD_DIR)/%.asm.o: %.asm
@echo NASM $@
@mkdir -p $(@D)
@nasm -g -i $(BUILD_DIR) -F dwarf -f elf64 -o $@ $<
include makefiles/image.mk
clean:
rm -rf build
clean-all: clean
rm -rf bin