Makefile (8741B)
1 # Copyright (C) 2018-2026 |Meso|Star> (contact@meso-star.com) 2 # Copyright (C) 2016-2018 CNRS 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 = libssol.a 23 LIBNAME_SHARED = libssol.so 24 LIBNAME = $(LIBNAME_$(LIB_TYPE)) 25 26 default: library 27 all: default tests 28 29 ################################################################################ 30 # Library building 31 ################################################################################ 32 SRC =\ 33 src/ssol_atmosphere.c\ 34 src/ssol_camera.c\ 35 src/ssol_data.c\ 36 src/ssol_device.c\ 37 src/ssol_draw.c\ 38 src/ssol_draw_pt.c\ 39 src/ssol_draw_draft.c\ 40 src/ssol_estimator.c\ 41 src/ssol_image.c\ 42 src/ssol_material.c\ 43 src/ssol_mc_receiver.c\ 44 src/ssol_object.c\ 45 src/ssol_instance.c\ 46 src/ssol_param_buffer.c\ 47 src/ssol_ranst_sun_dir.c\ 48 src/ssol_ranst_sun_wl.c\ 49 src/ssol_scene.c\ 50 src/ssol_shape.c\ 51 src/ssol_spectrum.c\ 52 src/ssol_solver.c\ 53 src/ssol_sun.c 54 OBJ = $(SRC:.c=.o) 55 DEP = $(SRC:.c=.d) 56 57 # Headers to configure 58 HDR=\ 59 src/ssol_version.h 60 61 CFLAGS_LIB = $(CFLAGS_SO) $(INCS) -DSSOL_SHARED_BUILD 62 LDFLAGS_LIB = $(LDFLAGS_SO) $(LIBS) 63 64 $(DEP) $(OBJ): src/.config 65 66 library: $(DEP) 67 @$(MAKE) -fMakefile $$(for i in $(DEP); do echo -f $${i}; done) \ 68 $$(if [ -n "$(LIBNAME)" ]; then \ 69 echo "$(LIBNAME)"; \ 70 else \ 71 echo "$(LIBNAME_SHARED)"; \ 72 fi) 73 74 $(LIBNAME_SHARED): $(OBJ) 75 $(CC) $(CFLAGS_LIB) -o $@ $(OBJ) $(LDFLAGS_LIB) 76 77 $(LIBNAME_STATIC): src/libssol.o 78 $(AR) -rc $@ $? 79 $(RANLIB) $@ 80 81 src/libssol.o: $(DEP) $(OBJ) 82 $(LD) -r $(OBJ) -o $@ 83 $(OBJCOPY) $(OCPFLAGS) $@ 84 85 src/.config: config.mk 86 $(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys 87 $(PKG_CONFIG) --atleast-version $(S3D_VERSION) s3d 88 $(PKG_CONFIG) --atleast-version $(S3DUT_VERSION) s3dut 89 $(PKG_CONFIG) --atleast-version $(SCPR_VERSION) scpr 90 $(PKG_CONFIG) --atleast-version $(SSF_VERSION) ssf 91 $(PKG_CONFIG) --atleast-version $(SSP_VERSION) star-sp 92 @echo "config done" > $@ 93 94 $(DEP) : $(HDR) 95 @$(CC) $(CFLAGS_LIB) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@ 96 97 $(OBJ) : $(HDR) 98 $(CC) $(CFLAGS_LIB) -c $(@:.o=.c) -o $@ 99 100 ################################################################################ 101 # Installation 102 ################################################################################ 103 pkg: src/ssol.pc 104 105 src/ssol.pc: ssol.pc.in 106 sed -e 's#@PREFIX@#$(PREFIX)#g'\ 107 -e 's#@VERSION@#$(VERSION)#g'\ 108 -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\ 109 -e 's#@S3D_VERSION@#$(S3D_VERSION)#g'\ 110 -e 's#@S3DUT_VERSION@#$(S3DUT_VERSION)#g'\ 111 -e 's#@SCPR_VERSION@#$(SCPR_VERSION)#g'\ 112 -e 's#@SSF_VERSION@#$(SSF_VERSION)#g'\ 113 -e 's#@SSP_VERSION@#$(SSP_VERSION)#g'\ 114 ssol.pc.in > $@ 115 116 src/ssol-local.pc: ssol.pc.in 117 sed -e '1d'\ 118 -e 's#^includedir=.*#includedir=./src/#'\ 119 -e 's#^libdir=.*#libdir=./#'\ 120 -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\ 121 -e 's#@S3D_VERSION@#$(S3D_VERSION)#g'\ 122 -e 's#@S3DUT_VERSION@#$(S3DUT_VERSION)#g'\ 123 -e 's#@SCPR_VERSION@#$(SCPR_VERSION)#g'\ 124 -e 's#@SSF_VERSION@#$(SSF_VERSION)#g'\ 125 -e 's#@SSP_VERSION@#$(SSP_VERSION)#g'\ 126 ssol.pc.in > $@ 127 128 src/ssol_version.h: src/ssol_version.h.in 129 sed -e 's#@VERSION_MAJOR@#$(VERSION_MAJOR)#g' \ 130 -e 's#@VERSION_MINOR@#$(VERSION_MINOR)#g' \ 131 -e 's#@VERSION_PATCH@#$(VERSION_PATCH)#g' \ 132 src/ssol_version.h.in > $@ 133 134 install: library pkg 135 install() { mode="$$1"; prefix="$$2"; shift 2; \ 136 mkdir -p "$${prefix}"; \ 137 cp "$$@" "$${prefix}"; \ 138 chmod "$${mode}" "$${prefix}/$${@##*/}"; \ 139 }; \ 140 if [ "$(LIB_TYPE)" = "STATIC" ]; then mode=644; else mode=755; fi; \ 141 install "$${mode}" "$(DESTDIR)$(LIBPREFIX)" $(LIBNAME); \ 142 install 644 "$(DESTDIR)$(LIBPREFIX)/pkgconfig" src/ssol.pc; \ 143 install 644 "$(DESTDIR)$(INCPREFIX)/solstice" src/ssol.h; \ 144 install 644 "$(DESTDIR)$(INCPREFIX)/solstice" src/ssol_version.h; \ 145 install 644 "$(DESTDIR)$(PREFIX)/share/doc/solstice-solver" COPYING; \ 146 install 644 "$(DESTDIR)$(PREFIX)/share/doc/solstice-solver" README.md 147 148 uninstall: 149 rm -f "$(DESTDIR)$(LIBPREFIX)/$(LIBNAME)" 150 rm -f "$(DESTDIR)$(LIBPREFIX)/pkgconfig/ssol.pc" 151 rm -f "$(DESTDIR)$(INCPREFIX)/solstice/ssol.h" 152 rm -f "$(DESTDIR)$(INCPREFIX)/solstice/ssol_version.h" 153 rm -f "$(DESTDIR)$(PREFIX)/share/doc/solstice-solver/COPYING" 154 rm -f "$(DESTDIR)$(PREFIX)/share/doc/solstice-solver/README.md" 155 156 clean: clean_test 157 rm -f $(HDR) $(DEP) $(OBJ) $(LIBNAME) 158 rm -f src/.config src/libssol.o src/ssol.pc src/ssol-local.pc 159 160 ################################################################################ 161 # Tests 162 ################################################################################ 163 TEST_SRC =\ 164 src/test_ssol_atmosphere.c\ 165 src/test_ssol_by_receiver_integration.c\ 166 src/test_ssol_camera.c\ 167 src/test_ssol_data.c\ 168 src/test_ssol_device.c\ 169 src/test_ssol_image.c\ 170 src/test_ssol_material.c\ 171 src/test_ssol_object.c\ 172 src/test_ssol_param_buffer.c\ 173 src/test_ssol_instance.c\ 174 src/test_ssol_scene.c\ 175 src/test_ssol_shape.c\ 176 src/test_ssol_spectrum.c\ 177 src/test_ssol_solver1.c\ 178 src/test_ssol_solver2.c\ 179 src/test_ssol_solver2b.c\ 180 src/test_ssol_solver3.c\ 181 src/test_ssol_solver4.c\ 182 src/test_ssol_solver5.c\ 183 src/test_ssol_solver6.c\ 184 src/test_ssol_solver7.c\ 185 src/test_ssol_solver8.c\ 186 src/test_ssol_solver9.c\ 187 src/test_ssol_solver10.c\ 188 src/test_ssol_solver11.c\ 189 src/test_ssol_solver12.c\ 190 src/test_ssol_sun.c\ 191 src/test_ssol_draw.c 192 TEST_OBJ =\ 193 $(TEST_SRC:.c=.o) 194 TEST_DEP =\ 195 $(TEST_SRC:.c=.d) 196 TEST_TGT =\ 197 $(TEST_SRC:.c=.t) 198 199 $(TEST_DEP) $(TEST_OBJ): src/.config_test 200 201 # Regular cflags 202 PKG_CONFIG_LOCAL = PKG_CONFIG_PATH="./src:$${PKG_CONFIG_PATH}" $(PKG_CONFIG) 203 INCS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags rsys star-sp ssol-local) 204 LIBS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rsys star-sp ssol-local)\ 205 -lm 206 207 tests: library src/ssol-local.pc $(TEST_DEP) $(TEST_TGT) 208 @$(MAKE) -fMakefile \ 209 $$(for i in $(TEST_DEP); do echo -f"$${i}"; done) \ 210 $$(for i in $(TEST_TGT); do echo -f"$${i}"; done) \ 211 test_list 212 213 $(TEST_TGT): 214 @{ \ 215 exe="$$(basename "$@" ".t")"; \ 216 printf '%s: %s\n' "$${exe}" $(@:.t=.o); \ 217 printf 'test_list: %s\n' "$${exe}"; \ 218 } > $@ 219 220 src/.config_test: config.mk 221 $(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys 222 $(PKG_CONFIG) --atleast-version $(SSP_VERSION) star-sp 223 @echo "config done" > $@ 224 225 clean_test: 226 rm -f $(TEST_DEP) $(TEST_OBJ) $(TEST_TGT) 227 for i in $(TEST_SRC); do rm -f "$$(basename "$${i}" ".c")"; done 228 rm -f src/.config_test 229 230 test: tests 231 @err=0; \ 232 check() { name="$$1"; prog="$$2"; shift 2; \ 233 printf '%s' "$${name}"; \ 234 if PATH=./:"$${PATH}" "$${prog}" $$@ > /dev/null 2>&1; then \ 235 printf '\n'; \ 236 else \ 237 printf ': error %s\n' "$$?"; \ 238 err=$$((err+1)); \ 239 fi; \ 240 }; \ 241 \ 242 for i in $(TEST_SRC); do \ 243 test="$$(basename "$${i}" ".c")"; \ 244 if [ "$${test}" != "test_ssol_draw" ]; then \ 245 check "$${test}" "$${test}"; \ 246 else \ 247 check test_ssol_draw_draft test_ssol_draw draft; \ 248 check test_ssol_draw_pt test_ssol_draw pt; \ 249 fi \ 250 done; \ 251 \ 252 [ "$${err}" -eq 0 ] 253 254 ################################################################################ 255 # Regular tests 256 ################################################################################ 257 CFLAGS_TEST = $(CFLAGS_EXE) $(INCS_TEST) 258 LDFLAGS_TEST = $(LDFLAGS_EXE) $(LIBS_TEST) 259 260 $(TEST_DEP) : src/.config_test src/ssol-local.pc 261 @$(CC) $(CFLAGS_TEST) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@ 262 263 $(TEST_OBJ) : src/.config_test src/ssol-local.pc 264 $(CC) $(CFLAGS_TEST) -c $(@:.o=.c) -o $@ 265 266 test_ssol_atmosphere \ 267 test_ssol_by_receiver_integration \ 268 test_ssol_camera \ 269 test_ssol_data \ 270 test_ssol_device \ 271 test_ssol_image \ 272 test_ssol_material \ 273 test_ssol_object \ 274 test_ssol_param_buffer \ 275 test_ssol_instance \ 276 test_ssol_scene \ 277 test_ssol_shape \ 278 test_ssol_spectrum \ 279 test_ssol_solver1 \ 280 test_ssol_solver2 \ 281 test_ssol_solver2b \ 282 test_ssol_solver3 \ 283 test_ssol_solver4 \ 284 test_ssol_solver5 \ 285 test_ssol_solver6 \ 286 test_ssol_solver7 \ 287 test_ssol_solver8 \ 288 test_ssol_solver9 \ 289 test_ssol_solver10 \ 290 test_ssol_solver11 \ 291 test_ssol_solver12 \ 292 test_ssol_sun \ 293 test_ssol_draw \ 294 : src/.config_test src/ssol-local.pc $(LIBNAME) 295 $(CC) $(CFLAGS_TEST) -o $@ src/$@.o $(LDFLAGS_TEST)