make: Adopted upstream Makefile changes

Mainly formatting/comment things, but also a couple tweaks:

- Changed BUILDDIR mkdir hack to infer directories from SRC, TESTS,
  TEST_SRC, etc

  Avoids a hardcoded list of build directories.

- Added $(BUILDDIR)/%.c -> $(BUILDDIR)/%.{o,ci,s} rules

  Without these, make doesn't know how to build .o files that depend on
  generated .c files (.t.c, .b.c, .a.c, etc) when using an external
  BUILDDIR.
This commit is contained in:
Christopher Haster
2025-05-15 13:32:49 -05:00
parent 9f2f0b92e9
commit eba1e44c66
+32 -20
View File
@@ -1,22 +1,13 @@
ifdef BUILDDIR # overrideable build dir, default is in-place
# bit of a hack, but we want to make sure BUILDDIR directory structure
# is correct before any commands
$(if $(findstring n,$(MAKEFLAGS)),, $(shell mkdir -p \
$(BUILDDIR)/ \
$(BUILDDIR)/bd \
$(BUILDDIR)/runners \
$(BUILDDIR)/tests \
$(BUILDDIR)/benches))
endif
BUILDDIR ?= . BUILDDIR ?= .
# overrideable target, default to building a library
# default to building a library
ifneq ($(wildcard test.c main.c),) ifneq ($(wildcard test.c main.c),)
TARGET ?= $(BUILDDIR)/lfs TARGET ?= $(BUILDDIR)/lfs
else else
TARGET ?= $(BUILDDIR)/liblfs.a TARGET ?= $(BUILDDIR)/liblfs.a
endif endif
# find source files # find source files
SRC ?= $(filter-out $(wildcard *.t.* *.b.*),$(wildcard *.c)) SRC ?= $(filter-out $(wildcard *.t.* *.b.*),$(wildcard *.c))
OBJ := $(SRC:%.c=$(BUILDDIR)/%.o) OBJ := $(SRC:%.c=$(BUILDDIR)/%.o)
@@ -26,11 +17,13 @@ CI := $(SRC:%.c=$(BUILDDIR)/%.ci)
GCDA := $(SRC:%.c=$(BUILDDIR)/%.t.a.gcda) GCDA := $(SRC:%.c=$(BUILDDIR)/%.t.a.gcda)
TESTS ?= $(wildcard tests/*.toml) TESTS ?= $(wildcard tests/*.toml)
TEST_SRC ?= $(SRC) \ TEST_SRC ?= \
$(SRC) \
$(filter-out $(wildcard bd/*.t.* bd/*.b.*),$(wildcard bd/*.c)) \ $(filter-out $(wildcard bd/*.t.* bd/*.b.*),$(wildcard bd/*.c)) \
runners/test_runner.c runners/test_runner.c
TEST_RUNNER ?= $(BUILDDIR)/runners/test_runner TEST_RUNNER ?= $(BUILDDIR)/runners/test_runner
TEST_C := $(TESTS:%.toml=$(BUILDDIR)/%.t.c) \ TEST_C := \
$(TESTS:%.toml=$(BUILDDIR)/%.t.c) \
$(TEST_SRC:%.c=$(BUILDDIR)/%.t.c) $(TEST_SRC:%.c=$(BUILDDIR)/%.t.c)
TEST_A := $(TEST_C:%.t.c=%.t.a.c) TEST_A := $(TEST_C:%.t.c=%.t.a.c)
TEST_OBJ := $(TEST_A:%.t.a.c=%.t.a.o) TEST_OBJ := $(TEST_A:%.t.a.c=%.t.a.o)
@@ -43,11 +36,13 @@ TEST_TRACE := $(TEST_RUNNER:%=%.trace)
TEST_CSV := $(TEST_RUNNER:%=%.csv) TEST_CSV := $(TEST_RUNNER:%=%.csv)
BENCHES ?= $(wildcard benches/*.toml) BENCHES ?= $(wildcard benches/*.toml)
BENCH_SRC ?= $(SRC) \ BENCH_SRC ?= \
$(SRC) \
$(filter-out $(wildcard bd/*.t.* bd/*.b.*),$(wildcard bd/*.c)) \ $(filter-out $(wildcard bd/*.t.* bd/*.b.*),$(wildcard bd/*.c)) \
runners/bench_runner.c runners/bench_runner.c
BENCH_RUNNER ?= $(BUILDDIR)/runners/bench_runner BENCH_RUNNER ?= $(BUILDDIR)/runners/bench_runner
BENCH_C := $(BENCHES:%.toml=$(BUILDDIR)/%.b.c) \ BENCH_C := \
$(BENCHES:%.toml=$(BUILDDIR)/%.b.c) \
$(BENCH_SRC:%.c=$(BUILDDIR)/%.b.c) $(BENCH_SRC:%.c=$(BUILDDIR)/%.b.c)
BENCH_A := $(BENCH_C:%.b.c=%.b.a.c) BENCH_A := $(BENCH_C:%.b.c=%.b.a.c)
BENCH_OBJ := $(BENCH_A:%.b.a.c=%.b.a.o) BENCH_OBJ := $(BENCH_A:%.b.a.c=%.b.a.o)
@@ -142,13 +137,11 @@ TESTFLAGS += -p$(TEST_PERF)
BENCHFLAGS += -p$(BENCH_PERF) BENCHFLAGS += -p$(BENCH_PERF)
endif endif
ifdef PERFBDGEN ifdef PERFBDGEN
TESTFLAGS += -t$(TEST_TRACE) --trace-backtrace --trace-freq=100 TESTFLAGS += -t$(TEST_TRACE) --trace-backtrace --trace-freq=100
endif
ifdef PERFBDGEN
BENCHFLAGS += -t$(BENCH_TRACE) --trace-backtrace --trace-freq=100 BENCHFLAGS += -t$(BENCH_TRACE) --trace-backtrace --trace-freq=100
endif endif
ifdef TESTMARKS ifdef TESTMARKS
TESTFLAGS += -o$(TEST_CSV) TESTFLAGS += -o$(TEST_CSV)
endif endif
ifdef BENCHMARKS ifdef BENCHMARKS
BENCHFLAGS += -o$(BENCH_CSV) BENCHFLAGS += -o$(BENCH_CSV)
@@ -176,6 +169,19 @@ TESTFLAGS += --perf-path="$(PERF)"
BENCHFLAGS += --perf-path="$(PERF)" BENCHFLAGS += --perf-path="$(PERF)"
endif endif
# this is a bit of a hack, but we want to make sure the BUILDDIR
# directory structure is correct before we run any commands
ifneq ($(BUILDDIR),.)
$(if $(findstring n,$(MAKEFLAGS)),, $(shell mkdir -p \
$(BUILDDIR) \
$(addprefix $(BUILDDIR)/,$(dir \
$(SRC) \
$(TESTS) \
$(TEST_SRC) \
$(BENCHES) \
$(BENCH_SRC)))))
endif
# top-level commands # top-level commands
@@ -627,9 +633,15 @@ $(BUILDDIR)/runners/bench_runner: $(BENCH_OBJ)
$(BUILDDIR)/%.o $(BUILDDIR)/%.ci: %.c $(BUILDDIR)/%.o $(BUILDDIR)/%.ci: %.c
$(CC) -c -MMD $(CFLAGS) $< -o $(BUILDDIR)/$*.o $(CC) -c -MMD $(CFLAGS) $< -o $(BUILDDIR)/$*.o
$(BUILDDIR)/%.o $(BUILDDIR)/%.ci: $(BUILDDIR)/%.c
$(CC) -c -MMD $(CFLAGS) $< -o $(BUILDDIR)/$*.o
$(BUILDDIR)/%.s: %.c $(BUILDDIR)/%.s: %.c
$(CC) -S $(CFLAGS) $< -o$@ $(CC) -S $(CFLAGS) $< -o$@
$(BUILDDIR)/%.s: $(BUILDDIR)/%.c
$(CC) -S $(CFLAGS) $< -o$@
$(BUILDDIR)/%.a.c: %.c $(BUILDDIR)/%.a.c: %.c
$(PRETTYASSERTS) -Plfs_ $< -o$@ $(PRETTYASSERTS) -Plfs_ $< -o$@