Antelope
A ground-up replacement for GNU Make and GNU Autotools, written in D.
Antelope offers direct, high-fidelity compatibility with existing Makefiles while providing a modern, fast, and correct build system. It targets 99th-percentile GNU Make compatibility — every quirk, feature, and bug that real-world Makefiles depend on is catalogued and emulated.
Why Antelope?
- Compatibility first — runs real-world Makefiles, especially those generated by GNU Autotools. This is the #1 design constraint.
- Single binary — no m4, no shell scripts, no generated intermediates.
One
antelopebinary replacesmake,autoconf,automake, andlibtool. - Correctness — DAG-accurate dependency resolution with no spurious rebuilds. Timestamp comparison is monotonic and race-condition safe.
- Performance — compiled D binary with parallel scheduling, lazy evaluation, and microsecond startup times.
- Two modes, cleanly separated — native mode is explicit by design; GNU
compatibility is activated via a single
-gnuflag.
Quick Start
Building
# Development build (fast compile, slower runtime)
dub build
# Release build (slower compile, fast runtime)
dub build --compiler=ldc2
# Run tests
dub test
# Run with full GNU Make compatibility
dub run -- -gnu
# Run a specific Makefile
dub run -- -gnu -f MyMakefile target1 target2
CLI Usage
antelope <subcommand> <options> --[flags]
| Command | Description |
|---|---|
antelope |
Run the build (default subcommand) |
antelope build |
Explicit build invocation |
antelope hunt |
Intelligent Makefile → Antefile converter (late-stage) |
antelope configure |
Autotools configure.ac replacement (future) |
| Flag | Description |
|---|---|
-gnu |
Enable full GNU Make compatibility mode |
-f <path> |
Specify a build file |
-j <N> |
Run N jobs in parallel |
-n |
Dry run (print commands without executing) |
-C <dir> |
Change to directory before reading build files |
-d |
Debug output |
-P |
POSIX conformance mode |
Two Modes
Native Mode (default)
Antelope's native mode is explicit by design — no implicit rules, no automatic
variables, no magic. The build file is an antefile or antelope file.
# antefile — explicit, predictable, debuggable
hello: hello.o
gcc -o hello hello.o
hello.o: hello.c
gcc -c hello.c
GNU Mode (-gnu)
Pass -gnu and Antelope becomes GNU Make — Makefile / makefile reading,
implicit rules, automatic variables ($@, $<, $^), VPATH, pattern rules,
conditionals, and the entire GNU Make compatibility surface.
antelope -gnu -j8 # Run Makefile with 8 parallel jobs
Architecture
Antelope is organized into clean layers:
| Layer | Purpose |
|---|---|
| CLI | Subcommand dispatch, argument parsing, help output |
| Parser | Lexer → recursive-descent parser → AST |
| Evaluator | AST walking, variable expansion, conditionals, built-in functions |
| Build | Dependency graph, topological scheduling, recipe execution |
| Shell | Command parsing, environment management, subprocess execution |
| Filesystem | Globbing, timestamp comparison, path resolution |
| Compatibility | GNU Make feature emulation (13 modules) |
| Diagnostics | Structured errors, warnings, log-level output |
See docs/architecture.md for the full design.
GNU Make Compatibility
Antelope targets GNU Make versions 3.81 through 4.4 with feature-complete emulation of:
- Automatic variables (
$@,$<,$^,$*,$?,$%,$+,$|) - ~30 built-in implicit rules (C, C++, Fortran, lex, yacc, archive management)
- Pattern rules (
%.o: %.c) and suffix rules (.c.o:) - VPATH / vpath directory search
- Target-specific and pattern-specific variable assignments
- Order-only prerequisites (
|separator) - Secondary expansion (
.SECONDEXPANSION) - Include directives with makefile remaking and restart
- Recursive
$(MAKE)with MAKEFLAGS propagation and jobserver protocol - Parallel execution (
-jN,.NOTPARALLEL,.WAIT,.JOBS) - Conditionals (
ifeq/ifneq/ifdef/ifndef) - Functions (
$(shell ...),$(wildcard ...),$(patsubst ...), etc.) - All documented behavioral quirks and edge cases
See docs/compatibility.md for the full compatibility matrix.
Project Status
Phase: Early scaffolding. Stub modules with type definitions and structural skeleton. Core implementation (lexer, parser, evaluator, build engine) is the active development focus.
Documentation
- Architecture — system design and key decisions
- Compatibility — GNU Make feature coverage
- Manual — user guide and reference
- Contributing — how to contribute
License
BSD 3-Clause. See LICENSE for the full text.