Makefile (6113B)
1 # Copyright (C) 2015, 2016, 2026 Centre National de la Recherche Scientifique 2 # Copyright (C) 2026 Clermont Auvergne INP 3 # Copyright (C) 2026 Institut Mines Télécom Albi-Carmaux 4 # Copyright (C) 2020, 2021, 2023, 2026 |Méso|Star> (contact@meso-star.com) 5 # Copyright (C) 2026 Université de Lorraine 6 # Copyright (C) 2026 Université de Toulouse 7 # 8 # This program is free software: you can redistribute it and/or modify 9 # it under the terms of the GNU General Public License as published by 10 # the Free Software Foundation, either version 3 of the License, or 11 # (at your option) any later version. 12 # 13 # This program is distributed in the hope that it will be useful, 14 # but WITHOUT ANY WARRANTY; without even the implied warranty of 15 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 # GNU General Public License for more details. 17 # 18 # You should have received a copy of the GNU General Public License 19 # along with this program. If not, see <http://www.gnu.org/licenses/>. 20 21 .POSIX: 22 .SUFFIXES: # Clean up default inference rules 23 24 include config.mk 25 26 LIBNAME_STATIC = libsschiff.a 27 LIBNAME_SHARED = libsschiff.so 28 LIBNAME = $(LIBNAME_$(LIB_TYPE)) 29 30 default: library 31 all: default tests 32 33 ################################################################################ 34 # Library 35 ################################################################################ 36 SRC =\ 37 src/sschiff_device.c\ 38 src/sschiff_estimator.c\ 39 src/sschiff_scattering_angles_distributions.c 40 OBJ = $(SRC:.c=.o) 41 DEP = $(SRC:.c=.d) 42 43 CFLAGS_LIB = $(CFLAGS_SO) $(INCS) -DSSCHIFF_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): libsschiff.o 60 $(AR) -rc $@ $? 61 $(RANLIB) $@ 62 63 libsschiff.o: $(OBJ) 64 $(LD) -r $(OBJ) -o $@ 65 $(OBJCOPY) $(OCPFLAGS) $@ 66 67 .config: Makefile config.mk 68 $(PKG_CONFIG) --atleast-version $(GSL_VERSION) gsl 69 $(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys 70 $(PKG_CONFIG) --atleast-version $(S3D_VERSION) s3d 71 $(PKG_CONFIG) --atleast-version $(SSP_VERSION) star-sp 72 echo "config done" > $@ 73 74 .SUFFIXES: .c .d .o 75 .c.d: 76 @$(CC) $(CFLAGS_LIB) -MM -MT "$(@:.d=.o) $@" $< -MF $@ 77 78 .c.o: 79 $(CC) $(CFLAGS_LIB) -c $< -o $@ 80 81 ################################################################################ 82 # Installation 83 ################################################################################ 84 pkg: 85 sed -e 's#@PREFIX@#$(PREFIX)#g'\ 86 -e 's#@VERSION@#$(VERSION)#g'\ 87 -e 's#@GSL_VERSION@#$(GSL_VERSION)#g'\ 88 -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\ 89 -e 's#@S3D_VERSION@#$(S3D_VERSION)#g'\ 90 -e 's#@SSP_VERSION@#$(SSP_VERSION)#g'\ 91 sschiff.pc.in > sschiff.pc 92 93 sschiff-local.pc: sschiff.pc.in 94 sed -e '1d'\ 95 -e 's#^includedir=.*#includedir=./src/#'\ 96 -e 's#^libdir=.*#libdir=./#'\ 97 -e 's#@VERSION@#$(VERSION)#g'\ 98 -e 's#@GSL_VERSION@#$(GSL_VERSION)#g'\ 99 -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\ 100 -e 's#@S3D_VERSION@#$(S3D_VERSION)#g'\ 101 -e 's#@SSP_VERSION@#$(SSP_VERSION)#g'\ 102 sschiff.pc.in > $@ 103 104 install: library pkg 105 install() { mode="$$1"; prefix="$$2"; shift 2; \ 106 mkdir -p "$${prefix}"; \ 107 cp "$$@" "$${prefix}"; \ 108 printf '%s\n' "$${@}" | while read -r i; do \ 109 chmod "$${mode}" "$${prefix}/$${i##*/}"; \ 110 done; \ 111 }; \ 112 if [ "$(LIB_TYPE)" = "STATIC" ]; then mode=644; else mode=755; fi; \ 113 install "$${mode}" "$(DESTDIR)$(LIBPREFIX)" $(LIBNAME); \ 114 install 644 "$(DESTDIR)$(LIBPREFIX)/pkgconfig" sschiff.pc; \ 115 install 644 "$(DESTDIR)$(INCPREFIX)/star" src/sschiff.h; \ 116 install 644 "$(DESTDIR)$(PREFIX)/share/doc/star-schiff" COPYING README.md 117 118 uninstall: 119 rm -f "$(DESTDIR)$(LIBPREFIX)/$(LIBNAME)" 120 rm -f "$(DESTDIR)$(LIBPREFIX)/pkgconfig/sschiff.pc" 121 rm -f "$(DESTDIR)$(INCPREFIX)/star/sschiff.h" 122 rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-schiff/COPYING" 123 rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-schiff/README.md" 124 125 clean: clean_test 126 rm -f $(OBJ) $(DEP) $(LIBNAME) 127 rm -f .config libsschiff.o sschiff.pc sschiff-local.pc 128 129 ################################################################################ 130 # Tests 131 ################################################################################ 132 TEST_SRC =\ 133 src/test_sschiff_device.c\ 134 src/test_sschiff_estimator_cylinder.c\ 135 src/test_sschiff_estimator_rhodo.c\ 136 src/test_sschiff_estimator_sphere.c 137 TEST_OBJ = $(TEST_SRC:.c=.o) 138 TEST_DEP = $(TEST_SRC:.c=.d) 139 TEST_TGT = $(TEST_SRC:.c=.t) 140 141 PKG_CONFIG_LOCAL = PKG_CONFIG_PATH="./:$${PKG_CONFIG_PATH}" $(PKG_CONFIG) 142 INCS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags rsys s3d star-sp sschiff-local) 143 LIBS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rsys s3d star-sp sschiff-local) -lm 144 145 CFLAGS_TEST = $(CFLAGS_EXE) $(INCS_TEST) 146 LDFLAGS_TEST = $(LDFLAGS_EXE) $(LIBS_TEST) 147 148 tests: library $(TEST_DEP) $(TEST_TGT) 149 @$(MAKE) -fMakefile \ 150 $$(for i in $(TEST_DEP); do echo -f"$${i}"; done) \ 151 $$(for i in $(TEST_TGT); do echo -f"$${i}"; done) \ 152 test_list 153 154 $(TEST_TGT): 155 @{ \ 156 exe="$$(basename "$@" ".t")"; \ 157 printf '%s: %s\n' "$${exe}" $(@:.t=.o); \ 158 printf 'test_list: %s\n' "$${exe}"; \ 159 } > $@ 160 161 $(TEST_DEP): config.mk sschiff-local.pc 162 @$(CC) $(CFLAGS_TEST) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@ 163 164 $(TEST_OBJ): config.mk sschiff-local.pc 165 $(CC) $(CFLAGS_TEST) -c $(@:.o=.c) -o $@ 166 167 clean_test: 168 rm -f $(TEST_DEP) $(TEST_OBJ) $(TEST_TGT) mixture.txt 169 for i in $(TEST_SRC); do rm -f "$$(basename "$${i}" ".c")"; done 170 171 test_sschiff_device\ 172 test_sschiff_estimator_cylinder\ 173 test_sschiff_estimator_rhodo\ 174 test_sschiff_estimator_sphere\ 175 : config.mk sschiff-local.pc $(LIBNAME) 176 $(CC) $(CFLAGS_TEST) -o $@ src/$@.o $(LDFLAGS_TEST) 177 178 test: tests 179 @err=0; \ 180 for i in $(TEST_SRC); do \ 181 test="$$(basename "$${i}" ".c")"; \ 182 printf '%s' "$${test}"; \ 183 if "./$${test}" > /dev/null 2>&1; then \ 184 printf '\n'; \ 185 else \ 186 printf ': error %s\n' "$$?"; \ 187 err=$$((err+1)); \ 188 fi \ 189 done; \ 190 [ "$${err}" -eq 0 ]