summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--GNUmakefile39
-rw-r--r--prelude.mk13
2 files changed, 52 insertions, 0 deletions
diff --git a/GNUmakefile b/GNUmakefile
new file mode 100644
index 0000000..1279cf2
--- /dev/null
+++ b/GNUmakefile
@@ -0,0 +1,39 @@
+# Settings
+include prelude.mk
+-include local.mk
+
+RM_F = rm -f
+RM_RF = rm -rf
+
+ZIG = zig
+
+
+# Main targets
+.PHONY: all debug release watch run release format clean
+
+all: debug release ## Check codebase and compile in debug mode
+
+debug: ## Compile program in debug mode
+ @$(ZIG) build
+ @echo "[ZIG] zig-out"
+
+watch: ## Watch and compile program in debug mode
+ @$(ZIG) build --watch
+
+run: ## Compile and run program in debug mode
+ @$(ZIG) build run
+
+release: ## Compile program in release mode
+ @for target in aarch64-linux-gnu aarch64-macos-none arm-linux-gnueabihf x86_64-linux-gnux32 x86_64-windows; do \
+ echo "[ZIG] zig-release/$${target}"; \
+ $(ZIG) build -p zig-release/$${target} -Dtarget=$${target} --release=small; \
+ done
+
+SRCS = build.zig $(shell find src -name \*.zig)
+format: ## Format source files
+ @echo "[FMT] $(SRCS)"
+ @find . -name \*.zig -exec '$(ZIG)' 'fmt' '{}' ';'
+
+clean: ## Remove build files
+ @echo "[CLEAN] zig-out zig-release"
+ @$(RM_RF) -- zig-out zig-release
diff --git a/prelude.mk b/prelude.mk
new file mode 100644
index 0000000..0964bfe
--- /dev/null
+++ b/prelude.mk
@@ -0,0 +1,13 @@
+# Settings: Shell
+SHELL = bash
+.SHELLFLAGS = -eu -o pipefail -c
+
+# Settings: Make
+.SECONDEXPANSION:
+.DELETE_ON_ERROR:
+MAKEFLAGS += --warn-undefined-variables
+MAKEFLAGS += --no-builtin-rules
+
+# Special targets
+.PHONY: .REBUILD_ALWAYS
+.REBUILD_ALWAYS: