star-vx

Structuring voxels for ray-tracing
git clone git://git.meso-star.fr/star-vx.git
Log | Files | Refs | README | LICENSE

Makefile (5232B)


      1 # Copyright (C) 2018, 2020-2025 |Méso|Star> (contact@meso-star.com)
      2 # Copyright (C) 2018 Université Paul Sabatier
      3 #
      4 # This program is free software: you can redistribute it and/or modify
      5 # it under the terms of the GNU General Public License as published by
      6 # the Free Software Foundation, either version 3 of the License, or
      7 # (at your option) any later version.
      8 #
      9 # This program is distributed in the hope that it will be useful,
     10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     12 # GNU General Public License for more details.
     13 #
     14 # You should have received a copy of the GNU General Public License
     15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
     16 
     17 .POSIX:
     18 .SUFFIXES: # Clean up default inference rules
     19 
     20 include config.mk
     21 
     22 LIBNAME_STATIC = libsvx.a
     23 LIBNAME_SHARED = libsvx.so
     24 LIBNAME = $(LIBNAME_$(LIB_TYPE))
     25 
     26 default: library
     27 all: default tests
     28 
     29 ################################################################################
     30 # Library building
     31 ################################################################################
     32 SRC =\
     33  src/svx_bintree.c\
     34  src/svx_bintree_trace_ray.c\
     35  src/svx_buffer.c\
     36  src/svx_device.c\
     37  src/svx_octree.c\
     38  src/svx_octree_trace_ray.c\
     39  src/svx_tree.c
     40 OBJ = $(SRC:.c=.o)
     41 DEP = $(SRC:.c=.d)
     42 
     43 CFLAGS_LIB = $(CFLAGS_SO) $(INCS) -DSVX_SHARED_BUILD
     44 LDFLAGS_LIB = $(LDFLAGS_SO) $(LIBS)
     45 
     46 library: .config $(DEP)
     47 	@$(MAKE) -fMakefile $$(for i in $(DEP); do echo -f $${i}; done) \
     48 	$$(if [ -n "$(LIBNAME)" ]; then \
     49 	     echo "$(LIBNAME)"; \
     50 	   else \
     51 	     echo "$(LIBNAME_SHARED)"; \
     52 	   fi)
     53 
     54 $(DEP) $(OBJ): config.mk
     55 
     56 $(LIBNAME_SHARED): $(OBJ)
     57 	$(CC) $(CFLAGS_LIB) -o $@ $(OBJ) $(LDFLAGS_LIB)
     58 
     59 $(LIBNAME_STATIC): libsvx.o
     60 	$(AR) -rc $@ $?
     61 	$(RANLIB) $@
     62 
     63 libsvx.o: $(OBJ)
     64 	$(LD) -r $(OBJ) -o $@
     65 	$(OBJCOPY) $(OCPFLAGS) $@
     66 
     67 .config: config.mk
     68 	$(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys
     69 	@echo "config done" > $@
     70 
     71 .SUFFIXES: .c .d .o
     72 .c.d:
     73 	@$(CC) $(CFLAGS_LIB) -MM -MT "$(@:.d=.o) $@" $< -MF $@
     74 
     75 .c.o:
     76 	$(CC) $(CFLAGS_LIB) -c $< -o $@
     77 
     78 ################################################################################
     79 # Miscellaneous
     80 ################################################################################
     81 pkg:
     82 	sed -e 's#@PREFIX@#$(PREFIX)#g'\
     83 	    -e 's#@VERSION@#$(VERSION)#g'\
     84 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\
     85 	    svx.pc.in > svx.pc
     86 
     87 svx-local.pc: svx.pc.in
     88 	sed -e '1d'\
     89 	    -e 's#^includedir=.*#includedir=./src/#'\
     90 	    -e 's#^libdir=.*#libdir=./#'\
     91 	    -e 's#@VERSION@#$(VERSION)#g'\
     92 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\
     93 	    svx.pc.in > $@
     94 
     95 install: library pkg
     96 	install() { mode="$$1"; prefix="$$2"; shift 2; \
     97 	  mkdir -p "$${prefix}"; \
     98 	  cp "$$@" "$${prefix}"; \
     99 	  chmod "$${mode}" "$$@"; \
    100 	}; \
    101 	install 755 "$(DESTDIR)$(LIBPREFIX)" $(LIBNAME); \
    102 	install 644 "$(DESTDIR)$(LIBPREFIX)/pkgconfig" svx.pc; \
    103 	install 644 "$(DESTDIR)$(INCPREFIX)/star" src/svx.h; \
    104 	install 644 "$(DESTDIR)$(PREFIX)/share/doc/star-vx" COPYING README.md
    105 
    106 uninstall:
    107 	rm -f "$(DESTDIR)$(PREFIX)/lib/$(LIBNAME)"
    108 	rm -f "$(DESTDIR)$(PREFIX)/lib/pkgconfig/svx.pc"
    109 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-vx/COPYING"
    110 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-vx/README.md"
    111 	rm -f "$(DESTDIR)$(PREFIX)/include/star/svx.h"
    112 
    113 clean: clean_test
    114 	rm -f $(DEP) $(OBJ) $(LIBNAME)
    115 	rm -f .config libsvx.o svx.pc svx-local.pc
    116 
    117 ################################################################################
    118 # Tests
    119 ################################################################################
    120 TEST_SRC =\
    121  src/test_svx_bintree.c\
    122  src/test_svx_bintree_trace_ray.c\
    123  src/test_svx_device.c\
    124  src/test_svx_octree.c\
    125  src/test_svx_octree_trace_ray.c
    126 TEST_OBJ = $(TEST_SRC:.c=.o)
    127 TEST_DEP = $(TEST_SRC:.c=.d)
    128 TEST_TGT = $(TEST_SRC:.c=.t)
    129 
    130 PKG_CONFIG_LOCAL = PKG_CONFIG_PATH="./:$${PKG_CONFIG_PATH}" $(PKG_CONFIG)
    131 INCS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags rsys svx-local.pc)
    132 LIBS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rsys svx-local.pc) -lm
    133 
    134 CFLAGS_TEST = $(CFLAGS_EXE) $(INCS_TEST)
    135 LDFLAGS_TEST = $(LDFLAGS_EXE) $(LIBS_TEST)
    136 
    137 tests: library $(TEST_DEP) $(TEST_TGT)
    138 	@$(MAKE) -fMakefile \
    139 	$$(for i in $(TEST_DEP); do echo -f"$${i}"; done) \
    140 	$$(for i in $(TEST_TGT); do echo -f"$${i}"; done) \
    141 	test_list
    142 
    143 $(TEST_TGT):
    144 	@{ \
    145 	  exe="$$(basename "$@" ".t")"; \
    146 	  printf '%s: %s\n' "$${exe}" $(@:.t=.o); \
    147 	  printf 'test_list: %s\n' "$${exe}"; \
    148 	} > $@
    149 
    150 $(TEST_DEP): config.mk svx-local.pc
    151 	@$(CC) $(CFLAGS_TEST) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@
    152 
    153 $(TEST_OBJ): config.mk svx-local.pc
    154 	$(CC) $(CFLAGS_TEST) -c $(@:.o=.c) -o $@
    155 
    156 test_svx_bintree \
    157 test_svx_bintree_trace_ray \
    158 test_svx_device \
    159 test_svx_octree \
    160 test_svx_octree_trace_ray \
    161 : config.mk svx-local.pc $(LIBNAME)
    162 	$(CC) $(CFLAGS_TEST) -o $@ src/$@.o $(LDFLAGS_TEST)
    163 clean_test:
    164 	rm -f $(TEST_DEP) $(TEST_OBJ) $(TEST_TGT)
    165 	for i in $(TEST_SRC); do rm -f "$$(basename "$${i}" ".c")"; done
    166 
    167 test: tests
    168 	@err=0; \
    169 	for i in $(TEST_SRC); do \
    170 	  test="$$(basename "$${i}" ".c")"; \
    171 	  if "./$${test}" > /dev/null 2>&1; then \
    172 	    printf '%s\n' "$${test}"; \
    173 	  else \
    174 	    >&2 printf '%s: error %s\n' "$${test}" "$$?"; \
    175 	    err=$$((err+1)); \
    176 	  fi \
    177 	done; \
    178 	[ "$${err}" -eq 0 ]