solstice-solver

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

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)