aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBobby <[email protected]>2026-02-24 09:28:40 +0530
committerBobby <[email protected]>2026-02-24 09:28:40 +0530
commit311ae8c454bf912bda953902c96e854e566440e9 (patch)
tree64cf4444763fcf666c57088f04cfb2d5627df637
parent87923d9f8ca51327e5ac5589f10548c9e6e5992b (diff)
downloadakiba-311ae8c454bf912bda953902c96e854e566440e9.tar.xz
akiba-311ae8c454bf912bda953902c96e854e566440e9.zip
feat: Add Makefile and build configuration for AkibaOS with Docker support
-rw-r--r--Makefile141
-rw-r--r--build.zig113
-rw-r--r--build.zig.zon16
3 files changed, 270 insertions, 0 deletions
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..3934513
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,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" \ No newline at end of file
diff --git a/build.zig b/build.zig
new file mode 100644
index 0000000..d587a4b
--- /dev/null
+++ b/build.zig
@@ -0,0 +1,113 @@
+const std = @import("std");
+
+// ═══════════════════════════════════════════════════════════════════════════
+// AkibaOS Build System
+// ═══════════════════════════════════════════════════════════════════════════
+
+pub const version = "1.0.0";
+pub const kernel_location = "/system/akiba/mirai.kernel";
+pub const font_location = "/system/akiba/fonts/akiba.psf";
+
+pub fn build(b: *std.Build) void {
+ // ═══════════════════════════════════════════════════════════════════════
+ // Hikari Bootloader (UEFI)
+ // ═══════════════════════════════════════════════════════════════════════
+
+ const hikari_module = b.createModule(.{
+ .root_source_file = b.path("hikari/hikari.zig"),
+ .target = b.resolveTargetQuery(.{
+ .cpu_arch = .x86_64,
+ .os_tag = .uefi,
+ .abi = .msvc,
+ }),
+ .optimize = .ReleaseSafe,
+ });
+
+ const hikari = b.addExecutable(.{
+ .name = "hikari",
+ .root_module = hikari_module,
+ });
+
+ const hikari_copy = b.addInstallFile(
+ hikari.getEmittedBin(),
+ "EFI/BOOT/BOOTX64.EFI",
+ );
+ hikari_copy.step.dependOn(&hikari.step);
+
+ const hikari_step = b.step("hikari", "Build Hikari bootloader");
+ hikari_step.dependOn(&hikari_copy.step);
+
+ // ═══════════════════════════════════════════════════════════════════════
+ // Mirai Kernel
+ // ═══════════════════════════════════════════════════════════════════════
+
+ const mirai_module = b.createModule(.{
+ .root_source_file = b.path("mirai/kernel/mirai.zig"),
+ .target = b.resolveTargetQuery(.{
+ .cpu_arch = .x86_64,
+ .os_tag = .freestanding,
+ .abi = .none,
+ }),
+ .optimize = .ReleaseSafe,
+ .code_model = .kernel,
+ });
+
+ const mirai = b.addExecutable(.{
+ .name = "mirai",
+ .root_module = mirai_module,
+ });
+
+ mirai.entry = .{ .symbol_name = "mirai" };
+ mirai.setLinkerScript(b.path("linker/mirai.linker"));
+
+ const mirai_copy = b.addInstallFile(
+ mirai.getEmittedBin(),
+ "system/akiba/mirai.kernel",
+ );
+ mirai_copy.step.dependOn(&mirai.step);
+
+ const mirai_step = b.step("mirai", "Build Mirai kernel");
+ mirai_step.dependOn(&mirai_copy.step);
+
+ // ═══════════════════════════════════════════════════════════════════════
+ // mkafsdisk Tool
+ // ═══════════════════════════════════════════════════════════════════════
+
+ const native_target = b.standardTargetOptions(.{});
+ const native_optimize = b.standardOptimizeOption(.{});
+
+ const mkafsdisk_module = b.createModule(.{
+ .root_source_file = b.path("toolchain/mkafsdisk/main.zig"),
+ .target = native_target,
+ .optimize = native_optimize,
+ });
+
+ const mkafsdisk = b.addExecutable(.{
+ .name = "mkafsdisk",
+ .root_module = mkafsdisk_module,
+ });
+
+ const mkafsdisk_install = b.addInstallArtifact(mkafsdisk, .{});
+
+ const mkafsdisk_step = b.step("mkafsdisk", "Build mkafsdisk tool");
+ mkafsdisk_step.dependOn(&mkafsdisk_install.step);
+
+ // ═══════════════════════════════════════════════════════════════════════
+ // Default: Build All
+ // ═══════════════════════════════════════════════════════════════════════
+
+ const all_step = b.step("all", "Build everything");
+ all_step.dependOn(&hikari_copy.step);
+ all_step.dependOn(&mirai_copy.step);
+ all_step.dependOn(&mkafsdisk_install.step);
+
+ b.default_step = all_step;
+
+ // ═══════════════════════════════════════════════════════════════════════
+ // Clean Step
+ // ═══════════════════════════════════════════════════════════════════════
+
+ const clean_step = b.step("clean", "Remove build artifacts");
+ clean_step.dependOn(&b.addRemoveDirTree(b.path("zig-out")).step);
+ clean_step.dependOn(&b.addRemoveDirTree(b.path(".zig-cache")).step);
+}
diff --git a/build.zig.zon b/build.zig.zon
new file mode 100644
index 0000000..b309a37
--- /dev/null
+++ b/build.zig.zon
@@ -0,0 +1,16 @@
+.{
+ .name = .akiba,
+ .version = "1.0.0",
+ .fingerprint = 0xa42f71a68564f824,
+ .minimum_zig_version = "0.15.2",
+ .paths = .{
+ "build.zig",
+ "build.zig.zon",
+ "hikari",
+ "mirai",
+ "linker",
+ "toolchain",
+ "scripts",
+ "resources",
+ },
+}