star-uvm

Spatial structuring of unstructured volumetric meshes
git clone git://git.meso-star.fr/star-uvm.git
Log | Files | Refs | README | LICENSE

Makefile (6992B)


      1 # Copyright (C) 2020-2023, 2025-2026 |Méso|Star> (contact@meso-star.com)
      2 #
      3 # This program is free software: you can redistribute it and/or modify
      4 # it under the terms of the GNU General Public License as published by
      5 # the Free Software Foundation, either version 3 of the License, or
      6 # (at your option) any later version.
      7 #
      8 # This program is distributed in the hope that it will be useful,
      9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     11 # GNU General Public License for more details.
     12 #
     13 # You should have received a copy of the GNU General Public License
     14 # along with this program. If not, see <http://www.gnu.org/licenses/>. */
     15 
     16 .POSIX:
     17 .SUFFIXES: .t .c .d .o
     18 
     19 include config.mk
     20 
     21 LIBNAME_STATIC = libsuvm.a
     22 LIBNAME_SHARED = libsuvm.so
     23 LIBNAME = $(LIBNAME_$(LIB_TYPE))
     24 
     25 default: library
     26 all: default tests $(ADDON)
     27 
     28 ################################################################################
     29 # Library building
     30 ################################################################################
     31 SRC =\
     32  src/suvm_device.c\
     33  src/suvm_primitive.c\
     34  src/suvm_volume.c\
     35  src/suvm_volume_at.c\
     36  src/suvm_volume_intersect_aabb.c
     37 OBJ = $(SRC:.c=.o)
     38 DEP = $(SRC:.c=.d)
     39 
     40 CFLAGS_LIB = -std=c99 $(CFLAGS_SO) $(INCS) -DSUVM_SHARED_BUILD
     41 LDFLAGS_LIB = $(LDFLAGS_SO) $(LIBS)
     42 
     43 library: .config $(DEP)
     44 	@$(MAKE) -fMakefile $$(for i in $(DEP); do echo -f $${i}; done) \
     45 	$$(if [ -n "$(LIBNAME)" ]; then\
     46 	     echo "$(LIBNAME)";\
     47 	   else\
     48 	     echo "$(LIBNAME_SHARED)";\
     49 	   fi)
     50 
     51 $(DEP) $(OBJ): config.mk
     52 
     53 $(LIBNAME_SHARED): $(OBJ)
     54 	$(CC) $(CFLAGS_LIB) -o $@ $(OBJ) $(LDFLAGS_LIB)
     55 
     56 $(LIBNAME_STATIC): libsuvm.o
     57 	$(AR) -rc $@ $?
     58 	$(RANLIB) $@
     59 
     60 libsuvm.o: $(OBJ)
     61 	$(LD) -r $(OBJ) -o $@
     62 	$(OBJCOPY) $(OCPFLAGS) $@
     63 
     64 .config: config.mk
     65 	$(PKG_CONFIG) --atleast-version $(EMBREE_VERSION) embree4
     66 	$(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys
     67 	@echo "config done" > $@
     68 
     69 .c.d:
     70 	@$(CC) $(CFLAGS_LIB) -MM -MT "$(@:.d=.o) $@" $< -MF $@
     71 
     72 .c.o:
     73 	$(CC) $(CFLAGS_LIB) -c $< -o $@
     74 
     75 ################################################################################
     76 # Installation
     77 ################################################################################
     78 pkg:
     79 	sed -e 's#@PREFIX@#$(PREFIX)#g'\
     80 	    -e 's#@VERSION@#$(VERSION)#g'\
     81 	    -e 's#@EMBREE_VERSION@#$(EMBREE_VERSION)#g'\
     82 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\
     83 	    suvm.pc.in > suvm.pc
     84 
     85 suvm-local.pc: suvm.pc.in
     86 	sed -e '1d'\
     87 	    -e 's#^includedir=.*#includedir=./src/#'\
     88 	    -e 's#^libdir=.*#libdir=./#'\
     89 	    -e 's#@VERSION@#$(VERSION)#g'\
     90 	    -e 's#@EMBREE_VERSION@#$(EMBREE_VERSION)#g'\
     91 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\
     92 	    suvm.pc.in > $@
     93 
     94 install: library pkg install_$(ADDON)
     95 	install() { mode="$$1"; prefix="$$2"; shift 2; \
     96 	  mkdir -p "$${prefix}"; \
     97 	  cp "$$@" "$${prefix}"; \
     98 	  chmod "$${mode}" "$$@"; \
     99 	}; \
    100 	install 755 "$(DESTDIR)$(LIBPREFIX)" $(LIBNAME); \
    101 	install 644 "$(DESTDIR)$(LIBPREFIX)/pkgconfig" suvm.pc; \
    102 	install 644 "$(DESTDIR)$(INCPREFIX)/star" src/suvm.h; \
    103 	install 644 "$(DESTDIR)$(PREFIX)/share/doc/star-uvm" COPYING README.md
    104 
    105 install_: # Dummy target run when ADDON is disabled
    106 
    107 uninstall: uninstall_utils
    108 	rm -f "$(DESTDIR)$(LIBPREFIX)/$(LIBNAME)"
    109 	rm -f "$(DESTDIR)$(LIBPREFIX)/pkgconfig/suvm.pc"
    110 	rm -f "$(DESTDIR)$(INCPREFIX)/star/suvm.h"
    111 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-uvm/COPYING"
    112 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-uvm/README.md"
    113 
    114 lint: lint_utils
    115 
    116 clean: clean_test clean_utils
    117 	rm -f $(DEP) $(OBJ) $(LIBNAME)
    118 	rm -f .config libsuvm.o suvm.pc suvm-local.pc
    119 
    120 #################################################################################
    121 # Utils
    122 #################################################################################
    123 UTIL_SRC = src/suvm_voxelize.c
    124 UTIL_OBJ = $(UTIL_SRC:.c=.o)
    125 UTIL_DEP = $(UTIL_SRC:.c=.d)
    126 
    127 PKG_CONFIG_LOCAL = PKG_CONFIG_PATH="./:$${PKG_CONFIG_PATH}" $(PKG_CONFIG)
    128 
    129 INCS_UTIL = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags rsys smsh suvm-local.pc)
    130 LIBS_UTIL = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rsys smsh suvm-local.pc) -lm
    131 
    132 CFLAGS_UTIL = -std=c89 $(CFLAGS_EXE) $(INCS_UTIL)
    133 LDFLAGS_UTIL = $(LDFLAGS_EXE) $(LIBS_UTIL)
    134 
    135 utils: library .config_utils
    136 	@$(MAKE) $(UTIL_DEP); \
    137 	$(MAKE) -f Makefile -f src/suvm_voxelize.d suvm-voxelize
    138 
    139 .config_utils: config.mk
    140 	$(PKG_CONFIG) --atleast-version $(SMSH_VERSION) smsh
    141 	@echo "config done" > $@
    142 
    143 src/suvm_voxelize.d: config.mk suvm-local.pc
    144 	@$(CC) $(CFLAGS_UTIL) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@
    145 
    146 src/suvm_voxelize.o: config.mk suvm-local.pc
    147 	$(CC) $(CFLAGS_UTIL) -c $(@:.o=.c) -o $@
    148 
    149 suvm-voxelize: config.mk suvm-local.pc $(LIBNAME) src/suvm_voxelize.o
    150 	$(CC) $(CFLAGS_UTIL) -o $@ src/suvm_voxelize.o $(LDFLAGS_UTIL)
    151 
    152 clean_utils:
    153 	rm -f $(UTIL_DEP) $(UTIL_OBJ) suvm-voxelize
    154 	rm -f .config_utils
    155 
    156 install_utils: utils
    157 	install() { mode="$$1"; prefix="$$2"; shift 2; \
    158 	  mkdir -p "$${prefix}"; \
    159 	  cp "$$@" "$${prefix}"; \
    160 	  chmod "$${mode}" "$$@"; \
    161 	}; \
    162 	install 755 "$(DESTDIR)$(BINPREFIX)" suvm-voxelize; \
    163 	install 644 "$(DESTDIR)$(MANPREFIX)/man1" doc/suvm-voxelize.1
    164 
    165 uninstall_utils:
    166 	rm -f "$(DESTDIR)$(BINPREFIX)/suvm-voxelize"
    167 	rm -f "$(DESTDIR)$(MANPREFIX)/man1/suvm-voxelize.1"
    168 
    169 lint_utils:
    170 	mandoc -Tlint -Wall doc/suvm-voxelize.1 || [ $$? -le 1 ]
    171 
    172 ################################################################################
    173 # Tests
    174 ################################################################################
    175 TEST_SRC =\
    176  src/test_suvm_device.c\
    177  src/test_suvm_volume.c\
    178  src/test_suvm_primitive_intersection.c
    179 TEST_OBJ = $(TEST_SRC:.c=.o)
    180 TEST_DEP = $(TEST_SRC:.c=.d)
    181 TEST_TGT = $(TEST_SRC:.c=.t)
    182 
    183 INCS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags rsys suvm-local.pc)
    184 LIBS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rsys suvm-local.pc) -lm
    185 
    186 CFLAGS_TEST = -std=c89 $(CFLAGS_EXE) $(INCS_TEST)
    187 LDFLAGS_TEST = $(LDFLAGS_EXE) $(LIBS_TEST)
    188 
    189 tests: library $(TEST_DEP) $(TEST_TGT)
    190 	@$(MAKE) -fMakefile \
    191 	$$(for i in $(TEST_DEP); do echo -f"$${i}"; done) \
    192 	$$(for i in $(TEST_TGT); do echo -f"$${i}"; done) \
    193 	test_list
    194 
    195 .c.t:
    196 	@{ \
    197 	  tgt="$$(basename "$<" ".c")"; \
    198 	  printf '%s: %s\n' "$${tgt}" $(<:.c=.o); \
    199 	  printf 'test_list: %s\n' "$${tgt}"; \
    200 	} > $@
    201 
    202 $(TEST_DEP): config.mk suvm-local.pc
    203 	@$(CC) $(CFLAGS_TEST) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@
    204 
    205 $(TEST_OBJ): config.mk suvm-local.pc
    206 	$(CC) $(CFLAGS_TEST) -c $(@:.o=.c) -o $@
    207 
    208 test_suvm_device \
    209 test_suvm_volume \
    210 test_suvm_primitive_intersection \
    211 : config.mk suvm-local.pc $(LIBNAME)
    212 	$(CC) -std=c89 $(CFLAGS_TEST) -o $@ src/$@.o $(LDFLAGS_TEST)
    213 
    214 clean_test:
    215 	rm -f $(TEST_BIN) $(TEST_DEP) $(TEST_OBJ)
    216 	rm -f ball.vtk box.vtk
    217 	for i in $(TEST_SRC); do rm -f "$$(basename "$${i}" ".c")"; done
    218 
    219 test: tests
    220 	@err=0; \
    221 	for i in $(TEST_SRC); do \
    222 	  test="$$(basename "$${i}" ".c")"; \
    223 	  if "./$${test}" > /dev/null 2>&1; then \
    224 	    printf '%s\n' "$${test}"; \
    225 	  else \
    226 	    >&2 printf '%s: error %s\n' "$${test}" "$$?"; \
    227 	    err=$$((err+1)); \
    228 	  fi \
    229 	done; \
    230 	[ "$${err}" -eq 0 ]