Last active
March 25, 2019 16:14
-
-
Save sadatnfs/8c28a1024fbec239fa29347bea456918 to your computer and use it in GitHub Desktop.
Makefile for building INLA in Debian:Stretch
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
## Makefile for downloading the source code and building | |
## a binary package of R-INLA on Debian:Stretch | |
## using a custom version of R and Intel MKL | |
## Intended for use by : Institute for Health Metrics and Evaluation | |
## | |
## Maintained by : Nafis Sadat, [email protected] | |
## | |
#### 2018/01/28 Update: removing r-mathlib and adding metis5 | |
#### 2018/03/23 Update: update path to new MKL version installation | |
#### 2018/04/25 Update: remove metis installs (pointing to Metis 5.1.0 instead) | |
#### 2018/05/03 Update: pointing to custom Metis install | |
#### 2018/05/13 Update: remove Metis pointer, and update MKL paths (also remove mkldnn) | |
#### 2018/05/22 Update: Point to older branch (18.05.08) | |
#### 2018/05/23 Update: Use own forked version with Pardiso linked in 'inla' Makefile | |
#### 2018/06/10 Update: INLA main repo fixed Pardiso issue, reverting to that; x11 fmesher | |
#### 2018/06/11 Update: Untagging hg clone, and cleaning up some flags so that fmesher actually builds | |
#### 2018/06/15 Update: New MKL build (3.222) | |
#### 2018/07/16 Update: Add bunch more flags to the other Intel products | |
#### 2018/07/18 Update: AVX2 is not recommended | |
#### 2018/10/02 Update: Rename explicit folder names from 2018 MKL reference to generic path | |
#### NOTE: -I/opt/R/lib/R/include/ MUST be included explicitly in the FLAGS variable | |
## NOTE: Changes to the Makefile should be made as needed for compilers and flags | |
SHELL = /bin/bash | |
## This Makefile is only supported for platform 'linux': | |
PLATFORM = linux | |
## Must match the machine architecture (32 or 64): | |
BITS = 64 | |
## Compiler flags | |
## Set up the flags for MKL bindings | |
MKLROOT=/opt/intel/compilers_and_libraries/linux/mkl | |
MKL=-L/opt/intel/compilers_and_libraries/linux/mkl/lib/intel64_lin -lRmath -Wl,--no-as-needed -lmkl_gf_lp64 -Wl,--start-group -lmkl_gnu_thread -lmkl_core -Wl,--end-group -fopenmp -dl -lpthread -lm | |
## Point to the R headers | |
INLA_LIBR="/opt/R/lib/R/lib -I/opt/R/lib/R/include/" | |
## Common compile flags | |
## Common compile flags | |
FLAGS = -m64 -w -g -O3 -mtune=generic -mavx -msse2 -msse3 -msse4.1 -msse4.2 -mfpmath=sse \ | |
-msse2 -L/opt/R/lib/R/lib -lR -lRmath \ | |
-I/opt/R/lib/R/include/ \ | |
-L/usr/local/lib64/ \ | |
-funroll-loops -fPIC -ftracer -pipe \ | |
-I/usr/include -I${MKLROOT}/include \ | |
-L/usr/local/lib -L/usr/lib -L${MKLROOT}/lib/intel64_lin \ | |
-L/opt/intel/tbb/lib/intel64_lin/gcc4.7 -L/opt/intel/daal/lib/intel64_lin | |
FLAGS_INLA = $(FLAGS) -std=gnu99 -fopenmp | |
FLAGS_FMESHER = $(FLAGS) -std=c++11 | |
## For Debian or Ubuntu package installation in lib-install: | |
APT=aptitude | |
## Path configuration: | |
MAINDIR=$(PWD) | |
PREFIX = $(MAINDIR)/local | |
BINPREFIX = $(PREFIX)/bin/$(PLATFORM) | |
LIBPREFIX = $(PREFIX)/lib | |
INCPREFIX = $(PREFIX)/include | |
## Compiler options: | |
#CC=mpicc | |
#CXX=mpic++ | |
#FC=mpifort | |
CC=gcc | |
CXX=g++ | |
FC=gfortran | |
LD=$(CXX) | |
ARGS = CC="$(CC)" CXX="$(CXX)" FC="$(FC)" LD="$(LD)" | |
all :; | |
@(echo "";\ | |
echo "Edit this Makefile, especially the 'FLAGS_COMMON' variable,";\ | |
echo "check if you need to run 'sudo $(MAKE) lib-install', then do";\ | |
echo "";\ | |
echo " $(MAKE) lib-install";\ | |
echo " $(MAKE) download";\ | |
echo " $(MAKE) bin";\ | |
echo " $(MAKE) package";\ | |
echo "";\ | |
echo "If all goes well, you should have binaries for inla and fmesher at";\ | |
echo "";\ | |
echo " $(BINPREFIX)";\ | |
echo "";\ | |
echo "and an INLA_*.tgz binary R package in your working directory.";\ | |
echo "";\ | |
echo "To later download and build an updated package, do";\ | |
echo "";\ | |
echo " $(MAKE) update";\ | |
echo "";\ | |
echo "To build a package for the JSS 2015 paper, do";\ | |
echo "";\ | |
echo " $(MAKE) download-jss2014 && $(MAKE) bin && $(MAKE) package";\ | |
echo "";\ | |
echo "Note: Not all lapack versions contain all the needed routines,";\ | |
echo "so make sure that /usr/lib/lapack/liblapack.so is selected in";\ | |
echo "";\ | |
echo " sudo update-alternatives --config liblapack.so";\ | |
echo "";\ | |
echo "It's possible to link to both lapack and lapack_atlas.";\ | |
echo "";\ | |
echo "For x11 enabled fmesher, use lib-install-x11 and bin-x11.";\ | |
echo "";\ | |
echo "To deactivate the use of libR, use '$(MAKE) bin INLA_WITHOUT_LIBR=1'.";\ | |
echo "";) | |
## Package list updated 2017-12-01 | |
LIBPKG = libgsl0-dev zlib1g-dev \ | |
libsuitesparse-dev \ | |
libxdmcp-dev libx11-dev libc6-dev \ | |
libmuparser-dev \ | |
libmetis-dev libmetis5-dbg libmetis5 | |
LIBPKGX = $(LIBPKG) libx11-dev | |
lib-install : | |
$(APT) install -y $(LIBPKG) | |
lib-install-x11 : | |
$(APT) install $(LIBPKGX) | |
init : | |
@mkdir -p $(LIBPREFIX) | |
@mkdir -p $(BINPREFIX) | |
@mkdir -p $(INCPREFIX) | |
download : init | |
@( test -d inla && $(MAKE) download-update ) || \ | |
( rm -rf inla && hg clone https://bitbucket.org/hrue/r-inla inla ) | |
@ln -sTf $(PREFIX) inla/local | |
download-update : init | |
@cd inla ; hg pull ; hg update | |
@ln -sTf $(PREFIX) inla/local | |
download-jss2014 : | |
@$(MAKE) download | |
@cd inla ; hg update -r jss2014 | |
@ln -sTf $(PREFIX) inla/local | |
bin : | |
$(MAKE) taucs | |
$(MAKE) fmesher | |
$(MAKE) GMRFLib | |
$(MAKE) inla | |
bin-x11 : | |
$(MAKE) taucs | |
$(MAKE) fmesher-x11 | |
$(MAKE) GMRFLib | |
$(MAKE) inla | |
update : | |
$(MAKE) download-update | |
$(MAKE) bin | |
$(MAKE) package | |
fmesher-x11: | |
$(MAKE) -C inla/fmesher PREFIX=$(PREFIX) $(ARGS) -k clean | |
$(MAKE) -C inla/fmesher PREFIX=$(PREFIX) FMESHER_USE_X=1 FLAGS="$(FLAGS) -I/usr/include -I/usr/include/gsl -I/opt/R/lib/R/include/ -I${MKLROOT}/include ${MKL}" $(ARGS) EXTLIBS="-lX11 -lgsl -lgslcblas -lxcb -lpthread -lXau -lXdmcp" | |
$(MAKE) -C inla/fmesher PREFIX=$(PREFIX) $(ARGS) install | |
@rsync -a $(PREFIX)/bin/fmesher $(BINPREFIX)/fmesher$(BITS) | |
@rm $(PREFIX)/bin/fmesher | |
fmesher : | |
$(MAKE) -C inla/fmesher PREFIX=$(PREFIX) $(ARGS) -k clean | |
$(MAKE) -C inla/fmesher PREFIX=$(PREFIX) FLAGS="$(FLAGS) -I/usr/include -I/usr/include/gsl -I/opt/R/lib/R/include/ -I${MKLROOT}/include ${MKL}" $(ARGS) EXTLIBS="-lX11 -lgsl -lgslcblas -lxcb -lpthread -lXau -lXdmcp" | |
$(MAKE) -C inla/fmesher PREFIX=$(PREFIX) $(ARGS) install | |
@rsync -a $(PREFIX)/bin/fmesher $(BINPREFIX)/fmesher$(BITS) | |
@rm $(PREFIX)/bin/fmesher | |
inla : | |
ln -sTf /usr/include $(INCPREFIX)/muParser | |
$(MAKE) -C inla/inlaprog PREFIX=$(PREFIX) FLAGS="-lRmath $(FLAGS) -I/usr/include -I/opt/R/lib/R/include/ -I${MKLROOT}/include ${MKL}" $(ARGS) -k clean | |
$(MAKE) -C inla/inlaprog PREFIX=$(PREFIX) FLAGS="-lRmath $(FLAGS) -I/usr/include -I/opt/R/lib/R/include/ -I${MKLROOT}/include ${MKL}" $(ARGS) | |
$(MAKE) -C inla/inlaprog PREFIX=$(PREFIX) FLAGS="-lRmath $(FLAGS) -I/usr/include -I/opt/R/lib/R/include/ -I${MKLROOT}/include ${MKL}" $(ARGS) install | |
@rsync -a $(PREFIX)/bin/inla $(BINPREFIX)/inla$(BITS) | |
@rm $(PREFIX)/bin/inla $(PREFIX)/bin/inla-snapshot | |
GMRFLib : | |
$(MAKE) -C inla/gmrflib PREFIX=$(PREFIX) FLAGS="$(FLAGS) -lRmath -I/usr/include -I/opt/R/lib/R/include/ -I${MKLROOT}/include ${MKL}" $(ARGS) -k clean | |
$(MAKE) -C inla/gmrflib PREFIX=$(PREFIX) FLAGS="$(FLAGS) -lRmath -I/usr/include -I/opt/R/lib/R/include/ -I${MKLROOT}/include ${MKL}" $(ARGS) | |
$(MAKE) -C inla/gmrflib PREFIX=$(PREFIX) FLAGS="$(FLAGS) -lRmath -I/usr/include -I/opt/R/lib/R/include/ -I${MKLROOT}/include ${MKL}" $(ARGS) install | |
sync-taucs : | |
mkdir -p $(MAINDIR)/tmp | |
-rm -rf $(MAINDIR)/tmp/taucs-2.2--my-fix | |
cp inla/extlibs/taucs-2.2--my-fix.tgz $(MAINDIR)/tmp/ | |
cd $(MAINDIR)/tmp ; tar -zxf taucs-2.2--my-fix.tgz | |
taucs : sync-taucs | |
$(MAKE) -C $(MAINDIR)/tmp/taucs-2.2--my-fix CFLAGS="$(FLAGS)" FFLAGS="$(FLAGS)" $(ARGS) -k clean | |
$(MAKE) -C $(MAINDIR)/tmp/taucs-2.2--my-fix CFLAGS="$(FLAGS)" FFLAGS="$(FLAGS)" $(ARGS) | |
@cp -v -f $(MAINDIR)/tmp/taucs-2.2--my-fix/lib/linux/libtaucs.a $(PREFIX)/lib | |
package : | |
@rm -f inla/INLA_*.tgz | |
cd inla ; utils/build-package-bin $(PREFIX)/bin $(MAINDIR)/tmp | |
clean : | |
rm -rf inla | |
.PHONY: all inla GMRFLib taucs download download-update update fmesher bin init download-jss2014 sync-taucs package clean |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment