Makefile (6243B)
1 # Copyright (C) 2018, 2020-2023 |Méso|Star> (contact@meso-star.com) 2 # Copyright (C) 2018 Centre National de la Recherche Scientifique 3 # Copyright (C) 2018 Université Paul Sabatier 4 # 5 # This program is free software: you can redistribute it and/or modify 6 # it under the terms of the GNU General Public License as published by 7 # the Free Software Foundation, either version 3 of the License, or 8 # (at your option) any later version. 9 # 10 # This program is distributed in the hope that it will be useful, 11 # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 # GNU General Public License for more details. 14 # 15 # You should have received a copy of the GNU General Public License 16 # along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 .POSIX: 19 .SUFFIXES: # Clean up default inference rules 20 21 include config.mk 22 23 LIBNAME_STATIC = libhtmie.a 24 LIBNAME_SHARED = libhtmie.so 25 LIBNAME = $(LIBNAME_$(LIB_TYPE)) 26 27 ################################################################################ 28 # Library building 29 ################################################################################ 30 SRC = src/htmie.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) $(DPDC_CFLAGS) -o $@ $(OBJ) $(LDFLAGS_SO) $(DPDC_LIBS) 46 47 $(LIBNAME_STATIC): libhtmie.o 48 $(AR) -rc $@ $? 49 $(RANLIB) $@ 50 51 libhtmie.o: $(OBJ) 52 $(LD) -r $(OBJ) -o $@ 53 $(OBJCOPY) $(OCPFLAGS) $@ 54 55 .config: config.mk 56 @if ! $(PKG_CONFIG) --atleast-version $(NETCDF_VERSION) netcdf; then \ 57 echo "netcdf $(NETCDF_VERSION) not found" >&2; exit 1; fi 58 @if ! $(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys; then \ 59 echo "rsys $(RSYS_VERSION) not found" >&2; exit 1; fi 60 @echo "config done" > $@ 61 62 .SUFFIXES: .c .d .o 63 .c.d: 64 @$(CC) $(CFLAGS_SO) $(DPDC_CFLAGS) -MM -MT "$(@:.d=.o) $@" $< -MF $@ 65 66 .c.o: 67 $(CC) $(CFLAGS_SO) $(DPDC_CFLAGS) -DHTMIE_SHARED_BUILD -c $< -o $@ 68 69 ################################################################################ 70 # Installation 71 ################################################################################ 72 pkg: 73 sed -e 's#@PREFIX@#$(PREFIX)#g'\ 74 -e 's#@VERSION@#$(VERSION)#g'\ 75 -e 's#@NETCDF_VERSION@#$(NETCDF_VERSION)#g'\ 76 -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\ 77 htmie.pc.in > htmie.pc 78 79 htmie-local.pc: htmie.pc.in 80 sed -e '1d'\ 81 -e 's#^includedir=.*#includedir=./src/#'\ 82 -e 's#^libdir=.*#libdir=./#'\ 83 -e 's#@VERSION@#$(VERSION)#g'\ 84 -e 's#@NETCDF_VERSION@#$(NETCDF_VERSION)#g'\ 85 -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\ 86 htmie.pc.in > $@ 87 88 install: build_library pkg 89 @$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/lib" $(LIBNAME) 90 @$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/lib/pkgconfig" htmie.pc 91 @$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/include/high_tune" src/htmie.h 92 @$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/share/doc/htmie" COPYING README.md 93 @$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/share/man/man5" htmie.5 94 95 uninstall: 96 rm -f "$(DESTDIR)$(PREFIX)/lib/$(LIBNAME)" 97 rm -f "$(DESTDIR)$(PREFIX)/lib/pkgconfig/htmie.pc" 98 rm -f "$(DESTDIR)$(PREFIX)/share/doc/htmie/COPYING" 99 rm -f "$(DESTDIR)$(PREFIX)/share/doc/htmie/README.md" 100 rm -f "$(DESTDIR)$(PREFIX)/include/high_tune/htmie.h" 101 rm -f "$(DESTDIR)$(PREFIX)/share/man/man5/htmie.5" 102 103 ################################################################################ 104 # Miscellaneous targets 105 ################################################################################ 106 all: build_library build_tests 107 108 clean: clean_test 109 rm -f $(OBJ) $(TEST_OBJ) $(LIBNAME) 110 rm -f .config .test libhtmie.o htmie.pc htmie-local.pc 111 112 distclean: clean 113 rm -f $(DEP) $(TEST_DEP) 114 115 lint: 116 shellcheck -o all make.sh 117 shellcheck -o all src/dump_netcdf_data.sh 118 mandoc -Tlint -Wall htmie.5 || [ $$? -le 1 ] 119 120 ################################################################################ 121 # Tests 122 ################################################################################ 123 TEST_SRC = src/test_htmie.c src/test_htmie_load.c 124 TEST_OBJ = $(TEST_SRC:.c=.o) 125 TEST_DEP = $(TEST_SRC:.c=.d) 126 127 TEST_MIE_LUT = Mie_LUT_Cloud 128 TEST_MIE_LUT_CDL = $(TEST_MIE_LUT).cdl 129 TEST_MIE_LUT_NETCDF = $(TEST_MIE_LUT).nc 130 TEST_MIE_LUT_VARS =\ 131 $(TEST_MIE_LUT).g\ 132 $(TEST_MIE_LUT).lambda\ 133 $(TEST_MIE_LUT).macs\ 134 $(TEST_MIE_LUT).mscs 135 136 TEST_DUMMY = dummy 137 TEST_DUMMY_CDL = $(TEST_DUMMY).cdl 138 TEST_DUMMY_NETCDF = $(TEST_DUMMY).nc 139 TEST_DUMMY_VARS =\ 140 $(TEST_DUMMY).g\ 141 $(TEST_DUMMY).lambda\ 142 $(TEST_DUMMY).macs\ 143 $(TEST_DUMMY).mscs 144 145 PKG_CONFIG_LOCAL = PKG_CONFIG_PATH="./:$${PKG_CONFIG_PATH}" $(PKG_CONFIG) 146 HTMIE_CFLAGS = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags htmie-local.pc) 147 HTMIE_LIBS = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs htmie-local.pc) 148 149 test: $(TEST_MIE_LUT_VARS) $(TEST_MIE_LUT_NETCDF) 150 test: $(TEST_DUMMY_VARS) $(TEST_DUMMY_NETCDF) 151 test: build_tests 152 @$(SHELL) make.sh check test_htmie test_htmie 153 @$(SHELL) make.sh check test_htmie_load_LUT test_htmie_load Mie_LUT_Cloud.nc . 154 @$(SHELL) make.sh check test_htmie_load_dummy test_htmie_load dummy.nc . 155 156 .SUFFIXES: .cdl .nc .g .lambda .macs .mscs 157 .cdl.nc: 158 ncgen -o $@ $< 159 160 .nc.g .nc.lambda .nc.macs .nc.mscs: 161 $(SHELL) src/dump_netcdf_data.sh $$(p="$@"; echo "$${p##*.}") $< > $@ 162 163 build_tests: build_library $(TEST_DEP) .test $(TEST_MIE_LUT_VARS) $(TEST_DUMMY_VARS) 164 @$(MAKE) -fMakefile -f.test $$(for i in $(TEST_DEP); do echo -f"$${i}"; done) test_bin 165 166 .test: Makefile make.sh 167 @$(SHELL) make.sh config_test $(TEST_SRC) > $@ 168 169 clean_test: 170 $(SHELL) make.sh clean_test $(TEST_SRC) 171 rm -rf $(TEST_MIE_LUT_VARS) $(TEST_MIE_LUT_NETCDF) 172 rm -rf $(TEST_DUMMY_VARS) $(TEST_DUMMY_NETCDF) 173 174 $(TEST_DEP): config.mk htmie-local.pc 175 @$(CC) $(CFLAGS_EXE) $(HTMIE_CFLAGS) $(RSYS_CFLAGS) \ 176 -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@ 177 178 $(TEST_OBJ): config.mk htmie-local.pc 179 $(CC) $(CFLAGS_EXE) $(HTMIE_CFLAGS) $(RSYS_CFLAGS) -c $(@:.o=.c) -o $@ 180 181 test_htmie test_htmie_load: config.mk htmie-local.pc $(LIBNAME) 182 $(CC) $(CFLAGS_EXE) -o $@ src/$@.o $(LDFLAGS_EXE) $(HTMIE_LIBS) $(RSYS_LIBS) -lm