commit a1665a50d3a9a7d08ffd3ad73db8d4c6bc7014e0
parent 633ffadce5a03eaa839cb18cf4212afa28679fd0
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Fri, 23 May 2025 12:06:19 +0200
Makefile updates
Several small changes to simplify the build system.
Diffstat:
| M | Makefile | | | 106 | ++++++++++++++++++++++++++++++++++++++++++------------------------------------- |
| M | config.mk | | | 4 | ++-- |
2 files changed, 58 insertions(+), 52 deletions(-)
diff --git a/Makefile b/Makefile
@@ -14,7 +14,7 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>. */
.POSIX:
-.SUFFIXES: .b .c .d .o
+.SUFFIXES: .t .c .d .o
include config.mk
@@ -22,8 +22,8 @@ LIBNAME_STATIC = libsuvm.a
LIBNAME_SHARED = libsuvm.so
LIBNAME = $(LIBNAME_$(LIB_TYPE))
-default: library $(ADDONS)
-all: default tests
+default: library
+all: default tests $(ADDON)
################################################################################
# Library building
@@ -37,6 +37,9 @@ SRC =\
OBJ = $(SRC:.c=.o)
DEP = $(SRC:.c=.d)
+CFLAGS_LIB = -std=c99 $(CFLAGS_SO) $(INCS) -DSUVM_SHARED_BUILD
+LDFLAGS_LIB = $(LDFLAGS_SO) $(LIBS)
+
library: .config $(DEP)
@$(MAKE) -fMakefile $$(for i in $(DEP); do echo -f $${i}; done) \
$$(if [ -n "$(LIBNAME)" ]; then\
@@ -48,7 +51,7 @@ library: .config $(DEP)
$(DEP) $(OBJ): config.mk
$(LIBNAME_SHARED): $(OBJ)
- $(CC) -std=c99 $(CFLAGS_SO) $(INCS) -o $@ $(OBJ) $(LDFLAGS_SO) $(LIBS)
+ $(CC) $(CFLAGS_LIB) -o $@ $(OBJ) $(LDFLAGS_LIB)
$(LIBNAME_STATIC): libsuvm.o
$(AR) -rc $@ $?
@@ -64,14 +67,10 @@ libsuvm.o: $(OBJ)
@echo "config done" > $@
.c.d:
- @$(CC) -std=c99 $(CFLAGS_SO) $(INCS) -MM -MT "$(@:.d=.o) $@" $< -MF $@
+ @$(CC) $(CFLAGS_LIB) -MM -MT "$(@:.d=.o) $@" $< -MF $@
.c.o:
- $(CC) -std=c99 $(CFLAGS_SO) $(INCS) -DSUVM_SHARED_BUILD -c $< -o $@
-
-clean: clean_test clean_utils
- rm -f $(DEP) $(OBJ) $(LIBNAME)
- rm -f .config libsuvm.o suvm.pc suvm-local.pc
+ $(CC) $(CFLAGS_LIB) -c $< -o $@
################################################################################
# Installation
@@ -92,21 +91,18 @@ suvm-local.pc: suvm.pc.in
-e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\
suvm.pc.in > $@
-install: library pkg $(INSTALL_$(ADDON))
- mkdir -p "$(DESTDIR)$(INCPREFIX)/star"
- mkdir -p "$(DESTDIR)$(LIBPREFIX)"
- mkdir -p "$(DESTDIR)$(LIBPREFIX)/pkgconfig"
- mkdir -p "$(DESTDIR)$(PREFIX)/share/doc/star-uvm"
- cp $(LIBNAME) "$(DESTDIR)$(LIBPREFIX)"
- cp suvm.pc "$(DESTDIR)$(LIBPREFIX)/pkgconfig"
- cp src/suvm.h "$(DESTDIR)$(INCPREFIX)/star"
- cp COPYING README.md "$(DESTDIR)$(PREFIX)/share/doc/star-uvm"
- chmod 755 "$(DESTDIR)$(LIBPREFIX)/$(LIBNAME)"
- chmod 644 "$(DESTDIR)$(LIBPREFIX)/pkgconfig/suvm.pc"
- chmod 644 "$(DESTDIR)$(INCPREFIX)/star/suvm.h"
- chmod 644 "$(DESTDIR)$(PREFIX)/share/doc/star-uvm/COPYING"
- chmod 644 "$(DESTDIR)$(PREFIX)/share/doc/star-uvm/README.md"
- @for i in $(ADDONS); do $(MAKE) -fMakefile install_"$${i}"; done
+install: library pkg install_$(ADDON)
+ install() { mode="$$1"; prefix="$$2"; shift 2; \
+ mkdir -p "$${prefix}"; \
+ cp "$$@" "$${prefix}"; \
+ chmod "$${mode}" "$$@"; \
+ }; \
+ install 755 "$(DESTDIR)$(LIBPREFIX)" $(LIBNAME); \
+ install 644 "$(DESTDIR)$(LIBPREFIX)/pkgconfig" suvm.pc; \
+ install 644 "$(DESTDIR)$(INCPREFIX)/star" src/suvm.h; \
+ install 644 "$(DESTDIR)$(PREFIX)/share/doc/star-uvm" COPYING README.md
+
+install_: # Dummy target run when ADDON is disabled
uninstall: uninstall_utils
rm -f "$(DESTDIR)$(LIBPREFIX)/$(LIBNAME)"
@@ -117,6 +113,10 @@ uninstall: uninstall_utils
lint: lint_utils
+clean: clean_test clean_utils
+ rm -f $(DEP) $(OBJ) $(LIBNAME)
+ rm -f .config libsuvm.o suvm.pc suvm-local.pc
+
#################################################################################
# Utils
#################################################################################
@@ -141,25 +141,26 @@ utils: library .config_utils
@echo "config done" > $@
src/suvm_voxelize.d: config.mk suvm-local.pc
- @$(CC) -std=c89 $(CFLAGS_UTIL) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@
+ @$(CC) $(CFLAGS_UTIL) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@
src/suvm_voxelize.o: config.mk suvm-local.pc
- $(CC) -std=c89 $(CFLAGS_UTIL) -c $(@:.o=.c) -o $@
+ $(CC) $(CFLAGS_UTIL) -c $(@:.o=.c) -o $@
suvm-voxelize: config.mk suvm-local.pc $(LIBNAME) src/suvm_voxelize.o
- $(CC) -std=c89 $(CFLAGS_UTIL) -o $@ src/suvm_voxelize.o $(LDFLAGS_UTIL)
+ $(CC) $(CFLAGS_UTIL) -o $@ src/suvm_voxelize.o $(LDFLAGS_UTIL)
clean_utils:
rm -f $(UTIL_DEP) $(UTIL_OBJ) suvm-voxelize
rm -f .config_utils
install_utils: utils
- mkdir -p "$(DESTDIR)$(BINPREFIX)"
- mkdir -p "$(DESTDIR)$(MANPREFIX)/man1"
- cp suvm-voxelize "$(DESTDIR)$(BINPREFIX)"
- cp suvm-voxelize.1 "$(DESTDIR)$(MANPREFIX)/man1/"
- chmod 755 "$(DESTDIR)$(BINPREFIX)/suvm-voxelize"
- chmod 644 "$(DESTDIR)$(MANPREFIX)/man1/suvm-voxelize.1"
+ install() { mode="$$1"; prefix="$$2"; shift 2; \
+ mkdir -p "$${prefix}"; \
+ cp "$$@" "$${prefix}"; \
+ chmod "$${mode}" "$$@"; \
+ }; \
+ install 755 "$(DESTDIR)$(BINPREFIX)" suvm-voxelize; \
+ install 644 "$(DESTDIR)$(MANPREFIX)/man1" doc/suvm-voxelize.1
uninstall_utils:
rm -f "$(DESTDIR)$(BINPREFIX)/suvm-voxelize"
@@ -177,7 +178,7 @@ TEST_SRC =\
src/test_suvm_primitive_intersection.c
TEST_OBJ = $(TEST_SRC:.c=.o)
TEST_DEP = $(TEST_SRC:.c=.d)
-TEST_BIN = $(TEST_SRC:.c=.b)
+TEST_TGT = $(TEST_SRC:.c=.t)
INCS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags rsys suvm-local.pc)
LIBS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rsys suvm-local.pc) -lm
@@ -185,25 +186,17 @@ LIBS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rsys suvm-local.pc) -lm
CFLAGS_TEST = -std=c89 $(CFLAGS_EXE) $(INCS_TEST)
LDFLAGS_TEST = $(LDFLAGS_EXE) $(LIBS_TEST)
-test: tests
- @for i in $(TEST_SRC); do \
- bin="$$(basename "$${i}" ".c")"; \
- "./$${bin}" > /dev/null 2>&1 \
- || >&2 printf '%s: error %s\n' "$${bin}" "$$?"; \
- done
- @echo "Tests done"
-
-tests: library $(TEST_DEP) $(TEST_BIN)
+tests: library $(TEST_DEP) $(TEST_TGT)
@$(MAKE) -fMakefile \
$$(for i in $(TEST_DEP); do echo -f"$${i}"; done) \
- $$(for i in $(TEST_BIN); do echo -f"$${i}"; done) \
- test_bin
+ $$(for i in $(TEST_TGT); do echo -f"$${i}"; done) \
+ test_list
-.c.b:
+.c.t:
@{ \
- bin="$$(basename "$<" ".c")"; \
- printf '%s: %s\n' "$${bin}" $(<:.c=.o); \
- printf 'test_bin: %s\n' "$${bin}"; \
+ tgt="$$(basename "$<" ".c")"; \
+ printf '%s: %s\n' "$${tgt}" $(<:.c=.o); \
+ printf 'test_list: %s\n' "$${tgt}"; \
} > $@
$(TEST_DEP): config.mk suvm-local.pc
@@ -222,3 +215,16 @@ clean_test:
rm -f $(TEST_BIN) $(TEST_DEP) $(TEST_OBJ)
rm -f ball.vtk box.vtk
for i in $(TEST_SRC); do rm -f "$$(basename "$${i}" ".c")"; done
+
+test: tests
+ @err=0; \
+ for i in $(TEST_SRC); do \
+ test="$$(basename "$${i}" ".c")"; \
+ if "./$${test}" > /dev/null 2>&1; then \
+ printf '%s\n' "$${test}"; \
+ else \
+ >&2 printf '%s: error %s\n' "$${test}" "$$?"; \
+ err=$$((err+1)); \
+ fi \
+ done; \
+ [ "$${err}" -eq 0 ]
diff --git a/config.mk b/config.mk
@@ -12,9 +12,9 @@ LIBPREFIX = $(PREFIX)/lib
INCPREFIX = $(PREFIX)/include/stardis
MANPREFIX = $(PREFIX)/share/man
-# Define additional targets
+# Enable building and installation of additional utilities
# Comment it to build and install the library only
-#ADDONS = utils
+#ADDON = utils
################################################################################
# Tools