meta-magic_mount/src/Makefile
2025-11-25 00:44:28 +08:00

86 lines
2 KiB
Makefile

PROJECT = magic_mount
VERSION ?= v0.2.0
# use zig cc
CC := zig cc
STRIPPER := strip
# source files
SRCS := utils.c ksu.c module_tree.c magic_mount.c main.c
# output directory
OUTDIR := bin
# common flags
CFLAGS_COMMON := -std=c23 -D_POSIX_C_SOURCE=200809L -Wl,--gc-sections -static -Wpedantic -Werror
CFLAGS_COMMON += -DVERSION=\"$(VERSION)\"
LDFLAGS_COMMON := -static
# build mode specific flags
CFLAGS_RELEASE := -Oz -s -DNDEBUG
CFLAGS_DEBUG := -O0 -g -DDEBUG
# zig target triples
TARGET_AMD64 ?= x86_64-linux
TARGET_ARM64 ?= aarch64-linux
TARGET_ARMV7 ?= arm-linux
# output binary names
BIN_AMD64 := $(OUTDIR)/mm_amd64
BIN_ARM64 := $(OUTDIR)/mm_arm64
BIN_ARMV7 := $(OUTDIR)/mm_armv7
BINS := $(BIN_AMD64) $(BIN_ARM64) $(BIN_ARMV7)
.PHONY: all clean release debug amd64 arm64 armv7 dirs help strip-bins
# default target
all: release
help:
@echo "Usage:"
@echo " make release [version=X.Y.Z] - Build release version (optimized, stripped)"
@echo " make debug [version=X.Y.Z] - Build debug version (with symbols)"
@echo " make clean - Clean build artifacts"
@echo ""
@echo "Individual targets:"
@echo " make amd64 - Build for x86_64"
@echo " make arm64 - Build for aarch64"
@echo " make armv7 - Build for armv7"
dirs:
mkdir -p $(OUTDIR)
# Release build (default)
release: export CFLAGS := $(CFLAGS_COMMON) $(CFLAGS_RELEASE)
release: dirs $(BINS) strip-bins
@echo "Release build completed: $(VERSION)"
# Debug build
debug: export CFLAGS := $(CFLAGS_COMMON) $(CFLAGS_DEBUG)
debug: dirs $(BINS)
@echo "Debug build completed: $(VERSION)"
strip-bins:
@echo "Stripping binaries..."
@for bin in $(BINS); do \
echo " Stripping $$bin"; \
$(STRIPPER) $$bin; \
done
amd64: $(BIN_AMD64)
arm64: $(BIN_ARM64)
armv7: $(BIN_ARMV7)
$(BIN_AMD64): $(SRCS)
$(CC) -target $(TARGET_AMD64) $(CFLAGS) $^ -o $@ $(LDFLAGS_COMMON)
$(BIN_ARM64): $(SRCS)
$(CC) -target $(TARGET_ARM64) $(CFLAGS) $^ -o $@ $(LDFLAGS_COMMON)
$(BIN_ARMV7): $(SRCS)
$(CC) -target $(TARGET_ARMV7) $(CFLAGS) $^ -o $@ $(LDFLAGS_COMMON)
clean:
rm -rf $(OUTDIR)