Makefile (5512B)
1 # Copyright (C) 2018-2021, 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 = libhtgop.a 22 LIBNAME_SHARED = libhtgop.so 23 LIBNAME = $(LIBNAME_$(LIB_TYPE)) 24 25 ################################################################################ 26 # Library building 27 ################################################################################ 28 SRC = src/htgop.c 29 OBJ = $(SRC:.c=.o) 30 DEP = $(SRC:.c=.d) 31 32 build_library: .config $(DEP) 33 @$(MAKE) -fMakefile $$(for i in $(DEP); do echo -f $${i}; done) \ 34 $$(if [ -n "$(LIBNAME)" ]; then \ 35 echo "$(LIBNAME)"; \ 36 else \ 37 echo "$(LIBNAME_SHARED)"; \ 38 fi) 39 40 $(DEP) $(OBJ): config.mk 41 42 $(LIBNAME_SHARED): $(OBJ) 43 $(CC) $(CFLAGS_SO) $(RSYS_CFLAGS) -o $@ $(OBJ) $(LDFLAGS_SO) $(RSYS_LIBS) -lm 44 45 $(LIBNAME_STATIC): libhtgop.o 46 $(AR) -rc $@ $? 47 $(RANLIB) $@ 48 49 libhtgop.o: $(OBJ) 50 $(LD) -r $(OBJ) -o $@ 51 $(OBJCOPY) $(OCPFLAGS) $@ 52 53 .config: config.mk 54 @if ! $(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys; then \ 55 echo "rsys $(RSYS_VERSION) not found" >&2; exit 1; fi 56 @echo "config done" > $@ 57 58 .SUFFIXES: .c .d .o 59 .c.d: 60 @$(CC) $(CFLAGS_SO) $(RSYS_CFLAGS) -MM -MT "$(@:.d=.o) $@" $< -MF $@ 61 62 .c.o: 63 $(CC) $(CFLAGS_SO) $(RSYS_CFLAGS) -DHTGOP_SHARED_BUILD -c $< -o $@ 64 65 ################################################################################ 66 # Installation 67 ################################################################################ 68 pkg: 69 sed -e 's#@PREFIX@#$(PREFIX)#g'\ 70 -e 's#@VERSION@#$(VERSION)#g'\ 71 -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\ 72 htgop.pc.in > htgop.pc 73 74 htgop-local.pc: htgop.pc.in 75 sed -e '1d'\ 76 -e 's#^includedir=.*#includedir=./src/#'\ 77 -e 's#^libdir=.*#libdir=./#'\ 78 -e 's#@VERSION@#$(VERSION)#g'\ 79 -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\ 80 htgop.pc.in > $@ 81 82 install: build_library pkg 83 @$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/lib" $(LIBNAME) 84 @$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/lib/pkgconfig" htgop.pc 85 @$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/include/high_tune/" src/htgop.h 86 @$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/share/doc/htgop" COPYING README.md 87 88 uninstall: 89 rm -f "$(DESTDIR)$(PREFIX)/lib/$(LIBNAME)" 90 rm -f "$(DESTDIR)$(PREFIX)/lib/pkgconfig/htgop.pc" 91 rm -f "$(DESTDIR)$(PREFIX)/share/doc/htgop/COPYING" 92 rm -f "$(DESTDIR)$(PREFIX)/share/doc/htgop/README.md" 93 rm -f "$(DESTDIR)$(PREFIX)/include/high_tune/htgop.h" 94 95 ################################################################################ 96 # Miscellaneous targets 97 ################################################################################ 98 all: build_library build_tests 99 100 clean: clean_test 101 rm -f $(OBJ) $(TEST_OBJ) $(LIBNAME) 102 rm -f .config .test libhtgop.o htgop.pc htgop-local.pc 103 104 distclean: clean 105 rm -f $(DEP) $(TEST_DEP) 106 rm -f etc/ecrad_opt_prop.txt 107 108 lint: 109 shellcheck -o all make.sh 110 111 ################################################################################ 112 # Tests 113 ################################################################################ 114 TEST_SRC =\ 115 src/test_htgop.c\ 116 src/test_htgop_fetch_radiative_properties.c\ 117 src/test_htgop_get_radiative_properties_bounds.c\ 118 src/test_htgop_load.c\ 119 src/test_htgop_sample.c 120 TEST_OBJ = $(TEST_SRC:.c=.o) 121 TEST_DEP = $(TEST_SRC:.c=.d) 122 TEST_FILE=etc/ecrad_opt_prop.txt 123 124 PKG_CONFIG_LOCAL = PKG_CONFIG_PATH="./:$${PKG_CONFIG_PATH}" $(PKG_CONFIG) 125 HTGOP_CFLAGS = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags htgop-local.pc) 126 HTGOP_LIBS = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs htgop-local.pc) 127 128 test: build_tests etc/ecrad_opt_prop.txt 129 @$(SHELL) make.sh check test_htgop 130 @$(SHELL) make.sh check test_htgop_fetch_radiative_properties "$(TEST_FILE)" 131 @$(SHELL) make.sh check test_htgop_get_radiative_properties_bounds "$(TEST_FILE)" 132 @$(SHELL) make.sh check test_htgop_load "$(TEST_FILE)" 133 @$(SHELL) make.sh check test_htgop_sample "$(TEST_FILE)" 134 135 build_tests: build_library $(TEST_DEP) .test 136 @$(MAKE) -fMakefile -f.test $$(for i in $(TEST_DEP); do echo -f"$${i}"; done) test_bin 137 138 .test: Makefile make.sh 139 @$(SHELL) make.sh config_test $(TEST_SRC) > $@ 140 141 clean_test: 142 $(SHELL) make.sh clean_test $(TEST_SRC) 143 144 $(TEST_DEP): config.mk htgop-local.pc 145 @$(CC) $(CFLAGS_EXE) $(HTGOP_CFLAGS) $(RSYS_CFLAGS) \ 146 -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@ 147 148 $(TEST_OBJ): config.mk htgop-local.pc 149 $(CC) $(CFLAGS_EXE) $(HTGOP_CFLAGS) $(RSYS_CFLAGS) -c $(@:.o=.c) -o $@ 150 151 test_htgop \ 152 test_htgop_fetch_radiative_properties \ 153 test_htgop_get_radiative_properties_bounds \ 154 test_htgop_load \ 155 test_htgop_sample \ 156 : config.mk htgop-local.pc $(LIBNAME) 157 $(CC) $(CFLAGS_EXE) -o $@ src/$@.o $(LDFLAGS_EXE) $(HTGOP_LIBS) $(RSYS_LIBS) -lm 158 159 # Touch the target to update its timestamp. Otherwise, the extracted file will 160 # have a timestamp lower than its prerequisite, forcing its re-extraction. 161 etc/ecrad_opt_prop.txt: etc.tgz 162 tar xzvf etc.tgz && touch $@