Makefile (8993B)
1 # Copyright (C) 2018-2025 |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 MPI_DEF = -DSTARDIS_ENABLE_MPI 22 23 # Default target 24 all: build_executable man 25 26 ################################################################################ 27 # Program building 28 ################################################################################ 29 SRC =\ 30 src/stardis-app.c\ 31 src/stardis-args.c\ 32 src/stardis-compute.c\ 33 src/stardis-compute-probe-boundary.c\ 34 src/stardis-description.c\ 35 src/stardis-extern-source.c\ 36 src/stardis-fluid.c\ 37 src/stardis-fluid-prog.c\ 38 src/stardis-fbound.c\ 39 src/stardis-fbound-prog.c\ 40 src/stardis-hbound.c\ 41 src/stardis-hbound-prog.c\ 42 src/stardis-hfbound.c\ 43 src/stardis-hfbound-prog.c\ 44 src/stardis-intface.c\ 45 src/stardis-main.c\ 46 src/stardis-output.c\ 47 src/stardis-parsing.c\ 48 src/stardis-program.c\ 49 src/stardis-radiative-env.c\ 50 src/stardis-sfconnect.c\ 51 src/stardis-sfconnect-prog.c\ 52 src/stardis-ssconnect.c\ 53 src/stardis-ssconnect-prog.c\ 54 src/stardis-solid.c\ 55 src/stardis-solid-prog.c\ 56 src/stardis-tbound.c\ 57 src/stardis-tbound-prog.c 58 59 # Headers to configure 60 HDR=\ 61 src/stardis-args.h\ 62 src/stardis-default.h\ 63 src/stardis-green-types.h\ 64 src/stardis-prog-properties.h\ 65 src/stardis-version.h 66 67 OBJ = $(SRC:.c=.o) 68 DEP = $(SRC:.c=.d) 69 70 build_executable: .config $(HDR) $(DEP) 71 @$(MAKE) -fMakefile $$(for i in $(DEP); do echo -f "$${i}"; done) stardis 72 73 stardis $(DEP) $(OBJ): config.mk 74 75 stardis: $(OBJ) 76 $(CC) $(CFLAGS) $(INCS) -o $@ $(OBJ) $(LDFLAGS) $(LIBS) 77 78 .config: config.mk 79 if [ "$(DISTRIB_PARALLELISM)" = "MPI" ]; then \ 80 $(PKG_CONFIG) --atleast-version $(MPI_VERSION) $(MPI_PC); \ 81 fi 82 $(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys 83 $(PKG_CONFIG) --atleast-version $(S3D_VERSION) s3d 84 $(PKG_CONFIG) --atleast-version $(SDIS_VERSION) sdis 85 $(PKG_CONFIG) --atleast-version $(SENC3D_VERSION) senc3d 86 $(PKG_CONFIG) --atleast-version $(SG3D_VERSION) sg3d 87 $(PKG_CONFIG) --atleast-version $(SSP_VERSION) star-sp 88 $(PKG_CONFIG) --atleast-version $(SSTL_VERSION) sstl 89 @echo "config done" > $@ 90 91 src/stardis-default.h: config.mk src/stardis-default.h.in 92 sed -e 's/@STARDIS_ARGS_DEFAULT_TRAD@/$(STARDIS_ARGS_DEFAULT_TRAD)/' \ 93 -e 's/@STARDIS_ARGS_DEFAULT_TRAD_REFERENCE@/$(STARDIS_ARGS_DEFAULT_TRAD_REFERENCE)/' \ 94 -e 's/@STARDIS_ARGS_DEFAULT_COMPUTE_TIME@/$(STARDIS_ARGS_DEFAULT_COMPUTE_TIME)/' \ 95 -e 's/@STARDIS_ARGS_DEFAULT_PICARD_ORDER@/$(STARDIS_ARGS_DEFAULT_PICARD_ORDER)/' \ 96 -e 's/@STARDIS_ARGS_DEFAULT_RENDERING_FOV@/$(STARDIS_ARGS_DEFAULT_RENDERING_FOV)/' \ 97 -e 's/@STARDIS_ARGS_DEFAULT_RENDERING_IMG_HEIGHT@/$(STARDIS_ARGS_DEFAULT_RENDERING_IMG_HEIGHT)/' \ 98 -e 's/@STARDIS_ARGS_DEFAULT_RENDERING_IMG_WIDTH@/$(STARDIS_ARGS_DEFAULT_RENDERING_IMG_WIDTH)/' \ 99 -e 's/@STARDIS_ARGS_DEFAULT_RENDERING_OUTPUT_FILE_FMT@/$(STARDIS_ARGS_DEFAULT_RENDERING_OUTPUT_FILE_FMT)/' \ 100 -e 's/@STARDIS_ARGS_DEFAULT_RENDERING_POS@/$(STARDIS_ARGS_DEFAULT_RENDERING_POS)/' \ 101 -e 's/@STARDIS_ARGS_DEFAULT_RENDERING_SPP@/$(STARDIS_ARGS_DEFAULT_RENDERING_SPP)/' \ 102 -e 's/@STARDIS_ARGS_DEFAULT_RENDERING_TGT@/$(STARDIS_ARGS_DEFAULT_RENDERING_TGT)/' \ 103 -e 's/@STARDIS_ARGS_DEFAULT_RENDERING_TIME@/$(STARDIS_ARGS_DEFAULT_RENDERING_TIME)/' \ 104 -e 's/@STARDIS_ARGS_DEFAULT_RENDERING_UP@/$(STARDIS_ARGS_DEFAULT_RENDERING_UP)/' \ 105 -e 's/@STARDIS_ARGS_DEFAULT_SAMPLES_COUNT@/$(STARDIS_ARGS_DEFAULT_SAMPLES_COUNT)/' \ 106 -e 's/@STARDIS_ARGS_DEFAULT_SCALE_FACTOR@/$(STARDIS_ARGS_DEFAULT_SCALE_FACTOR)/' \ 107 -e 's/@STARDIS_ARGS_DEFAULT_VERBOSE_LEVEL@/$(STARDIS_ARGS_DEFAULT_VERBOSE_LEVEL)/' \ 108 $@.in > $@ 109 110 src/stardis-args.h: config.mk src/stardis-args.h.in 111 sed -e 's/@STARDIS_MAX_NAME_LENGTH@/$(STARDIS_MAX_NAME_LENGTH)/' \ 112 $@.in > $@ 113 114 src/stardis-version.h: config.mk src/stardis-version.h.in 115 sed -e 's/@STARDIS_APP_VERSION_MAJOR@/$(VERSION_MAJOR)/' \ 116 -e 's/@STARDIS_APP_VERSION_MINOR@/$(VERSION_MINOR)/' \ 117 -e 's/@STARDIS_APP_VERSION_PATCH@/$(VERSION_PATCH)/' \ 118 $@.in > $@ 119 120 src/stardis-green-types.h: config.mk src/stardis-green-types.h.in 121 sed -e 's/@STARDIS_GREEN_TYPES_VERSION@/$(GREEN_TYPES_VERSION)/' \ 122 -e "s/@STARDIS_MAX_NAME_LENGTH@/$$(($(STARDIS_MAX_NAME_LENGTH)-1))/" \ 123 $@.in > $@ 124 125 src/stardis-prog-properties.h: config.mk src/stardis-prog-properties.h.in 126 sed -e 's/@STARDIS_PROG_PROPERTIES_VERSION@/$(PROG_PROPERTIES_VERSION)/' \ 127 $@.in > $@ 128 129 .SUFFIXES: .c .d .o 130 .c.d: 131 @$(CC) $(CFLAGS) $(INCS) $($(DISTRIB_PARALLELISM)_DEF) -MM -MT \ 132 "$(@:.d=.o) $@" $< -MF $@ 133 134 .c.o: 135 $(CC) $(CFLAGS) $(INCS) $($(DISTRIB_PARALLELISM)_DEF) -c $< -o $@ 136 137 ################################################################################ 138 # Man pages 139 ################################################################################ 140 man: doc/stardis.1 doc/stardis-input.5 141 142 doc/stardis.1: doc/stardis.1.in 143 sed -e 's/@STARDIS_ARGS_DEFAULT_COMPUTE_TIME@/$(STARDIS_ARGS_DEFAULT_COMPUTE_TIME)/' \ 144 -e 's/@STARDIS_ARGS_DEFAULT_PICARD_ORDER@/$(STARDIS_ARGS_DEFAULT_PICARD_ORDER)/' \ 145 -e 's/@STARDIS_ARGS_DEFAULT_RENDERING_FOV@/$(STARDIS_ARGS_DEFAULT_RENDERING_FOV)/' \ 146 -e 's/@STARDIS_ARGS_DEFAULT_RENDERING_IMG_HEIGHT@/$(STARDIS_ARGS_DEFAULT_RENDERING_IMG_HEIGHT)/' \ 147 -e 's/@STARDIS_ARGS_DEFAULT_RENDERING_IMG_WIDTH@/$(STARDIS_ARGS_DEFAULT_RENDERING_IMG_WIDTH)/' \ 148 -e 's/@STARDIS_ARGS_DEFAULT_RENDERING_OUTPUT_FILE_FMT@/$(STARDIS_ARGS_DEFAULT_RENDERING_OUTPUT_FILE_FMT)/' \ 149 -e 's/@STARDIS_ARGS_DEFAULT_RENDERING_POS@/$(STARDIS_ARGS_DEFAULT_RENDERING_POS)/' \ 150 -e 's/@STARDIS_ARGS_DEFAULT_RENDERING_SPP@/$(STARDIS_ARGS_DEFAULT_RENDERING_SPP)/' \ 151 -e 's/@STARDIS_ARGS_DEFAULT_RENDERING_TGT@/$(STARDIS_ARGS_DEFAULT_RENDERING_TGT)/' \ 152 -e 's/@STARDIS_ARGS_DEFAULT_RENDERING_TIME@/$(STARDIS_ARGS_DEFAULT_RENDERING_TIME)/' \ 153 -e 's/@STARDIS_ARGS_DEFAULT_RENDERING_UP@/$(STARDIS_ARGS_DEFAULT_RENDERING_UP)/' \ 154 -e 's/@STARDIS_ARGS_DEFAULT_SAMPLES_COUNT@/$(STARDIS_ARGS_DEFAULT_SAMPLES_COUNT)/' \ 155 -e 's/@STARDIS_ARGS_DEFAULT_SCALE_FACTOR@/$(STARDIS_ARGS_DEFAULT_SCALE_FACTOR)/' \ 156 -e 's/@STARDIS_ARGS_DEFAULT_VERBOSE_LEVEL@/$(STARDIS_ARGS_DEFAULT_VERBOSE_LEVEL)/' \ 157 $@.in > $@ 158 159 doc/stardis-input.5: doc/stardis-input.5.in 160 sed -e "s/@STARDIS_MAX_NAME_LENGTH@/$$(($(STARDIS_MAX_NAME_LENGTH)-1))/" \ 161 $@.in > $@ 162 163 ################################################################################ 164 # Installation 165 ################################################################################ 166 pkg: 167 sed -e 's#@PREFIX@#$(PREFIX)#g'\ 168 -e 's#@VERSION@#$(VERSION)#g'\ 169 stardis.pc.in > stardis.pc 170 171 install: all pkg 172 install() { mode="$$1"; prefix="$$2"; shift 2; \ 173 mkdir -p "$${prefix}"; \ 174 cp "$$@" "$${prefix}"; \ 175 for i in "$$@"; do \ 176 chmod "$${mode}" "$${prefix}/$$(basename "$${i}")";\ 177 done; \ 178 }; \ 179 install 755 "$(DESTDIR)$(BINPREFIX)" stardis; \ 180 install 644 "$(DESTDIR)$(INCPREFIX)/stardis" src/stardis-green-types.h; \ 181 install 644 "$(DESTDIR)$(INCPREFIX)/stardis" src/stardis-prog-properties.h; \ 182 install 644 "$(DESTDIR)$(LIBPREFIX)/pkgconfig" stardis.pc; \ 183 install 644 "$(DESTDIR)$(PREFIX)/share/doc/stardis" COPYING README.md; \ 184 install 644 "$(DESTDIR)$(MANPREFIX)/man1" doc/stardis.1; \ 185 install 644 "$(DESTDIR)$(MANPREFIX)/man5" doc/stardis-input.5; \ 186 install 644 "$(DESTDIR)$(MANPREFIX)/man5" doc/stardis-output.5 187 188 uninstall: 189 rm -f "$(DESTDIR)$(BINPREFIX)/stardis" 190 rm -f "$(DESTDIR)$(INCPREFIX)/stardis/stardis-green-types.h" 191 rm -f "$(DESTDIR)$(INCPREFIX)/stardis/stardis-prog-properties.h" 192 rm -f "$(DESTDIR)$(LIBPREFIX)/pkgconfig/stardis.pc" 193 rm -f "$(DESTDIR)$(PREFIX)/share/doc/stardis/COPYING" 194 rm -f "$(DESTDIR)$(PREFIX)/share/doc/stardis/README.md" 195 rm -f "$(DESTDIR)$(MANPREFIX)/man1/stardis.1" 196 rm -f "$(DESTDIR)$(MANPREFIX)/man5/stardis-input.5" 197 rm -f "$(DESTDIR)$(MANPREFIX)/man5/stardis-output.5" 198 199 ################################################################################ 200 # Miscellaneous targets 201 ################################################################################ 202 clean: 203 rm -f $(HDR) $(OBJ) .config stardis stardis.pc 204 rm -f $(DEP) 205 rm -f doc/stardis.1 doc/stardis-input.5 206 207 lint: man 208 shellcheck -o all make.sh 209 mandoc -Tlint -Wall doc/stardis.1 || [ $$? -le 1 ] 210 mandoc -Tlint -Wall doc/stardis-input.5 || [ $$? -le 1 ] 211 mandoc -Tlint -Wall doc/stardis-output.5 || [ $$? -le 1 ]