Makefile (8887B)
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 $(PKG_CONFIG) --atleast-version $(SCEM_VERSION) scem 93 @echo "config done" > $@ 94 95 $(DEP) : $(HDR) 96 @$(CC) $(CFLAGS_LIB) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@ 97 98 $(OBJ) : $(HDR) 99 $(CC) $(CFLAGS_LIB) -c $(@:.o=.c) -o $@ 100 101 ################################################################################ 102 # Installation 103 ################################################################################ 104 pkg: src/ssol.pc 105 106 src/ssol.pc: ssol.pc.in 107 sed -e 's#@PREFIX@#$(PREFIX)#g'\ 108 -e 's#@VERSION@#$(VERSION)#g'\ 109 -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\ 110 -e 's#@S3D_VERSION@#$(S3D_VERSION)#g'\ 111 -e 's#@S3DUT_VERSION@#$(S3DUT_VERSION)#g'\ 112 -e 's#@SCPR_VERSION@#$(SCPR_VERSION)#g'\ 113 -e 's#@SSF_VERSION@#$(SSF_VERSION)#g'\ 114 -e 's#@SSP_VERSION@#$(SSP_VERSION)#g'\ 115 -e 's#@SCEM_VERSION@#$(SCEM_VERSION)#g'\ 116 ssol.pc.in > $@ 117 118 src/ssol-local.pc: ssol.pc.in 119 sed -e '1d'\ 120 -e 's#^includedir=.*#includedir=./src/#'\ 121 -e 's#^libdir=.*#libdir=./#'\ 122 -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\ 123 -e 's#@S3D_VERSION@#$(S3D_VERSION)#g'\ 124 -e 's#@S3DUT_VERSION@#$(S3DUT_VERSION)#g'\ 125 -e 's#@SCPR_VERSION@#$(SCPR_VERSION)#g'\ 126 -e 's#@SSF_VERSION@#$(SSF_VERSION)#g'\ 127 -e 's#@SSP_VERSION@#$(SSP_VERSION)#g'\ 128 -e 's#@SCEM_VERSION@#$(SCEM_VERSION)#g'\ 129 ssol.pc.in > $@ 130 131 src/ssol_version.h: src/ssol_version.h.in 132 sed -e 's#@VERSION_MAJOR@#$(VERSION_MAJOR)#g' \ 133 -e 's#@VERSION_MINOR@#$(VERSION_MINOR)#g' \ 134 -e 's#@VERSION_PATCH@#$(VERSION_PATCH)#g' \ 135 src/ssol_version.h.in > $@ 136 137 install: library pkg 138 install() { mode="$$1"; prefix="$$2"; shift 2; \ 139 mkdir -p "$${prefix}"; \ 140 cp "$$@" "$${prefix}"; \ 141 chmod "$${mode}" "$${prefix}/$${@##*/}"; \ 142 }; \ 143 if [ "$(LIB_TYPE)" = "STATIC" ]; then mode=644; else mode=755; fi; \ 144 install "$${mode}" "$(DESTDIR)$(LIBPREFIX)" $(LIBNAME); \ 145 install 644 "$(DESTDIR)$(LIBPREFIX)/pkgconfig" src/ssol.pc; \ 146 install 644 "$(DESTDIR)$(INCPREFIX)/solstice" src/ssol.h; \ 147 install 644 "$(DESTDIR)$(INCPREFIX)/solstice" src/ssol_version.h; \ 148 install 644 "$(DESTDIR)$(PREFIX)/share/doc/solstice-solver" COPYING; \ 149 install 644 "$(DESTDIR)$(PREFIX)/share/doc/solstice-solver" README.md 150 151 uninstall: 152 rm -f "$(DESTDIR)$(LIBPREFIX)/$(LIBNAME)" 153 rm -f "$(DESTDIR)$(LIBPREFIX)/pkgconfig/ssol.pc" 154 rm -f "$(DESTDIR)$(INCPREFIX)/solstice/ssol.h" 155 rm -f "$(DESTDIR)$(INCPREFIX)/solstice/ssol_version.h" 156 rm -f "$(DESTDIR)$(PREFIX)/share/doc/solstice-solver/COPYING" 157 rm -f "$(DESTDIR)$(PREFIX)/share/doc/solstice-solver/README.md" 158 159 clean: clean_test 160 rm -f $(HDR) $(DEP) $(OBJ) $(LIBNAME) 161 rm -f src/.config src/libssol.o src/ssol.pc src/ssol-local.pc 162 163 ################################################################################ 164 # Tests 165 ################################################################################ 166 TEST_SRC =\ 167 src/test_ssol_atmosphere.c\ 168 src/test_ssol_by_receiver_integration.c\ 169 src/test_ssol_camera.c\ 170 src/test_ssol_data.c\ 171 src/test_ssol_device.c\ 172 src/test_ssol_image.c\ 173 src/test_ssol_material.c\ 174 src/test_ssol_object.c\ 175 src/test_ssol_param_buffer.c\ 176 src/test_ssol_instance.c\ 177 src/test_ssol_scene.c\ 178 src/test_ssol_shape.c\ 179 src/test_ssol_spectrum.c\ 180 src/test_ssol_solver1.c\ 181 src/test_ssol_solver2.c\ 182 src/test_ssol_solver2b.c\ 183 src/test_ssol_solver3.c\ 184 src/test_ssol_solver4.c\ 185 src/test_ssol_solver5.c\ 186 src/test_ssol_solver6.c\ 187 src/test_ssol_solver7.c\ 188 src/test_ssol_solver8.c\ 189 src/test_ssol_solver9.c\ 190 src/test_ssol_solver10.c\ 191 src/test_ssol_solver11.c\ 192 src/test_ssol_solver12.c\ 193 src/test_ssol_sun.c\ 194 src/test_ssol_draw.c 195 TEST_OBJ =\ 196 $(TEST_SRC:.c=.o) 197 TEST_DEP =\ 198 $(TEST_SRC:.c=.d) 199 TEST_TGT =\ 200 $(TEST_SRC:.c=.t) 201 202 $(TEST_DEP) $(TEST_OBJ): src/.config_test 203 204 # Regular cflags 205 PKG_CONFIG_LOCAL = PKG_CONFIG_PATH="./src:$${PKG_CONFIG_PATH}" $(PKG_CONFIG) 206 INCS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags rsys star-sp ssol-local) 207 LIBS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rsys star-sp ssol-local)\ 208 -lm 209 210 tests: library src/ssol-local.pc $(TEST_DEP) $(TEST_TGT) 211 @$(MAKE) -fMakefile \ 212 $$(for i in $(TEST_DEP); do echo -f"$${i}"; done) \ 213 $$(for i in $(TEST_TGT); do echo -f"$${i}"; done) \ 214 test_list 215 216 $(TEST_TGT): 217 @{ \ 218 exe="$$(basename "$@" ".t")"; \ 219 printf '%s: %s\n' "$${exe}" $(@:.t=.o); \ 220 printf 'test_list: %s\n' "$${exe}"; \ 221 } > $@ 222 223 src/.config_test: config.mk 224 $(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys 225 $(PKG_CONFIG) --atleast-version $(SSP_VERSION) star-sp 226 @echo "config done" > $@ 227 228 clean_test: 229 rm -f $(TEST_DEP) $(TEST_OBJ) $(TEST_TGT) 230 for i in $(TEST_SRC); do rm -f "$$(basename "$${i}" ".c")"; done 231 rm -f src/.config_test 232 233 test: tests 234 @err=0; \ 235 check() { name="$$1"; prog="$$2"; shift 2; \ 236 printf '%s' "$${name}"; \ 237 if PATH=./:"$${PATH}" "$${prog}" $$@ > /dev/null 2>&1; then \ 238 printf '\n'; \ 239 else \ 240 printf ': error %s\n' "$$?"; \ 241 err=$$((err+1)); \ 242 fi; \ 243 }; \ 244 \ 245 for i in $(TEST_SRC); do \ 246 test="$$(basename "$${i}" ".c")"; \ 247 if [ "$${test}" != "test_ssol_draw" ]; then \ 248 check "$${test}" "$${test}"; \ 249 else \ 250 check test_ssol_draw_draft test_ssol_draw draft; \ 251 check test_ssol_draw_pt test_ssol_draw pt; \ 252 fi \ 253 done; \ 254 \ 255 [ "$${err}" -eq 0 ] 256 257 ################################################################################ 258 # Regular tests 259 ################################################################################ 260 CFLAGS_TEST = $(CFLAGS_EXE) $(INCS_TEST) 261 LDFLAGS_TEST = $(LDFLAGS_EXE) $(LIBS_TEST) 262 263 $(TEST_DEP) : src/.config_test src/ssol-local.pc 264 @$(CC) $(CFLAGS_TEST) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@ 265 266 $(TEST_OBJ) : src/.config_test src/ssol-local.pc 267 $(CC) $(CFLAGS_TEST) -c $(@:.o=.c) -o $@ 268 269 test_ssol_atmosphere \ 270 test_ssol_by_receiver_integration \ 271 test_ssol_camera \ 272 test_ssol_data \ 273 test_ssol_device \ 274 test_ssol_image \ 275 test_ssol_material \ 276 test_ssol_object \ 277 test_ssol_param_buffer \ 278 test_ssol_instance \ 279 test_ssol_scene \ 280 test_ssol_shape \ 281 test_ssol_spectrum \ 282 test_ssol_solver1 \ 283 test_ssol_solver2 \ 284 test_ssol_solver2b \ 285 test_ssol_solver3 \ 286 test_ssol_solver4 \ 287 test_ssol_solver5 \ 288 test_ssol_solver6 \ 289 test_ssol_solver7 \ 290 test_ssol_solver8 \ 291 test_ssol_solver9 \ 292 test_ssol_solver10 \ 293 test_ssol_solver11 \ 294 test_ssol_solver12 \ 295 test_ssol_sun \ 296 test_ssol_draw \ 297 : src/.config_test src/ssol-local.pc $(LIBNAME) 298 $(CC) $(CFLAGS_TEST) -o $@ src/$@.o $(LDFLAGS_TEST)