star-mc

Parallel estimation of Monte Carlo integrators
git clone git://git.meso-star.fr/star-mc.git
Log | Files | Refs | README | LICENSE

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