star-blackbody

Handling the Planck function
git clone git://git.meso-star.fr/star-blackbody.git
Log | Files | Refs | README | LICENSE

Makefile (4695B)


      1 # Copyright (C) 2018-2023 |Méso|Star> (contact@meso-star.com)
      2 #
      3 # This program is free software: you can redistribute it and/or modify
      4 # it under the terms of the GNU General Public License as published by
      5 # the Free Software Foundation, either version 3 of the License, or
      6 # (at your option) any later version.
      7 #
      8 # This program is distributed in the hope that it will be useful,
      9 # but WITHOUT ANY WARRANTY; without even the implied warranty of
     10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     11 # GNU General Public License for more details.
     12 #
     13 # You should have received a copy of the GNU General Public License
     14 # along with this program. If not, see <http://www.gnu.org/licenses/>.
     15 
     16 .POSIX:
     17 .SUFFIXES: # Clean up default inference rules
     18 
     19 include config.mk
     20 
     21 LIBNAME_STATIC = libsbb.a
     22 LIBNAME_SHARED = libsbb.so
     23 LIBNAME = $(LIBNAME_$(LIB_TYPE))
     24 
     25 ################################################################################
     26 # Library building
     27 ################################################################################
     28 SRC =\
     29  src/sbb.c\
     30  src/sbb_ran_planck.c
     31 OBJ = $(SRC:.c=.o)
     32 DEP = $(SRC:.c=.d)
     33 
     34 build_library: .config $(DEP)
     35 	@$(MAKE) -fMakefile $$(for i in $(DEP); do echo -f $${i}; done) \
     36 	$$(if [ -n "$(LIBNAME)" ]; then \
     37 	    echo "$(LIBNAME)"; \
     38 	  else \
     39 	    echo "$(LIBNAME_SHARED)"; \
     40 	  fi)
     41 
     42 $(DEP) $(OBJ): config.mk
     43 
     44 $(LIBNAME_SHARED): $(OBJ)
     45 	$(CC) $(CFLAGS_SO) $(RSYS_CFLAGS) -o $@ $(OBJ) $(LDFLAGS_SO) $(RSYS_LIBS) -lm
     46 
     47 $(LIBNAME_STATIC): libsbb.o
     48 	$(AR) -rc $@ $?
     49 	$(RANLIB) $@
     50 
     51 libsbb.o: $(OBJ)
     52 	$(LD) -r $(OBJ) -o $@
     53 	$(OBJCOPY) $(OCPFLAGS) $@
     54 
     55 .config: config.mk
     56 	@if ! $(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys; then\
     57 	  echo "rsys $(RSYS_VERSION) not found" >&2; exit 1; fi
     58 	@echo "config done" > $@
     59 
     60 .SUFFIXES: .c .d .o
     61 .c.d:
     62 	@$(CC) $(CFLAGS_SO) $(RSYS_CFLAGS) -MM -MT "$(@:.d=.o) $@" $< -MF $@
     63 
     64 .c.o:
     65 	$(CC) $(CFLAGS_SO) $(RSYS_CFLAGS) -DSBB_SHARED_BUILD -c $< -o $@
     66 
     67 ################################################################################
     68 # Installation
     69 ################################################################################
     70 pkg:
     71 	sed -e 's#@PREFIX@#$(PREFIX)#g'\
     72 	    -e 's#@VERSION@#$(VERSION)#g'\
     73 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\
     74 	    sbb.pc.in > sbb.pc
     75 
     76 sbb-local.pc: sbb.pc.in
     77 	sed -e '1d'\
     78 	    -e 's#^includedir=.*#includedir=./src/#'\
     79 	    -e 's#^libdir=.*#libdir=./#'\
     80 	    -e 's#@VERSION@#$(VERSION)#g'\
     81 	    -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\
     82 	    sbb.pc.in > $@
     83 
     84 install: build_library pkg
     85 	@$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/lib" $(LIBNAME)
     86 	@$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/lib/pkgconfig" sbb.pc
     87 	@$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/include/star" src/sbb.h
     88 	@$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/share/doc/star-blackbody" \
     89 	COPYING README.md
     90 
     91 uninstall:
     92 	rm -f "$(DESTDIR)$(PREFIX)/lib/$(LIBNAME)"
     93 	rm -f "$(DESTDIR)$(PREFIX)/lib/pkgconfig/sbb.pc"
     94 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-blackbody/COPYING"
     95 	rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-blackbody/README.md"
     96 	rm -f "$(DESTDIR)$(PREFIX)/include/star/sbb.h"
     97 
     98 ################################################################################
     99 # Miscellaneous targets
    100 ################################################################################
    101 all: build_library build_tests
    102 
    103 clean: clean_test
    104 	rm -f $(OBJ) $(TEST_OBJ) $(LIBNAME)
    105 	rm -f .config .test libsbb.o sbb.pc sbb-local.pc
    106 
    107 distclean: clean
    108 	rm -f $(DEP) $(TEST_DEP)
    109 
    110 lint:
    111 	shellcheck -o all make.sh
    112 
    113 ################################################################################
    114 # Tests
    115 ################################################################################
    116 TEST_SRC = src/test_sbb_misc.c src/test_sbb_ran_planck.c
    117 TEST_OBJ = $(TEST_SRC:.c=.o)
    118 TEST_DEP = $(TEST_SRC:.c=.d)
    119 
    120 PKG_CONFIG_LOCAL = PKG_CONFIG_PATH="./:$${PKG_CONFIG_PATH}" $(PKG_CONFIG)
    121 SBB_CFLAGS = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags sbb-local.pc)
    122 SBB_LIBS = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs sbb-local.pc)
    123 
    124 build_tests: build_library $(TEST_DEP) .test
    125 	@$(MAKE) -fMakefile -f.test \
    126 	$$(for i in $(TEST_DEP); do echo -f"$${i}"; done) \
    127 	test_bin
    128 
    129 test: build_tests
    130 	@$(SHELL) make.sh run_test $(TEST_SRC)
    131 
    132 .test: Makefile
    133 	@$(SHELL) make.sh config_test $(TEST_SRC) > $@
    134 
    135 clean_test:
    136 	$(SHELL) make.sh clean_test $(TEST_SRC)
    137 
    138 $(TEST_DEP): config.mk sbb-local.pc
    139 	@$(CC) $(CFLAGS_EXE) $(SBB_CFLAGS) $(RSYS_CFLAGS) \
    140 	-MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@
    141 
    142 $(TEST_OBJ): config.mk sbb-local.pc
    143 	$(CC) $(CFLAGS_EXE) $(SBB_CFLAGS) $(RSYS_CFLAGS) -c $(@:.o=.c) -o $@
    144 
    145 test_sbb_misc \
    146 test_sbb_ran_planck \
    147 : config.mk sbb-local.pc $(LIBNAME)
    148 	$(CC) $(CFLAGS_EXE) -o $@ src/$@.o $(LDFLAGS_EXE) $(SBB_LIBS) $(RSYS_LIBS) -lm