aboutsummaryrefslogtreecommitdiff
path: root/Makefile
blob: 0534d6a17492bd105aaff480861babc8b3d093cb (plain)
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
OBJ := $(shell cat OBJ)
CC = gcc
LD = ld
INCLUDES = -Iinclude -Iapps -Iinclude/arch/i686 -Iinclude/arch/i686/drivers -Iinclude/kernel

CFLAGS = -std=gnu99 -ffreestanding -fno-stack-protector -nostdlib -Wall -Wextra -m32 $(INCLUDES) -g
OPTFLAGS = -fexpensive-optimizations -ftree-loop-vectorize -finline-functions -fomit-frame-pointer -ftree-vectorize -O1 -mtune=generic

QEMU = qemu-system-i386
BOCHS = bochs

AS = as
ASFLAGS = -march=i686 --32

ISODIR = isodir

all: kappa.bin

test: kappa.iso
	@echo "EMULATOR kappa.iso"
	@$(QEMU) kappa.iso

test-bochs: kappa.iso
	@echo "BOCHS bochs.cfg"
	@$(BOCHS) -f bochs.cfg -q

kappa.iso: kappa.bin
	@echo "Building ISO under $(ISODIR)/..."
	@mkdir -p $(ISODIR)
	@mkdir -p $(ISODIR)/boot
	@cp initrd $(ISODIR)/initrd.img
	@cp kappa.bin $(ISODIR)/efi.img
	@cp kappa.bin $(ISODIR)/boot/kappa.bin
	@mkdir -p $(ISODIR)/boot/grub
	@cp cdrom/grub.cfg $(ISODIR)/boot/grub
	@grub-mkrescue -o kappa.iso $(ISODIR) 2> /dev/null

kappa.bin: $(OBJ) $(SOURCES) Makefile
	@echo "LD $@"
	@$(LD) -T arch/i686/linker.ld -o kappa.bin -melf_i386 $(OBJ) -L /usr/lib32 -lgcc_s -static

arch/i686/drivers/gfx.o: arch/i686/drivers/gfx.c Makefile
	@echo "CC $<"
	@$(CC) $(CFLAGS) -O3 -msse -c $< -o $@

%.o: %.c Makefile
	@echo "CC $<"
	@$(CC) $(CFLAGS) $(OPTFLAGS) -c $< -o $@


%.o: %.S Makefile
	@echo "AS $<"
	@$(AS) $(ASFLAGS) -c $< -o $@
clean:
	@echo "Cleaning build directory..."
	@rm -f $(OBJ) kappa.iso kappa.bin
	@rm -rf $(ISODIR)