Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
122 lines (109 loc) · 3.74 KB
/
Copy pathMakefile
File metadata and controls
122 lines (109 loc) · 3.74 KB
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
include common.mk
LIMINE_DIR := $(INCLUDE_DIR)/limine
LIMINE_TOOL := $(LIMINE_DIR)/limine
# Find all C, C++ and Assembly files
SRCS = $(shell find $(SRC_DIR) shared \
-path "src/userspace" -prune -o \
\( -name "*.c" -o -name "*.cpp" -o -name "*.asm" \) -print)
OBJS = $(SRCS:%=$(BUILD_DIR)/%.o)
.PHONY: all fetchDeps run clean
all: $(ISO)
# Fetch dependencies/libraries
fetchDeps:
@echo "[DEPS] Fetching dependencies/libraries"
@mkdir -p $(INCLUDE_DIR)
@echo "[DEPS] Fetching Limine"
@rm -rf $(LIMINE_DIR)
@git clone https://codeberg.org/Limine/Limine.git --branch=v10.x-binary --depth=1 $(LIMINE_DIR)
@rm -rf $(LIMINE_DIR)/.git
@echo "[DEPS] Fetching Limine protocol header file"
@wget https://codeberg.org/Limine/limine-protocol/raw/branch/trunk/include/limine.h -O $(LIMINE_DIR)/limine.h
disk:
@mkdir -p $(DISK_DIR)
@touch $(DISK_DIR)/disk.img
# Kernel binary
$(BUILD_DIR)/kernel.elf: src/kernel/linker.ld $(OBJS)
@mkdir -p $(dir $@)
$(VLD) $(LDFLAGS) -T $< $(OBJS) -o $@
# Build userspace first
userspace:
@$(MAKE) -C src/userspace
# Compile Limine
$(LIMINE_TOOL):
@$(MAKE) -C $(LIMINE_DIR)
# Create bootable ISO
$(ISO): limine.conf $(LIMINE_TOOL) $(BUILD_DIR)/kernel.elf disk userspace
@echo "[ISO] Creating bootable image..."
@rm -rf $(ISODIR)
@rm -f $(DISK_DIR)/initrd.cpio
@mkdir -p $(ISODIR)/boot/limine $(ISODIR)/EFI/BOOT
@mkdir -p $(ISODIR)/boot
@mkdir -p $(ISODIR)/boot/ui
@mkdir -p $(ISODIR)/boot/ui/fonts
@mkdir -p $(ISODIR)/boot/ui/assets
@mkdir -p $(ISODIR)/boot/modules
@mkdir -p $(ISODIR)/boot/keymaps
@mkdir -p $(ISODIR)/boot/images
@mkdir -p $(ISODIR)/boot/programs
@cp $(BUILD_DIR)/kernel.elf $(ISODIR)/boot/kernel_a.elf
@cp $(BUILD_DIR)/kernel.elf $(ISODIR)/boot/kernel_b.elf
@cp $< $(ISODIR)/boot/limine/
@cp $(addprefix $(INCLUDE_DIR)/limine/limine-, bios.sys bios-cd.bin uefi-cd.bin) $(ISODIR)/boot/limine/
@cp $(addprefix $(INCLUDE_DIR)/limine/BOOT, IA32.EFI X64.EFI) $(ISODIR)/EFI/BOOT/
@echo "[MOD] creating & copying executables..."
@mkdir -p $(DISK_DIR)/rd/user/apps
@mkdir -p $(DISK_DIR)/rd/user/bin
@mkdir -p $(DISK_DIR)/rd/bin
@mkdir -p $(DISK_DIR)/rd/emr/system
@cp -r src/userspace/apps/shell/shell.emx $(DISK_DIR)/rd/user/apps/
@cp -r src/userspace/apps/system/system.emx $(DISK_DIR)/rd/emr/system
@cp src/userspace/apps/login/login.elf $(DISK_DIR)/rd/emr/system
@cp src/userspace/bin/echo/echo.elf $(DISK_DIR)/rd/bin/
@cp src/userspace/bin/hello/hello.elf $(DISK_DIR)/rd/bin/
@cp src/userspace/bin/ls/ls.elf $(DISK_DIR)/rd/bin/
@cp src/userspace/bin/tree/tree.elf $(DISK_DIR)/rd/bin/
@echo "[MOD] creating initrd.cpio..."
@chmod +x tools/initrd.sh
./tools/initrd.sh
@cp $(DISK_DIR)/initrd.cpio $(ISODIR)/boot/
@xorriso -as mkisofs -b boot/limine/limine-bios-cd.bin \
-no-emul-boot -boot-load-size 4 -boot-info-table \
--efi-boot boot/limine/limine-uefi-cd.bin \
-efi-boot-part --efi-boot-image --protective-msdos-label \
$(ISODIR) -o $@ 2>/dev/null
@$(LIMINE_TOOL) bios-install $@
@echo "------------------------"
@echo "[OK] $@ created"
# Run/Emulate OS
run: $(ISO)
@echo "[QEMU]running $(OS_NAME).iso "
@echo
@qemu-system-x86_64 \
-M pc \
-cpu qemu64 \
-m 512 \
-drive if=pflash,format=raw,readonly=on,file=uefi/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=uefi/OVMF_VARS.fd \
-drive file=$(DISK_IMG),format=raw,if=ide,index=0 \
-cdrom $< \
-serial stdio 2>&1 \
#-no-reboot \
#-no-shutdown
run_usb: $(ISO)
@chmod +x run_xhci.sh
./run_xhci.sh
# Compilation rules
$(BUILD_DIR)/%.c.o: %.c
@mkdir -p $(dir $@)
$(VCC) $(CFLAGS) -c $< -o $@
$(BUILD_DIR)/%.cpp.o: %.cpp
@mkdir -p $(dir $@)
$(VCXX) $(CXXFLAGS) -c $< -o $@
$(BUILD_DIR)/%.asm.o: %.asm
@mkdir -p $(dir $@)
$(VAS) $(ASFLAGS) $< -o $@
# Clean all build output
clean:
@echo "[CLR] Cleaning..."
@rm -rf $(BUILD_DIR)
@echo "[OK]"