Makefile (5939B)
1 # Copyright (C) 2020-2023 |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: # Clean up default inference rules 18 19 include config.mk 20 21 LIBNAME_STATIC = libsuvm.a 22 LIBNAME_SHARED = libsuvm.so 23 LIBNAME = $(LIBNAME_$(LIB_TYPE)) 24 25 ################################################################################ 26 # Library building 27 ################################################################################ 28 SRC =\ 29 src/suvm_device.c\ 30 src/suvm_primitive.c\ 31 src/suvm_volume.c\ 32 src/suvm_volume_at.c\ 33 src/suvm_volume_intersect_aabb.c 34 OBJ = $(SRC:.c=.o) 35 DEP = $(SRC:.c=.d) 36 37 build_library: .config $(DEP) 38 @$(MAKE) -fMakefile $$(for i in $(DEP); do echo -f $${i}; done) \ 39 $$(if [ -n "$(LIBNAME)" ]; then\ 40 echo "$(LIBNAME)";\ 41 else\ 42 echo "$(LIBNAME_SHARED)";\ 43 fi) 44 45 $(DEP) $(OBJ): config.mk 46 47 $(LIBNAME_SHARED): $(OBJ) 48 $(CC) -std=c99 $(CFLAGS_SO) $(DPDC_CFLAGS) -o $@ $(OBJ) $(LDFLAGS_SO) $(DPDC_LIBS) 49 50 $(LIBNAME_STATIC): libsuvm.o 51 $(AR) -rc $@ $? 52 $(RANLIB) $@ 53 54 libsuvm.o: $(OBJ) 55 $(LD) -r $(OBJ) -o $@ 56 $(OBJCOPY) $(OCPFLAGS) $@ 57 58 .config: config.mk 59 @if ! $(PKG_CONFIG) --atleast-version $(EMBREE_VERSION) embree4; then \ 60 echo "embree4 $(EMBREE_VERSION) not found" >&2; exit 1; fi 61 @if ! $(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys; then \ 62 echo "rsys $(RSYS_VERSION) not found" >&2; exit 1; fi 63 @echo "config done" > $@ 64 65 .SUFFIXES: .c .d .o 66 .c.d: 67 @$(CC) -std=c99 $(CFLAGS_SO) $(DPDC_CFLAGS) -MM -MT "$(@:.d=.o) $@" $< -MF $@ 68 69 .c.o: 70 $(CC) -std=c99 $(CFLAGS_SO) $(DPDC_CFLAGS) -DSUVM_SHARED_BUILD -c $< -o $@ 71 72 ################################################################################ 73 # Installation 74 ################################################################################ 75 pkg: 76 sed -e 's#@PREFIX@#$(PREFIX)#g'\ 77 -e 's#@VERSION@#$(VERSION)#g'\ 78 -e 's#@EMBREE_VERSION@#$(EMBREE_VERSION)#g'\ 79 -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\ 80 suvm.pc.in > suvm.pc 81 82 suvm-local.pc: suvm.pc.in 83 sed -e '1d'\ 84 -e 's#^includedir=.*#includedir=./src/#'\ 85 -e 's#^libdir=.*#libdir=./#'\ 86 -e 's#@VERSION@#$(VERSION)#g'\ 87 -e 's#@EMBREE_VERSION@#$(EMBREE_VERSION)#g'\ 88 -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\ 89 suvm.pc.in > $@ 90 91 install: build_library pkg 92 @$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/lib" $(LIBNAME) 93 @$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/lib/pkgconfig" suvm.pc 94 @$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/include/star" src/suvm.h 95 @$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/share/doc/star-uvm" COPYING README.md 96 97 uninstall: 98 rm -f "$(DESTDIR)$(PREFIX)/lib/$(LIBNAME)" 99 rm -f "$(DESTDIR)$(PREFIX)/lib/pkgconfig/suvm.pc" 100 rm -f "$(DESTDIR)$(PREFIX)/include/star/suvm.h" 101 rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-uvm/COPYING" 102 rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-uvm/README.md" 103 104 ################################################################################ 105 # Miscellaneous targets 106 ################################################################################ 107 all: build_library build_tests 108 109 clean: clean_test 110 rm -f $(OBJ) $(TEST_OBJ) $(LIBNAME) 111 rm -f .config .test libsuvm.o suvm.pc suvm-local.pc 112 rm -f ball.vtk box.vtk 113 114 distclean: clean 115 rm -f $(DEP) $(TEST_DEP) 116 117 lint: 118 shellcheck -o all make.sh 119 120 ################################################################################ 121 # Tests 122 ################################################################################ 123 TEST_SRC =\ 124 src/test_suvm_device.c\ 125 src/test_suvm_volume.c\ 126 src/test_suvm_primitive_intersection.c 127 TEST_OBJ = $(TEST_SRC:.c=.o) 128 TEST_DEP = $(TEST_SRC:.c=.d) 129 130 SMSH_FOUND = $(PKG_CONFIG) --atleast-version $(SMSH_VERSION) smsh 131 132 PKG_CONFIG_LOCAL = PKG_CONFIG_PATH="./:$${PKG_CONFIG_PATH}" $(PKG_CONFIG) 133 SUVM_CFLAGS = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags suvm-local.pc) 134 SUVM_LIBS = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs suvm-local.pc) 135 136 build_tests: build_library $(TEST_DEP) .test 137 @if $(SMSH_FOUND); then $(MAKE) src/suvm_voxelize.d; fi; \ 138 $(MAKE) -fMakefile -f.test \ 139 $$(for i in $(TEST_DEP); do echo -f"$${i}"; done) \ 140 $$($(SMSH_FOUND) && echo "-fsrc/suvm_voxelize.d") \ 141 test_bin 142 143 test: build_tests 144 @$(SHELL) make.sh run_test $(TEST_SRC) 145 146 .test: Makefile 147 @{ $(SHELL) make.sh config_test $(TEST_SRC); \ 148 if $(SMSH_FOUND); then \ 149 $(SHELL) make.sh config_test src/suvm_voxelize.c; fi \ 150 } > $@ 151 152 clean_test: 153 $(SHELL) make.sh clean_test $(TEST_SRC) src/suvm_voxelize.c 154 155 $(TEST_DEP): config.mk suvm-local.pc 156 @$(CC) -std=c89 $(CFLAGS_EXE) $(RSYS_CFLAGS) $(SUVM_CFLAGS) \ 157 -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@ 158 159 src/suvm_voxelize.d: config.mk suvm-local.pc 160 @$(CC) -std=c89 $(CFLAGS_EXE) $(RSYS_CFLAGS) $(SUVM_CFLAGS) $(SMSH_CFLAGS) \ 161 -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@ 162 163 $(TEST_OBJ): config.mk suvm-local.pc 164 $(CC) -std=c89 $(CFLAGS_EXE) $(RSYS_CFLAGS) $(SUVM_CFLAGS) -c $(@:.o=.c) -o $@ 165 166 src/suvm_voxelize.o: config.mk suvm-local.pc 167 $(CC) -std=c89 $(CFLAGS_EXE) $(RSYS_CFLAGS) $(SUVM_CFLAGS) $(SMSH_CFLAGS) -c $(@:.o=.c) -o $@ 168 169 test_suvm_device \ 170 test_suvm_volume \ 171 test_suvm_primitive_intersection \ 172 : config.mk suvm-local.pc $(LIBNAME) 173 $(CC) -std=c89 $(CFLAGS_EXE) -o $@ src/$@.o $(LDFLAGS_EXE) $(SUVM_LIBS) $(RSYS_LIBS) -lm 174 175 suvm_voxelize: config.mk suvm-local.pc $(LIBNAME) 176 $(CC) -std=c89 $(CFLAGS_EXE) -o $@ src/$@.o $(LDFLAGS_EXE) $(SUVM_LIBS) $(RSYS_LIBS) $(SMSH_LIBS) -lm