star-line

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

Makefile (7161B)


      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 program is free software: you can redistribute it and/or modify
      7 # it under the terms of the GNU General Public License as published by
      8 # the Free Software Foundation, either version 3 of the License, or
      9 # (at your option) any later version.
     10 #
     11 # This program is distributed in the hope that it will be useful,
     12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     14 # GNU General Public License for more details.
     15 #
     16 # You should have received a copy of the GNU General Public License
     17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
     18 
     19 .POSIX:
     20 .SUFFIXES: # Clean up default inference rules
     21 
     22 include config.mk
     23 
     24 LIBNAME_STATIC = libsln.a
     25 LIBNAME_SHARED = libsln.so
     26 LIBNAME = $(LIBNAME_$(LIB_TYPE))
     27 
     28 default: library
     29 all: library tests utils
     30 
     31 ################################################################################
     32 # Library building
     33 ################################################################################
     34 SRC =\
     35  src/sln_device.c\
     36  src/sln_faddeeva.c\
     37  src/sln_line.c\
     38  src/sln_mixture.c\
     39  src/sln_polyline.c\
     40  src/sln_tree_build.c\
     41  src/sln_tree.c
     42 OBJ = $(SRC:.c=.o)
     43 DEP = $(SRC:.c=.d)
     44 
     45 CFLAGS_LIB = -std=c99 $(CFLAGS_SO) $(INCS) -DSLN_SHARED_BUILD
     46 LDFLAGS_LIB = $(LDFLAGS_SO) $(LIBS)
     47 
     48 library: .config $(DEP)
     49 	@$(MAKE) -fMakefile $$(for i in $(DEP); do echo -f $${i}; done) \
     50 	$$(if [ -n "$(LIBNAME)" ]; then\
     51 	     echo "$(LIBNAME)";\
     52 	   else\
     53 	     echo "$(LIBNAME_SHARED)";\
     54 	   fi)
     55 
     56 $(DEP) $(OBJ): config.mk
     57 
     58 $(LIBNAME_SHARED): $(OBJ)
     59 	$(CC) $(CFLAGS_LIB) -o $@ $(OBJ) $(LDFLAGS_LIB)
     60 
     61 $(LIBNAME_STATIC): libsln.o
     62 	$(AR) -rc $@ $?
     63 	$(RANLIB) $@
     64 
     65 libsln.o: $(OBJ)
     66 	$(LD) -r $(OBJ) -o $@
     67 	$(OBJCOPY) $(OCPFLAGS) $@
     68 
     69 .config: config.mk
     70 	$(PKG_CONFIG) --atleast-version $(LBLU_VERSION) lblu
     71 	$(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys
     72 	$(PKG_CONFIG) --atleast-version $(SHTR_VERSION) shtr
     73 	echo "config done" > $@
     74 
     75 .SUFFIXES: .c .d .o
     76 .c.d:
     77 	@$(CC) $(CFLAGS_LIB) -MM -MT "$(@:.d=.o) $@" $< -MF $@
     78 
     79 .c.o:
     80 	$(CC) $(CFLAGS_LIB) -c $< -o $@
     81 
     82 ################################################################################
     83 # Utils
     84 ################################################################################
     85 UTIL_SRC = src/sln_build.c
     86 UTIL_OBJ = $(UTIL_SRC:.c=.o)
     87 UTIL_DEP = $(UTIL_SRC:.c=.d)
     88 
     89 PKG_CONFIG_LOCAL = PKG_CONFIG_PATH="./:$${PKG_CONFIG_PATH}" $(PKG_CONFIG)
     90 
     91 INCS_UTIL = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags rsys sln-local shtr)
     92 LIBS_UTIL = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rsys sln-local shtr)
     93 
     94 CFLAGS_UTIL = -std=c89 $(CFLAGS_EXE) $(INCS_UTIL)
     95 LDFLAGS_UTIL = $(LDFLAGS_EXE) $(LIBS_UTIL)
     96 
     97 utils: library $(UTIL_DEP)
     98 	@$(MAKE) -fMakefile \
     99 	$$(for i in $(UTIL_DEP); do printf -- '-f%s\n' "$${i}"; done) \
    100 	sln-build
    101 
    102 sln-build: config.mk sln-local.pc src/sln_build.o $(LIBNAME)
    103 	$(CC) $(CFLAGS_UTIL) -o $@ src/sln_build.o $(LDFLAGS_UTIL)
    104 
    105 $(UTIL_DEP): config.mk sln-local.pc
    106 	@$(CC) $(CFLAGS_UTIL) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@
    107 
    108 $(UTIL_OBJ): config.mk sln-local.pc
    109 	$(CC) $(CFLAGS_UTIL) -c $(@:.o=.c) -o $@
    110 
    111 clean_utils:
    112 	rm -f $(UTIL_OBJ) $(UTIL_DEP) sln-build
    113 
    114 ################################################################################
    115 # Installation
    116 ################################################################################
    117 pkg:
    118 	sed -e 's#@PREFIX@#$(PREFIX)#g' \
    119 	    -e 's#@VERSION@#$(VERSION)#g' \
    120 	    -e 's#@LBLU_VERSION@#$(LBLU_VERSION)#g' \
    121 	    -e 's#@SHTR_VERSION@#$(SHTR_VERSION)#g' \
    122 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g' \
    123 	    sln.pc.in > sln.pc
    124 
    125 sln-local.pc: sln.pc.in
    126 	sed -e '1d' \
    127 	    -e 's#^includedir=.*#includedir=./src/#' \
    128 	    -e 's#^libdir=.*#libdir=./#' \
    129 	    -e 's#@VERSION@#$(VERSION)#g' \
    130 	    -e 's#@LBLU_VERSION@#$(LBLU_VERSION)#g' \
    131 	    -e 's#@SHTR_VERSION@#$(SHTR_VERSION)#g' \
    132 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g' \
    133 	    sln.pc.in > $@
    134 
    135 install: library pkg utils
    136 	install() { mode="$$1"; prefix="$$2"; shift 2; \
    137 	  mkdir -p "$${prefix}"; \
    138 	  cp "$$@" "$${prefix}"; \
    139 	  printf '%s\n' "$${@}" | while read -r i; do \
    140 	    chmod "$${mode}" "$${prefix}/$${i##*/}"; \
    141 	  done; \
    142 	}; \
    143 	if [ "$(LIB_TYPE)" = "STATIC" ]; then mode=644; else mode=755; fi; \
    144 	install "$${mode}" "$(DESTDIR)$(LIBPREFIX)" $(LIBNAME); \
    145 	install 755 "$(DESTDIR)$(BINPREFIX)" sln-build; \
    146 	install 644 "$(DESTDIR)$(LIBPREFIX)/pkgconfig" sln.pc; \
    147 	install 644 "$(DESTDIR)$(INCPREFIX)/star" src/sln.h; \
    148 	install 644 "$(DESTDIR)$(MANPREFIX)/man1" doc/sln-build.1; \
    149 	install 644 "$(DESTDIR)$(MANPREFIX)/man5" doc/sln-mixture.5; \
    150 	install 644 "$(DESTDIR)$(PREFIX)/share/doc/star-line" COPYING README.md
    151 
    152 uninstall:
    153 	rm -f "$(DESTDIR)$(LIBPREFIX)/$(LIBNAME)"
    154 	rm -f "$(DESTDIR)$(BINPREFIX)/sln-build"
    155 	rm -f "$(DESTDIR)$(LIBPREFIX)/pkgconfig/sln.pc"
    156 	rm -f "$(DESTDIR)$(BINPREFIX)/sln"
    157 	rm -f "$(DESTDIR)$(INCPREFIX)/star/sln.h"
    158 	rm -f "$(DESTDIR)$(MANPREFIX)/man1/sln-build.1"
    159 	rm -f "$(DESTDIR)$(MANPREFIX)/man5/sln-mixture.5"
    160 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-line/COPYING"
    161 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-line/README.md"
    162 
    163 clean: clean_test clean_utils
    164 	rm -f $(OBJ) $(DEP) $(LIBNAME)
    165 	rm -f .config libsln.o sln.pc sln-local.pc
    166 
    167 lint:
    168 	mandoc -Tlint -Wwarning doc/sln-build.1
    169 	mandoc -Tlint doc/sln-mixture.5
    170 
    171 ################################################################################
    172 # Tests
    173 ################################################################################
    174 TEST_SRC =\
    175  src/test_sln_device.c\
    176  src/test_sln_mesh.c\
    177  src/test_sln_mixture.c\
    178  src/test_sln_tree.c
    179 TEST_OBJ = $(TEST_SRC:.c=.o)
    180 TEST_DEP = $(TEST_SRC:.c=.d)
    181 TEST_TGT = $(TEST_SRC:.c=.t)
    182 
    183 INCS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags rsys sln-local shtr)
    184 LIBS_TEST = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs rsys sln-local shtr)
    185 
    186 CFLAGS_TEST = -std=c89 $(CFLAGS_EXE) $(INCS_TEST)
    187 LDFLAGS_TEST = $(LDFLAGS_EXE) $(LIBS_TEST)
    188 
    189 tests: library $(TEST_DEP) $(TEST_TGT)
    190 	@$(MAKE) -fMakefile \
    191 	$$(for i in $(TEST_DEP); do echo -f"$${i}"; done) \
    192 	$$(for i in $(TEST_TGT); do echo -f"$${i}"; done) \
    193 	test_list
    194 
    195 $(TEST_TGT):
    196 	@{ \
    197 	  exe="$$(basename "$@" ".t")"; \
    198 	  printf '%s: %s\n' "$${exe}" $(@:.t=.o); \
    199 	  printf 'test_list: %s\n' "$${exe}"; \
    200 	} > $@
    201 
    202 $(TEST_DEP): config.mk sln-local.pc
    203 	@$(CC) $(CFLAGS_TEST) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@
    204 
    205 $(TEST_OBJ): config.mk sln-local.pc
    206 	$(CC) $(CFLAGS_TEST) -c $(@:.o=.c) -o $@
    207 
    208 test_sln_device \
    209 test_sln_mesh \
    210 test_sln_mixture \
    211 test_sln_tree \
    212 : config.mk sln-local.pc $(LIBNAME)
    213 	$(CC) $(CFLAGS_TEST) -o $@ src/$@.o $(LDFLAGS_TEST)
    214 
    215 clean_test:
    216 	rm -f $(TEST_DEP) $(TEST_OBJ) $(TEST_TGT) mixture.txt
    217 	for i in $(TEST_SRC); do rm -f "$$(basename "$${i}" ".c")"; done
    218 
    219 test: tests
    220 	@err=0; \
    221 	for i in $(TEST_SRC); do \
    222 	  test="$$(basename "$${i}" ".c")"; \
    223 	  printf '%s' "$${test}"; \
    224 	  if "./$${test}" > /dev/null 2>&1; then \
    225 	    printf '\n'; \
    226 	  else \
    227 	    printf ': error %s\n' "$$?"; \
    228 	    err=$$((err+1)); \
    229 	  fi \
    230 	done; \
    231 	[ "$${err}" -eq 0 ]