# ============================================================
# VMP Makefile
# make all C stub Go build/
# make stub VM blob
# make packer Go packer make stub
# make demo demo
# make test Go
# make clean
# ============================================================
#
CROSS ?= aarch64-linux-gnu-
CC = $(CROSS)gcc
LD = $(CROSS)ld
OBJCOPY = $(CROSS)objcopy
GO = go
#
STUB_DIR = stub/linux/arm64
CMD_DIR = cmd/vmpacker
DEMO_DIR = demo
BUILD_DIR = build
# ------ VM blob ------
STUB_SRC = $(STUB_DIR)/vm_interp.c
STUB_LDS = $(STUB_DIR)/vm_interp.lds
STUB_O = $(BUILD_DIR)/stub/vm_interp.o
STUB_ELF = $(BUILD_DIR)/stub/vm_interp.elf
STUB_BIN = $(CMD_DIR)/vm_interp.bin
# ------ Go packer ------
PACKER = $(BUILD_DIR)/vmpacker.exe
# ------ Demo ------
DEMO_LICENSE = $(BUILD_DIR)/demo_license
DEMO_SIMPLE = $(BUILD_DIR)/demo_simple
# ( -mcmodel=tiny -fPIC)
STUB_CFLAGS = -c -Os -mcmodel=tiny -fno-stack-protector \
-fno-builtin -nostdlib -march=armv8-a \
-DVM_INDIRECT_DISPATCH -DVM_FUNC_SPLIT -DVM_TOKEN_ENTRY
DEMO_CFLAGS = -static -O0 -march=armv8-a
# ============================================================
.PHONY: all stub packer demo test clean help gui sync-public
all: stub packer
@echo ""
@echo "[+] Build complete: $(BUILD_DIR)/"
# ------ VM blob ------
stub: $(STUB_BIN)
$(STUB_O): $(STUB_SRC) | $(BUILD_DIR)/stub
$(CC) $(STUB_CFLAGS) $< -o $@
$(STUB_ELF): $(STUB_O) $(STUB_LDS)
$(LD) -T $(STUB_LDS) -o $@ $(STUB_O)
$(STUB_BIN): $(STUB_ELF) | $(BUILD_DIR)
$(OBJCOPY) -O binary $< $(BUILD_DIR)/vm_interp_raw.bin
@powershell -Command "\
$$nmOut = & '$(CROSS)nm' '$