blob: 3934513bf6a0dcec5bd9b5641c64f405dfd8d429 (
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
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
|
.PHONY: all clean run docker-build hikari mirai mkafsdisk disk
# ═══════════════════════════════════════════════════════════════════════════
# Platform Detection
# ═══════════════════════════════════════════════════════════════════════════
ifdef DOCKER_BUILD
BUILD_MODE = native
else
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Linux)
IS_ARCH := $(shell test -f /etc/arch-release && echo yes || echo no)
ifeq ($(IS_ARCH),yes)
BUILD_MODE = native
else
BUILD_MODE = docker
endif
else
BUILD_MODE = docker
endif
endif
# ═══════════════════════════════════════════════════════════════════════════
# Configuration
# ═══════════════════════════════════════════════════════════════════════════
DISK_IMAGE = iso/akiba.img
FS_ROOT = iso/akiba
DISK_SIZE_MB = 64
RESOURCES_DIR = resources
# ═══════════════════════════════════════════════════════════════════════════
# Docker Build Mode
# ═══════════════════════════════════════════════════════════════════════════
ifeq ($(BUILD_MODE),docker)
all: docker-build
docker-build:
@echo "═══════════════════════════════════════════════════════════"
@echo " Building Akiba OS (Docker mode)"
@echo "═══════════════════════════════════════════════════════════"
@docker build -t akiba-builder ./toolchain
@docker run --rm -v $(PWD):/akiba -e DOCKER_BUILD=1 akiba-builder make all
clean:
@docker run --rm -v $(PWD):/akiba -e DOCKER_BUILD=1 akiba-builder make clean 2>/dev/null || rm -rf iso/ zig-out/ zig-cache/ .zig-cache/
run: all
@./scripts/run.sh
# ═══════════════════════════════════════════════════════════════════════════
# Native Build Mode
# ═══════════════════════════════════════════════════════════════════════════
else
all: $(DISK_IMAGE)
clean:
@rm -rf iso/ zig-out/ zig-cache/ .zig-cache/
run: all
@./scripts/run.sh
endif
# ═══════════════════════════════════════════════════════════════════════════
# Build Targets
# ═══════════════════════════════════════════════════════════════════════════
hikari:
@echo "→ Building Hikari bootloader..."
@zig build hikari
@echo " ✓ Hikari built"
mirai:
@echo "→ Building Mirai kernel..."
@zig build mirai
@echo " ✓ Mirai built"
mkafsdisk:
@echo "→ Building mkafsdisk tool..."
@zig build mkafsdisk
@echo " ✓ mkafsdisk built"
# ═══════════════════════════════════════════════════════════════════════════
# Filesystem & Disk Image
# ═══════════════════════════════════════════════════════════════════════════
prepare-filesystem: hikari mirai
@echo "→ Preparing filesystem structure..."
@mkdir -p $(FS_ROOT)/EFI/BOOT
@mkdir -p $(FS_ROOT)/system/akiba
@mkdir -p $(FS_ROOT)/system/libraries
@mkdir -p $(FS_ROOT)/binaries
@echo "→ Copying bootloader..."
@cp zig-out/EFI/BOOT/BOOTX64.EFI $(FS_ROOT)/EFI/BOOT/
@echo "→ Copying kernel..."
@cp zig-out/system/akiba/mirai.kernel $(FS_ROOT)/system/akiba/
@echo "→ Copying resources..."
@for dir in $(RESOURCES_DIR)/*/; do \
if [ -d "$$dir" ]; then \
dirname=$$(basename $$dir); \
mkdir -p $(FS_ROOT)/$$dirname; \
cp -R $$dir* $(FS_ROOT)/$$dirname/; \
echo " ✓ /$$dirname"; \
fi; \
done
@echo " ✓ Filesystem prepared"
$(DISK_IMAGE): prepare-filesystem mkafsdisk
@echo "→ Creating bootable disk image..."
@mkdir -p iso
@zig-out/bin/mkafsdisk $(FS_ROOT) $(DISK_IMAGE) $(DISK_SIZE_MB)
@echo " ✓ Disk image created: $(DISK_IMAGE)"
disk: $(DISK_IMAGE)
# ═══════════════════════════════════════════════════════════════════════════
# Info
# ═══════════════════════════════════════════════════════════════════════════
info:
@echo "AkibaOS Build System"
@echo "===================="
@echo "Build mode: $(BUILD_MODE)"
@echo ""
@echo "Targets:"
@echo " make - Build everything"
@echo " make hikari - Build bootloader only"
@echo " make mirai - Build kernel only"
@echo " make mkafsdisk- Build disk tool only"
@echo " make disk - Create disk image"
@echo " make run - Build and run in QEMU"
@echo " make clean - Remove build artifacts"
|