fix build error
[platform/upstream/openblas.git] / Makefile.system
index 642d627..bd361a1 100644 (file)
@@ -23,6 +23,7 @@ CC = gcc
 UNAME_S := $(shell uname -s)
 ifeq ($(UNAME_S),Darwin)
      CC = clang
+#     EXTRALIB += -Wl,-no_compact_unwind
 endif
 endif
 
@@ -35,7 +36,7 @@ include $(TOPDIR)/$(MAKEFILE_RULE)
 endif
 
 #
-#  Beginning of system configuration 
+#  Beginning of system configuration
 #
 
 ifndef HOSTCC
@@ -46,25 +47,91 @@ ifdef TARGET
 GETARCH_FLAGS := -DFORCE_$(TARGET)
 endif
 
+# Force fallbacks for 32bit
+
+ifeq ($(BINARY), 32)
+ifeq ($(TARGET), HASWELL)
+GETARCH_FLAGS := -DFORCE_NEHALEM
+endif
+ifeq ($(TARGET), SANDYBRIDGE)
+GETARCH_FLAGS := -DFORCE_NEHALEM
+endif
+ifeq ($(TARGET), BULLDOZER)
+GETARCH_FLAGS := -DFORCE_BARCELONA
+endif
+ifeq ($(TARGET), PILEDRIVER)
+GETARCH_FLAGS := -DFORCE_BARCELONA
+endif
+ifeq ($(TARGET), STEAMROLLER)
+GETARCH_FLAGS := -DFORCE_BARCELONA
+endif
+ifeq ($(TARGET), EXCAVATOR)
+GETARCH_FLAGS := -DFORCE_BARCELONA
+endif
+ifeq ($(TARGET), ZEN)
+GETARCH_FLAGS := -DFORCE_BARCELONA
+endif
+endif
+
+
 #TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1.
 #
 ifdef TARGET_CORE
 GETARCH_FLAGS := -DFORCE_$(TARGET_CORE)
 endif
 
+# Force fallbacks for 32bit
+
+ifeq ($(BINARY), 32)
+ifeq ($(TARGET_CORE), HASWELL)
+GETARCH_FLAGS := -DFORCE_NEHALEM
+endif
+ifeq ($(TARGET_CORE), SANDYBRIDGE)
+GETARCH_FLAGS := -DFORCE_NEHALEM
+endif
+ifeq ($(TARGET_CORE), BULLDOZER)
+GETARCH_FLAGS := -DFORCE_BARCELONA
+endif
+ifeq ($(TARGET_CORE), PILEDRIVER)
+GETARCH_FLAGS := -DFORCE_BARCELONA
+endif
+ifeq ($(TARGET_CORE), STEAMROLLER)
+GETARCH_FLAGS := -DFORCE_BARCELONA
+endif
+ifeq ($(TARGET_CORE), EXCAVATOR)
+GETARCH_FLAGS := -DFORCE_BARCELONA
+endif
+ifeq ($(TARGET_CORE), ZEN)
+GETARCH_FLAGS := -DFORCE_BARCELONA
+endif
+endif
+
+
+
+
 ifdef INTERFACE64
+ifneq ($(INTERFACE64), 0)
 GETARCH_FLAGS  += -DUSE64BITINT
 endif
+endif
 
 ifndef GEMM_MULTITHREAD_THRESHOLD
 GEMM_MULTITHREAD_THRESHOLD=4
 endif
-GETARCH_FLAGS  += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD) 
+GETARCH_FLAGS  += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD)
 
 ifeq ($(NO_AVX), 1)
 GETARCH_FLAGS  += -DNO_AVX
 endif
 
+ifeq ($(BINARY), 32)
+GETARCH_FLAGS  += -DNO_AVX
+endif
+
+ifeq ($(NO_AVX2), 1)
+GETARCH_FLAGS  += -DNO_AVX2
+endif
+
 ifeq ($(DEBUG), 1)
 GETARCH_FLAGS  += -g
 endif
@@ -77,12 +144,28 @@ ifndef NO_PARALLEL_MAKE
 NO_PARALLEL_MAKE=0
 endif
 GETARCH_FLAGS  += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE)
+
+ifdef MAKE_NB_JOBS
+GETARCH_FLAGS += -DMAKE_NB_JOBS=$(MAKE_NB_JOBS)
+endif
+
+ifeq ($(HOSTCC), loongcc)
+GETARCH_FLAGS  += -static
+endif
+
+#if don't use Fortran, it will only compile CBLAS.
+ifeq ($(ONLY_CBLAS), 1)
+NO_LAPACK = 1
+else
+ONLY_CBLAS = 0
+endif
+
 # This operation is expensive, so execution should be once.
 ifndef GOTOBLAS_MAKEFILE
 export GOTOBLAS_MAKEFILE = 1
 
 # Generating Makefile.conf and config.h
-DUMMY := $(shell $(MAKE) -C $(TOPDIR) -f Makefile.prebuild CC="$(CC)" FC="$(FC)" HOSTCC="$(HOSTCC)" CFLAGS="$(GETARCH_FLAGS)" BINARY=$(BINARY) USE_OPENMP=$(USE_OPENMP) TARGET_CORE=$(TARGET_CORE) all)
+DUMMY := $(shell $(MAKE) -C $(TOPDIR) -f Makefile.prebuild CC="$(CC)" FC="$(FC)" HOSTCC="$(HOSTCC)" CFLAGS="$(GETARCH_FLAGS)" BINARY=$(BINARY) USE_OPENMP=$(USE_OPENMP) TARGET_CORE=$(TARGET_CORE) ONLY_CBLAS=$(ONLY_CBLAS) TARGET=$(TARGET) all)
 
 ifndef TARGET_CORE
 include $(TOPDIR)/Makefile.conf
@@ -126,13 +209,23 @@ LD        = $(CROSS_SUFFIX)ld
 RANLIB = $(CROSS_SUFFIX)ranlib
 NM     = $(CROSS_SUFFIX)nm
 DLLWRAP = $(CROSS_SUFFIX)dllwrap
+OBJCOPY = $(CROSS_SUFFIX)objcopy
+OBJCONV = $(CROSS_SUFFIX)objconv
+
+
+# For detect fortran failed, only build BLAS.
+ifeq ($(NOFORTRAN), 1)
+NO_LAPACK = 1
+endif
 
 #
 #  OS dependent settings
 #
 
 ifeq ($(OSNAME), Darwin)
-export MACOSX_DEPLOYMENT_TARGET=10.2
+ifndef MACOSX_DEPLOYMENT_TARGET
+export MACOSX_DEPLOYMENT_TARGET=10.6
+endif
 MD5SUM = md5 -r
 endif
 
@@ -146,6 +239,11 @@ endif
 
 ifeq ($(OSNAME), Linux)
 EXTRALIB       += -lm
+NO_EXPRECISION = 1
+endif
+
+ifeq ($(OSNAME), Android)
+EXTRALIB       += -lm
 endif
 
 ifeq ($(OSNAME), AIX)
@@ -173,19 +271,26 @@ GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
 GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
 ifeq ($(GCCVERSIONGT4), 1)
 # GCC Majar version > 4
-# It is compatible with MSVC ABI. 
+# It is compatible with MSVC ABI.
 CCOMMON_OPT    += -DMS_ABI
 endif
 
 ifeq ($(GCCVERSIONGTEQ4), 1)
 ifeq ($(GCCMINORVERSIONGTEQ7), 1)
 # GCC Version >=4.7
-# It is compatible with MSVC ABI. 
+# It is compatible with MSVC ABI.
 CCOMMON_OPT    += -DMS_ABI
 endif
 endif
+endif
 
+# Ensure the correct stack alignment on Win32
+# http://permalink.gmane.org/gmane.comp.lib.openblas.general/97
+ifeq ($(ARCH), x86)
+CCOMMON_OPT += -mincoming-stack-boundary=2
+FCOMMON_OPT += -mincoming-stack-boundary=2
 endif
+
 endif
 
 ifeq ($(OSNAME), Interix)
@@ -203,12 +308,19 @@ endif
 ifneq ($(OSNAME), WINNT)
 ifneq ($(OSNAME), CYGWIN_NT)
 ifneq ($(OSNAME), Interix)
+ifneq ($(OSNAME), Android)
 ifdef SMP
 EXTRALIB   += -lpthread
 endif
 endif
 endif
 endif
+endif
+
+# ifeq logical or
+ifeq ($(OSNAME), $(filter $(OSNAME),WINNT CYGWIN_NT Interix))
+OS_WINDOWS=1
+endif
 
 ifdef QUAD_PRECISION
 CCOMMON_OPT    += -DQUAD_PRECISION
@@ -230,6 +342,11 @@ ifdef SANITY_CHECK
 CCOMMON_OPT    += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
 endif
 
+MAX_STACK_ALLOC ?= 2048
+ifneq ($(MAX_STACK_ALLOC), 0)
+CCOMMON_OPT    += -DMAX_STACK_ALLOC=$(MAX_STACK_ALLOC)
+endif
+
 #
 #  Architecture dependent settings
 #
@@ -238,6 +355,11 @@ ifeq ($(ARCH), x86)
 ifndef BINARY
 NO_BINARY_MODE = 1
 endif
+
+ifeq ($(CORE), generic)
+NO_EXPRECISION = 1
+endif
+
 ifndef NO_EXPRECISION
 ifeq ($(F_COMPILER), GFORTRAN)
 # ifeq logical or. GCC or LSB
@@ -248,7 +370,7 @@ FCOMMON_OPT += -m128bit-long-double
 endif
 ifeq ($(C_COMPILER), CLANG)
 EXPRECISION    = 1
-CCOMMON_OPT    += -DEXPRECISION 
+CCOMMON_OPT    += -DEXPRECISION
 FCOMMON_OPT    += -m128bit-long-double
 endif
 endif
@@ -256,6 +378,11 @@ endif
 endif
 
 ifeq ($(ARCH), x86_64)
+
+ifeq ($(CORE), generic)
+NO_EXPRECISION = 1
+endif
+
 ifndef NO_EXPRECISION
 ifeq ($(F_COMPILER), GFORTRAN)
 # ifeq logical or. GCC or LSB
@@ -266,7 +393,7 @@ FCOMMON_OPT += -m128bit-long-double
 endif
 ifeq ($(C_COMPILER), CLANG)
 EXPRECISION    = 1
-CCOMMON_OPT    += -DEXPRECISION 
+CCOMMON_OPT    += -DEXPRECISION
 FCOMMON_OPT    += -m128bit-long-double
 endif
 endif
@@ -277,14 +404,20 @@ ifeq ($(C_COMPILER), INTEL)
 CCOMMON_OPT    += -wd981
 endif
 
+
 ifeq ($(USE_OPENMP), 1)
+
+#check
+ifeq ($(USE_THREAD), 0)
+$(error OpenBLAS: Cannot set both USE_OPENMP=1 and USE_THREAD=0. The USE_THREAD=0 is only for building single thread version.)
+endif
+
 # ifeq logical or. GCC or LSB
 ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
 CCOMMON_OPT    += -fopenmp
 endif
 
 ifeq ($(C_COMPILER), CLANG)
-$(error OpenBLAS: Clang didn't support OpenMP yet.)
 CCOMMON_OPT    += -fopenmp
 endif
 
@@ -311,20 +444,21 @@ ifeq ($(DYNAMIC_ARCH), 1)
 ifeq ($(ARCH), x86)
 DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
               CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
-ifneq ($(NO_AVX), 1)
-DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER
-endif
 endif
 
 ifeq ($(ARCH), x86_64)
 DYNAMIC_CORE = PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
 ifneq ($(NO_AVX), 1)
-DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER
+DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER EXCAVATOR
+endif
+ifneq ($(NO_AVX2), 1)
+DYNAMIC_CORE += HASWELL ZEN
 endif
 endif
 
+# If DYNAMIC_CORE is not set, DYNAMIC_ARCH cannot do anything, so force it to empty
 ifndef DYNAMIC_CORE
-DYNAMIC_ARCH =
+override DYNAMIC_ARCH=
 endif
 endif
 
@@ -340,7 +474,7 @@ endif
 endif
 endif
 
-ifeq ($(ARCH), mips64)
+ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
 NO_BINARY_MODE = 1
 endif
 
@@ -349,6 +483,36 @@ NO_BINARY_MODE     = 1
 BINARY_DEFINED = 1
 endif
 
+ifeq ($(ARCH), arm)
+NO_BINARY_MODE  = 1
+BINARY_DEFINED  = 1
+
+CCOMMON_OPT += -marm
+FCOMMON_OPT += -marm
+
+# If softfp abi is mentioned on the command line, force it.
+ifeq ($(ARM_SOFTFP_ABI), 1)
+CCOMMON_OPT += -mfloat-abi=softfp
+FCOMMON_OPT += -mfloat-abi=softfp
+endif
+
+ifeq ($(OSNAME), Android)
+ifeq ($(ARM_SOFTFP_ABI), 1)
+EXTRALIB       += -lm
+else
+EXTRALIB       += -Wl,-lm_hard
+endif
+endif
+endif
+
+ifeq ($(ARCH), arm64)
+NO_BINARY_MODE  = 1
+BINARY_DEFINED  = 1
+endif
+
+
+
+
 #
 #  C Compiler dependent settings
 #
@@ -367,25 +531,43 @@ endif
 
 ifdef NO_BINARY_MODE
 
-ifeq ($(ARCH), mips64)
+ifeq ($(ARCH), $(filter $(ARCH),mips64))
 ifdef BINARY64
 CCOMMON_OPT += -mabi=64
 else
 CCOMMON_OPT += -mabi=n32
 endif
 BINARY_DEFINED = 1
+else ifeq ($(ARCH), $(filter $(ARCH),mips))
+CCOMMON_OPT += -mabi=32
+BINARY_DEFINED = 1
 endif
 
-ifeq ($(CORE), LOONGSON3A) 
+ifeq ($(CORE), LOONGSON3A)
 CCOMMON_OPT += -march=mips64
 FCOMMON_OPT += -march=mips64
 endif
 
-ifeq ($(CORE), LOONGSON3B) 
+ifeq ($(CORE), LOONGSON3B)
 CCOMMON_OPT += -march=mips64
 FCOMMON_OPT += -march=mips64
 endif
 
+ifeq ($(CORE), P5600)
+CCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
+FCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
+endif
+
+ifeq ($(CORE), I6400)
+CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
+FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
+endif
+
+ifeq ($(CORE), P6600)
+CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
+FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
+endif
+
 ifeq ($(OSNAME), AIX)
 BINARY_DEFINED = 1
 endif
@@ -422,6 +604,23 @@ endif
 #  Fortran Compiler dependent settings
 #
 
+ifeq ($(F_COMPILER), FLANG)
+CCOMMON_OPT += -DF_INTERFACE_FLANG
+ifdef BINARY64
+ifdef INTERFACE64
+ifneq ($(INTERFACE64), 0)
+FCOMMON_OPT += -i8
+endif
+endif
+FCOMMON_OPT += -Wall
+else
+FCOMMON_OPT += -Wall
+endif
+ifeq ($(USE_OPENMP), 1)
+FCOMMON_OPT += -fopenmp
+endif
+endif
+
 ifeq ($(F_COMPILER), G77)
 CCOMMON_OPT += -DF_INTERFACE_G77
 FCOMMON_OPT += -Wall
@@ -451,29 +650,31 @@ CCOMMON_OPT += -DF_INTERFACE_GFORT
 FCOMMON_OPT += -Wall
 #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
 ifneq ($(NO_LAPACK), 1)
-ifneq ($(C_COMPILER), LSB)
-EXTRALIB += -lgfortran 
-endif
+EXTRALIB += -lgfortran
 endif
 ifdef NO_BINARY_MODE
-ifeq ($(ARCH), mips64)
+ifeq ($(ARCH), $(filter $(ARCH),mips64))
 ifdef BINARY64
 FCOMMON_OPT += -mabi=64
 else
 FCOMMON_OPT += -mabi=n32
 endif
+else ifeq ($(ARCH), $(filter $(ARCH),mips))
+FCOMMON_OPT += -mabi=32
 endif
 else
 ifdef BINARY64
 FCOMMON_OPT += -m64
 ifdef INTERFACE64
+ifneq ($(INTERFACE64), 0)
 FCOMMON_OPT +=  -fdefault-integer-8
 endif
+endif
 else
 FCOMMON_OPT += -m32
 endif
 endif
-ifdef USE_OPENMP
+ifeq ($(USE_OPENMP), 1)
 FCOMMON_OPT += -fopenmp
 endif
 endif
@@ -481,16 +682,18 @@ endif
 ifeq ($(F_COMPILER), INTEL)
 CCOMMON_OPT += -DF_INTERFACE_INTEL
 ifdef INTERFACE64
+ifneq ($(INTERFACE64), 0)
 FCOMMON_OPT += -i8
 endif
-ifdef USE_OPENMP
+endif
+ifeq ($(USE_OPENMP), 1)
 FCOMMON_OPT += -openmp
 endif
 endif
 
 ifeq ($(F_COMPILER), FUJITSU)
 CCOMMON_OPT += -DF_INTERFACE_FUJITSU
-ifdef USE_OPENMP
+ifeq ($(USE_OPENMP), 1)
 FCOMMON_OPT += -openmp
 endif
 endif
@@ -501,12 +704,14 @@ CCOMMON_OPT += -DF_INTERFACE_IBM
 ifdef BINARY64
 FCOMMON_OPT += -q64
 ifdef INTERFACE64
+ifneq ($(INTERFACE64), 0)
 FCOMMON_OPT += -qintsize=8
 endif
+endif
 else
 FCOMMON_OPT += -q32
 endif
-ifdef USE_OPENMP
+ifeq ($(USE_OPENMP), 1)
 FCOMMON_OPT += -openmp
 endif
 endif
@@ -516,13 +721,15 @@ CCOMMON_OPT  += -DF_INTERFACE_PGI
 COMMON_PROF +=  -DPGICOMPILER
 ifdef BINARY64
 ifdef INTERFACE64
+ifneq ($(INTERFACE64), 0)
 FCOMMON_OPT += -i8
 endif
+endif
 FCOMMON_OPT += -tp p7-64
 else
 FCOMMON_OPT += -tp p7
 endif
-ifdef USE_OPENMP
+ifeq ($(USE_OPENMP), 1)
 FCOMMON_OPT += -mp
 endif
 endif
@@ -531,25 +738,13 @@ ifeq ($(F_COMPILER), PATHSCALE)
 CCOMMON_OPT  += -DF_INTERFACE_PATHSCALE
 ifdef BINARY64
 ifdef INTERFACE64
+ifneq ($(INTERFACE64), 0)
 FCOMMON_OPT += -i8
 endif
 endif
-
-ifneq ($(ARCH), mips64)
-ifndef BINARY64
-FCOMMON_OPT += -m32
-else
-FCOMMON_OPT += -m64
-endif
-else
-ifdef BINARY64
-FCOMMON_OPT += -mabi=64
-else
-FCOMMON_OPT += -mabi=n32
-endif
 endif
-
-ifdef USE_OPENMP
+ifeq ($(USE_OPENMP), 1)
 FCOMMON_OPT += -mp
 endif
 endif
@@ -558,28 +753,65 @@ ifeq ($(F_COMPILER), OPEN64)
 CCOMMON_OPT  += -DF_INTERFACE_OPEN64
 ifdef BINARY64
 ifdef INTERFACE64
+ifneq ($(INTERFACE64), 0)
 FCOMMON_OPT += -i8
 endif
 endif
+endif
+
+ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
+ifndef BINARY64
+FCOMMON_OPT += -n32
+else
+FCOMMON_OPT += -n64
+endif
+ifeq ($(CORE), LOONGSON3A)
+FCOMMON_OPT += -loongson3 -static
+endif
+
+ifeq ($(CORE), LOONGSON3B)
+FCOMMON_OPT += -loongson3 -static
+endif
+
+else
 ifndef BINARY64
 FCOMMON_OPT += -m32
 else
 FCOMMON_OPT += -m64
 endif
+endif
 
-ifdef USE_OPENMP
+ifeq ($(USE_OPENMP), 1)
 FEXTRALIB   += -lstdc++
 FCOMMON_OPT += -mp
 endif
 endif
 
 ifeq ($(C_COMPILER), OPEN64)
+
+ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
+ifndef BINARY64
+CCOMMON_OPT += -n32
+else
+CCOMMON_OPT += -n64
+endif
+ifeq ($(CORE), LOONGSON3A)
+CCOMMON_OPT += -loongson3 -static
+endif
+
+ifeq ($(CORE), LOONGSON3B)
+CCOMMON_OPT += -loongson3 -static
+endif
+
+else
+
 ifndef BINARY64
 CCOMMON_OPT += -m32
 else
 CCOMMON_OPT += -m64
 endif
 endif
+endif
 
 ifeq ($(C_COMPILER), SUN)
 CCOMMON_OPT  += -w
@@ -597,35 +829,37 @@ FCOMMON_OPT  += -m32
 else
 FCOMMON_OPT  += -m64
 endif
-ifdef USE_OPENMP
+ifeq ($(USE_OPENMP), 1)
 FCOMMON_OPT += -xopenmp=parallel
 endif
 endif
 
 ifeq ($(F_COMPILER), COMPAQ)
 CCOMMON_OPT  += -DF_INTERFACE_COMPAQ
-ifdef USE_OPENMP
+ifeq ($(USE_OPENMP), 1)
 FCOMMON_OPT += -openmp
 endif
 endif
 
 ifdef BINARY64
 ifdef INTERFACE64
-CCOMMON_OPT    += 
+ifneq ($(INTERFACE64), 0)
+CCOMMON_OPT    +=
 #-DUSE64BITINT
 endif
 endif
+endif
 
 ifeq ($(NEED_PIC), 1)
 ifeq ($(C_COMPILER), IBM)
-CCOMMON_OPT += -qpic=large 
+CCOMMON_OPT += -qpic=large
 else
-CCOMMON_OPT += -fPIC 
+CCOMMON_OPT += -fPIC
 endif
 ifeq ($(F_COMPILER), SUN)
 FCOMMON_OPT  += -pic
 else
-FCOMMON_OPT += -fPIC 
+FCOMMON_OPT += -fPIC
 endif
 endif
 
@@ -647,6 +881,14 @@ ifeq ($(NO_AVX), 1)
 CCOMMON_OPT    += -DNO_AVX
 endif
 
+ifeq ($(ARCH), x86)
+CCOMMON_OPT    += -DNO_AVX
+endif
+
+ifeq ($(NO_AVX2), 1)
+CCOMMON_OPT    += -DNO_AVX2
+endif
+
 ifdef SMP
 CCOMMON_OPT    += -DSMP_SERVER
 
@@ -662,6 +904,10 @@ ifeq ($(USE_OPENMP), 1)
 CCOMMON_OPT    += -DUSE_OPENMP
 endif
 
+ifeq ($(BIGNUMA), 1)
+CCOMMON_OPT    += -DBIGNUMA
+endif
+
 endif
 
 ifeq ($(NO_WARMUP), 1)
@@ -693,10 +939,18 @@ ifdef USE_SIMPLE_THREADED_LEVEL3
 CCOMMON_OPT    += -DUSE_SIMPLE_THREADED_LEVEL3
 endif
 
+ifndef SYMBOLPREFIX
+SYMBOLPREFIX =
+endif
+
+ifndef SYMBOLSUFFIX
+SYMBOLSUFFIX =
+endif
+
 ifndef LIBNAMESUFFIX
-LIBPREFIX = libopenblas
+LIBPREFIX = lib$(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)
 else
-LIBPREFIX = libopenblas_$(LIBNAMESUFFIX)
+LIBPREFIX = lib$(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX)
 endif
 
 KERNELDIR      = $(TOPDIR)/kernel/$(ARCH)
@@ -757,17 +1011,18 @@ ifeq ($(OSNAME), SunOS)
 TAR    = gtar
 PATCH  = gpatch
 GREP   = ggrep
+AWK    = nawk
 else
 TAR    = tar
 PATCH  = patch
 GREP   = grep
+AWK    = awk
 endif
 
 ifndef MD5SUM
 MD5SUM = md5sum
 endif
 
-AWK    = awk
 
 REVISION = -r$(VERSION)
 MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
@@ -776,23 +1031,48 @@ ifeq ($(DEBUG), 1)
 COMMON_OPT += -g
 endif
 
+ifeq ($(DEBUG), 1)
+FCOMMON_OPT += -g
+endif
+
 ifndef COMMON_OPT
 COMMON_OPT = -O2
 endif
 
+ifndef FCOMMON_OPT
+FCOMMON_OPT = -O2 -frecursive
+endif
+
+
 
 override CFLAGS     += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
 override PFLAGS     += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
 
 override FFLAGS     += $(COMMON_OPT) $(FCOMMON_OPT)
-override FPFLAGS    += $(COMMON_OPT) $(FCOMMON_OPT) $(COMMON_PROF)
+override FPFLAGS    += $(FCOMMON_OPT) $(COMMON_PROF)
 #MAKEOVERRIDES =
 
+#For LAPACK Fortran codes.
+#Disable -fopenmp for LAPACK Fortran codes on Windows.
+ifdef OS_WINDOWS
+LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
+LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
+else
+LAPACK_FFLAGS := $(FFLAGS)
+LAPACK_FPFLAGS := $(FPFLAGS)
+endif
+
 LAPACK_CFLAGS = $(CFLAGS)
-LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H 
+LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
 ifdef INTERFACE64
+ifneq ($(INTERFACE64), 0)
 LAPACK_CFLAGS +=  -DLAPACK_ILP64
 endif
+endif
+
+ifdef OS_WINDOWS
+LAPACK_CFLAGS +=  -DOPENBLAS_OS_WINDOWS
+endif
 ifeq ($(C_COMPILER), LSB)
 LAPACK_CFLAGS +=  -DLAPACK_COMPLEX_STRUCTURE
 endif
@@ -838,6 +1118,26 @@ LIBZIPNAME   = $(LIBNAME:.$(LIBSUFFIX)=.zip)
 LIBS           = $(TOPDIR)/$(LIBNAME)
 LIBS_P         = $(TOPDIR)/$(LIBNAME_P)
 
+
+LIB_COMPONENTS = BLAS
+ifneq ($(NO_CBLAS), 1)
+LIB_COMPONENTS += CBLAS
+endif
+
+ifneq ($(NO_LAPACK), 1)
+LIB_COMPONENTS += LAPACK
+ifneq ($(NO_LAPACKE), 1)
+LIB_COMPONENTS += LAPACKE
+endif
+ifeq ($(BUILD_RELAPACK), 1)
+LIB_COMPONENTS += ReLAPACK
+endif
+endif
+
+ifeq ($(ONLY_CBLAS), 1)
+LIB_COMPONENTS = CBLAS
+endif
+
 export OSNAME
 export ARCH
 export CORE
@@ -848,6 +1148,7 @@ export CC
 export FC
 export BU
 export FU
+export NEED2UNDERSCORES
 export USE_THREAD
 export NUM_THREADS
 export NUM_CORES
@@ -863,6 +1164,7 @@ export USE_OPENMP
 export CROSS
 export CROSS_SUFFIX
 export NOFORTRAN
+export NO_FBLAS
 export EXTRALIB
 export CEXTRALIB
 export FEXTRALIB
@@ -875,6 +1177,12 @@ export HAVE_SSE4_2
 export HAVE_SSE4A
 export HAVE_SSE5
 export HAVE_AVX
+export HAVE_VFP
+export HAVE_VFPV3
+export HAVE_VFPV4
+export HAVE_NEON
+export HAVE_MSA
+export MSA_FLAGS
 export KERNELDIR
 export FUNCTION_PROFILE
 export TARGET_CORE
@@ -936,4 +1244,3 @@ SUNPATH            = /opt/sunstudio12.1
 else
 SUNPATH                = /opt/SUNWspro
 endif
-