67 lines
2.2 KiB
Makefile
67 lines
2.2 KiB
Makefile
PROJECT := agila-open-kernel
|
|
BUILD := build
|
|
OBJ := $(BUILD)/obj
|
|
BIN := $(BUILD)/bin
|
|
GPRBUILD := gprbuild
|
|
GPRCLEAN := gprclean
|
|
|
|
.PHONY: all clean rebuild run help
|
|
|
|
all:
|
|
mkdir -p $(OBJ) $(BIN)
|
|
$(GPRBUILD) -P kernel.gpr
|
|
|
|
clean:
|
|
$(GPRCLEAN) -P kernel.gpr || true
|
|
rm -rf $(BUILD)
|
|
|
|
rebuild: clean all
|
|
|
|
run: all
|
|
$(BIN)/main
|
|
|
|
help:
|
|
@echo "Agila Open Kernel"
|
|
@echo "make Build the host prototype"
|
|
@echo "make run Build and run the host prototype"
|
|
@echo "make clean Remove build output"
|
|
@echo "make rebuild Clean and rebuild"
|
|
@echo "make test Ada port, C ABI, and V client checks"
|
|
@echo "make boot-test Build ISO and verify x86-64 QEMU boot"
|
|
|
|
V ?= v
|
|
CC ?= cc
|
|
|
|
.PHONY: test host-library v-demo
|
|
|
|
host-library:
|
|
$(GPRBUILD) -p -P host_library.gpr
|
|
|
|
v-demo: host-library
|
|
mkdir -p $(BIN) $(BUILD)/vmodules $(BUILD)/vtmp
|
|
VMODULES="$(CURDIR)/$(BUILD)/vmodules" VTMP="$(CURDIR)/$(BUILD)/vtmp" $(V) -cc gcc -gc none -o $(BIN)/agila_port_client examples/v_port_client/main.v
|
|
|
|
$(BIN)/abi_test: tests/abi_test.c include/agila_ports.h host-library
|
|
$(CC) -std=c17 -Wall -Wextra -Werror -Iinclude tests/abi_test.c -Lbuild/lib -lagila_host -o $@
|
|
|
|
test: all host-library v-demo $(BIN)/abi_test
|
|
$(GPRBUILD) -p -P ports.gpr
|
|
$(BIN)/ports_test
|
|
LD_LIBRARY_PATH="$(CURDIR)/build/lib:$${LD_LIBRARY_PATH:-}" $(BIN)/abi_test
|
|
LD_LIBRARY_PATH="$(CURDIR)/build/lib:$${LD_LIBRARY_PATH:-}" $(BIN)/agila_port_client
|
|
|
|
BOOT_FLAGS := -O2 -fno-pie -fno-stack-protector -mno-red-zone -mgeneral-regs-only -fno-asynchronous-unwind-tables
|
|
.PHONY: boot boot-test
|
|
boot:
|
|
mkdir -p build/boot build/iso/boot/grub
|
|
gcc $(BOOT_FLAGS) -c boot/start.S -o build/boot/start.o
|
|
gcc $(BOOT_FLAGS) -ffreestanding -fno-builtin -c boot/memory.c -o build/boot/memory.o
|
|
gnatmake -c -D build/boot -Icore -gnat2022 -gnatp $(BOOT_FLAGS) boot/boot_main.adb
|
|
ld -nostdlib -z max-page-size=0x1000 -T boot/linker.ld -o build/open-agila.elf build/boot/start.o build/boot/boot_main.o build/boot/agila_ports.o build/boot/memory.o
|
|
grub-file --is-x86-multiboot build/open-agila.elf
|
|
cp build/open-agila.elf build/iso/boot/
|
|
cp boot/grub.cfg build/iso/boot/grub/grub.cfg
|
|
grub-mkrescue -d /usr/lib/grub/i386-pc -o build/open-agila.iso build/iso
|
|
boot-test: boot
|
|
python3 scripts/boot-smoke.py
|