star-line

Structure for accelerating line importance sampling
git clone git://git.meso-star.com/star-line.git
Log | Files | Refs | README | LICENSE

Makefile (9458B)


      1 # Copyright (C) 2022, 2026 |Méso|Star> (contact@meso-star.com)
      2 # Copyright (C) 2026 Université de Lorraine
      3 # Copyright (C) 2022 Centre National de la Recherche Scientifique
      4 # Copyright (C) 2022 Université Paul Sabatier
      5 #
      6 # This file is part of Star-Line.
      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 = libsln.a
     27 LIBNAME_SHARED = libsln.so
     28 LIBNAME = $(LIBNAME_$(LIB_TYPE))
     29 
     30 default: library utils
     31 all: default tests
     32 
     33 ################################################################################
     34 # Library building
     35 ################################################################################
     36 SRC =\
     37  src/sln_device.c\
     38  src/sln_faddeeva.c\
     39  src/sln_line.c\
     40  src/sln_mixture.c\
     41  src/sln_polyline.c\
     42  src/sln_tree_build.c\
     43  src/sln_tree.c
     44 OBJ = $(SRC:.c=.o)
     45 DEP = $(SRC:.c=.d)
     46 
     47 CFLAGS_LIB = -std=c99 $(CFLAGS_SO) $(INCS) -DSLN_SHARED_BUILD
     48 LDFLAGS_LIB = $(LDFLAGS_SO) $(LIBS)
     49 
     50 library: .config $(DEP)
     51 	@$(MAKE) -fMakefile $$(for i in $(DEP); do echo -f $${i}; done) \
     52 	$$(if [ -n "$(LIBNAME)" ]; then\
     53 	     echo "$(LIBNAME)";\
     54 	   else\
     55 	     echo "$(LIBNAME_SHARED)";\
     56 	   fi)
     57 
     58 $(DEP) $(OBJ): config.mk
     59 
     60 $(LIBNAME_SHARED): $(OBJ)
     61 	$(CC) $(CFLAGS_LIB) -o $@ $(OBJ) $(LDFLAGS_LIB)
     62 
     63 $(LIBNAME_STATIC): libsln.o
     64 	$(AR) -rc $@ $?
     65 	$(RANLIB) $@
     66 
     67 libsln.o: $(OBJ)
     68 	$(LD) -r $(OBJ) -o $@
     69 	$(OBJCOPY) $(OCPFLAGS) $@
     70 
     71 .config: config.mk
     72 	$(PKG_CONFIG) --atleast-version $(LBLU_VERSION) lblu
     73 	$(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys
     74 	$(PKG_CONFIG) --atleast-version $(SBB_VERSION) sbb
     75 	$(PKG_CONFIG) --atleast-version $(SHTR_VERSION) shtr
     76 	$(PKG_CONFIG) --atleast-version $(SSP_VERSION) star-sp
     77 	echo "config done" > $@
     78 
     79 .SUFFIXES: .c .d .o
     80 .c.d:
     81 	@$(CC) $(CFLAGS_LIB) -MM -MT "$(@:.d=.o) $@" $< -MF $@
     82 
     83 .c.o:
     84 	$(CC) $(CFLAGS_LIB) -c $< -o $@
     85 
     86 ################################################################################
     87 # Utils
     88 ################################################################################
     89 UTIL_SRC = src/sln_build.c src/sln_get.c src/sln_slab.c src/sln_stat.c
     90 UTIL_OBJ = $(UTIL_SRC:.c=.o)
     91 UTIL_DEP = $(UTIL_SRC:.c=.d)
     92 
     93 PKG_CONFIG_LOCAL = PKG_CONFIG_PATH="./:$${PKG_CONFIG_PATH}" $(PKG_CONFIG)
     94 
     95 INCS_UTIL = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags rsys sln-local shtr)
     96 LIBS_UTIL = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rsys sln-local shtr)
     97 CFLAGS_UTIL = -std=c89 $(CFLAGS_EXE) $(INCS_UTIL)
     98 LDFLAGS_UTIL = $(LDFLAGS_EXE) $(LIBS_UTIL)
     99 
    100 INCS_SLAB = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags rsys sln-local sbb shtr star-sp)
    101 LIBS_SLAB = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rsys sln-local sbb shtr star-sp) -lm
    102 CFLAGS_SLAB = -std=c89 $(CFLAGS_EXE) $(INCS_SLAB) -fopenmp
    103 LDFLAGS_SLAB = $(LDFLAGS_EXE) $(LIBS_SLAB)
    104 
    105 utils: library $(UTIL_DEP) .config
    106 	@$(MAKE) -fMakefile \
    107 	$$(for i in $(UTIL_DEP); do printf -- '-f%s\n' "$${i}"; done) \
    108 	sln-build sln-get sln-slab sln-stat
    109 
    110 $(UTIL_DEP) $(UTIL_OBJ): config.mk sln-local.pc
    111 
    112 src/sln_build.d src/sln_build.o: src/sln_build.c
    113 src/sln_get.d src/sln_get.o: src/sln_get.c
    114 src/sln_slab.d src/sln_slab.o: src/sln_slab.c
    115 src/sln_stat.d src/sln_stat.o: src/sln_stat.c
    116 
    117 sln-build: config.mk sln-local.pc src/sln_build.o $(LIBNAME)
    118 	$(CC) $(CFLAGS_UTIL) -o $@ src/sln_build.o $(LDFLAGS_UTIL)
    119 
    120 sln-get: config.mk sln-local.pc src/sln_get.o $(LIBNAME)
    121 	$(CC) $(CFLAGS_UTIL) -o $@ src/sln_get.o $(LDFLAGS_UTIL)
    122 
    123 sln-slab: config.mk sln-local.pc src/sln_slab.o $(LIBNAME)
    124 	$(CC) $(CFLAGS_SLAB) -o $@ src/sln_slab.o $(LDFLAGS_SLAB)
    125 
    126 sln-stat: config.mk sln-local.pc src/sln_stat.o $(LIBNAME)
    127 	$(CC) $(CFLAGS_SLAB) -o $@ src/sln_stat.o $(LDFLAGS_SLAB)
    128 
    129 src/sln_build.d src/sln_get.d:
    130 	@$(CC) $(CFLAGS_UTIL) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@
    131 
    132 src/sln_slab.d src/sln_stat.d:
    133 	@$(CC) $(CFLAGS_SLAB) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@
    134 
    135 src/sln_build.o src/sln_get.o:
    136 	$(CC) $(CFLAGS_UTIL) -c $(@:.o=.c) -o $@
    137 
    138 src/sln_slab.o src/sln_stat.o:
    139 	$(CC) $(CFLAGS_SLAB) -c $(@:.o=.c) -o $@
    140 
    141 clean_utils:
    142 	rm -f $(UTIL_OBJ) $(UTIL_DEP) sln-build sln-get sln-slab sln-stat
    143 
    144 ################################################################################
    145 # Installation
    146 ################################################################################
    147 pkg:
    148 	sed -e 's#@PREFIX@#$(PREFIX)#g' \
    149 	    -e 's#@VERSION@#$(VERSION)#g' \
    150 	    -e 's#@LBLU_VERSION@#$(LBLU_VERSION)#g' \
    151 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g' \
    152 	    -e 's#@SHTR_VERSION@#$(SHTR_VERSION)#g' \
    153 	    -e 's#@SSP_VERSION@#$(SSP_VERSION)#g' \
    154 	    sln.pc.in > sln.pc
    155 
    156 sln-local.pc: sln.pc.in
    157 	sed -e '1d' \
    158 	    -e 's#^includedir=.*#includedir=./src/#' \
    159 	    -e 's#^libdir=.*#libdir=./#' \
    160 	    -e 's#@VERSION@#$(VERSION)#g' \
    161 	    -e 's#@LBLU_VERSION@#$(LBLU_VERSION)#g' \
    162 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g' \
    163 	    -e 's#@SHTR_VERSION@#$(SHTR_VERSION)#g' \
    164 	    -e 's#@SSP_VERSION@#$(SSP_VERSION)#g' \
    165 	    sln.pc.in > $@
    166 
    167 install: library pkg utils
    168 	install() { mode="$$1"; prefix="$$2"; shift 2; \
    169 	  mkdir -p "$${prefix}"; \
    170 	  cp "$$@" "$${prefix}"; \
    171 	  printf '%s\n' "$${@}" | while read -r i; do \
    172 	    chmod "$${mode}" "$${prefix}/$${i##*/}"; \
    173 	  done; \
    174 	}; \
    175 	if [ "$(LIB_TYPE)" = "STATIC" ]; then mode=644; else mode=755; fi; \
    176 	install "$${mode}" "$(DESTDIR)$(LIBPREFIX)" $(LIBNAME); \
    177 	install 755 "$(DESTDIR)$(BINPREFIX)" sln-build; \
    178 	install 755 "$(DESTDIR)$(BINPREFIX)" sln-get; \
    179 	install 755 "$(DESTDIR)$(BINPREFIX)" sln-slab; \
    180 	install 755 "$(DESTDIR)$(BINPREFIX)" sln-stat; \
    181 	install 644 "$(DESTDIR)$(LIBPREFIX)/pkgconfig" sln.pc; \
    182 	install 644 "$(DESTDIR)$(INCPREFIX)/star" src/sln.h; \
    183 	install 644 "$(DESTDIR)$(MANPREFIX)/man1" doc/sln-build.1; \
    184 	install 644 "$(DESTDIR)$(MANPREFIX)/man1" doc/sln-get.1; \
    185 	install 644 "$(DESTDIR)$(MANPREFIX)/man1" doc/sln-slab.1; \
    186 	install 644 "$(DESTDIR)$(MANPREFIX)/man1" doc/sln-stat.1; \
    187 	install 644 "$(DESTDIR)$(MANPREFIX)/man5" doc/sln-mixture.5; \
    188 	install 644 "$(DESTDIR)$(PREFIX)/share/doc/star-line" COPYING README.md
    189 
    190 uninstall:
    191 	rm -f "$(DESTDIR)$(LIBPREFIX)/$(LIBNAME)"
    192 	rm -f "$(DESTDIR)$(BINPREFIX)/sln-build"
    193 	rm -f "$(DESTDIR)$(BINPREFIX)/sln-get"
    194 	rm -f "$(DESTDIR)$(BINPREFIX)/sln-slab"
    195 	rm -f "$(DESTDIR)$(BINPREFIX)/sln-stat"
    196 	rm -f "$(DESTDIR)$(LIBPREFIX)/pkgconfig/sln.pc"
    197 	rm -f "$(DESTDIR)$(BINPREFIX)/sln"
    198 	rm -f "$(DESTDIR)$(INCPREFIX)/star/sln.h"
    199 	rm -f "$(DESTDIR)$(MANPREFIX)/man1/sln-build.1"
    200 	rm -f "$(DESTDIR)$(MANPREFIX)/man1/sln-get.1"
    201 	rm -f "$(DESTDIR)$(MANPREFIX)/man1/sln-slab.1"
    202 	rm -f "$(DESTDIR)$(MANPREFIX)/man1/sln-stat.1"
    203 	rm -f "$(DESTDIR)$(MANPREFIX)/man5/sln-mixture.5"
    204 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-line/COPYING"
    205 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-line/README.md"
    206 
    207 clean: clean_test clean_utils
    208 	rm -f $(OBJ) $(DEP) $(LIBNAME)
    209 	rm -f .config libsln.o sln.pc sln-local.pc
    210 
    211 lint:
    212 	mandoc -Tlint -Wwarning doc/sln-build.1
    213 	mandoc -Tlint -Wwarning doc/sln-get.1
    214 	mandoc -Tlint -Wwarning doc/sln-slab.1
    215 	mandoc -Tlint -Wwarning doc/sln-stat.1
    216 	mandoc -Tlint doc/sln-mixture.5
    217 
    218 ################################################################################
    219 # Tests
    220 ################################################################################
    221 TEST_SRC =\
    222  src/test_sln_device.c\
    223  src/test_sln_mesh.c\
    224  src/test_sln_mixture.c\
    225  src/test_sln_thermo_props.c\
    226  src/test_sln_tree.c\
    227  src/test_sln_tree_sample.c
    228 TEST_OBJ = $(TEST_SRC:.c=.o)
    229 TEST_DEP = $(TEST_SRC:.c=.d)
    230 TEST_TGT = $(TEST_SRC:.c=.t)
    231 
    232 INCS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags rsys sln-local shtr star-sp)
    233 LIBS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rsys sln-local shtr star-sp)
    234 
    235 CFLAGS_TEST = -std=c89 $(CFLAGS_EXE) $(INCS_TEST)
    236 LDFLAGS_TEST = $(LDFLAGS_EXE) $(LIBS_TEST)
    237 
    238 tests: library $(TEST_DEP) $(TEST_TGT)
    239 	@$(MAKE) -fMakefile \
    240 	$$(for i in $(TEST_DEP); do echo -f"$${i}"; done) \
    241 	$$(for i in $(TEST_TGT); do echo -f"$${i}"; done) \
    242 	test_list
    243 
    244 $(TEST_TGT):
    245 	@{ \
    246 	  exe="$$(basename "$@" ".t")"; \
    247 	  printf '%s: %s\n' "$${exe}" $(@:.t=.o); \
    248 	  printf 'test_list: %s\n' "$${exe}"; \
    249 	} > $@
    250 
    251 $(TEST_DEP): config.mk sln-local.pc
    252 	@$(CC) $(CFLAGS_TEST) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@
    253 
    254 $(TEST_OBJ): config.mk sln-local.pc
    255 	$(CC) $(CFLAGS_TEST) -c $(@:.o=.c) -o $@
    256 
    257 test_sln_device \
    258 test_sln_mesh \
    259 test_sln_mixture \
    260 test_sln_thermo_props\
    261 test_sln_tree_sample \
    262 : config.mk sln-local.pc $(LIBNAME)
    263 	$(CC) $(CFLAGS_TEST) -o $@ src/$@.o $(LDFLAGS_TEST)
    264 
    265 test_sln_tree \
    266 : config.mk sln-local.pc $(LIBNAME)
    267 	$(CC) $(CFLAGS_TEST) -o $@ src/$@.o $(LDFLAGS_TEST) -lm
    268 
    269 clean_test:
    270 	rm -f $(TEST_DEP) $(TEST_OBJ) $(TEST_TGT) mixture.txt
    271 	for i in $(TEST_SRC); do rm -f "$$(basename "$${i}" ".c")"; done
    272 
    273 test: tests
    274 	@err=0; \
    275 	for i in $(TEST_SRC); do \
    276 	  test="$$(basename "$${i}" ".c")"; \
    277 	  printf '%s' "$${test}"; \
    278 	  if "./$${test}" > /dev/null 2>&1; then \
    279 	    printf '\n'; \
    280 	  else \
    281 	    printf ': error %s\n' "$$?"; \
    282 	    err=$$((err+1)); \
    283 	  fi \
    284 	done; \
    285 	[ "$${err}" -eq 0 ]