From 311ae8c454bf912bda953902c96e854e566440e9 Mon Sep 17 00:00:00 2001 From: Bobby Date: Tue, 24 Feb 2026 09:28:40 +0530 Subject: feat: Add Makefile and build configuration for AkibaOS with Docker support --- Makefile | 141 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ build.zig | 113 ++++++++++++++++++++++++++++++++++++++++++++++ build.zig.zon | 16 +++++++ 3 files changed, 270 insertions(+) create mode 100644 Makefile create mode 100644 build.zig create mode 100644 build.zig.zon 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", + }, +} -- cgit v1.2.3