solstice-solver

Solver library of the solstice app
git clone git://git.meso-star.com/solstice-solver.git
Log | Files | Refs | README | LICENSE

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)