From aa8d42ea2c5be89347db8bd3134f281d12da9797 Mon Sep 17 00:00:00 2001 From: Or Hayat Date: Mon, 2 Nov 2026 15:50:15 +0200 Subject: [PATCH 1/3] DAOS-19906 build: keep libraft.a and tests_main between builds The static and tests_main targets now name the files they build and tests_main compiles each file to its own object, so make skips what is up to date, and SConscript marks both Precious so scons no longer deletes them before running make. Signed-off-by: Or Hayat --- Makefile | 36 +++++++++++++++++++++++++++++------- src/SConscript | 1 + 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/Makefile b/Makefile index 951abfa5..72cb60a8 100755 --- a/Makefile +++ b/Makefile @@ -1,7 +1,6 @@ CONTRIB_DIR = contrib -TEST_DIR = ./tests +TEST_DIR = tests LLQUEUE_DIR = $(CONTRIB_DIR)/CLinkedListQueue -VPATH = src BUILDDIR ?= . GCOV_OUTPUT = $(BUILDDIR)/*.gcda $(BUILDDIR)/*.gcno $(BUILDDIR)/*.gcov @@ -33,7 +32,7 @@ all: static shared $(BUILDDIR): mkdir -p $@ -$(BUILDDIR)/%.o: %.c $(wildcard include/*.h) | $(BUILDDIR) +$(BUILDDIR)/%.o: src/%.c $(wildcard include/*.h) | $(BUILDDIR) $(CC) $(CFLAGS) -c -o $@ $< $(TEST_DIR)/main_test.c: $(TEST_DIR)/test_*.c @@ -44,12 +43,35 @@ shared: $(OBJECTS) $(CC) $(OBJECTS) $(LDFLAGS) $(CFLAGS) -fPIC $(SHAREDFLAGS) -o $(BUILDDIR)/libraft.$(SHAREDEXT) .PHONY: static -static: $(OBJECTS) - ar -r $(BUILDDIR)/libraft.a $(OBJECTS) +static: $(BUILDDIR)/libraft.a +$(BUILDDIR)/libraft.a: $(OBJECTS) + ar -r $@ $(OBJECTS) -tests_main: src/raft_server.c src/raft_server_properties.c src/raft_log.c src/raft_node.c $(TEST_DIR)/main_test.c $(TEST_DIR)/test_*.c $(TEST_DIR)/mock_send_functions.c $(TEST_DIR)/CuTest.c $(LLQUEUE_DIR)/linked_list_queue.c - $(CC) $(CFLAGS) -o $(BUILDDIR)/$@ $^ + +TEST_SRCS = src/raft_server.c src/raft_server_properties.c src/raft_log.c src/raft_node.c \ + $(TEST_DIR)/main_test.c $(wildcard $(TEST_DIR)/test_*.c) \ + $(TEST_DIR)/mock_send_functions.c $(TEST_DIR)/CuTest.c $(LLQUEUE_DIR)/linked_list_queue.c +TEST_OBJS = $(addprefix $(BUILDDIR)/test-,$(notdir $(TEST_SRCS:.c=.o))) +HEADERS = $(wildcard include/*.h $(TEST_DIR)/*.h $(LLQUEUE_DIR)/*.h) + +# With BUILDDIR=. the file itself is tests_main, so the alias would point at itself +ifneq ($(BUILDDIR),.) +.PHONY: tests_main +tests_main: $(BUILDDIR)/tests_main +endif + +$(BUILDDIR)/test-%.o: src/%.c $(HEADERS) $(MAKEFILE_LIST) | $(BUILDDIR) + $(CC) $(CFLAGS) -c -o $@ $< + +$(BUILDDIR)/test-%.o: $(TEST_DIR)/%.c $(HEADERS) $(MAKEFILE_LIST) | $(BUILDDIR) + $(CC) $(CFLAGS) -c -o $@ $< + +$(BUILDDIR)/test-%.o: $(LLQUEUE_DIR)/%.c $(HEADERS) $(MAKEFILE_LIST) | $(BUILDDIR) + $(CC) $(CFLAGS) -c -o $@ $< + +$(BUILDDIR)/tests_main: $(TEST_OBJS) + $(CC) $(CFLAGS) -o $@ $(TEST_OBJS) .PHONY: tests tests: tests_main diff --git a/src/SConscript b/src/SConscript index e40f8b93..b25c97f4 100644 --- a/src/SConscript +++ b/src/SConscript @@ -9,6 +9,7 @@ test_main = env.Command('tests_main', libraft, 'make -C src/rdb/raft/ BUILDDIR=% # make to build them will bail out if they don't actually need rebuilding AlwaysBuild(libraft) AlwaysBuild(test_main) +Precious(libraft, test_main) def CleanAction(env, action): if env.GetOption('clean'): From c5a344ada455c3339b26747630980b1a8ea9586f Mon Sep 17 00:00:00 2001 From: Or Hayat Date: Wed, 4 Nov 2026 14:29:58 +0200 Subject: [PATCH 2/3] DAOS-19906 build: keep test objects under a test directory Build test objects under $(BUILDDIR)/test/ with one pattern rule, and remove libraft.a before recreating it. Signed-off-by: Or Hayat --- Makefile | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 72cb60a8..cbeb9ab2 100755 --- a/Makefile +++ b/Makefile @@ -46,13 +46,14 @@ shared: $(OBJECTS) static: $(BUILDDIR)/libraft.a $(BUILDDIR)/libraft.a: $(OBJECTS) + rm -f $@ ar -r $@ $(OBJECTS) TEST_SRCS = src/raft_server.c src/raft_server_properties.c src/raft_log.c src/raft_node.c \ $(TEST_DIR)/main_test.c $(wildcard $(TEST_DIR)/test_*.c) \ $(TEST_DIR)/mock_send_functions.c $(TEST_DIR)/CuTest.c $(LLQUEUE_DIR)/linked_list_queue.c -TEST_OBJS = $(addprefix $(BUILDDIR)/test-,$(notdir $(TEST_SRCS:.c=.o))) +TEST_OBJS = $(patsubst %.c,$(BUILDDIR)/test/%.o,$(TEST_SRCS)) HEADERS = $(wildcard include/*.h $(TEST_DIR)/*.h $(LLQUEUE_DIR)/*.h) # With BUILDDIR=. the file itself is tests_main, so the alias would point at itself @@ -61,13 +62,8 @@ ifneq ($(BUILDDIR),.) tests_main: $(BUILDDIR)/tests_main endif -$(BUILDDIR)/test-%.o: src/%.c $(HEADERS) $(MAKEFILE_LIST) | $(BUILDDIR) - $(CC) $(CFLAGS) -c -o $@ $< - -$(BUILDDIR)/test-%.o: $(TEST_DIR)/%.c $(HEADERS) $(MAKEFILE_LIST) | $(BUILDDIR) - $(CC) $(CFLAGS) -c -o $@ $< - -$(BUILDDIR)/test-%.o: $(LLQUEUE_DIR)/%.c $(HEADERS) $(MAKEFILE_LIST) | $(BUILDDIR) +$(BUILDDIR)/test/%.o: %.c $(HEADERS) $(MAKEFILE_LIST) + @mkdir -p $(@D) $(CC) $(CFLAGS) -c -o $@ $< $(BUILDDIR)/tests_main: $(TEST_OBJS) @@ -97,7 +93,8 @@ do_infer: infer -- make static clean: - @rm -f $(TEST_DIR)/main_test.c $(BUILDDIR)/*.o $(GCOV_OUTPUT); \ + @rm -rf $(BUILDDIR)/test; \ + rm -f $(TEST_DIR)/main_test.c $(BUILDDIR)/*.o $(GCOV_OUTPUT); \ if [ -f "$(BUILDDIR)/libraft.$(SHAREDEXT)" ]; then rm $(BUILDDIR)/libraft.$(SHAREDEXT); fi;\ if [ -f $(BUILDDIR)/libraft.a ]; then rm $(BUILDDIR)/libraft.a; fi;\ if [ -f $(BUILDDIR)/tests_main ]; then rm $(BUILDDIR)/tests_main; fi; From 1642449328122db29077f2574b613815d49e502a Mon Sep 17 00:00:00 2001 From: Or Hayat Date: Thu, 5 Nov 2026 11:43:31 +0200 Subject: [PATCH 3/3] DAOS-19906 build: return test objects to flat test-*.o files Build test objects as $(BUILDDIR)/test-*.o instead of under $(BUILDDIR)/test/. Signed-off-by: Or Hayat --- Makefile | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Makefile b/Makefile index cbeb9ab2..bb7a4b95 100755 --- a/Makefile +++ b/Makefile @@ -53,7 +53,7 @@ $(BUILDDIR)/libraft.a: $(OBJECTS) TEST_SRCS = src/raft_server.c src/raft_server_properties.c src/raft_log.c src/raft_node.c \ $(TEST_DIR)/main_test.c $(wildcard $(TEST_DIR)/test_*.c) \ $(TEST_DIR)/mock_send_functions.c $(TEST_DIR)/CuTest.c $(LLQUEUE_DIR)/linked_list_queue.c -TEST_OBJS = $(patsubst %.c,$(BUILDDIR)/test/%.o,$(TEST_SRCS)) +TEST_OBJS = $(addprefix $(BUILDDIR)/test-,$(notdir $(TEST_SRCS:.c=.o))) HEADERS = $(wildcard include/*.h $(TEST_DIR)/*.h $(LLQUEUE_DIR)/*.h) # With BUILDDIR=. the file itself is tests_main, so the alias would point at itself @@ -62,8 +62,13 @@ ifneq ($(BUILDDIR),.) tests_main: $(BUILDDIR)/tests_main endif -$(BUILDDIR)/test/%.o: %.c $(HEADERS) $(MAKEFILE_LIST) - @mkdir -p $(@D) +$(BUILDDIR)/test-%.o: src/%.c $(HEADERS) $(MAKEFILE_LIST) | $(BUILDDIR) + $(CC) $(CFLAGS) -c -o $@ $< + +$(BUILDDIR)/test-%.o: $(TEST_DIR)/%.c $(HEADERS) $(MAKEFILE_LIST) | $(BUILDDIR) + $(CC) $(CFLAGS) -c -o $@ $< + +$(BUILDDIR)/test-%.o: $(LLQUEUE_DIR)/%.c $(HEADERS) $(MAKEFILE_LIST) | $(BUILDDIR) $(CC) $(CFLAGS) -c -o $@ $< $(BUILDDIR)/tests_main: $(TEST_OBJS) @@ -93,8 +98,7 @@ do_infer: infer -- make static clean: - @rm -rf $(BUILDDIR)/test; \ - rm -f $(TEST_DIR)/main_test.c $(BUILDDIR)/*.o $(GCOV_OUTPUT); \ + @rm -f $(TEST_DIR)/main_test.c $(BUILDDIR)/*.o $(GCOV_OUTPUT); \ if [ -f "$(BUILDDIR)/libraft.$(SHAREDEXT)" ]; then rm $(BUILDDIR)/libraft.$(SHAREDEXT); fi;\ if [ -f $(BUILDDIR)/libraft.a ]; then rm $(BUILDDIR)/libraft.a; fi;\ if [ -f $(BUILDDIR)/tests_main ]; then rm $(BUILDDIR)/tests_main; fi;