Files
antelope/README.md
T
2026-07-28 22:17:49 -04:00

5.0 KiB

Antelope

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 antelope binary replaces make, autoconf, automake, and libtool.
  • 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 -gnu flag.

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

License

BSD 3-Clause. See LICENSE for the full text.