|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199 |
- #
- # Include user definition
- #
-
- # TO suppress recursive includes
- INCLUDED = 1
-
- ifndef TOPDIR
- TOPDIR = .
- 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)
- CC = gcc
- # Change the default compile to clang on Mac OSX.
- # http://stackoverflow.com/questions/714100/os-detecting-makefile
- UNAME_S := $(shell uname -s)
- ifeq ($(UNAME_S),Darwin)
- CC = clang
- # EXTRALIB += -Wl,-no_compact_unwind
- endif
- endif
-
- # 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)
- 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
- 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
- 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
- endif
-
- ifeq ($(NO_AVX2), 1)
- GETARCH_FLAGS += -DNO_AVX2
- 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)" 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
- else
- include $(TOPDIR)/Makefile_kernel.conf
- endif
-
- endif
-
- ifndef NUM_THREADS
- NUM_THREADS = $(NUM_CORES)
- endif
-
- ifeq ($(NUM_THREADS), 1)
- override USE_THREAD = 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
-
- 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
-
-
- # For detect fortran failed, only build BLAS.
- ifeq ($(NOFORTRAN), 1)
- NO_LAPACK = 1
- endif
-
- #
- # OS dependent settings
- #
-
- ifeq ($(OSNAME), Darwin)
- ifndef MACOSX_DEPLOYMENT_TARGET
- export MACOSX_DEPLOYMENT_TARGET=10.6
- endif
- MD5SUM = md5 -r
- endif
-
- ifeq ($(OSNAME), FreeBSD)
- MD5SUM = md5 -r
- endif
-
- ifeq ($(OSNAME), NetBSD)
- MD5SUM = md5 -n
- endif
-
- ifeq ($(OSNAME), Linux)
- EXTRALIB += -lm
- NO_EXPRECISION = 1
- 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)
- #Test for supporting MS_ABI
- GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
- 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.
- 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
- 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
-
- #
- # 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)
- $(error OpenBLAS: Clang didn't support OpenMP yet.)
- CCOMMON_OPT += -fopenmp
- endif
-
- ifeq ($(C_COMPILER), INTEL)
- CCOMMON_OPT += -openmp
- 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 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
- ifneq ($(NO_AVX), 1)
- DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER EXCAVATOR
- endif
- ifneq ($(NO_AVX2), 1)
- DYNAMIC_CORE += HASWELL
- endif
- endif
-
- ifndef DYNAMIC_CORE
- 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
- 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), 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
-
- endif
-
- ifndef BINARY_DEFINED
- ifdef BINARY64
- CCOMMON_OPT += -m64
- else
- CCOMMON_OPT += -m32
- endif
- endif
-
- endif
-
- ifeq ($(C_COMPILER), PGI)
- ifdef BINARY64
- CCOMMON_OPT += -tp p7-64
- 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), G77)
- CCOMMON_OPT += -DF_INTERFACE_G77
- FCOMMON_OPT += -Wall
- ifndef NO_BINARY_MODE
- ifdef BINARY64
- FCOMMON_OPT += -m64
- else
- FCOMMON_OPT += -m32
- endif
- endif
- endif
-
- ifeq ($(F_COMPILER), G95)
- CCOMMON_OPT += -DF_INTERFACE_G95
- FCOMMON_OPT += -Wall
- ifndef NO_BINARY_MODE
- ifdef BINARY64
- FCOMMON_OPT += -m64
- else
- FCOMMON_OPT += -m32
- endif
- endif
- endif
-
- ifeq ($(F_COMPILER), GFORTRAN)
- CCOMMON_OPT += -DF_INTERFACE_GFORT
- FCOMMON_OPT += -Wall
- #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
- FCOMMON_OPT += -m64
- ifdef INTERFACE64
- ifneq ($(INTERFACE64), 0)
- FCOMMON_OPT += -fdefault-integer-8
- endif
- endif
- else
- FCOMMON_OPT += -m32
- 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 += -openmp
- 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 ($(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
-
- 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)
-
- ifdef USE_SIMPLE_THREADED_LEVEL3
- CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
- endif
-
- ifndef SYMBOLPREFIX
- SYMBOLPREFIX =
- endif
-
- ifndef SYMBOLSUFFIX
- SYMBOLSUFFIX =
- endif
-
- ifndef LIBNAMESUFFIX
- LIBPREFIX = lib$(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)
- else
- LIBPREFIX = lib$(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX)
- 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
- CCOMMON_OPT += -DNO_AFFINITY
- 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 =
-
- #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
- LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
- 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
- endif
-
- ifeq ($(ONLY_CBLAS), 1)
- LIB_COMPONENTS = CBLAS
- endif
-
- export OSNAME
- export ARCH
- export CORE
- export LIBCORE
- 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 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
|