commit 0bac3607805a20fdf2f3428d9f315452f9ae4938
parent 346491e98df26b37b21db72ba10a6f7077dfcee8
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Sun, 14 May 2023 12:04:02 +0200
Clean-up and solidify the Makefile
Until now, if the LIB_TYPE macro had an unexpected value, i.e. a value
that is not STATIC or SHARED, the build process would enter an infinite
loop: the target name would be empty. We correct this problem by setting
the target name to be the name of the shared library when the supplied
target is undefined.
Add the LIBNAME, CFLAGS and LDFLAGS macros defined from the LIB_TYPE and
BUILD_TYPE macros. This avoids the need to suffix each macro and
therefore makes writing easier.
Add the PKG_FLAGS macro, defined from the LIB_TYPE macro, which
depending on whether LIB_TYPE is SHARED or STATIC informs pkg-config
which compiler/linker flags to use.
Make the targets clean, distclean and lint verbose to show what they do.
Finally move the VERSION macro from the Makefile back to the config.mk
file so that the versions of the library and its dependencies are in one
place.
Diffstat:
| M | Makefile | | | 66 | ++++++++++++++++++++++++++++++++++-------------------------------- |
| M | config.mk | | | 15 | +++++++++++---- |
2 files changed, 45 insertions(+), 36 deletions(-)
diff --git a/Makefile b/Makefile
@@ -29,12 +29,11 @@
.POSIX:
.SUFFIXES: # Clean up default inference rules
-VERSION = 0.8.0
-
include config.mk
LIBNAME_STATIC = libs3d.a
LIBNAME_SHARED = libs3d.so
+LIBNAME = $(LIBNAME_$(LIB_TYPE))
################################################################################
# Star-3D building
@@ -55,60 +54,65 @@ OBJ = $(SRC:.c=.o)
DEP = $(SRC:.c=.d)
build_library: .config $(DEP)
- @$(MAKE) -fMakefile $$(for i in $(DEP); do echo -f $${i}; done) $(LIBNAME_$(LIB_TYPE))
+ @$(MAKE) -fMakefile $$(for i in $(DEP); do echo -f "$${i}"; done)\
+ $$(if [ -n "$(LIBNAME)" ]; then\
+ echo "$(LIBNAME)";\
+ else\
+ echo "$(LIBNAME_SHARED)";\
+ fi)
$(OBJ): config.mk
$(LIBNAME_SHARED): $(OBJ)
- $(CC) -std=c99 $(CFLAGS_$(BUILD_TYPE)) -o $@ $(OBJ) $(LDFLAGS_$(BUILD_TYPE)) $(SOFLAGS) $(LIBS)
+ $(CC) -std=c99 $(CFLAGS) -o $@ $(OBJ) $(LDFLAGS) $(SOFLAGS) $(LIBS)
$(LIBNAME_STATIC): $(OBJ)
$(AR) -rc $@ $?
$(RANLIB) $@
.config: Makefile
- @if ! $(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys; then \
+ @if ! $(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys; then\
echo "rsys $(RSYS_VERSION) not found" >&2; exit 1; fi
- @if ! $(PKG_CONFIG) --atleast-version $(EMBREE_VERSION) embree4; then \
+ @if ! $(PKG_CONFIG) --atleast-version $(EMBREE_VERSION) embree4; then\
echo "embree $(EMBREE_VERSION) not found" >&2; exit 1; fi
@echo "config done" > .config
.SUFFIXES: .c .d .o
.c.d:
- @$(CC) -std=c99 $(CFLAGS_$(BUILD_TYPE)) $(INCS) -MM -MT "$(@:.d=.o) $@" $< -MF $@
+ @$(CC) -std=c99 $(CFLAGS) $(INCS) -MM -MT "$(@:.d=.o) $@" $< -MF $@
.c.o:
- $(CC) -std=c99 $(CFLAGS_$(BUILD_TYPE)) $(INCS) -DS3D_SHARED_BUILD -c $< -o $@
+ $(CC) -std=c99 $(CFLAGS) $(INCS) -DS3D_SHARED_BUILD -c $< -o $@
################################################################################
# Installation
################################################################################
pkg:
@echo "Setup s3d.pc"
- @sed -e 's#@PREFIX@#$(PREFIX)#g' \
- -e 's#@VERSION@#$(VERSION)#g' \
- -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g' \
- -e 's#@EMBREE_VERSION@#$(EMBREE_VERSION)#g' \
+ @sed -e 's#@PREFIX@#$(PREFIX)#g'\
+ -e 's#@VERSION@#$(VERSION)#g'\
+ -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\
+ -e 's#@EMBREE_VERSION@#$(EMBREE_VERSION)#g'\
s3d.pc.in > s3d.pc
-s3d-local.pc:
- @sed -e '1d' \
- -e 's#^includedir=.*#includedir=./src/#' \
- -e 's#^libdir=.*#libdir=./#' \
- -e 's#@VERSION@#$(VERSION)#g' \
- -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g' \
- -e 's#@EMBREE_VERSION@#$(EMBREE_VERSION)#g' \
- s3d.pc.in > $@
+s3d-local.pc: s3d.pc.in
+ @sed -e '1d'\
+ -e 's#^includedir=.*#includedir=./src/#'\
+ -e 's#^libdir=.*#libdir=./#'\
+ -e 's#@VERSION@#$(VERSION)#g'\
+ -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\
+ -e 's#@EMBREE_VERSION@#$(EMBREE_VERSION)#g'\
+ s3d.pc.in > $@
install: build_library pkg
- @$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/lib" $(LIBNAME_$(LIB_TYPE))
+ @$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/lib" $(LIBNAME)
@$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/lib/pkgconfig" s3d.pc
@$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/include/star" src/s3d.h
@$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/share/doc/star-3d"\
COPYING.en COPYING.fr README.md
uninstall:
- rm -f "$(DESTDIR)$(PREFIX)/lib/$(LIBNAME_$(LIB_TYPE))"
+ rm -f "$(DESTDIR)$(PREFIX)/lib/$(LIBNAME)"
rm -f "$(DESTDIR)$(PREFIX)/lib/pkgconfig/s3d.pc"
rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-3d/COPYING.en"
rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-3d/COPYING.fr"
@@ -121,13 +125,13 @@ uninstall:
all: build_library build_tests
clean: clean_test
- @rm -f $(OBJ) $(TEST_OBJ) $(LIBNAME_$(LIB_TYPE)) .test s3d.pc .config
+ rm -f $(OBJ) $(TEST_OBJ) $(LIBNAME) .config .test s3d.pc s3d-local.pc .config
distclean: clean
- @rm -f $(DEP) $(TEST_DEP)
+ rm -f $(DEP) $(TEST_DEP)
lint:
- @shellcheck -o all make.sh
+ shellcheck -o all make.sh
################################################################################
# Tests
@@ -153,10 +157,8 @@ TEST_SRC =\
TEST_OBJ = $(TEST_SRC:.c=.o)
TEST_DEP = $(TEST_SRC:.c=.d)
-S3D_CFLAGS_STATIC = $$($(PKG_CONFIG) --with-path=./ --static --cflags s3d-local.pc)
-S3D_CFLAGS_SHARED = $$($(PKG_CONFIG) --with-path=./ --shared --cflags s3d-local.pc)
-S3D_LIBS_STATIC = $$($(PKG_CONFIG) --with-path=./ --static --libs s3d-local.pc)
-S3D_LIBS_SHARED = $$($(PKG_CONFIG) --with-path=./ --shared --libs s3d-local.pc)
+S3D_CFLAGS = $$($(PKG_CONFIG) --with-path=./ $(PKG_FLAGS) --cflags s3d-local.pc)
+S3D_LIBS = $$($(PKG_CONFIG) --with-path=./ $(PKG_FLAGS) --libs s3d-local.pc)
build_tests: build_library $(TEST_DEP) .test
@$(MAKE) -fMakefile -f.test $$(for i in $(TEST_DEP); do echo -f"$${i}"; done) test_bin
@@ -171,7 +173,7 @@ clean_test:
@$(SHELL) make.sh clean_test $(TEST_SRC)
$(TEST_OBJ): config.mk s3d-local.pc
- $(CC) -std=c89 $(CFLAGS_$(BUILD_TYPE)) $(S3D_CFLAGS_$(LIB_TYPE)) -c $(@:.o=.c) -o $@
+ $(CC) -std=c89 $(CFLAGS) $(S3D_CFLAGS) -c $(@:.o=.c) -o $@
test_s3d_device \
test_s3d_primitive \
@@ -182,7 +184,7 @@ test_s3d_scene_view \
test_s3d_seams \
test_s3d_shape \
: s3d-local.pc
- $(CC) -o $@ src/$@.o $(LDFLAGS_$(BUILD_TYPE)) $(S3D_LIBS_$(LIB_TYPE))
+ $(CC) -o $@ src/$@.o $(LDFLAGS) $(S3D_LIBS)
test_s3d_accel_struct_conf \
test_s3d_closest_point \
@@ -194,4 +196,4 @@ test_s3d_trace_ray \
test_s3d_trace_ray_instance \
test_s3d_trace_ray_sphere \
: s3d-local.pc
- $(CC) -o $@ src/$@.o $(LDFLAGS_$(BUILD_TYPE)) $(S3D_LIBS_$(LIB_TYPE)) -lm
+ $(CC) -o $@ src/$@.o $(LDFLAGS) $(S3D_LIBS) -lm
diff --git a/config.mk b/config.mk
@@ -1,3 +1,4 @@
+VERSION = 0.8.0
PREFIX = /usr/local
LIB_TYPE = SHARED
@@ -17,13 +18,17 @@ RANLIB = ranlib
################################################################################
# Dependencies
################################################################################
+PKG_FLAGS_SHARED =
+PKG_FLAGS_STATIC = --static
+PKG_FLAGS = $(PKG_FLAGS_$(LIB_TYPE))
+
RSYS_VERSION=0.6
-RSYS_INC = $$($(PKG_CONFIG) --cflags rsys)
-RSYS_LIB = $$($(PKG_CONFIG) --libs rsys)
+RSYS_INC = $$($(PKG_CONFIG) $(PKG_FLAGS) --cflags rsys)
+RSYS_LIB = $$($(PKG_CONFIG) $(PKG_FLAGS) --libs rsys)
EMBREE_VERSION=4.0
-EMBREE_INC = $$($(PKG_CONFIG) --cflags embree4)
-EMBREE_LIB = $$($(PKG_CONFIG) --libs embree4)
+EMBREE_INC = $$($(PKG_CONFIG) $(PKG_FLAGS) --cflags embree4)
+EMBREE_LIB = $$($(PKG_CONFIG) $(PKG_FLAGS) --libs embree4)
INCS=$(RSYS_INC) $(EMBREE_INC)
LIBS=$(RSYS_LIB) $(EMBREE_LIB) -lm
@@ -49,6 +54,7 @@ CFLAGS_COMMON =\
CFLAGS_RELEASE = -O2 -DNDEBUG $(CFLAGS_COMMON)
CFLAGS_DEBUG = -g $(CFLAGS_COMMON)
+CFLAGS = $(CFLAGS_$(BUILD_TYPE))
################################################################################
# Linker options
@@ -57,3 +63,4 @@ SOFLAGS = -shared -Wl,--no-undefined
LDFLAGS_DEBUG =
LDFLAGS_RELEASE = -s
+LDFLAGS = $(LDFLAGS_$(BUILD_TYPE))