From 440de44a782ee599a7e8eb1bb17f2d74867873f9 Mon Sep 17 00:00:00 2001 From: Paul Eipper Date: Tue, 9 Sep 2025 20:37:33 -0300 Subject: [PATCH 1/2] Move files to new folder structure --- libdevs.h => include/f3/libdevs.h | 0 libflow.h => include/f3/libflow.h | 0 libprobe.h => include/f3/libprobe.h | 0 libutils.h => include/f3/libutils.h | 0 utils.h => include/f3/utils.h | 0 version.h => include/f3/version.h | 0 f3write.h2w => scripts/f3write.h2w | 0 log-f3wr => scripts/log-f3wr | 0 f3brew.c => src/f3-extra/f3brew.c | 0 f3fix.c => src/f3-extra/f3fix.c | 0 f3probe.c => src/f3-extra/f3probe.c | 0 libdevs.c => src/f3-extra/lib/libdevs.c | 0 libprobe.c => src/f3-extra/lib/libprobe.c | 0 libutils.c => src/f3-extra/lib/libutils.c | 0 f3read.c => src/f3/f3read.c | 0 f3write.c => src/f3/f3write.c | 0 libflow.c => src/f3/lib/libflow.c | 0 utils.c => src/f3/lib/utils.c | 0 18 files changed, 0 insertions(+), 0 deletions(-) rename libdevs.h => include/f3/libdevs.h (100%) rename libflow.h => include/f3/libflow.h (100%) rename libprobe.h => include/f3/libprobe.h (100%) rename libutils.h => include/f3/libutils.h (100%) rename utils.h => include/f3/utils.h (100%) rename version.h => include/f3/version.h (100%) rename f3write.h2w => scripts/f3write.h2w (100%) rename log-f3wr => scripts/log-f3wr (100%) rename f3brew.c => src/f3-extra/f3brew.c (100%) rename f3fix.c => src/f3-extra/f3fix.c (100%) rename f3probe.c => src/f3-extra/f3probe.c (100%) rename libdevs.c => src/f3-extra/lib/libdevs.c (100%) rename libprobe.c => src/f3-extra/lib/libprobe.c (100%) rename libutils.c => src/f3-extra/lib/libutils.c (100%) rename f3read.c => src/f3/f3read.c (100%) rename f3write.c => src/f3/f3write.c (100%) rename libflow.c => src/f3/lib/libflow.c (100%) rename utils.c => src/f3/lib/utils.c (100%) diff --git a/libdevs.h b/include/f3/libdevs.h similarity index 100% rename from libdevs.h rename to include/f3/libdevs.h diff --git a/libflow.h b/include/f3/libflow.h similarity index 100% rename from libflow.h rename to include/f3/libflow.h diff --git a/libprobe.h b/include/f3/libprobe.h similarity index 100% rename from libprobe.h rename to include/f3/libprobe.h diff --git a/libutils.h b/include/f3/libutils.h similarity index 100% rename from libutils.h rename to include/f3/libutils.h diff --git a/utils.h b/include/f3/utils.h similarity index 100% rename from utils.h rename to include/f3/utils.h diff --git a/version.h b/include/f3/version.h similarity index 100% rename from version.h rename to include/f3/version.h diff --git a/f3write.h2w b/scripts/f3write.h2w similarity index 100% rename from f3write.h2w rename to scripts/f3write.h2w diff --git a/log-f3wr b/scripts/log-f3wr similarity index 100% rename from log-f3wr rename to scripts/log-f3wr diff --git a/f3brew.c b/src/f3-extra/f3brew.c similarity index 100% rename from f3brew.c rename to src/f3-extra/f3brew.c diff --git a/f3fix.c b/src/f3-extra/f3fix.c similarity index 100% rename from f3fix.c rename to src/f3-extra/f3fix.c diff --git a/f3probe.c b/src/f3-extra/f3probe.c similarity index 100% rename from f3probe.c rename to src/f3-extra/f3probe.c diff --git a/libdevs.c b/src/f3-extra/lib/libdevs.c similarity index 100% rename from libdevs.c rename to src/f3-extra/lib/libdevs.c diff --git a/libprobe.c b/src/f3-extra/lib/libprobe.c similarity index 100% rename from libprobe.c rename to src/f3-extra/lib/libprobe.c diff --git a/libutils.c b/src/f3-extra/lib/libutils.c similarity index 100% rename from libutils.c rename to src/f3-extra/lib/libutils.c diff --git a/f3read.c b/src/f3/f3read.c similarity index 100% rename from f3read.c rename to src/f3/f3read.c diff --git a/f3write.c b/src/f3/f3write.c similarity index 100% rename from f3write.c rename to src/f3/f3write.c diff --git a/libflow.c b/src/f3/lib/libflow.c similarity index 100% rename from libflow.c rename to src/f3/lib/libflow.c diff --git a/utils.c b/src/f3/lib/utils.c similarity index 100% rename from utils.c rename to src/f3/lib/utils.c From 75325b2a67e60b5644418925582695c57dac53e2 Mon Sep 17 00:00:00 2001 From: Paul Eipper Date: Tue, 9 Sep 2025 21:10:23 -0300 Subject: [PATCH 2/2] Update Makefile for out-of-tree build --- Makefile | 72 ++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 57 insertions(+), 15 deletions(-) diff --git a/Makefile b/Makefile index 0bb7ba2..1814a75 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ +# --- Basic Configuration --- CC ?= gcc -CFLAGS += -std=c99 -Wall -Wextra -pedantic -MMD -ggdb +CFLAGS += -std=c99 -Wall -Wextra -pedantic -ggdb -Iinclude/f3 TARGETS = f3write f3read EXTRA_TARGETS = f3probe f3brew f3fix @@ -9,6 +10,7 @@ INSTALL = install LN = ln UNLINK = unlink +# --- OS Detection --- ifndef OS OS = $(shell uname -s) endif @@ -23,22 +25,56 @@ ifneq ($(OS), Linux) LDFLAGS += -L$(ARGP)/lib -largp endif -all: $(TARGETS) -extra: $(EXTRA_TARGETS) +# --- Output Directory Setup --- +BUILD_DIR := build +BIN_DIR := $(BUILD_DIR)/bin +OBJ_DIR := $(BUILD_DIR)/obj + +BIN_TARGETS := $(addprefix $(BIN_DIR)/,$(TARGETS)) +BIN_EXTRAS := $(addprefix $(BIN_DIR)/,$(EXTRA_TARGETS)) + +# Source directories and automatic search rules +SRC_DIRS = src/f3 src/f3-extra +vpath %.c $(SRC_DIRS) + +# Find source files relative to source root and map them to object paths in OBJ_DIR +TARGET_SRCS := $(wildcard $(addsuffix /*.c, $(SRC_DIRS))) +TARGET_OBJS := $(patsubst src/%.c,$(OBJ_DIR)/%.o,$(TARGET_SRCS)) + +# Reusable object lists +F3_LIB_OBJS := $(patsubst src/%.c,$(OBJ_DIR)/%.o,$(wildcard src/f3/lib/*.c)) +F3_EXTRA_LIB_OBJS := $(patsubst src/%.c,$(OBJ_DIR)/%.o,$(wildcard src/f3-extra/lib/*.c)) + +ALL_OBJS := $(TARGET_OBJS) $(F3_LIB_OBJS) $(F3_EXTRA_LIB_OBJS) + +# --- Dependency Inclusion --- +DEPFLAGS = -MMD -MT $@ -MP -MF $(@:.o=.d) +ALL_DEPS := $(ALL_OBJS:.o=.d) +-include $(ALL_DEPS) + +# --- Pattern Rule for Compilation --- +$(OBJ_DIR)/%.o: src/%.c | $(OBJ_DIR) + @mkdir -p $(@D) + $(CC) $(CFLAGS) $(DEPFLAGS) -c $< -o $@ + +# --- Main Build Targets --- +all: $(BIN_TARGETS) +extra: $(BIN_EXTRAS) docker: docker build -f Dockerfile -t f3:latest . +# --- Installation Targets --- install: all $(INSTALL) -d $(DESTDIR)$(PREFIX)/bin - $(INSTALL) -m755 $(TARGETS) $(DESTDIR)$(PREFIX)/bin + $(INSTALL) -m755 $(BIN_TARGETS) $(DESTDIR)$(PREFIX)/bin $(INSTALL) -d $(DESTDIR)$(PREFIX)/share/man/man1 $(INSTALL) -m644 f3read.1 $(DESTDIR)$(PREFIX)/share/man/man1 $(LN) -sf f3read.1 $(DESTDIR)$(PREFIX)/share/man/man1/f3write.1 install-extra: extra $(INSTALL) -d $(DESTDIR)$(PREFIX)/bin - $(INSTALL) -m755 $(EXTRA_TARGETS) $(DESTDIR)$(PREFIX)/bin + $(INSTALL) -m755 $(BIN_EXTRAS) $(DESTDIR)$(PREFIX)/bin uninstall: uninstall-extra cd $(DESTDIR)$(PREFIX)/bin ; rm $(TARGETS) @@ -48,27 +84,33 @@ uninstall: uninstall-extra uninstall-extra: cd $(DESTDIR)$(PREFIX)/bin ; rm $(EXTRA_TARGETS) -f3write: utils.o libflow.o f3write.o +# --- Directory Targets --- +$(BUILD_DIR): ; @mkdir -p $@ +$(BIN_DIR): | $(BUILD_DIR) ; @mkdir -p $@ +$(OBJ_DIR): | $(BUILD_DIR) ; @mkdir -p $@ + +# --- Binary Linking Rules --- +$(BIN_DIR)/f3write: $(OBJ_DIR)/f3/f3write.o $(F3_LIB_OBJS) | $(BIN_DIR) $(CC) -o $@ $^ $(LDFLAGS) -lm -f3read: utils.o libflow.o f3read.o +$(BIN_DIR)/f3read: $(OBJ_DIR)/f3/f3read.o $(F3_LIB_OBJS) | $(BIN_DIR) $(CC) -o $@ $^ $(LDFLAGS) -lm -f3probe: libutils.o libdevs.o libprobe.o f3probe.o +$(BIN_DIR)/f3probe: $(OBJ_DIR)/f3-extra/f3probe.o $(F3_EXTRA_LIB_OBJS) | $(BIN_DIR) $(CC) -o $@ $^ $(LDFLAGS) -lm -ludev -f3brew: libutils.o libdevs.o f3brew.o +$(BIN_DIR)/f3brew: $(OBJ_DIR)/f3-extra/f3brew.o $(F3_EXTRA_LIB_OBJS) | $(BIN_DIR) $(CC) -o $@ $^ $(LDFLAGS) -lm -ludev -f3fix: libutils.o f3fix.o +$(BIN_DIR)/f3fix: $(OBJ_DIR)/f3-extra/f3fix.o $(F3_EXTRA_LIB_OBJS) | $(BIN_DIR) $(CC) -o $@ $^ $(LDFLAGS) -lparted --include *.d - -.PHONY: cscope clean uninstall uninstall-extra +# --- Cleanup and Maintenance Targets --- +.PHONY: all extra docker install install-extra uninstall uninstall-extra cscope clean cscope: - cscope -b *.c *.h + cscope -b src/**/*.c include/**/*.h clean: - rm -f *.o *.d cscope.out $(TARGETS) $(EXTRA_TARGETS) + @rm -rf $(BUILD_DIR) + @rm -f cscope.out