Revision 7cd43d773d82d1ff1373045bf544b2c6ea0dfb14 authored by Matthew Fishman on 22 November 2019, 19:58:01 UTC, committed by Matthew Fishman on 22 November 2019, 19:58:01 UTC
1 parent 5ef63a0
Raw File
options.mk.sample
### User Configurable Options

## To set up, follow the steps [1], [2], [3] below

#########
## [1]
##
## Set which compiler to use by defining CCCOM:
## GNU GCC compiler
CCCOM=g++ -m64 -std=c++17 -fPIC

## Clang compiler (good to use on macOS)
## Note: try this if you have trouble compiling 
##       with g++ on macOS Mojave 10.14
#CCCOM=clang++ -std=c++17 -fPIC

## GCC On Windows cygwin
## Extra flags are workaround for limitations
## of this compiler with Windows binary format
#CCCOM=g++ -std=c++17 -Wa,-mbig-obj -O2 -fPIC

## Intel C++ Compiler not recommended,
## As of June 2016 it does not fully support C++17

#########

#########
## [2]
## 
## BLAS/LAPACK Related Options
## 
## o The variable PLATFORM can be set to macos,lapack,mkl, or acml.
##   This tells ITensor which style of BLAS/Lapack library to expect,
##   and turns various lines of code on or off inside the files
##   itensor/tensor/lapack_wrap.h and lapack_wrap.cc.
## 
## o BLAS_LAPACK_LIBFLAGS specifies blas or lapack related 
##   flags used during the linking step. For example, 
##   flags of the type:
##   -L/path/to/lapack/lib -llapack -lblas
##   though the names of the static libraries (the files referred
##   to by the -l flags) can be highly variable - see examples below.
##
## o BLAS_LAPACK_INCLUDEFLAGS are blas or lapack related flags 
##   needed during compilation. It may include flags such as 
##   -I/path/to/lapack/include
##   where "include" is a folder containing .h header files.
##

##
## Mac OSX system
##

PLATFORM=macos
BLAS_LAPACK_LIBFLAGS=-framework Accelerate

##
## Example using a C interface to LAPACK on GNU/LINUX systems
## (Path to lib/ folder may differ on your system)
##

#PLATFORM=lapack
#BLAS_LAPACK_LIBFLAGS=-lpthread -L/usr/lib -lblas -llapack 

##
## Example using the Intel MKL library
## (Path to lib/intel64/ and include/ folders may differ on your system)
##

#PLATFORM=mkl
## MKL example - you may need to change the names of the folders below
#BLAS_LAPACK_LIBFLAGS=-L/opt/intel/mkl/lib/intel64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_rt -lmkl_core -liomp5 -lpthread
#BLAS_LAPACK_INCLUDEFLAGS=-I/opt/intel/mkl/include

##
## Example using the OpenBLAS library (http://www.openblas.net/)
## (Path to lib/ and include/ folders may differ on your system)
##

#PLATFORM=openblas
#BLAS_LAPACK_LIBFLAGS=-lpthread -L/usr/local/opt/openblas/lib -lopenblas
#BLAS_LAPACK_INCLUDEFLAGS=-I/usr/local/opt/openblas/include -fpermissive -DHAVE_LAPACK_CONFIG_H -DLAPACK_COMPLEX_STRUCTURE

##
## Example using the AMD ACML library
## (Path to lib/ folder may differ on your system)
##

#PLATFORM=acml
#BLAS_LAPACK_LIBFLAGS=-L/opt/acml5.1.0/gfortran64/lib -lacml -lgfortran -lpthread


#########
## [3]
##
## This step is optional, but if you wish to customize the flags
## used to compile optimized and debug code, you can do so here.

## Flags to give the compiler for "release mode"
OPTIMIZATIONS=-O2 -DNDEBUG -Wall

## Flags to give the compiler for "debug mode"
DEBUGFLAGS=-DDEBUG -g -Wall -pedantic
#
## Set this to 1 if you want ITensor to also build dynamic libraries
## These can be faster to link and give smaller binary sizes
## You may need to set you LD_LIBRARY_PATH to include the ITensor lib/
## folder in order to link with the dynamic libraries
ITENSOR_MAKE_DYLIB=0


###
### Other Makefile variables defined for convenience.
### Not necessary to modify these for most cases.
###

PREFIX=$(THIS_DIR)

ITENSOR_LIBDIR=$(PREFIX)/lib
ITENSOR_INCLUDEDIR=$(PREFIX)

ITENSOR_LIBNAMES=itensor
ITENSOR_LIBFLAGS=$(patsubst %,-l%, $(ITENSOR_LIBNAMES))
ITENSOR_LIBFLAGS+= $(BLAS_LAPACK_LIBFLAGS)
ITENSOR_LIBGFLAGS=$(patsubst %,-l%-g, $(ITENSOR_LIBNAMES))
ITENSOR_LIBGFLAGS+= $(BLAS_LAPACK_LIBFLAGS)
ITENSOR_LIBS=$(patsubst %,$(ITENSOR_LIBDIR)/lib%.a, $(ITENSOR_LIBNAMES))
ITENSOR_GLIBS=$(patsubst %,$(ITENSOR_LIBDIR)/lib%-g.a, $(ITENSOR_LIBNAMES))

ITENSOR_INCLUDEFLAGS=-I'$(ITENSOR_INCLUDEDIR)' $(BLAS_LAPACK_INCLUDEFLAGS)

ifndef CCCOM
$(error Makefile variable CCCOM not defined in options.mk; please define it.)
endif

CCFLAGS=-I. $(ITENSOR_INCLUDEFLAGS) $(OPTIMIZATIONS) -Wno-unused-variable
CCGFLAGS=-I. $(ITENSOR_INCLUDEFLAGS) $(DEBUGFLAGS)
LIBFLAGS=-L'$(ITENSOR_LIBDIR)' $(ITENSOR_LIBFLAGS)
LIBGFLAGS=-L'$(ITENSOR_LIBDIR)' $(ITENSOR_LIBGFLAGS)

## Determine shared library extension
UNAME_S := $(shell uname -s)
ifeq ($(UNAME_S),Darwin)
  DYLIB_EXT ?= dylib
  DYLIB_FLAGS ?= -dynamiclib
else
  DYLIB_EXT ?= so
  DYLIB_FLAGS ?= -shared
endif
back to top