Files
2026-07-09 18:07:30 +01:00

111 lines
4.2 KiB
Makefile

CC = gcc
CFLAGS = -Wall -Wextra -std=c11 -O2 -D_GNU_SOURCE
LDFLAGS = -lm
BUILDDIR = build
# Source files
VM_SRCS = src/vm/vm.c src/vm/vm_main.c src/substrate/substrate_engine.c
AS_SRCS = src/assembler/assembler.c src/assembler/as_main.c
DISAS_SRCS = src/disassembler/disas.c
KERNEL_SRCS = src/kernel/kernel.c src/kernel/kernel_main.c src/hal/hal.c src/hal/hal_cpu.c src/substrate/substrate_engine.c
NODE_SRCS = src/glyph/node_main.c src/glyph/glyph_defs.c src/glyph/graph.c src/glyph/resonance.c src/glyph/evaluator.c src/glyph/compiler.c
NET_SRCS = src/glyph/net_main.c src/glyph/network.c src/glyph/glyphbus.c src/glyph/glyph_defs.c src/glyph/graph.c src/glyph/resonance.c src/glyph/evaluator.c src/glyph/compiler.c
# Include paths
INCLUDES = -Isrc/common -Isrc -Isrc/glyph
# Targets
TARGETS = $(BUILDDIR)/glyph-vm $(BUILDDIR)/glyph-as $(BUILDDIR)/glyph-disas $(BUILDDIR)/glyph-kernel $(BUILDDIR)/glyph-node $(BUILDDIR)/glyph-net
.PHONY: all clean test examples
all: $(BUILDDIR) $(TARGETS)
@echo ""
@echo "=== GlyphOS Build Complete ==="
@echo " $(BUILDDIR)/glyph-vm - Glyph Virtual Machine (standalone)"
@echo " $(BUILDDIR)/glyph-kernel - GlyphOS Kernel (multi-GVM + HAL)"
@echo " $(BUILDDIR)/glyph-as - Glyph Assembler"
@echo " $(BUILDDIR)/glyph-disas - Glyph Disassembler"
@echo " $(BUILDDIR)/glyph-node - Substrate Node (symbolic evaluator)"
@echo " $(BUILDDIR)/glyph-net - Substrate Network (symbolic protocol)"
@echo ""
$(BUILDDIR):
mkdir -p $(BUILDDIR)
$(BUILDDIR)/glyph-vm: $(VM_SRCS)
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ $(LDFLAGS)
$(BUILDDIR)/glyph-kernel: $(KERNEL_SRCS)
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ $(LDFLAGS)
$(BUILDDIR)/glyph-as: $(AS_SRCS)
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ $(LDFLAGS)
$(BUILDDIR)/glyph-disas: $(DISAS_SRCS)
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ $(LDFLAGS)
$(BUILDDIR)/glyph-node: $(NODE_SRCS)
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ $(LDFLAGS)
$(BUILDDIR)/glyph-net: $(NET_SRCS)
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ $(LDFLAGS)
$(BUILDDIR)/glyph-bench: src/glyph/benchmark.c src/glyph/glyph_defs.c src/glyph/graph.c src/glyph/resonance.c src/glyph/evaluator.c src/glyph/compiler.c
$(CC) $(CFLAGS) $(INCLUDES) -o $@ $^ $(LDFLAGS)
# Build and run the hello world example
examples: all
$(BUILDDIR)/glyph-as examples/hello.gasm -o $(BUILDDIR)/hello.gobj
$(BUILDDIR)/glyph-disas $(BUILDDIR)/hello.gobj
@echo ""
@echo "--- Running hello.gobj (standalone VM) ---"
$(BUILDDIR)/glyph-vm -t -d $(BUILDDIR)/hello.gobj
@echo ""
@echo "--- Running hello.gobj (kernel) ---"
$(BUILDDIR)/glyph-kernel -t $(BUILDDIR)/hello.gobj
# Build and run the substrate demo
substrate-demo: all
$(BUILDDIR)/glyph-as examples/substrate_demo.gasm -o $(BUILDDIR)/substrate_demo.gobj
@echo ""
@echo "--- Running substrate_demo.gobj (standalone VM) ---"
$(BUILDDIR)/glyph-vm -t -d $(BUILDDIR)/substrate_demo.gobj
@echo ""
@echo "--- Running substrate_demo.gobj (kernel) ---"
$(BUILDDIR)/glyph-kernel -t $(BUILDDIR)/substrate_demo.gobj
# Run multiple GVMs through the kernel
multi-gvm: all
$(BUILDDIR)/glyph-as examples/hello.gasm -o $(BUILDDIR)/hello.gobj
$(BUILDDIR)/glyph-as examples/substrate_demo.gasm -o $(BUILDDIR)/substrate_demo.gobj
@echo ""
@echo "--- Running 2 GVMs through kernel (round-robin) ---"
$(BUILDDIR)/glyph-kernel -t -p 0 $(BUILDDIR)/hello.gobj $(BUILDDIR)/substrate_demo.gobj
@echo ""
@echo "--- Running 2 GVMs through kernel (resonance) ---"
$(BUILDDIR)/glyph-kernel -t -p 2 $(BUILDDIR)/hello.gobj $(BUILDDIR)/substrate_demo.gobj
clean:
rm -rf $(BUILDDIR)
# Substrate node demos
node-demo: all
@echo ""
@echo "--- Substrate Node: Built-in Demo ---"
$(BUILDDIR)/glyph-node demo --trace
@echo ""
@echo "--- Substrate Node: Compile and evaluate add.glyph ---"
$(BUILDDIR)/glyph-node run examples/add.glyph --trace
@echo ""
@echo "--- Substrate Node: Compile and evaluate resonance_demo.glyph ---"
$(BUILDDIR)/glyph-node run examples/resonance_demo.glyph --trace
# List all 64 symbolic glyph definitions
glyphs: all
$(BUILDDIR)/glyph-node glyphs
test: examples substrate-demo
@echo ""
@echo "=== All tests passed ==="