Setting DYNAMIC_ARCH=1 on POWER9 does not build POWER9 files due to some compiler version checks. This patch fixes some of the macros that are used to check compiler version. On fixing those checks, there are some new make failures related to icamin, icamax, isamin, isamax and caxpy files on POWER9. This patch fixes those failures as well.
1438 lines
26 KiB
Makefile
1438 lines
26 KiB
Makefile
#
|
|
# Include user definition
|
|
#
|
|
|
|
# TO suppress recursive includes
|
|
INCLUDED = 1
|
|
|
|
ifndef TOPDIR
|
|
TOPDIR = .
|
|
endif
|
|
|
|
# If ARCH is not set, we use the host system's architecture for getarch compile options.
|
|
ifndef ARCH
|
|
HOSTARCH := $(shell uname -m)
|
|
else
|
|
HOSTARCH = $(ARCH)
|
|
endif
|
|
|
|
# Catch conflicting usage of ARCH in some BSD environments
|
|
ifeq ($(ARCH), amd64)
|
|
override ARCH=x86_64
|
|
else ifeq ($(ARCH), powerpc64)
|
|
override ARCH=power
|
|
else ifeq ($(ARCH), i386)
|
|
override ARCH=x86
|
|
else ifeq ($(ARCH), aarch64)
|
|
override ARCH=arm64
|
|
else ifeq ($(ARCH), zarch)
|
|
override ARCH=zarch
|
|
endif
|
|
|
|
NETLIB_LAPACK_DIR = $(TOPDIR)/lapack-netlib
|
|
|
|
# Default C compiler
|
|
# - Only set if not specified on the command line or inherited from the environment.
|
|
# - CC is an implicit variable so neither '?=' or 'ifndef' can be used.
|
|
# http://stackoverflow.com/questions/4029274/mingw-and-make-variables
|
|
# - Default value is 'cc' which is not always a valid command (e.g. MinGW).
|
|
ifeq ($(origin CC),default)
|
|
|
|
# Check if $(CC) refers to a valid command and set the value to gcc if not
|
|
ifneq ($(findstring cmd.exe,$(SHELL)),)
|
|
ifeq ($(shell where $(CC) 2>NUL),)
|
|
CC = gcc
|
|
endif
|
|
else # POSIX-ish
|
|
ifeq ($(shell command -v $(CC) 2>/dev/null),)
|
|
ifeq ($(shell uname -s),Darwin)
|
|
CC = clang
|
|
# EXTRALIB += -Wl,-no_compact_unwind
|
|
else
|
|
CC = gcc
|
|
endif # Darwin
|
|
endif # CC exists
|
|
endif # Shell is sane
|
|
|
|
endif # CC is set to default
|
|
|
|
# Default Fortran compiler (FC) is selected by f_check.
|
|
|
|
ifndef MAKEFILE_RULE
|
|
include $(TOPDIR)/Makefile.rule
|
|
else
|
|
include $(TOPDIR)/$(MAKEFILE_RULE)
|
|
endif
|
|
|
|
#
|
|
# Beginning of system configuration
|
|
#
|
|
|
|
ifndef HOSTCC
|
|
HOSTCC = $(CC)
|
|
endif
|
|
|
|
ifdef TARGET
|
|
GETARCH_FLAGS := -DFORCE_$(TARGET)
|
|
GETARCH_FLAGS += -DUSER_TARGET
|
|
endif
|
|
|
|
# Force fallbacks for 32bit
|
|
|
|
ifeq ($(BINARY), 32)
|
|
ifeq ($(TARGET), HASWELL)
|
|
GETARCH_FLAGS := -DFORCE_NEHALEM
|
|
endif
|
|
ifeq ($(TARGET), SKYLAKEX)
|
|
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
|
|
ifeq ($(TARGET), ARMV8)
|
|
GETARCH_FLAGS := -DFORCE_ARMV7
|
|
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), SKYLAKEX)
|
|
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
|
|
|
|
|
|
# On x86_64 build getarch with march=native unless the compiler is PGI. This is required to detect AVX512 support in getarch.
|
|
ifeq ($(HOSTARCH), x86_64)
|
|
ifeq ($(findstring pgcc,$(HOSTCC)),)
|
|
GETARCH_FLAGS += -march=native
|
|
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)
|
|
|
|
ifeq ($(NO_AVX), 1)
|
|
GETARCH_FLAGS += -DNO_AVX
|
|
endif
|
|
|
|
ifeq ($(BINARY), 32)
|
|
GETARCH_FLAGS += -DNO_AVX -DNO_AVX2 -DNO_AVX512
|
|
NO_AVX512 = 1
|
|
endif
|
|
|
|
ifeq ($(NO_AVX2), 1)
|
|
GETARCH_FLAGS += -DNO_AVX2
|
|
endif
|
|
|
|
ifeq ($(NO_AVX512), 1)
|
|
GETARCH_FLAGS += -DNO_AVX512
|
|
endif
|
|
|
|
ifeq ($(DEBUG), 1)
|
|
GETARCH_FLAGS += -g
|
|
endif
|
|
|
|
ifeq ($(QUIET_MAKE), 1)
|
|
MAKE += -s
|
|
endif
|
|
|
|
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)" HOST_CFLAGS="$(GETARCH_FLAGS)" CFLAGS="$(CFLAGS)" BINARY=$(BINARY) USE_OPENMP=$(USE_OPENMP) TARGET_CORE=$(TARGET_CORE) ONLY_CBLAS=$(ONLY_CBLAS) TARGET=$(TARGET) all)
|
|
|
|
ifndef TARGET_CORE
|
|
include $(TOPDIR)/Makefile.conf
|
|
else
|
|
include $(TOPDIR)/Makefile_kernel.conf
|
|
endif
|
|
|
|
endif
|
|
|
|
ifndef NUM_PARALLEL
|
|
NUM_PARALLEL = 1
|
|
endif
|
|
|
|
ifndef NUM_THREADS
|
|
NUM_THREADS = $(NUM_CORES)
|
|
endif
|
|
|
|
ifeq ($(NUM_THREADS), 1)
|
|
override USE_THREAD = 0
|
|
override USE_OPENMP = 0
|
|
endif
|
|
|
|
ifdef USE_THREAD
|
|
ifeq ($(USE_THREAD), 0)
|
|
SMP =
|
|
else
|
|
SMP = 1
|
|
endif
|
|
else
|
|
ifeq ($(NUM_THREAD), 1)
|
|
SMP =
|
|
else
|
|
SMP = 1
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(SMP), 1)
|
|
USE_LOCKING =
|
|
endif
|
|
|
|
ifndef NEED_PIC
|
|
NEED_PIC = 1
|
|
endif
|
|
|
|
ARFLAGS =
|
|
CPP = $(COMPILER) -E
|
|
AR = $(CROSS_SUFFIX)ar
|
|
AS = $(CROSS_SUFFIX)as
|
|
LD = $(CROSS_SUFFIX)ld
|
|
RANLIB = $(CROSS_SUFFIX)ranlib
|
|
NM = $(CROSS_SUFFIX)nm
|
|
DLLWRAP = $(CROSS_SUFFIX)dllwrap
|
|
OBJCOPY = $(CROSS_SUFFIX)objcopy
|
|
OBJCONV = $(CROSS_SUFFIX)objconv
|
|
|
|
|
|
# When fortran support was either not detected or actively deselected, only build BLAS.
|
|
ifeq ($(NOFORTRAN), 1)
|
|
NO_LAPACK = 1
|
|
override FEXTRALIB =
|
|
endif
|
|
|
|
#
|
|
# OS dependent settings
|
|
#
|
|
|
|
ifeq ($(OSNAME), Darwin)
|
|
ifndef MACOSX_DEPLOYMENT_TARGET
|
|
export MACOSX_DEPLOYMENT_TARGET=10.8
|
|
endif
|
|
MD5SUM = md5 -r
|
|
endif
|
|
|
|
ifneq (,$(findstring $(OSNAME), FreeBSD OpenBSD DragonFly))
|
|
MD5SUM = md5 -r
|
|
endif
|
|
|
|
ifeq ($(OSNAME), NetBSD)
|
|
MD5SUM = md5 -n
|
|
endif
|
|
|
|
ifeq ($(OSNAME), Linux)
|
|
EXTRALIB += -lm
|
|
NO_EXPRECISION = 1
|
|
endif
|
|
|
|
ifeq ($(OSNAME), Android)
|
|
EXTRALIB += -lm
|
|
endif
|
|
|
|
ifeq ($(OSNAME), AIX)
|
|
EXTRALIB += -lm
|
|
endif
|
|
|
|
ifeq ($(OSNAME), WINNT)
|
|
NEED_PIC = 0
|
|
NO_EXPRECISION = 1
|
|
|
|
EXTRALIB += -defaultlib:advapi32
|
|
|
|
SUFFIX = obj
|
|
PSUFFIX = pobj
|
|
LIBSUFFIX = a
|
|
|
|
ifeq ($(C_COMPILER), CLANG)
|
|
CCOMMON_OPT += -DMS_ABI
|
|
endif
|
|
|
|
ifeq ($(C_COMPILER), GCC)
|
|
#Version tests for supporting specific features (MS_ABI, POWER9 intrinsics)
|
|
GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
|
|
GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
|
|
GCCVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 7)
|
|
GCCVERSIONGTEQ9 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 9)
|
|
GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
|
|
ifeq ($(GCCVERSIONGT4), 1)
|
|
# GCC Major version > 4
|
|
# 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.
|
|
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)
|
|
NEED_PIC = 0
|
|
NO_EXPRECISION = 1
|
|
|
|
INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
|
|
endif
|
|
|
|
ifeq ($(OSNAME), CYGWIN_NT)
|
|
NEED_PIC = 0
|
|
NO_EXPRECISION = 1
|
|
OS_CYGWIN_NT = 1
|
|
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
|
|
NO_EXPRECISION = 1
|
|
endif
|
|
|
|
ifneq ($(ARCH), x86)
|
|
ifneq ($(ARCH), x86_64)
|
|
NO_EXPRECISION = 1
|
|
endif
|
|
endif
|
|
|
|
ifdef UTEST_CHECK
|
|
CCOMMON_OPT += -DUTEST_CHECK
|
|
SANITY_CHECK = 1
|
|
endif
|
|
|
|
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
|
|
|
|
ifdef USE_LOCKING
|
|
ifneq ($(USE_LOCKING), 0)
|
|
CCOMMON_OPT += -DUSE_LOCKING
|
|
endif
|
|
endif
|
|
|
|
#
|
|
# Architecture dependent settings
|
|
#
|
|
|
|
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
|
|
ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
|
|
EXPRECISION = 1
|
|
CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
|
|
FCOMMON_OPT += -m128bit-long-double
|
|
endif
|
|
ifeq ($(C_COMPILER), CLANG)
|
|
EXPRECISION = 1
|
|
CCOMMON_OPT += -DEXPRECISION
|
|
FCOMMON_OPT += -m128bit-long-double
|
|
endif
|
|
endif
|
|
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
|
|
ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
|
|
EXPRECISION = 1
|
|
CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
|
|
FCOMMON_OPT += -m128bit-long-double
|
|
endif
|
|
ifeq ($(C_COMPILER), CLANG)
|
|
EXPRECISION = 1
|
|
CCOMMON_OPT += -DEXPRECISION
|
|
FCOMMON_OPT += -m128bit-long-double
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
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)
|
|
CCOMMON_OPT += -fopenmp
|
|
endif
|
|
|
|
ifeq ($(C_COMPILER), INTEL)
|
|
CCOMMON_OPT += -fopenmp
|
|
endif
|
|
|
|
ifeq ($(C_COMPILER), PGI)
|
|
CCOMMON_OPT += -mp
|
|
endif
|
|
|
|
ifeq ($(C_COMPILER), OPEN64)
|
|
CCOMMON_OPT += -mp
|
|
CEXTRALIB += -lstdc++
|
|
endif
|
|
|
|
ifeq ($(C_COMPILER), PATHSCALE)
|
|
CCOMMON_OPT += -mp
|
|
endif
|
|
endif
|
|
|
|
|
|
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
|
|
endif
|
|
|
|
ifeq ($(ARCH), x86_64)
|
|
DYNAMIC_CORE = PRESCOTT CORE2
|
|
ifeq ($(DYNAMIC_OLDER), 1)
|
|
DYNAMIC_CORE += PENRYN DUNNINGTON
|
|
endif
|
|
DYNAMIC_CORE += NEHALEM
|
|
ifeq ($(DYNAMIC_OLDER), 1)
|
|
DYNAMIC_CORE += OPTERON OPTERON_SSE3
|
|
endif
|
|
DYNAMIC_CORE += BARCELONA
|
|
ifeq ($(DYNAMIC_OLDER), 1)
|
|
DYNAMIC_CORE += BOBCAT ATOM NANO
|
|
endif
|
|
ifneq ($(NO_AVX), 1)
|
|
DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER EXCAVATOR
|
|
endif
|
|
ifneq ($(NO_AVX2), 1)
|
|
DYNAMIC_CORE += HASWELL ZEN
|
|
endif
|
|
ifneq ($(NO_AVX512), 1)
|
|
ifneq ($(NO_AVX2), 1)
|
|
DYNAMIC_CORE += SKYLAKEX
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifdef DYNAMIC_LIST
|
|
override DYNAMIC_CORE = PRESCOTT $(DYNAMIC_LIST)
|
|
XCCOMMON_OPT = -DDYNAMIC_LIST -DDYN_PRESCOTT
|
|
XCCOMMON_OPT += $(foreach dcore,$(DYNAMIC_LIST),-DDYN_$(dcore))
|
|
CCOMMON_OPT += $(XCCOMMON_OPT)
|
|
#CCOMMON_OPT += -DDYNAMIC_LIST='$(DYNAMIC_LIST)'
|
|
endif
|
|
|
|
ifeq ($(ARCH), arm64)
|
|
DYNAMIC_CORE = ARMV8
|
|
DYNAMIC_CORE += CORTEXA53
|
|
DYNAMIC_CORE += CORTEXA57
|
|
DYNAMIC_CORE += CORTEXA72
|
|
DYNAMIC_CORE += CORTEXA73
|
|
DYNAMIC_CORE += NEOVERSEN1
|
|
DYNAMIC_CORE += FALKOR
|
|
DYNAMIC_CORE += THUNDERX
|
|
DYNAMIC_CORE += THUNDERX2T99
|
|
DYNAMIC_CORE += TSV110
|
|
DYNAMIC_CORE += EMAG8180
|
|
endif
|
|
|
|
ifeq ($(ARCH), zarch)
|
|
DYNAMIC_CORE = Z13
|
|
DYNAMIC_CORE += Z14
|
|
endif
|
|
|
|
ifeq ($(ARCH), power)
|
|
DYNAMIC_CORE = POWER6
|
|
DYNAMIC_CORE += POWER8
|
|
ifneq ($(C_COMPILER), GCC)
|
|
DYNAMIC_CORE += POWER9
|
|
endif
|
|
ifeq ($(C_COMPILER), GCC)
|
|
GCCVERSIONGT5 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 5)
|
|
ifeq ($(GCCVERSIONGT5), 1)
|
|
DYNAMIC_CORE += POWER9
|
|
else
|
|
$(info, OpenBLAS: Your gcc version is too old to build the POWER9 kernels.)
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# If DYNAMIC_CORE is not set, DYNAMIC_ARCH cannot do anything, so force it to empty
|
|
ifndef DYNAMIC_CORE
|
|
override DYNAMIC_ARCH=
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(ARCH), ia64)
|
|
NO_BINARY_MODE = 1
|
|
BINARY_DEFINED = 1
|
|
|
|
ifeq ($(F_COMPILER), GFORTRAN)
|
|
ifeq ($(C_COMPILER), GCC)
|
|
# EXPRECISION = 1
|
|
# CCOMMON_OPT += -DEXPRECISION
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
|
|
NO_BINARY_MODE = 1
|
|
endif
|
|
|
|
ifeq ($(ARCH), alpha)
|
|
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
|
|
#
|
|
|
|
|
|
# ifeq logical or. GCC or CLANG or LSB
|
|
# http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
|
|
ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
|
|
CCOMMON_OPT += -Wall
|
|
COMMON_PROF += -fno-inline
|
|
NO_UNINITIALIZED_WARN = -Wno-uninitialized
|
|
|
|
ifeq ($(QUIET_MAKE), 1)
|
|
CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
|
|
endif
|
|
|
|
ifdef NO_BINARY_MODE
|
|
|
|
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)
|
|
CCOMMON_OPT += -march=mips64
|
|
FCOMMON_OPT += -march=mips64
|
|
endif
|
|
|
|
ifeq ($(CORE), LOONGSON3B)
|
|
CCOMMON_OPT += -march=mips64
|
|
FCOMMON_OPT += -march=mips64
|
|
endif
|
|
|
|
ifeq ($(CORE), 1004K)
|
|
CCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
|
|
FCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
|
|
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 ($(CORE), I6500)
|
|
CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
|
|
FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
|
|
endif
|
|
|
|
ifeq ($(OSNAME), AIX)
|
|
BINARY_DEFINED = 1
|
|
endif
|
|
|
|
endif
|
|
|
|
ifndef BINARY_DEFINED
|
|
ifneq ($(OSNAME), AIX)
|
|
ifdef BINARY64
|
|
CCOMMON_OPT += -m64
|
|
else
|
|
CCOMMON_OPT += -m32
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
endif
|
|
|
|
ifeq ($(C_COMPILER), PGI)
|
|
ifdef BINARY64
|
|
CCOMMON_OPT += -tp p7-64 -D__MMX__ -Mnollvm
|
|
else
|
|
CCOMMON_OPT += -tp p7
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(C_COMPILER), PATHSCALE)
|
|
ifdef BINARY64
|
|
CCOMMON_OPT += -m64
|
|
else
|
|
CCOMMON_OPT += -m32
|
|
endif
|
|
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
|
|
ifndef NO_BINARY_MODE
|
|
ifneq ($(OSNAME), AIX)
|
|
ifdef BINARY64
|
|
FCOMMON_OPT += -m64
|
|
else
|
|
FCOMMON_OPT += -m32
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(F_COMPILER), G95)
|
|
CCOMMON_OPT += -DF_INTERFACE_G95
|
|
FCOMMON_OPT += -Wall
|
|
ifneq ($(OSNAME), AIX)
|
|
ifndef NO_BINARY_MODE
|
|
ifdef BINARY64
|
|
FCOMMON_OPT += -m64
|
|
else
|
|
FCOMMON_OPT += -m32
|
|
endif
|
|
endif
|
|
ifneq ($(NO_LAPACKE), 1)
|
|
FCOMMON_OPT += -fno-second-underscore
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(F_COMPILER), GFORTRAN)
|
|
CCOMMON_OPT += -DF_INTERFACE_GFORT
|
|
FCOMMON_OPT += -Wall
|
|
# make single-threaded LAPACK calls thread-safe #1847
|
|
FCOMMON_OPT += -frecursive
|
|
# work around ABI problem with passing single-character arguments
|
|
FCOMMON_OPT += -fno-optimize-sibling-calls
|
|
#Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
|
|
ifneq ($(NO_LAPACK), 1)
|
|
EXTRALIB += -lgfortran
|
|
endif
|
|
ifdef NO_BINARY_MODE
|
|
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
|
|
ifneq ($(OSNAME), AIX)
|
|
FCOMMON_OPT += -m64
|
|
endif
|
|
ifdef INTERFACE64
|
|
ifneq ($(INTERFACE64), 0)
|
|
FCOMMON_OPT += -fdefault-integer-8
|
|
endif
|
|
endif
|
|
else
|
|
ifneq ($(OSNAME), AIX)
|
|
FCOMMON_OPT += -m32
|
|
endif
|
|
endif
|
|
endif
|
|
ifeq ($(USE_OPENMP), 1)
|
|
FCOMMON_OPT += -fopenmp
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(F_COMPILER), INTEL)
|
|
CCOMMON_OPT += -DF_INTERFACE_INTEL
|
|
ifdef INTERFACE64
|
|
ifneq ($(INTERFACE64), 0)
|
|
FCOMMON_OPT += -i8
|
|
endif
|
|
endif
|
|
ifeq ($(USE_OPENMP), 1)
|
|
FCOMMON_OPT += -fopenmp
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(F_COMPILER), FUJITSU)
|
|
CCOMMON_OPT += -DF_INTERFACE_FUJITSU
|
|
ifeq ($(USE_OPENMP), 1)
|
|
FCOMMON_OPT += -openmp
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(F_COMPILER), IBM)
|
|
CCOMMON_OPT += -DF_INTERFACE_IBM
|
|
# FCOMMON_OPT += -qarch=440
|
|
ifdef BINARY64
|
|
FCOMMON_OPT += -q64
|
|
ifdef INTERFACE64
|
|
ifneq ($(INTERFACE64), 0)
|
|
FCOMMON_OPT += -qintsize=8
|
|
endif
|
|
endif
|
|
else
|
|
FCOMMON_OPT += -q32
|
|
endif
|
|
ifeq ($(USE_OPENMP), 1)
|
|
FCOMMON_OPT += -openmp
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(F_COMPILER), PGI)
|
|
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
|
|
ifeq ($(USE_OPENMP), 1)
|
|
FCOMMON_OPT += -mp
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(F_COMPILER), PATHSCALE)
|
|
CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
|
|
ifdef BINARY64
|
|
ifdef INTERFACE64
|
|
ifneq ($(INTERFACE64), 0)
|
|
FCOMMON_OPT += -i8
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(USE_OPENMP), 1)
|
|
FCOMMON_OPT += -mp
|
|
endif
|
|
endif
|
|
|
|
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
|
|
|
|
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
|
|
ifeq ($(ARCH), x86)
|
|
CCOMMON_OPT += -m32
|
|
else
|
|
FCOMMON_OPT += -m64
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(F_COMPILER), SUN)
|
|
CCOMMON_OPT += -DF_INTERFACE_SUN
|
|
ifeq ($(ARCH), x86)
|
|
FCOMMON_OPT += -m32
|
|
else
|
|
FCOMMON_OPT += -m64
|
|
endif
|
|
ifeq ($(USE_OPENMP), 1)
|
|
FCOMMON_OPT += -xopenmp=parallel
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(F_COMPILER), COMPAQ)
|
|
CCOMMON_OPT += -DF_INTERFACE_COMPAQ
|
|
ifeq ($(USE_OPENMP), 1)
|
|
FCOMMON_OPT += -openmp
|
|
endif
|
|
endif
|
|
|
|
ifdef BINARY64
|
|
ifdef INTERFACE64
|
|
ifneq ($(INTERFACE64), 0)
|
|
CCOMMON_OPT +=
|
|
#-DUSE64BITINT
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(NEED_PIC), 1)
|
|
ifeq ($(C_COMPILER), IBM)
|
|
CCOMMON_OPT += -qpic=large
|
|
else
|
|
CCOMMON_OPT += -fPIC
|
|
endif
|
|
ifeq ($(F_COMPILER), SUN)
|
|
FCOMMON_OPT += -pic
|
|
else
|
|
FCOMMON_OPT += -fPIC
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(DYNAMIC_ARCH), 1)
|
|
CCOMMON_OPT += -DDYNAMIC_ARCH
|
|
endif
|
|
|
|
ifeq ($(DYNAMIC_OLDER), 1)
|
|
CCOMMON_OPT += -DDYNAMIC_OLDER
|
|
endif
|
|
|
|
ifeq ($(NO_LAPACK), 1)
|
|
CCOMMON_OPT += -DNO_LAPACK
|
|
#Disable LAPACK C interface
|
|
NO_LAPACKE = 1
|
|
endif
|
|
|
|
ifeq ($(NO_LAPACKE), 1)
|
|
CCOMMON_OPT += -DNO_LAPACKE
|
|
endif
|
|
|
|
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
|
|
|
|
ifeq ($(NO_AVX512), 1)
|
|
CCOMMON_OPT += -DNO_AVX512
|
|
endif
|
|
|
|
ifdef SMP
|
|
CCOMMON_OPT += -DSMP_SERVER
|
|
|
|
ifeq ($(ARCH), mips64)
|
|
ifneq ($(CORE), LOONGSON3B)
|
|
USE_SIMPLE_THREADED_LEVEL3 = 1
|
|
endif
|
|
endif
|
|
|
|
ifeq ($(USE_OPENMP), 1)
|
|
# USE_SIMPLE_THREADED_LEVEL3 = 1
|
|
# NO_AFFINITY = 1
|
|
CCOMMON_OPT += -DUSE_OPENMP
|
|
endif
|
|
|
|
ifeq ($(BIGNUMA), 1)
|
|
CCOMMON_OPT += -DBIGNUMA
|
|
endif
|
|
|
|
endif
|
|
|
|
ifeq ($(NO_WARMUP), 1)
|
|
CCOMMON_OPT += -DNO_WARMUP
|
|
endif
|
|
|
|
ifeq ($(CONSISTENT_FPCSR), 1)
|
|
CCOMMON_OPT += -DCONSISTENT_FPCSR
|
|
endif
|
|
|
|
# Only for development
|
|
# CCOMMON_OPT += -DPARAMTEST
|
|
# CCOMMON_OPT += -DPREFETCHTEST
|
|
# CCOMMON_OPT += -DNO_SWITCHING
|
|
# USE_PAPI = 1
|
|
|
|
ifdef USE_PAPI
|
|
CCOMMON_OPT += -DUSE_PAPI
|
|
EXTRALIB += -lpapi -lperfctr
|
|
endif
|
|
|
|
ifdef DYNAMIC_THREADS
|
|
CCOMMON_OPT += -DDYNAMIC_THREADS
|
|
endif
|
|
|
|
CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
|
|
|
|
CCOMMON_OPT += -DMAX_PARALLEL_NUMBER=$(NUM_PARALLEL)
|
|
|
|
ifdef USE_SIMPLE_THREADED_LEVEL3
|
|
CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
|
|
endif
|
|
|
|
ifeq ($(USE_TLS), 1)
|
|
CCOMMON_OPT += -DUSE_TLS
|
|
endif
|
|
|
|
CCOMMON_OPT += -DVERSION=\"$(VERSION)\"
|
|
|
|
ifndef SYMBOLPREFIX
|
|
SYMBOLPREFIX =
|
|
endif
|
|
|
|
ifndef SYMBOLSUFFIX
|
|
SYMBOLSUFFIX =
|
|
endif
|
|
|
|
ifndef LIBNAMESUFFIX
|
|
LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)
|
|
else
|
|
LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX)
|
|
endif
|
|
|
|
ifeq ($(OSNAME), CYGWIN_NT)
|
|
LIBPREFIX = cyg$(LIBNAMEBASE)
|
|
else
|
|
LIBPREFIX = lib$(LIBNAMEBASE)
|
|
endif
|
|
|
|
KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
|
|
|
|
include $(TOPDIR)/Makefile.$(ARCH)
|
|
|
|
CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
|
|
|
|
ifeq ($(CORE), PPC440)
|
|
CCOMMON_OPT += -DALLOC_QALLOC
|
|
endif
|
|
|
|
ifeq ($(CORE), PPC440FP2)
|
|
STATIC_ALLOCATION = 1
|
|
endif
|
|
|
|
ifneq ($(OSNAME), Linux)
|
|
NO_AFFINITY = 1
|
|
endif
|
|
|
|
ifneq ($(ARCH), x86_64)
|
|
ifneq ($(ARCH), x86)
|
|
ifneq ($(CORE), LOONGSON3B)
|
|
NO_AFFINITY = 1
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
ifdef NO_AFFINITY
|
|
ifeq ($(NO_AFFINITY), 0)
|
|
override undefine NO_AFFINITY
|
|
else
|
|
CCOMMON_OPT += -DNO_AFFINITY
|
|
endif
|
|
endif
|
|
|
|
ifdef FUNCTION_PROFILE
|
|
CCOMMON_OPT += -DFUNCTION_PROFILE
|
|
endif
|
|
|
|
ifdef HUGETLB_ALLOCATION
|
|
CCOMMON_OPT += -DALLOC_HUGETLB
|
|
endif
|
|
|
|
ifdef HUGETLBFILE_ALLOCATION
|
|
CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
|
|
endif
|
|
|
|
ifdef STATIC_ALLOCATION
|
|
CCOMMON_OPT += -DALLOC_STATIC
|
|
endif
|
|
|
|
ifdef DEVICEDRIVER_ALLOCATION
|
|
CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
|
|
endif
|
|
|
|
ifdef MIXED_MEMORY_ALLOCATION
|
|
CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
|
|
endif
|
|
|
|
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
|
|
|
|
|
|
REVISION = -r$(VERSION)
|
|
MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
|
|
|
|
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 += $(FCOMMON_OPT) $(COMMON_PROF)
|
|
#MAKEOVERRIDES =
|
|
|
|
ifdef NEED_PIC
|
|
ifeq (,$(findstring PIC,$(FFLAGS)))
|
|
override FFLAGS += -fPIC
|
|
endif
|
|
endif
|
|
|
|
#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
|
|
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
|
|
|
|
ifndef SUFFIX
|
|
SUFFIX = o
|
|
endif
|
|
|
|
ifndef PSUFFIX
|
|
PSUFFIX = po
|
|
endif
|
|
|
|
ifndef LIBSUFFIX
|
|
LIBSUFFIX = a
|
|
endif
|
|
|
|
ifneq ($(DYNAMIC_ARCH), 1)
|
|
ifndef SMP
|
|
LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
|
|
LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
|
|
else
|
|
LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
|
|
LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
|
|
endif
|
|
else
|
|
ifndef SMP
|
|
LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
|
|
LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
|
|
else
|
|
LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
|
|
LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
|
|
endif
|
|
endif
|
|
|
|
|
|
LIBDLLNAME = $(LIBPREFIX).dll
|
|
IMPLIBNAME = lib$(LIBNAMEBASE).dll.a
|
|
ifneq ($(OSNAME), AIX)
|
|
LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
|
|
else
|
|
LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.a)
|
|
endif
|
|
LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
|
|
LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
|
|
LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
|
|
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
|
|
export LIBCORE
|
|
export __BYTE_ORDER__
|
|
export PGCPATH
|
|
export CONFIG
|
|
export CC
|
|
export FC
|
|
export BU
|
|
export FU
|
|
export NEED2UNDERSCORES
|
|
export USE_THREAD
|
|
export NUM_THREADS
|
|
export NUM_CORES
|
|
export SMP
|
|
export MAKEFILE_RULE
|
|
export NEED_PIC
|
|
export BINARY
|
|
export BINARY32
|
|
export BINARY64
|
|
export F_COMPILER
|
|
export C_COMPILER
|
|
export USE_OPENMP
|
|
export CROSS
|
|
export CROSS_SUFFIX
|
|
export NOFORTRAN
|
|
export NO_FBLAS
|
|
export EXTRALIB
|
|
export CEXTRALIB
|
|
export FEXTRALIB
|
|
export HAVE_SSE
|
|
export HAVE_SSE2
|
|
export HAVE_SSE3
|
|
export HAVE_SSSE3
|
|
export HAVE_SSE4_1
|
|
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
|
|
export NO_AVX512
|
|
|
|
export SGEMM_UNROLL_M
|
|
export SGEMM_UNROLL_N
|
|
export DGEMM_UNROLL_M
|
|
export DGEMM_UNROLL_N
|
|
export QGEMM_UNROLL_M
|
|
export QGEMM_UNROLL_N
|
|
export CGEMM_UNROLL_M
|
|
export CGEMM_UNROLL_N
|
|
export ZGEMM_UNROLL_M
|
|
export ZGEMM_UNROLL_N
|
|
export XGEMM_UNROLL_M
|
|
export XGEMM_UNROLL_N
|
|
export CGEMM3M_UNROLL_M
|
|
export CGEMM3M_UNROLL_N
|
|
export ZGEMM3M_UNROLL_M
|
|
export ZGEMM3M_UNROLL_N
|
|
export XGEMM3M_UNROLL_M
|
|
export XGEMM3M_UNROLL_N
|
|
|
|
|
|
ifdef USE_CUDA
|
|
export CUDADIR
|
|
export CUCC
|
|
export CUFLAGS
|
|
export CULIB
|
|
endif
|
|
|
|
.SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
|
|
|
|
.f.$(SUFFIX):
|
|
$(FC) $(FFLAGS) -c $< -o $(@F)
|
|
|
|
.f.$(PSUFFIX):
|
|
$(FC) $(FPFLAGS) -pg -c $< -o $(@F)
|
|
|
|
|
|
ifdef BINARY64
|
|
PATHSCALEPATH = /opt/pathscale/lib/3.1
|
|
PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
|
|
else
|
|
PATHSCALEPATH = /opt/pathscale/lib/3.1/32
|
|
PGIPATH = /opt/pgi/linux86/7.1-5/lib
|
|
endif
|
|
|
|
ACMLPATH = /opt/acml/4.3.0
|
|
ifneq ($(OSNAME), Darwin)
|
|
MKLPATH = /opt/intel/mkl/10.2.2.025/lib
|
|
else
|
|
MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
|
|
endif
|
|
ATLASPATH = /opt/atlas/3.9.17/opteron
|
|
FLAMEPATH = $(HOME)/flame/lib
|
|
ifneq ($(OSNAME), SunOS)
|
|
SUNPATH = /opt/sunstudio12.1
|
|
else
|
|
SUNPATH = /opt/SUNWspro
|
|
endif
|