bootstrap/Makefile

82 lines
2.2 KiB
Makefile

# ============================================================
# Configuration
# ============================================================
# To create a release build, run `make BUILD=release`.
BUILD := debug
PREFIX := ${CURDIR}/dist/${BUILD}
OUT := bootstrap
CCFLAGS.debug := -DDEBUG -g -Og
CCFLAGS.release := -DNDEBUG
LDFLAGS := -lm
# ============================================================
# Build
# ============================================================
COMPILE := ${CC} ${CCFLAGS.${BUILD}} -I include src/*.c main.c -o ${PREFIX}/${OUT} ${LDFLAGS}
all: build all.${BUILD}
all.debug: bear
all.release:
build: ${PREFIX}/${OUT}
${PREFIX}/${OUT}: ${PREFIX} include/*.h src/*.c
${COMPILE}
${PREFIX}:
mkdir -p $@
# ============================================================
# Compilation Database
#
# Generate a compilation database using [Bear](https://github.com/rizsotto/Bear).
# ============================================================
bear: compile_commands.json
compile_commands.json: include/*.h src/*.c main.c
# This file is only constructed in debug mode. If interested in expanding this
# generation to other build types, add a release-specific dependency.
ifeq ($(BUILD), debug)
mkdir -p dist/debug
bear -- ${COMPILE}
endif
# ============================================================
# Documentation.
#
# Generate documentation using [Doxygen](https://www.doxygen.nl/index.html).
# ============================================================
docs: docs/index.html
# The `index.html` file is regenerated on each invocation of `doxygen`.
docs/index.html: Doxyfile include/*.h src/*.c
doxygen
# ============================================================
# Testing.
#
# We use [Sput](https://www.use-strict.de/sput-unit-testing/) to run tests.
# ============================================================
test: dist/test/suites
dist/test/suites
dist/test/suites: include/*.h src/*.c test/*.h test/*.c
mkdir -p dist/test
${CC} ${CCFLAGS.debug} -I include src/*.c test/*.c -o dist/test/suites ${LDFLAGS}
# ============================================================
# Other
# ============================================================
clean:
rm -r ${PREFIX}
.PHONY: test