-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
89 lines (73 loc) · 1.97 KB
/
Copy pathMakefile
File metadata and controls
89 lines (73 loc) · 1.97 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
CROSS_PREFIX := $(shell if command -v x86_64-elf-gcc >/dev/null 2>&1; then printf '%s' x86_64-elf-; fi)
ifeq ($(origin CC), default)
CC := $(if $(CROSS_PREFIX),$(CROSS_PREFIX)gcc,gcc)
endif
ifeq ($(origin CC), undefined)
CC := $(if $(CROSS_PREFIX),$(CROSS_PREFIX)gcc,gcc)
endif
ifeq ($(origin AS), default)
AS := $(if $(CROSS_PREFIX),$(CROSS_PREFIX)as,as)
endif
ifeq ($(origin AS), undefined)
AS := $(if $(CROSS_PREFIX),$(CROSS_PREFIX)as,as)
endif
ifeq ($(origin LD), default)
LD := $(if $(CROSS_PREFIX),$(CROSS_PREFIX)ld,ld)
endif
ifeq ($(origin LD), undefined)
LD := $(if $(CROSS_PREFIX),$(CROSS_PREFIX)ld,ld)
endif
ifeq ($(origin OBJCOPY), default)
OBJCOPY := $(if $(CROSS_PREFIX),$(CROSS_PREFIX)objcopy,objcopy)
endif
ifeq ($(origin OBJCOPY), undefined)
OBJCOPY := $(if $(CROSS_PREFIX),$(CROSS_PREFIX)objcopy,objcopy)
endif
CFLAGS = -ffreestanding -fno-stack-protector -fno-pie -mcmodel=kernel -mno-red-zone -mgeneral-regs-only -std=c11 -Wall -Wextra -Iinclude
LDFLAGS = -T scripts/linker.ld -nostdlib
EFI_LDFLAGS = --target=efi-app-x86_64
OBJ_DIR = obj
C_SRCS = \
src/efi_main.c \
src/kernel.c \
src/pmm.c \
src/paging.c \
src/idt.c \
src/interrupts.c \
src/scheduler.c \
src/syscall.c \
src/fs.c \
src/smp.c \
src/ata.c \
src/net.c \
src/graphics.c \
src/elf_loader.c \
src/gdt.c \
src/process.c \
src/vfs.c \
src/nvme.c \
tests/test_runner.c \
tests/boot_test.c \
tests/memory_test.c \
tests/scheduler_test.c
ASM_SRCS = \
src/start.S \
src/interrupt_stubs.S \
src/ap_trampoline.S
C_OBJS = $(patsubst %.c,$(OBJ_DIR)/%.o,$(C_SRCS))
ASM_OBJS = $(patsubst %.S,$(OBJ_DIR)/%.o,$(ASM_SRCS))
OBJS = $(C_OBJS) $(ASM_OBJS)
all: kernel.efi
$(OBJ_DIR)/%.o: %.c
@mkdir -p $(dir $@)
$(CC) $(CFLAGS) -c $< -o $@
$(OBJ_DIR)/%.o: %.S
@mkdir -p $(dir $@)
$(AS) --64 $< -o $@
kernel.elf: $(OBJS)
$(LD) $(LDFLAGS) $^ -o $@
kernel.efi: kernel.elf
$(OBJCOPY) --output-target=pei-x86-64 --subsystem=10 $< $@
clean:
rm -rf $(OBJ_DIR) kernel.elf kernel.efi esp boot.log
.PHONY: all clean