blob: 5065549a411520d54378bd6dd74940a0b043e116 (
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
|
CC = i686-elf-g++
LD = ld
ASM = nasm
# test -O2 flag
CFLAGS = -c -m32 -Wall -ffreestanding -nostdinc -nostdlib
AFLAGS = -f elf32
LDFLAGS = -m elf_i386 -L$(GCC_PATH) -lgcc
QEMUFLAGS =
CFILES = $(shell find ./ -type f \( -name \*.cpp -o -name \*.c \))
AFILES = $(shell find ./ -type f \( -iname \*.s -o -name \*.asm \))
LDFILE = $(shell find ./ -type f -name *.ld)
SOURCE_FILES = $(CFILES) $(AFILES)
OBJ_FILES = $(addprefix $(BDIR)/, $(addsuffix .o, $(basename $(SOURCE_FILES))))
INCLUDE = ./include
ifeq ($(DEBUG), true)
CFLAGS := -g3 $(CFLAGS)
AFLAGS := -g $(AFLAGS)
QEMUFLAGS := -s -S $(QEMUFLAGS)
endif
OS_BINARY = $(BDIR)/kernel.bin
BDIR = ./build
.PHONY: install $(SOURCE_FILES)
build: startbuild $(SOURCE_FILES)
echo $(AFLAGS)
echo $(CFLAGS)
@echo "Link object files..."
$(LD) -o $(OS_BINARY) -T $(LDFILE) $(OBJ_FILES) $(LDFLAGS)
@echo "Project was built"
$(CFILES):
mkdir -p $(BDIR)/$(@D)
$(CC) $(CFLAGS) -I $(INCLUDE) -o $(BDIR)/$(addsuffix .o, $(basename $@)) $@
$(AFILES):
mkdir -p $(BDIR)/$(@D)
$(ASM) $(AFLAGS) -o $(BDIR)/$(addsuffix .o, $(basename $@)) $@
startbuild:
@echo $(OBJ_FILES)
mkdir $(BDIR)
@echo "Compile source files..."
install:
@echo "Creating an iso image of OS"
mkdir -p ./iso/os/
cp ./$(BDIR)/kernel.bin ./iso/os/
grub-mkrescue -o ./$(BDIR)/kernel.iso ./iso
clean:
rm -rf $(BDIR)
rm -rf ./iso/os/kernel.bin
run:
qemu-system-x86_64 $(QEMUFLAGS) -cdrom ./$(BDIR)/kernel.iso
all: clean build install run
|