Files
nulsl-libc/Makefile
T
huntedbytheirsandSisyphus 228ed097f0 Add autotools build system (static-only, C17)
configure.ac enforces C17 and Linux/x86_64, refuses in-tree configure; Makefile.am builds libc.a plus crt0.o; the driver Makefile dispatches out-of-tree builds into bin/release (-O2) and bin/debug (-O0 -g).

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <[email protected]>
2026-08-30 04:09:45 -04:00

62 lines
1.9 KiB
Makefile

# Driver Makefile — nulsl-libc
#
# This is the HAND-WRITTEN top-level makefile (committed to git). It never
# runs the autotools machinery in-tree; instead it drives two out-of-tree
# builds, one per bin/ directory, exactly as the Null Linux guidelines want:
#
# make release -> ./configure CFLAGS='-O2' into bin/release/
# make debug -> ./configure CFLAGS='-O0 -g' into bin/debug/
#
# Run `./autogen.sh` once after cloning (or just run `make release` — it
# regenerates the configure script itself when needed).
#
# Never run `./configure` at the repository root: configure.ac refuses it.
.PHONY: all release debug bench check clean distclean compile_commands
all: release
# --- bootstrapping ---------------------------------------------------------
# Regenerates configure (and friends) when autogen.sh is newer.
configure: autogen.sh
./autogen.sh
# --- builds ----------------------------------------------------------------
# Release is ALWAYS -O2 (project guideline #4).
bin/release/Makefile: configure
@mkdir -p bin/release
@cd bin/release && ../../configure CFLAGS='-O2'
bin/debug/Makefile: configure
@mkdir -p bin/debug
@cd bin/debug && ../../configure CFLAGS='-O0 -g'
release: bin/release/Makefile
$(MAKE) -C bin/release
debug: bin/debug/Makefile
$(MAKE) -C bin/debug
# --- developer conveniences -------------------------------------------------
bench: release
$(MAKE) -C bin/release bench
check: release
$(MAKE) -C bin/release check
# LSP support: compile_commands.json for clangd (requires `bear`).
compile_commands: release
@command -v bear >/dev/null 2>&1 || { \
echo "error: 'bear' is not installed (sudo pacman -S bear, apt install bear, ...)"; exit 1; }
@cd bin/release && bear --output ../../compile_commands.json -- $(MAKE) clean all
clean:
@test ! -f bin/release/Makefile || $(MAKE) -C bin/release clean
@test ! -f bin/debug/Makefile || $(MAKE) -C bin/debug clean
distclean: clean
rm -rf bin/release bin/debug