CPPLapack
Typical "Makefile"s for Various Platforms

The base Makefile

###############################################################################
##                                 Makefile                                  ##
###############################################################################

A.OUT = A.OUT

###############################################################################

include $(HOME)/local/cpplapack/makefiles/Makefile.g++

###############################################################################

HEADERS:= $(shell find ./ -iname '*.hpp')
SOURCES:= $(shell find ./ -iname '*.cpp')
SOURCES:= $(sort $(SOURCES))
OBJECTS:= $(SOURCES:%.cpp=%.o)
THIS_FILE:= $(firstword $(MAKEFILE_LIST))

###############################################################################
###############################################################################
###############################################################################

release: depend
  @echo -e "##################################"
  @echo -e "#### building in release mode ####"
  @echo -e "##################################\n"
  @$(MAKE) -f $(THIS_FILE) --no-print-directory build RELEASE=1

profile: depend
  @echo -e "##################################"
  @echo -e "#### building in profile mode ####"
  @echo -e "##################################\n"
  @$(MAKE) -f $(THIS_FILE) --no-print-directory build PROFILE=1

debug: depend
  @echo -e "################################"
  @echo -e "#### building in debug mode ####"
  @echo -e "################################\n"
  @$(MAKE) -f $(THIS_FILE) --no-print-directory build DEBUG=1

verbose: depend
  @echo -e "##################################"
  @echo -e "#### building in verbose mode ####"
  @echo -e "##################################\n"
  @$(MAKE) -f $(THIS_FILE) --no-print-directory build DEBUG=1 VERBOSE=1

###############################################################################

.SUFFIXES: .cpp .o
.cpp.o:
  $(CXX) -c $< $(CFLAGS) $(INCLUDE_DIRS) $(MACROS) -o $@
  @echo

build: $(OBJECTS)
  $(CXX) $(OBJECTS) $(LFLAGS) $(LIB_DIRS) $(LIBS) -o $(A.OUT)
  @echo

###############################################################################

depend:
  makedepend -f- -Y $(SOURCES) > Makefile.depend 2> /dev/null
# gccmakedep -- -I./ -MM -- $(SOURCES)
# $(CXX) -MM -I./ $(SOURCES) > Makefile.depend
# $(CXX) -MM $(INCLUDE_DIRS) $(SOURCES) > Makefile.depend
  @echo

clean:
  rm -f $(OBJECTS)

fullclean:
  rm -f $(shell find -name '*.o') Makefile.depend std err $(A.OUT)

remake: clean all

###############################################################################
-include Makefile.depend



Makefile for g++ + blas + lapack

###############################################################################
##                               Makefile.g++                                ##
###############################################################################

#######################################
############### common ################
#######################################

CXX = g++

######## FLAGS ########
FLAGS += -O2 -funroll-loops #### -O3 is dangerous
FLAGS += -ffast-math -fno-math-errno #-mfpmath=sse
FLAGS += -fprefetch-loop-arrays -fstrength-reduce -malign-double
#FLAGS += -std=c++0x # -std=c++98
FLAGS += -msse4.2 #-march=corei7
#FLAGS += -msse4.1 #-march=core2
####FLAGS += -fforce-addr -falign-functions=4 -ftree-vectorize -ftree-vectorizer-verbose=5 -funsafe-loop-optimizations -Wunsafe-loop-optimizations
#FLAGS += -fopenmp

######## LFLAGS ########
LFLAGS = $(FLAGS)
#LFLAGS += -static

######## CFLAGS ########
CFLAGS = $(FLAGS)
CFLAGS += -Wall -Wno-unknown-pragmas -Wextra -Wshadow -ftree-vectorizer-verbose=0
##CFLAGS += --param large-function-growth=99999 --param max-inline-insns-single=99999 --param inline-unit-growth=99999 -Winline
####CFLAGS += -fimplement-inlines -finline-limit=0 --param large-function-growth=0 --param max-inline-insns-single=0 --param inline-unit-growth=0

######## others ########
INCLUDE_DIRS = -I./  -I$(HOME)/local/cpplapack/include
LIB_DIRS = 
#LIBS = /usr/lib/sse2/liblapack.a /usr/lib/sse2/libblas.a -lm -lgfortran
LIBS = -llapack -lblas -lgfortran -lm
#LIBS = -llapack $(HOME)/local/ATLAS/libatlas.a -lgfortran -lm
LIBS += -lboost_filesystem
MACROS = 

#######################################
############ release mode #############
#######################################
ifdef RELEASE
CFLAGS += -fomit-frame-pointer
LFLAGS += -fomit-frame-pointer
endif

#######################################
############ profile mode #############
#######################################
ifdef PROFILE
CFLAGS += -pg #-g
LFLAGS += -pg #-g
endif

#######################################
############## debug mode #############
#######################################
ifdef DEBUG
FLAGS = -g -O0
CFLAGS = $(FLAGS) -Wall -Wno-unknown-pragmas -Wextra -Wshadow -fstack-protector-all -fbounds-check -ftrapv -ftrapping-math #-mfp-trap-mode=sui #-ffpe-trap=invalid,zero,overflow,underflow
LFLAGS = $(FLAGS)
MACROS += -DDEBUG
MACROS += -DCPPL_DEBUG
endif

#######################################
############ verbose mode #############
#######################################
ifdef VERBOSE
MACROS += -DVERBOSE
MACROS += -DCPPL_VERBOSE
endif



Makefile for g++ + atlas + lapack on Cygwin

#CPP = g++-2
CPP = g++

COMP_FLAGS = -O2 -Wall
LINK_FLAGS = -O2 -Wall

#MACROS = -DCPPL_VERBOSE -DCPPL_DEBUG

CPPLAPACK_INCLUDE_DIR = $(HOME)/local/lib/cpplapack/include
LAPACK_LIB_DIR = $(HOME)/local/lib/LAPACK
BLAS_LIB_DIR = $(HOME)/local/lib/ATLAS

INCLUDE_DIRS = -I$(CPPLAPACK_INCLUDE_DIR)
LIB_DIRS = -L$(LAPACK_LIB_DIR) -L$(BLAS_LIB_DIR)

LIBS = -llapack -lf77blas -latlas -lg2c -lm
OBJECTS = main.o

###############################################################################

A.OUT: $(OBJECTS)
  $(CPP) $(OBJECTS) $(LINK_FLAGS) $(LIB_DIRS) $(LIBS) -o $@

.SUFFIXES: .cpp .o

.cpp.o:
  $(CPP) -c $< $(COMP_FLAGS) $(INCLUDE_DIRS) $(MACROS)

do: A.OUT
  ./A.OUT > std 2> err

clean:
  rm -f *~ $(OBJECTS)

fullclean:
  rm -f *~ $(OBJECTS) A.OUT std err 

remake: clean A.OUT



Makefile for icc8.1 + mkl7

CPP = LC_ALL=C icc

#COMP_FLAGS = -openmp -O2 -w1 #[is buggy]
#LINK_FLAGS = -O2 -w1 #[is buggy]
COMP_FLAGS = -openmp -O2 -w1 -cxxlib-icc 
LINK_FLAGS = -O2 -w1 -cxxlib-icc

#MACROS = -DCPPL_VERBOSE -DCPPL_DEBUG

CPPLAPACK_INCLUDE_DIR = $(HOME)/local/lib/cpplapack/include
MKL_LIB_DIRS = $(shell echo /opt/intel/mkl*/lib/32)

INCLUDE_DIRS = -I$(CPPLAPACK_INCLUDE_DIR)
LIB_DIRS = -L$(MKL_LIB_DIRS)

#LIBS = -lmkl_lapack -lmkl_ia32 -lguide -lpthread -lstdc++ -lefence #[is buggy]
LIBS = -lmkl_lapack -lmkl_ia32 -lguide -lpthread -lcprts -lunwind #-limf #-lefence

OBJECTS = main.o

###############################################################################

A.OUT: $(OBJECTS)
  $(CPP) $(OBJECTS) $(LINK_FLAGS) $(LIB_DIRS) $(LIBS) -o $@

.SUFFIXES: .cpp .o

.cpp.o:
  $(CPP) -c $< $(COMP_FLAGS) $(INCLUDE_DIRS) $(MACROS)

do: A.OUT
  ./A.OUT > std 2> err

clean:
  rm -f *~ $(OBJECTS)

fullclean:
  rm -f *~ $(OBJECTS) A.OUT std err 

remake: clean A.OUT



Makefile for icc8 + mkl6

CPP = icc

COMP_FLAGS = -openmp -O2 -w1
LINK_FLAGS = -O2 -w1

#MACROS = -DCPPL_VERBOSE -DCPPL_DEBUG

CPPLAPACK_INCLUDE_DIR = $(HOME)/local/lib/cpplapack/include
MKL_LIB_DIRS = $(shell echo /opt/intel/mkl*/lib/32)
INCLUDE_DIRS = -I$(CPPLAPACK_INCLUDE_DIR)
LIB_DIRS = -L$(MKL_LIB_DIRS)

LIBS = -lmkl_lapack -lmkl_ia32 -lguide -lpthread #-lefence
OBJECTS = main.o

###############################################################################

A.OUT: $(OBJECTS)
  $(CPP) $(OBJECTS) $(LINK_FLAGS) $(LIB_DIRS) $(LIBS) -o $@

.SUFFIXES: .cpp .o

.cpp.o:
  $(CPP) -c $< $(COMP_FLAGS) $(INCLUDE_DIRS) $(MACROS)

do: A.OUT
  ./A.OUT > std 2> err

clean:
  rm -f *~ $(OBJECTS)

fullclean:
  rm -f *~ $(OBJECTS) A.OUT std err 

remake: clean A.OUT



Makefile for icc7 + mkl5

CPP = icc

COMP_FLAGS = -O2 -w1
#COMP_FLAGS = -openmp -O2 -w1
LINK_FLAGS = -O2 -w1

#MACROS = -DCPPL_VERBOSE -DCPPL_DEBUG

CPPLAPACK_INCLUDE_DIR = $(HOME)/local/lib/cpplapack/include
ICC_INCLUDE_DIR = /opt/intel/compiler70/ia32/include
MKL_LIB_DIR = $(shell echo /opt/intel/mkl*/lib/32)

INCLUDE_DIRS = -I$(ICC_INCLUDE_DIR) -I$(CPPLAPACK_INCLUDE_DIR)
LIB_DIRS = -L$(MKL_LIB_DIR)

LIBS = -lmkl_lapack -lmkl -lguide -lF90
OBJECTS = main.o

###############################################################################

A.OUT: $(OBJECTS)
  $(CPP) $(OBJECTS) $(LINK_FLAGS) $(LIB_DIRS) $(LIBS) -o $@

.SUFFIXES: .cpp .o

.cpp.o:
  $(CPP) -c $< $(COMP_FLAGS) $(INCLUDE_DIRS) $(MACROS)

do: A.OUT
  ./A.OUT > std 2> err

clean:
  rm -f *~ $(OBJECTS)

fullclean:
  rm -f *~ $(OBJECTS) A.OUT std err 

remake: clean A.OUT



Makefile for ecc + mkl

CPP = ecc

COMP_FLAGS = -O2 -w1
LINK_FLAGS = -O2 -w1

#MACROS = -DCPPL_VERBOSE -DCPPL_DEBUG

CPPLAPACK_INCLUDE_DIR = $(HOME)/local/lib/cpplapack/include
ECC_INCLUDE_DIR = /opt/intel/compiler70/ia64/include
MKL_LIB_DIR = /opt/intel/mkl/lib/64/

INCLUDE_DIRS = -I$(ECC_INCLUDE_DIR) -I$(CPPLAPACK_INCLUDE_DIR)
LIB_DIRS = -L$(MKL_LIB_DIR)

LIBS = -lmkl_lapack -lmkl -lguide -lF90
OBJECTS = main.o

###############################################################################

A.OUT: $(OBJECTS)
  $(CPP) $(OBJECTS) $(LINK_FLAGS) $(LIB_DIRS) $(LIBS) -o $@

.SUFFIXES: .cpp .o

.cpp.o:
  $(CPP) -c $< $(COMP_FLAGS) $(INCLUDE_DIRS) $(MACROS)

do: A.OUT
  ./A.OUT > std 2> err

clean:
  rm -f *~ $(OBJECTS)

fullclean:
  rm -f *~ $(OBJECTS) A.OUT std err 

remake: clean A.OUT



Makefile for cxx + cxml on Linux

CPP = cxx

#COMP_FLAGS = -D__USE_STD_IOSTREAM -tune host -arch host -fast -O4 -Wall
COMP_FLAGS = -D__USE_STD_IOSTREAM -omp -tune host -arch host -fast -O4 -Wall
LINK_FLAGS = -D__USE_STD_IOSTREAM -omp -Wall

#MACROS = -DCPPL_VERBOSE -DCPPL_DEBUG

CPPLAPACK_INCLUDE_DIR = $(HOME)/local/lib/cpplapack/include

INCLUDE_DIRS = -I$(CPPLAPACK_INCLUDE_DIR)
LIB_DIRS =

LIBS = -lcxml -lcpml
OBJECTS = main.o

###############################################################################

A.OUT: $(OBJECTS)
  $(CPP) $(OBJECTS) $(LINK_FLAGS) $(LIB_DIRS) $(LIBS) -o $@

.SUFFIXES: .cpp .o

.cpp.o:
  $(CPP) -c $< $(COMP_FLAGS) $(INCLUDE_DIRS) $(MACROS)

do: A.OUT
  ./A.OUT > std 2> err

clean:
  rm -f *~ $(OBJECTS)

fullclean:
  rm -f *~ $(OBJECTS) A.OUT std err 

remake: clean A.OUT



Makefile for cxx + cxml on Alpha with MP

#please set OMP_NUM_THREAD ?
CPP = cxx

COMP_FLAGS = -D__USE_STD_IOSTREAM -omp -tune host -arch host -fast -O4 -Wall
LINK_FLAGS = -D__USE_STD_IOSTREAM -omp -Wall

#MACROS = -DCPPL_VERBOSE -DCPPL_DEBUG

CPPLAPACK_INCLUDE_DIR = $(HOME)/local/lib/cpplapack/include

INCLUDE_DIRS = -I$(CPPLAPACK_INCLUDE_DIR)
LIB_DIRS = 

LIBS = -lcxml
OBJECTS = main.o

###############################################################################

A.OUT: $(OBJECTS)
  $(CPP) $(OBJECTS) $(LINK_FLAGS) $(LIB_DIRS) $(LIBS) -o $@

.SUFFIXES: .cpp .o

.cpp.o:
  $(CPP) -c $< $(COMP_FLAGS) $(INCLUDE_DIRS) $(MACROS)

do: A.OUT
  ./A.OUT > std 2> err

clean:
  rm -f *~ $(OBJECTS)

fullclean:
  rm -f *~ $(OBJECTS) A.OUT std err 

remake: clean A.OUT



Makefile for sxc++ + MathKeisan

CPP = sxc++
#CPP = c++

COMP_FLAGS = 
LINK_FLAGS = 

#MACROS = -DCPPL_VERBOSE -DCPPL_DEBUG

CPPLAPACK_INCLUDE_DIR = $(HOME)/local/lib/cpplapack/include

INCLUDE_DIRS = -I$(CPPLAPACK_INCLUDE_DIR)
LIB_DIRS = 

LIBS = -lblas_64 -lf90sxe -li90sxe
OBJECTS = main.o

###############################################################################

A.OUT: $(OBJECTS)
  $(CPP) $(OBJECTS) $(LINK_FLAGS) $(LIB_DIRS) $(LIBS) -o $@

.SUFFIXES: .cpp .o

.cpp.o:
  $(CPP) -c $< $(COMP_FLAGS) $(INCLUDE_DIRS) $(MACROS)

do: A.OUT
  ./A.OUT > std 2> err

clean:
  rm -f *~ $(OBJECTS)

fullclean:
  rm -f *~ $(OBJECTS) A.OUT std err 

remake: clean A.OUT



Makefile for CC + SCSL with MP

CPP = CC

#COMP_FLAGS = -n32 -Ofast -LANG:std
COMP_FLAGS = -mp -n32 -Ofast -LANG:std
LINK_FLAGS = -mp -n32 -Ofast -LANG:std

#MACROS = -DCPPL_VERBOSE -DCPPL_DEBUG

CPPLAPACK_INCLUDE_DIR = $(HOME)/local/lib/cpplapack/include

INCLUDE_DIRS = -I$(CPPLAPACK_INCLUDE_DIR)
LIB_DIRS = 

#LIBS = -lscs -lfastm -lm
LIBS = -lscs_mp -lfastm -lm
OBJECTS = main.o

###############################################################################

A.OUT: $(OBJECTS)
  $(CPP) $(OBJECTS) $(LINK_FLAGS) $(LIB_DIRS) $(LIBS) -o $@

.SUFFIXES: .cpp .o

.cpp.o:
  $(CPP) -c $< $(COMP_FLAGS) $(INCLUDE_DIRS) $(MACROS)

do: A.OUT
  ./A.OUT > std 2> err

clean:
  rm -f *~ $(OBJECTS)

fullclean:
  rm -f *~ $(OBJECTS) A.OUT std err 

remake: clean A.OUT



Makefile for cl(VC++) + clapack on Windows

[See How to compile with VC++ on Windows also.]

CPP = cl.exe

COMP_FLAGS = /nologo /EHsc /w /MD
LINK_FLAGS = /link /nologo

#MACROS = -DCPPL_VERBOSE -DCPPL_DEBUG

INCLROOT=C:\lib\cpplapack\cpplapack
CPPLAPACK_INCLUDE_DIR = "$(INCLROOT)\include"
INCLUDE_DIRS = /I $(CPPLAPACK_INCLUDE_DIR) 

LIBSROOT=C:\lib\CLAPACK3-Windows
LIBS = "$(LIBSROOT)\clapack\Release\clapack.lib" "$(LIBSROOT)\clapack\BLAS\Release\blas.lib"

OBJECTS = main.obj

###############################################################################

A.EXE: $(OBJECTS)
  $(CPP) $(OBJECTS) /o $@ $(LINK_FLAGS) $(LIBS)

.SUFFIXES: .cpp .obj

.cpp.obj:
  $(CPP) /c $(COMP_FLAGS) $(INCLUDE_DIRS) $<

do: A.OUT
  .\A.EXE > std 2> err

clean:
  del $(OBJECTS)

fullclean:
  del $(OBJECTS) A.EXE std err 

remake: clean A.EXE
 All Classes Files Functions Variables Friends