+### 3.1 Selecting compiler (default = gcc)
+ifeq ($(COMP),)
+ COMP=gcc
+endif
+
+ifeq ($(COMP),mingw)
+ comp=mingw
+ CXX=g++
+ profile_prepare = gcc-profile-prepare
+ profile_make = gcc-profile-make
+ profile_use = gcc-profile-use
+ profile_clean = gcc-profile-clean
+endif
+
+ifeq ($(COMP),gcc)
+ comp=gcc
+ CXX=g++
+ profile_prepare = gcc-profile-prepare
+ profile_make = gcc-profile-make
+ profile_use = gcc-profile-use
+ profile_clean = gcc-profile-clean
+endif
+
+ifeq ($(COMP),icc)
+ comp=icc
+ CXX=icpc
+ profile_prepare = icc-profile-prepare
+ profile_make = icc-profile-make
+ profile_use = icc-profile-use
+ profile_clean = icc-profile-clean
+endif
+
+### 3.2 General compiler settings
+CXXFLAGS = -g -Wall -Wcast-qual -fno-exceptions -fno-rtti $(EXTRACXXFLAGS)
+
+ifeq ($(comp),gcc)
+ CXXFLAGS += -ansi -pedantic -Wno-long-long -Wextra -Wshadow
+endif
+
+ifeq ($(comp),mingw)
+ CXXFLAGS += -Wextra -Wshadow
+endif
+
+ifeq ($(comp),icc)
+ CXXFLAGS += -wd383,981,1418,1419,10187,10188,11505,11503 -Wcheck -Wabi -Wdeprecated -strict-ansi
+endif
+
+ifeq ($(os),osx)
+ CXXFLAGS += -arch $(arch)
+endif
+
+### 3.3 General linker settings
+LDFLAGS = -lpthread $(EXTRALDFLAGS)
+
+ifeq ($(os),osx)
+ LDFLAGS += -arch $(arch)
+endif
+
+### 3.4 Debugging
+ifeq ($(debug),no)
+ CXXFLAGS += -DNDEBUG
+endif
+
+### 3.5 Optimization
+ifeq ($(optimize),yes)
+
+ ifeq ($(comp),gcc)
+ CXXFLAGS += -O3
+
+ ifeq ($(os),osx)
+ ifeq ($(arch),i386)
+ CXXFLAGS += -mdynamic-no-pic
+ endif
+ ifeq ($(arch),x86_64)
+ CXXFLAGS += -mdynamic-no-pic
+ endif
+ endif
+ endif
+
+ ifeq ($(comp),mingw)
+ CXXFLAGS += -O3
+ endif
+
+ ifeq ($(comp),icc)
+ ifeq ($(os),osx)
+ CXXFLAGS += -fast -mdynamic-no-pic
+ else
+ CXXFLAGS += -O3
+ endif
+ endif
+endif
+
+### 3.6. Bits
+ifeq ($(bits),64)
+ CXXFLAGS += -DIS_64BIT
+endif
+
+### 3.7 Endianess
+ifeq ($(bigendian),yes)
+ CXXFLAGS += -DBIGENDIAN
+endif
+
+### 3.8 prefetch
+ifeq ($(prefetch),yes)
+ CXXFLAGS += -msse
+ DEPENDFLAGS += -msse
+else
+ CXXFLAGS += -DNO_PREFETCH
+endif
+
+### 3.9 bsfq
+ifeq ($(bsfq),yes)
+ CXXFLAGS += -DUSE_BSFQ
+endif
+
+### 3.10 popcnt
+ifeq ($(popcnt),yes)
+ CXXFLAGS += -DUSE_POPCNT
+
+ ### For gcc we add also msse3 support and Link Time Optimization, note that
+ ### this is a mix of compile and link time options because the lto link phase
+ ### needs access to the optimization flags.
+ ifeq ($(comp),gcc)
+ CXXFLAGS += -msse3 -flto
+ LDFLAGS += $(CXXFLAGS)
+ endif
+endif