summaryrefslogtreecommitdiff
path: root/src/Makefile
blob: aa642f82230c0805c909c9c6781bcd3586008d22 (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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
.SILENT:

TARGET = amd64
KBIN = sys/l5
SHIMDIR = shim
SHIMBIN = BOOTX64.EFI
SYSROOT = $(shell pwd)/root
OMAR = tools/omar/bin/omar
ISO = lunos.iso

# Build tools
BINUTILS_DIR := $(shell pwd)/cc/toolchain/build-binutils
USER_CC = $(shell pwd)/cc/gcc/bin/x86_64-pc-ethos-gcc
CC := clang
LD := ld
AS := as
SYS_LD_FLAGS := -Tsys/arch/$(TARGET)/conf/sys.ld

# QEMU emulator flags
QEMU_FLAGS = --enable-kvm -serial stdio -cdrom $(ISO) \
			-M q35 -cpu host -smp 4 -m 2G

.PHONY: all
all: root lib user sys image

.PHONY: sys
sys:
	cd sys/; make CC=$(CC) AS=$(AS) LD=$(LD) TARGET=$(TARGET) TOOLS=$(shell pwd)/tools

.PHONY: user
user:
	cd cmd/; make CC=$(USER_CC) AS=$(AS) LD=$(LD) TARGET=$(TARGET) \
		SYSROOT=$(SYSROOT)

.PHONY: lib
lib:
	cd lib/; make CC=$(USER_CC) AS=$(AS) LD=$(LD) TARGET=$(TARGET) \
				  SYSROOT=$(SYSROOT)

root:
	mkdir -p $(SYSROOT)/
	mkdir -p $(SYSROOT)/boot/
	mkdir -p $(SYSROOT)/boot/np/
	mkdir -p $(SYSROOT)/usr/include/
	mkdir -p $(SYSROOT)/usr/bin/
	mkdir -p sys/target/header/
	rsync -av sys/include/arch/$(TARGET)/ sys/target/header/machine/
	rsync -av sys/np/sample/*.np $(SYSROOT)/boot/np/

.PHONY: sysroot
image:
	$(LD) $(shell find sys/ -name "*.o")  \
		-o $(KBIN) $(SYS_LD_FLAGS)
	cp $(KBIN) root/boot/
	mkdir -p iso_root/boot/
	cp data/boot/limine.conf $(SHIMDIR)/limine/limine-bios.sys \
        $(SHIMDIR)/limine/limine-bios-cd.bin $(SHIMDIR)/limine/limine-uefi-cd.bin iso_root/
	cp data/boot/wallpaper.jpg iso_root/boot
	$(OMAR) -i $(SYSROOT) -o iso_root/boot/initrd.omar
	cp sys/l5 iso_root/boot/
	xorriso -as mkisofs -b limine-bios-cd.bin -no-emul-boot -boot-load-size 4\
		-boot-info-table --efi-boot limine-uefi-cd.bin -efi-boot-part \
		--efi-boot-image --protective-msdos-label iso_root/ -o $(ISO) 1>/dev/null
	$(SHIMDIR)/limine/limine bios-install $(ISO) 1>/dev/null
	rm -rf iso_root/


.PHONY: qemu-amd64
run:
	qemu-system-x86_64 $(QEMU_FLAGS)

.PHONY: clean
clean:
	rm -rf lunos.iso root
	rm -f $(KBIN)
	cd sys/; make clean TARGET=$(TARGET)

.PHONY: distclean
distclean:
	make clean; rm -rf sys/target srv/root