blob: c1aa57f30c5b968321c2e0fe19243ee9751c55d5 (
plain) (
blame)
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
|
# Kernel makefile
#absolute hell
ifndef GAS
GAS = i686-elf-as
endif
ifndef CFLAGS
CFLAGS = -ffreestanding -Wall -Wextra -g -std=gnu99 -O2 -Iinclude
CFLAGS += --sysroot="$(SYSROOT)"
CFLAGS += -isystem="/usr/include"
endif
ifndef CXXFLAGS
CXXFLAGS = -ffreestanding -Wall -Wextra -fno-exceptions -fno-rtti -D__is_kernel -g -O2 -Iinclude
CXXFLAGS += -Iinclude
CXXFLAGS += --sysroot="$(SYSROOT)"
CXXFLAGS += -isystem="/usr/include"
endif
ifndef LDFLAGS
LDFLAGS = -T arch/$(ARCH)/linker.ld -ffreestanding -g -O2 -Iinclude
LDFLAGS += --sysroot="$(SYSROOT)"
LDFLAGS += -isystem="/usr/include"
endif
ifndef SYSROOT
$(error No sysroot specified)
endif
LIBS = -nostdlib -lgcc
#Find all the source files
C_SOURCES := $(shell find $(PWD)/kernel -type f -name '*.c')
CPP_SOURCES := $(shell find $(PWD)/kernel -type f -name '*.cpp')
HEADERS := $(shell find $(PWD) -type f -name '*.h')
ASMFILES := $(shell find $(PWD) -type f -name '*.asm' ! -name 'crti.asm' ! -name 'crtn.asm')
GASFILES := $(wildcard *.s)
CRTBEGIN := $(shell $(CXX) $(CXXFLAGS) -print-file-name=crtbegin.o)
CRTEND := $(shell $(CXX) $(CXXFLAGS) -print-file-name=crtend.o)
OBJECTS := $(patsubst %.c,%.o,$(C_SOURCES))
OBJECTS += $(patsubst %.cpp,%.o,$(CPP_SOURCES))
OBJECTS += $(patsubst %.asm,%.o,$(ASMFILES))
LINKLST := crti.o
LINKLST += $(CRTBEGIN)
LINKLST += $(OBJECTS)
LINKLST += $(LIBS)
LINKLST += $(CRTEND)
LINKLST += crtn.o
.PHONY: all crt clean
all: crti.o crtn.o kernel.bin
kernel.bin: ${OBJECTS}
$(info [INFO] Linking kernel)
$(CXX) ${LDFLAGS} -o ${PREFIX}/kernel.bin $(LINKLST)
%.o: %.cpp
$(info [INFO] Compiling $<)
$(CXX) ${CXXFLAGS} -c $< -o $@
%.o: %.c
$(info [INFO] Compiling $<)
$(CC) $(CFLAGS) -c $< -o $@
%.o: %.asm
$(info [INFO] Assembling $<)
$(NASM) $< -felf32 -o $@ -g
crti.o:
$(NASM) arch/$(ARCH)/crti.asm -felf32 -o $@
crtn.o:
$(NASM) arch/$(ARCH)/crtn.asm -felf32 -o $@
install-headers:
cp -r --preserve=timestamps include $(SYSROOT)/usr/include
clean:
$(info [INFO] Cleaning)
rm ${OBJECTS} crti.o crtn.o
|