summaryrefslogtreecommitdiffstats
path: root/makefile
blob: 439c42e1d96da8ac5261e227c43ba80210ae7ab1 (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
CC = i686-elf-g++
LD = ld
ASM = nasm
# test -O2 flag
CFLAGS = -c -m32 -Wall -ffreestanding -nostdinc -nostdlib -fno-rtti
AFLAGS = -f elf32
LDFLAGS = -m elf_i386 $(patsubst %,-L%,$(subst :, ,$(LIBS_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

ifdef DEBUG
	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)
	rm -rf $(BDIR)
	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-i386 $(QEMUFLAGS) -cdrom ./$(BDIR)/kernel.iso

all: clean build install run