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