CPPLapack
 All Classes Files Functions Variables Friends Pages
Typical "Makefile"s for a few Platforms

The base Makefile

###############################################################################
## Makefile ##
###############################################################################
TARGET = A.OUT
###############################################################################
include $(HOME)/local/cpplapack/makefiles/Makefile.g++
#include $(HOME)/local/cpplapack/makefiles/Makefile.icpc
###############################################################################
THIS_FILE:= $(firstword $(MAKEFILE_LIST))
OPTIONS:= $(MAKEFLAGS)
HEADERS:= $(shell find ./ -iname '*.hpp')
SOURCES:= $(shell find ./ -iname '*.cpp')
SOURCES:= $(sort $(SOURCES))
OBJECTS:= $(SOURCES:%.cpp=%.o)
ifeq ($(OMP_NUM_THREADS),)
OMP_NUM_THREADS:= $(shell cat /proc/cpuinfo | grep processor | wc -l)
endif
###############################################################################
###############################################################################
###############################################################################
debug: depend
@echo -e "################################"
@echo -e "#### building in debug mode ####"
@echo -e "################################\n"
@$(MAKE) -j $(OMP_NUM_THREADS) -f $(THIS_FILE) --no-print-directory _build DEBUG=1
@echo -e "#############################"
@echo -e "#### built in debug mode ####"
@echo -e "#############################\n"
release: depend
@echo -e "##################################"
@echo -e "#### building in release mode ####"
@echo -e "##################################\n"
@$(MAKE) -j $(OMP_NUM_THREADS) -f $(THIS_FILE) --no-print-directory _build RELEASE=1
@echo -e "###############################"
@echo -e "#### built in release mode ####"
@echo -e "###############################\n"
profile: depend
@echo -e "##################################"
@echo -e "#### building in profile mode ####"
@echo -e "##################################\n"
@$(MAKE) -j $(OMP_NUM_THREADS) -f $(THIS_FILE) --no-print-directory _build PROFILE=1
@echo -e "###############################"
@echo -e "#### built in profile mode ####"
@echo -e "###############################\n"
verbose: depend
@echo -e "##################################"
@echo -e "#### building in verbose mode ####"
@echo -e "##################################\n"
@$(MAKE) -j $(OMP_NUM_THREADS) -f $(THIS_FILE) --no-print-directory _build DEBUG=1 VERBOSE=1
@echo -e "###############################"
@echo -e "#### built in verbose mode ####"
@echo -e "###############################\n"
###############################################################################
.SUFFIXES: .cpp .o
.cpp.o:
$(CXX) -c $< $(FLAGS) $(CFLAGS) $(INCLUDE_DIRS) $(MACROS) -o $@
@echo
_build: $(OBJECTS)
$(CXX) $(OBJECTS) $(LIBS) $(FLAGS) $(LFLAGS) $(LIB_DIRS) -o $(TARGET)
@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 *~ $(TARGET)
###############################################################################
-include Makefile.depend



Makefile for g++ + libblas + liblapack (works with the base Makefile)

###############################################################################
## Makefile.g++ ##
###############################################################################
#######################################
############### common ################
#######################################
CXX = g++ -pipe
######## FLAGS ########
#FLAGS += -std=c++0x # -std=c++98
#FLAGS += -fopenmp
######## CFLAGS ########
CFLAGS += -Wall -Wno-unknown-pragmas -Wextra -Wshadow -Wformat=2
CFLAGS += -ftree-vectorizer-verbose=0
######## LFLAGS ########
#LFLAGS += -static
######## others ########
INCLUDE_DIRS += -I./ -I$(HOME)/local/cpplapack/include
LIB_DIRS +=
LIBS += -lm
LIBS += -llapack -lblas -lgfortran
##LIBS += $(HOME)/local/lapack-3.2.2/liblapack.a $(HOME)/local/lapack-3.2.2/libblas.a -lgfortran
##LIBS += $(HOME)/local/CLAPACK-3.2.1/liblapack.a $(HOME)/local/CLAPACK-3.2.1/libblas.a $(HOME)/local/CLAPACK-3.2.1/libf2c.a
##LIBS += /usr/lib/sse2/liblapack.a /usr/lib/sse2/libblas.a -lgfortran
##LIBS += -llapack $(HOME)/local/ATLAS/libatlas.a -lgfortran
#LIBS += -lgsl -lgslcblas
#LIBS += -lboost_filesystem -lboost_system
##MACROS += -DUSE_LIBF2C
#######################################
############ release mode #############
#######################################
ifdef RELEASE
#### FLAGS ####
FLAGS += -O2 #### -O3 is dangerous
FLAGS += -mtune=native -march=native
#FLAGS += -funroll-loops -ffast-math -fno-math-errno #-mfpmath=sse
FLAGS += -fprefetch-loop-arrays -fstrength-reduce -malign-double
FLAGS += -fomit-frame-pointer
##FLAGS += -fforce-addr -falign-functions=4 -ftree-vectorize -ftree-vectorizer-verbose=5 -funsafe-loop-optimizations -Wunsafe-loop-optimizations
#### CFLAGS ####
##CFLAGS += -fimplement-inlines -finline-limit=0 --param large-function-growth=0 --param max-inline-insns-single=0 --param inline-unit-growth=0
##CFLAGS += --param large-function-growth=99999 --param max-inline-insns-single=99999 --param inline-unit-growth=99999 -Winline
#### LFLAGS ####
#LFLAGS +=
#### others ####
MACROS += -DBOOST_DISABLE_ASSERTS
endif
#######################################
############ profile mode #############
#######################################
ifdef PROFILE
#### FLAGS ####
#### CFLAGS ####
CFLAGS += -pg #-g
#### LFLAGS ####
LFLAGS += -pg #-g
#### others ####
MACROS += -DBOOST_DISABLE_ASSERTS
endif
#######################################
############## debug mode #############
#######################################
ifdef DEBUG
#### FLAGS ####
FLAGS += -g -O0
#FLAGS += -fmudflap -fmudflapir ## not reliable
#### CFLAGS ####
CFLAGS += -fstack-protector-all -fbounds-check -ftrapv -ftrapping-math #-ffpe-trap=invalid,zero,overflow,underflow
CFLAGS += #-mfp-trap-mode=sui
#### LFLAGS ####
#LFLAGS += -lefence
#### others ####
#LIBS += -lmudflap ## not reliable
MACROS += -DDEBUG
MACROS += -DCPPL_DEBUG
endif
#######################################
############ verbose mode #############
#######################################
ifdef VERBOSE
#### FLAGS ####
#### CFLAGS ####
#### LFLAGS ####
#### others ####
MACROS += -DVERBOSE
MACROS += -DCPPL_VERBOSE
endif



Makefile for icpc + MKL on Linux (works with the base Makefile)

###############################################################################
## Makefile.icpc ##
###############################################################################
#######################################
############### common ################
#######################################
CXX = LC_ALL=C icpc
######## FLAGS ########
FLAGS += -gcc-name=gcc -gxx-name=g++ ## -use-intel-optimized-headers
#FLAGS += -std=c++11 # -std=c++98
#FLAGS += -fp-model no-except -fp-speculation=strict
FLAGS += -openmp
FLAGS += -mkl
#FLAGS += -DMKL_ILP64
#FLAGS += -ipp
######## CFLAGS ########
####CFLAGS += -Wall -w1 -Wshadow -Wcheck -Wno-unknown-pragmas -Wno-pragma-once
######## LFLAGS ########
####LFLAGS += -shared-intel -shared-libgcc
LFLAGS += -static-intel -static-libgcc -static-libstdc++
######## others ########
INCLUDE_DIRS += -I./ -I$(HOME)/local/cpplapack/include
LIB_DIRS +=
#LIBS += -lm
MACROS +=
#######################################
############ release mode #############
#######################################
ifdef RELEASE
#### FLAGS ####
#FLAGS += -fast
#FLAGS += -xHOST -O3 -no-prec-div -static -fp-model fast=2 ## without -ipo
#FLAGS += -axSSE2,SSE3,SSSE3,SSE4.1,SSE4.2,AVX,CORE-AVX2,CORE-AVX-I,MIC-AVX512,CORE-AVX512 -O3 -ipo -no-prec-div -static -fp-model fast=2 ## for various arch
FLAGS += -axSSE2,SSE3,SSSE3,SSE4.1,SSE4.2,AVX,CORE-AVX2,CORE-AVX-I,MIC-AVX512,CORE-AVX512 -O3 -no-prec-div -static -fp-model fast=2 ## for various arch without -ipo
#FLAGS += -funroll-loops -fno-math-errno #-mfpmath=sse
FLAGS += -fomit-frame-pointer
#### CFLAGS ####
#CFLAGS +=
#### LFLAGS ####
#LFLAGS +=
#### others ####
MACROS += -DBOOST_DISABLE_ASSERTS
endif
#######################################
############ profile mode #############
#######################################
ifdef PROFILE
#### FLAGS ####
FLAGS += -fast
#### CFLAGS ####
CFLAGS += -pg #-g
#### LFLAGS ####
LFLAGS += -pg #-g
#### others ####
MACROS += -DBOOST_DISABLE_ASSERTS
endif
#######################################
############## debug mode #############
#######################################
ifdef DEBUG
#### FLAGS ####
FLAGS += -g -O0 -w1 -Wcheck -Wno-unknown-pragmas -Wconversion -Wreturn-type -Wshadow -Woverflow
#### CFLAGS ####
#CFLAGS += -mfp-trap-mode=sui
CFLAGS += -fp-stack-check -ftrapuv -fmath-errno #-ffpe-trap=invalid,zero,overflow,underflow
#### LFLAGS ####
#LFLAGS += -lefence
#### others ####
MACROS += -DDEBUG
MACROS += -DCPPL_DEBUG
endif
#######################################
############ verbose mode #############
#######################################
ifdef VERBOSE
#### FLAGS ####
#### CFLAGS ####
#### LFLAGS ####
#### others ####
MACROS += -DVERBOSE
####MACROS += -DCPPL_VERBOSE
endif



Makefile for icl + MKL on Windows

###############################################################################
## Makefile for icl ##
###############################################################################
TARGET = a.exe
###############################################################################
CXX = icl
FLAGS += /DRELEASE
####/DMKL_ILP64
FLAGS += /QaxSSE4.2,AVX,CORE-AVX2,CORE-AVX-I /O3 /Qprec-div- /fp:fast=2 # without ipo
####FLAGS += /Qipo
FLAGS += /Qopenmp /Qmkl:parallel
CFLAGS += /Qstd=c++11 /W0 /nologo
LFLAGS +=
INCLUDE_DIRS += /I.
INCLUDE_DIRS += /I../../cpplapack/include
###############################################################################
HEADERS:= $(wildcard */*.hpp *.hpp)
SOURCES:= $(wildcard */*.cpp *.cpp)
SOURCES:= $(sort $(SOURCES))
#SOURCES:= $(filter-out main.cpp, $(SOURCES)) main.cpp
OBJECTS:= $(SOURCES:%.cpp=%.obj)
OBJECTS_TO_DEL := $(subst /,\,$(OBJECTS))
###############################################################################
###############################################################################
###############################################################################
all: $(OBJECTS)
$(CXX) $(OBJECTS) $(FLAGS) $(LFLAGS) $(LIB_DIRS) $(LIBS) /Fe$(TARGET)
.SUFFIXES: .cpp .obj
.cpp.obj:
$(CXX) /c $< $(FLAGS) $(CFLAGS) $(INCLUDE_DIRS) $(MACROS) /Fo$@
clean:
del $(OBJECTS_TO_DEL)