Makefile (6060B)
1 # Copyright (C) 2015-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 = libsmc.a 22 LIBNAME_SHARED = libsmc.so 23 LIBNAME = $(LIBNAME_$(LIB_TYPE)) 24 25 ################################################################################ 26 # Star-MC building 27 ################################################################################ 28 SRC =\ 29 src/smc_device.c\ 30 src/smc_doubleN.c\ 31 src/smc_estimator.c\ 32 src/smc_type.c 33 OBJ = $(SRC:.c=.o) 34 DEP = $(SRC:.c=.d) 35 36 build_library: .config $(DEP) 37 @$(MAKE) -fMakefile $$(for i in $(DEP); do echo -f $${i}; done) \ 38 $$(if [ -n "$(LIBNAME)" ]; then\ 39 echo "$(LIBNAME)";\ 40 else\ 41 echo "$(LIBNAME_SHARED)";\ 42 fi) 43 44 $(DEP) $(OBJ): config.mk 45 46 $(LIBNAME_SHARED): $(OBJ) 47 $(CC) $(CFLAGS_SO) $(DPDC_CFLAGS) -o $@ $(OBJ) $(LDFLAGS_SO) $(DPDC_LIBS) 48 49 $(LIBNAME_STATIC): libsmc.o 50 $(AR) -rc $@ $? 51 $(RANLIB) $@ 52 53 libsmc.o: $(OBJ) 54 $(LD) -r $(OBJ) -o $@ 55 $(OBJCOPY) $(OCPFLAGS) $@ 56 57 .config: config.mk 58 @if ! $(PKG_CONFIG) --atleast-version $(RSYS_VERSION) rsys; then\ 59 echo "rsys $(RSYS_VERSION) not found" >&2; exit 1; fi 60 @if ! $(PKG_CONFIG) --atleast-version $(STAR-SP_VERSION) star-sp; then\ 61 echo "star-sp $(STAR-SP_VERSION) not found" >&2; exit 1; fi 62 @echo "config done" > $@ 63 64 .SUFFIXES: .c .d .o 65 .c.d: 66 @$(CC) $(CFLAGS_SO) $(DPDC_CFLAGS) -MM -MT "$(@:.d=.o) $@" $< -MF $@ 67 68 .c.o: 69 $(CC) $(CFLAGS_SO) $(DPDC_CFLAGS) -DSMC_SHARED_BUILD -c $< -o $@ 70 71 ################################################################################ 72 # Installation 73 ################################################################################ 74 pkg: 75 sed -e 's#@PREFIX@#$(PREFIX)#g'\ 76 -e 's#@VERSION@#$(VERSION)#g'\ 77 -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\ 78 -e 's#@STAR-SP_VERSION@#$(STAR-SP_VERSION)#g'\ 79 smc.pc.in > smc.pc 80 81 smc-local.pc: smc.pc.in 82 sed -e '1d'\ 83 -e 's#^includedir=.*#includedir=./src/#'\ 84 -e 's#^libdir=.*#libdir=./#'\ 85 -e 's#@VERSION@#$(VERSION)#g'\ 86 -e 's#@RSYS_VERSION@#$(RSYS_VERSION)#g'\ 87 -e 's#@STAR-SP_VERSION@#$(STAR-SP_VERSION)#g'\ 88 smc.pc.in > $@ 89 90 install: build_library pkg 91 @$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/lib" $(LIBNAME) 92 @$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/lib/pkgconfig" smc.pc 93 @$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/include/star" src/smc.h 94 @$(SHELL) make.sh install "$(DESTDIR)$(PREFIX)/share/doc/star-mc" COPYING README.md 95 96 uninstall: 97 rm -f "$(DESTDIR)$(PREFIX)/lib/$(LIBNAME)" 98 rm -f "$(DESTDIR)$(PREFIX)/lib/pkgconfig/smc.pc" 99 rm -f "$(DESTDIR)$(PREFIX)/include/star/smc.h" 100 rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-mc/COPYING" 101 rm -f "$(DESTDIR)$(PREFIX)/share/doc/star-mc/README.md" 102 103 ################################################################################ 104 # Miscellaneous targets 105 ################################################################################ 106 all: build_library build_tests 107 108 clean: clean_test 109 rm -f $(OBJ) $(TEST_OBJ) $(TEST_OBJ_S3D) $(LIBNAME) 110 rm -f .config .test image.ppm libsmc.o smc.pc smc-local.pc 111 112 distclean: clean 113 rm -f $(DEP) $(TEST_DEP) $(TEST_DEP_S3D) 114 115 lint: 116 shellcheck -o all make.sh 117 118 ################################################################################ 119 # Tests 120 ################################################################################ 121 TEST_SRC =\ 122 src/test_smc_device.c\ 123 src/test_smc_doubleN.c\ 124 src/test_smc_errors.c\ 125 src/test_smc_solve.c 126 TEST_OBJ = $(TEST_SRC:.c=.o) 127 TEST_DEP = $(TEST_SRC:.c=.d) 128 129 # Tests that require Star-3D 130 TEST_SRC_S3D = src/test_smc_light_path.c 131 TEST_OBJ_S3D = $(TEST_SRC_S3D:.c=.o) 132 TEST_DEP_S3D = $(TEST_SRC_S3D:.c=.d) 133 S3D_FOUND = $(PKG_CONFIG) --atleast-version $(S3D_VERSION) s3d 134 135 PKG_CONFIG_LOCAL = PKG_CONFIG_PATH="./:$${PKG_CONFIG_PATH}" $(PKG_CONFIG) 136 SMC_CFLAGS = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --cflags smc-local.pc) 137 SMC_LIBS = $$($(PKG_CONFIG_LOCAL) $(PCFLAGS) --libs smc-local.pc) 138 139 build_tests: build_library $(TEST_DEP) .test 140 @if $(S3D_FOUND); then $(MAKE) $(TEST_DEP_S3D); fi; \ 141 $(MAKE) -fMakefile -f.test \ 142 $$(for i in $(TEST_DEP); do echo -f"$${i}"; done) \ 143 $$($(S3D_FOUND) && for i in $(TEST_DEP_S3D); do echo -f"$${i}"; done) test_bin 144 145 test: build_tests 146 @$(SHELL) make.sh run_test $(TEST_SRC) 147 @if $(S3D_FOUND); then $(SHELL) make.sh run_test $(TEST_SRC_S3D); fi 148 149 .test: Makefile 150 @{ $(SHELL) make.sh config_test $(TEST_SRC);\ 151 if $(S3D_FOUND); then $(SHELL) make.sh config_test $(TEST_SRC_S3D); fi }\ 152 > $@ 153 154 clean_test: 155 @$(SHELL) make.sh clean_test $(TEST_SRC) $(TEST_SRC_S3D) 156 157 $(TEST_DEP): config.mk smc-local.pc 158 @$(CC) $(CFLAGS_EXE) $(SMC_CFLAGS) -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@ 159 160 $(TEST_OBJ): config.mk smc-local.pc 161 $(CC) $(CFLAGS_EXE) $(SMC_CFLAGS) -c $(@:.o=.c) -o $@ 162 163 test_smc_device: config.mk smc-local.pc $(LIBNAME) 164 $(CC) $(CFLAGS_EXE) -o $@ src/$@.o $(LDFLAGS_EXE) $(SMC_LIBS) -fopenmp 165 166 test_smc_doubleN \ 167 test_smc_errors \ 168 test_smc_solve \ 169 : config.mk smc-local.pc $(LIBNAME) 170 $(CC) $(CFLAGS_EXE) -o $@ src/$@.o $(LDFLAGS_EXE) $(SMC_LIBS) -lm 171 172 $(TEST_DEP_S3D): config.mk smc-local.pc 173 @$(CC) $(CFLAGS_EXE) $(SMC_CFLAGS) $(S3D_CFLAGS) \ 174 -MM -MT "$(@:.d=.o) $@" $(@:.d=.c) -MF $@ 175 176 $(TEST_OBJ_S3D): config.mk smc-local.pc 177 $(CC) $(CFLAGS_EXE) $(SMC_CFLAGS) $(S3D_CFLAGS) -c $(@:.o=.c) -o $@ 178 179 test_smc_light_path: config.mk smc-local.pc $(LIBNAME) 180 $(CC) $(CFLAGS_EXE) $(SMC_CFLAGS) $(S3D_CFLAGS) -o $@ src/$@.o $(LDFLAGS_EXE) $(SMC_LIBS) $(S3D_LIBS) -lm