You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

Makefile.system 27 kB

7 years ago
13 years ago
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433
  1. #
  2. # Include user definition
  3. #
  4. # TO suppress recursive includes
  5. INCLUDED = 1
  6. ifndef TOPDIR
  7. TOPDIR = .
  8. endif
  9. # If ARCH is not set, we use the host system's architecture for getarch compile options.
  10. ifndef ARCH
  11. HOSTARCH := $(shell uname -m)
  12. else
  13. HOSTARCH = $(ARCH)
  14. endif
  15. # Catch conflicting usage of ARCH in some BSD environments
  16. ifeq ($(ARCH), amd64)
  17. override ARCH=x86_64
  18. else ifeq ($(ARCH), powerpc64)
  19. override ARCH=power
  20. else ifeq ($(ARCH), i386)
  21. override ARCH=x86
  22. else ifeq ($(ARCH), aarch64)
  23. override ARCH=arm64
  24. else ifeq ($(ARCH), zarch)
  25. override ARCH=zarch
  26. endif
  27. NETLIB_LAPACK_DIR = $(TOPDIR)/lapack-netlib
  28. # Default C compiler
  29. # - Only set if not specified on the command line or inherited from the environment.
  30. # - CC is an implicit variable so neither '?=' or 'ifndef' can be used.
  31. # http://stackoverflow.com/questions/4029274/mingw-and-make-variables
  32. # - Default value is 'cc' which is not always a valid command (e.g. MinGW).
  33. ifeq ($(origin CC),default)
  34. # Check if $(CC) refers to a valid command and set the value to gcc if not
  35. ifneq ($(findstring cmd.exe,$(SHELL)),)
  36. ifeq ($(shell where $(CC) 2>NUL),)
  37. CC = gcc
  38. endif
  39. else # POSIX-ish
  40. ifeq ($(shell command -v $(CC) 2>/dev/null),)
  41. ifeq ($(shell uname -s),Darwin)
  42. CC = clang
  43. # EXTRALIB += -Wl,-no_compact_unwind
  44. else
  45. CC = gcc
  46. endif # Darwin
  47. endif # CC exists
  48. endif # Shell is sane
  49. endif # CC is set to default
  50. # Default Fortran compiler (FC) is selected by f_check.
  51. ifndef MAKEFILE_RULE
  52. include $(TOPDIR)/Makefile.rule
  53. else
  54. include $(TOPDIR)/$(MAKEFILE_RULE)
  55. endif
  56. #
  57. # Beginning of system configuration
  58. #
  59. ifndef HOSTCC
  60. HOSTCC = $(CC)
  61. endif
  62. ifdef TARGET
  63. GETARCH_FLAGS := -DFORCE_$(TARGET)
  64. GETARCH_FLAGS += -DUSER_TARGET
  65. endif
  66. # Force fallbacks for 32bit
  67. ifeq ($(BINARY), 32)
  68. ifeq ($(TARGET), HASWELL)
  69. GETARCH_FLAGS := -DFORCE_NEHALEM
  70. endif
  71. ifeq ($(TARGET), SKYLAKEX)
  72. GETARCH_FLAGS := -DFORCE_NEHALEM
  73. endif
  74. ifeq ($(TARGET), SANDYBRIDGE)
  75. GETARCH_FLAGS := -DFORCE_NEHALEM
  76. endif
  77. ifeq ($(TARGET), BULLDOZER)
  78. GETARCH_FLAGS := -DFORCE_BARCELONA
  79. endif
  80. ifeq ($(TARGET), PILEDRIVER)
  81. GETARCH_FLAGS := -DFORCE_BARCELONA
  82. endif
  83. ifeq ($(TARGET), STEAMROLLER)
  84. GETARCH_FLAGS := -DFORCE_BARCELONA
  85. endif
  86. ifeq ($(TARGET), EXCAVATOR)
  87. GETARCH_FLAGS := -DFORCE_BARCELONA
  88. endif
  89. ifeq ($(TARGET), ZEN)
  90. GETARCH_FLAGS := -DFORCE_BARCELONA
  91. endif
  92. ifeq ($(TARGET), ARMV8)
  93. GETARCH_FLAGS := -DFORCE_ARMV7
  94. endif
  95. endif
  96. #TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1.
  97. #
  98. ifdef TARGET_CORE
  99. GETARCH_FLAGS := -DFORCE_$(TARGET_CORE)
  100. endif
  101. # Force fallbacks for 32bit
  102. ifeq ($(BINARY), 32)
  103. ifeq ($(TARGET_CORE), HASWELL)
  104. GETARCH_FLAGS := -DFORCE_NEHALEM
  105. endif
  106. ifeq ($(TARGET_CORE), SKYLAKEX)
  107. GETARCH_FLAGS := -DFORCE_NEHALEM
  108. endif
  109. ifeq ($(TARGET_CORE), SANDYBRIDGE)
  110. GETARCH_FLAGS := -DFORCE_NEHALEM
  111. endif
  112. ifeq ($(TARGET_CORE), BULLDOZER)
  113. GETARCH_FLAGS := -DFORCE_BARCELONA
  114. endif
  115. ifeq ($(TARGET_CORE), PILEDRIVER)
  116. GETARCH_FLAGS := -DFORCE_BARCELONA
  117. endif
  118. ifeq ($(TARGET_CORE), STEAMROLLER)
  119. GETARCH_FLAGS := -DFORCE_BARCELONA
  120. endif
  121. ifeq ($(TARGET_CORE), EXCAVATOR)
  122. GETARCH_FLAGS := -DFORCE_BARCELONA
  123. endif
  124. ifeq ($(TARGET_CORE), ZEN)
  125. GETARCH_FLAGS := -DFORCE_BARCELONA
  126. endif
  127. endif
  128. # On x86_64 build getarch with march=native unless the compiler is PGI. This is required to detect AVX512 support in getarch.
  129. ifeq ($(HOSTARCH), x86_64)
  130. ifeq ($(findstring pgcc,$(HOSTCC)),)
  131. GETARCH_FLAGS += -march=native
  132. endif
  133. endif
  134. ifdef INTERFACE64
  135. ifneq ($(INTERFACE64), 0)
  136. GETARCH_FLAGS += -DUSE64BITINT
  137. endif
  138. endif
  139. ifndef GEMM_MULTITHREAD_THRESHOLD
  140. GEMM_MULTITHREAD_THRESHOLD=4
  141. endif
  142. GETARCH_FLAGS += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD)
  143. ifeq ($(NO_AVX), 1)
  144. GETARCH_FLAGS += -DNO_AVX
  145. endif
  146. ifeq ($(BINARY), 32)
  147. GETARCH_FLAGS += -DNO_AVX -DNO_AVX2 -DNO_AVX512
  148. NO_AVX512 = 1
  149. endif
  150. ifeq ($(NO_AVX2), 1)
  151. GETARCH_FLAGS += -DNO_AVX2
  152. endif
  153. ifeq ($(NO_AVX512), 1)
  154. GETARCH_FLAGS += -DNO_AVX512
  155. endif
  156. ifeq ($(DEBUG), 1)
  157. GETARCH_FLAGS += -g
  158. endif
  159. ifeq ($(QUIET_MAKE), 1)
  160. MAKE += -s
  161. endif
  162. ifndef NO_PARALLEL_MAKE
  163. NO_PARALLEL_MAKE=0
  164. endif
  165. GETARCH_FLAGS += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE)
  166. ifdef MAKE_NB_JOBS
  167. GETARCH_FLAGS += -DMAKE_NB_JOBS=$(MAKE_NB_JOBS)
  168. endif
  169. ifeq ($(HOSTCC), loongcc)
  170. GETARCH_FLAGS += -static
  171. endif
  172. #if don't use Fortran, it will only compile CBLAS.
  173. ifeq ($(ONLY_CBLAS), 1)
  174. NO_LAPACK = 1
  175. else
  176. ONLY_CBLAS = 0
  177. endif
  178. # This operation is expensive, so execution should be once.
  179. ifndef GOTOBLAS_MAKEFILE
  180. export GOTOBLAS_MAKEFILE = 1
  181. # Generating Makefile.conf and config.h
  182. 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)
  183. ifndef TARGET_CORE
  184. include $(TOPDIR)/Makefile.conf
  185. else
  186. include $(TOPDIR)/Makefile_kernel.conf
  187. endif
  188. endif
  189. ifndef NUM_PARALLEL
  190. NUM_PARALLEL = 1
  191. endif
  192. ifndef NUM_THREADS
  193. NUM_THREADS = $(NUM_CORES)
  194. endif
  195. ifeq ($(NUM_THREADS), 1)
  196. override USE_THREAD = 0
  197. override USE_OPENMP = 0
  198. endif
  199. ifdef USE_THREAD
  200. ifeq ($(USE_THREAD), 0)
  201. SMP =
  202. else
  203. SMP = 1
  204. endif
  205. else
  206. ifeq ($(NUM_THREAD), 1)
  207. SMP =
  208. else
  209. SMP = 1
  210. endif
  211. endif
  212. ifeq ($(SMP), 1)
  213. USE_LOCKING =
  214. endif
  215. ifndef NEED_PIC
  216. NEED_PIC = 1
  217. endif
  218. ARFLAGS =
  219. CPP = $(COMPILER) -E
  220. AR = $(CROSS_SUFFIX)ar
  221. AS = $(CROSS_SUFFIX)as
  222. LD = $(CROSS_SUFFIX)ld
  223. RANLIB = $(CROSS_SUFFIX)ranlib
  224. NM = $(CROSS_SUFFIX)nm
  225. DLLWRAP = $(CROSS_SUFFIX)dllwrap
  226. OBJCOPY = $(CROSS_SUFFIX)objcopy
  227. OBJCONV = $(CROSS_SUFFIX)objconv
  228. # When fortran support was either not detected or actively deselected, only build BLAS.
  229. ifeq ($(NOFORTRAN), 1)
  230. NO_LAPACK = 1
  231. override FEXTRALIB =
  232. endif
  233. #
  234. # OS dependent settings
  235. #
  236. ifeq ($(OSNAME), Darwin)
  237. ifndef MACOSX_DEPLOYMENT_TARGET
  238. export MACOSX_DEPLOYMENT_TARGET=10.8
  239. endif
  240. MD5SUM = md5 -r
  241. endif
  242. ifneq (,$(findstring $(OSNAME), FreeBSD OpenBSD DragonFly))
  243. MD5SUM = md5 -r
  244. endif
  245. ifeq ($(OSNAME), NetBSD)
  246. MD5SUM = md5 -n
  247. endif
  248. ifeq ($(OSNAME), Linux)
  249. EXTRALIB += -lm
  250. NO_EXPRECISION = 1
  251. endif
  252. ifeq ($(OSNAME), Android)
  253. EXTRALIB += -lm
  254. endif
  255. ifeq ($(OSNAME), AIX)
  256. EXTRALIB += -lm
  257. endif
  258. ifeq ($(OSNAME), WINNT)
  259. NEED_PIC = 0
  260. NO_EXPRECISION = 1
  261. EXTRALIB += -defaultlib:advapi32
  262. SUFFIX = obj
  263. PSUFFIX = pobj
  264. LIBSUFFIX = a
  265. ifeq ($(C_COMPILER), CLANG)
  266. CCOMMON_OPT += -DMS_ABI
  267. endif
  268. ifeq ($(C_COMPILER), GCC)
  269. #Version tests for supporting specific features (MS_ABI, POWER9 intrinsics)
  270. GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
  271. GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
  272. GCCVERSIONGT5 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 5)
  273. GCCVERSIONGTEQ9 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 9)
  274. GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
  275. ifeq ($(GCCVERSIONGT4), 1)
  276. # GCC Major version > 4
  277. # It is compatible with MSVC ABI.
  278. CCOMMON_OPT += -DMS_ABI
  279. endif
  280. ifeq ($(GCCVERSIONGTEQ4), 1)
  281. ifeq ($(GCCMINORVERSIONGTEQ7), 1)
  282. # GCC Version >=4.7
  283. # It is compatible with MSVC ABI.
  284. CCOMMON_OPT += -DMS_ABI
  285. endif
  286. endif
  287. endif
  288. # Ensure the correct stack alignment on Win32
  289. # http://permalink.gmane.org/gmane.comp.lib.openblas.general/97
  290. ifeq ($(ARCH), x86)
  291. CCOMMON_OPT += -mincoming-stack-boundary=2
  292. FCOMMON_OPT += -mincoming-stack-boundary=2
  293. endif
  294. endif
  295. ifeq ($(OSNAME), Interix)
  296. NEED_PIC = 0
  297. NO_EXPRECISION = 1
  298. INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
  299. endif
  300. ifeq ($(OSNAME), CYGWIN_NT)
  301. NEED_PIC = 0
  302. NO_EXPRECISION = 1
  303. OS_CYGWIN_NT = 1
  304. endif
  305. ifneq ($(OSNAME), WINNT)
  306. ifneq ($(OSNAME), CYGWIN_NT)
  307. ifneq ($(OSNAME), Interix)
  308. ifneq ($(OSNAME), Android)
  309. ifdef SMP
  310. EXTRALIB += -lpthread
  311. endif
  312. endif
  313. endif
  314. endif
  315. endif
  316. # ifeq logical or
  317. ifeq ($(OSNAME), $(filter $(OSNAME),WINNT CYGWIN_NT Interix))
  318. OS_WINDOWS=1
  319. endif
  320. ifdef QUAD_PRECISION
  321. CCOMMON_OPT += -DQUAD_PRECISION
  322. NO_EXPRECISION = 1
  323. endif
  324. ifneq ($(ARCH), x86)
  325. ifneq ($(ARCH), x86_64)
  326. NO_EXPRECISION = 1
  327. endif
  328. endif
  329. ifdef UTEST_CHECK
  330. CCOMMON_OPT += -DUTEST_CHECK
  331. SANITY_CHECK = 1
  332. endif
  333. ifdef SANITY_CHECK
  334. CCOMMON_OPT += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
  335. endif
  336. MAX_STACK_ALLOC ?= 2048
  337. ifneq ($(MAX_STACK_ALLOC), 0)
  338. CCOMMON_OPT += -DMAX_STACK_ALLOC=$(MAX_STACK_ALLOC)
  339. endif
  340. ifdef USE_LOCKING
  341. ifneq ($(USE_LOCKING), 0)
  342. CCOMMON_OPT += -DUSE_LOCKING
  343. endif
  344. endif
  345. #
  346. # Architecture dependent settings
  347. #
  348. ifeq ($(ARCH), x86)
  349. ifndef BINARY
  350. NO_BINARY_MODE = 1
  351. endif
  352. ifeq ($(CORE), generic)
  353. NO_EXPRECISION = 1
  354. endif
  355. ifndef NO_EXPRECISION
  356. ifeq ($(F_COMPILER), GFORTRAN)
  357. # ifeq logical or. GCC or LSB
  358. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
  359. EXPRECISION = 1
  360. CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
  361. FCOMMON_OPT += -m128bit-long-double
  362. endif
  363. ifeq ($(C_COMPILER), CLANG)
  364. EXPRECISION = 1
  365. CCOMMON_OPT += -DEXPRECISION
  366. FCOMMON_OPT += -m128bit-long-double
  367. endif
  368. endif
  369. endif
  370. endif
  371. ifeq ($(ARCH), x86_64)
  372. ifeq ($(CORE), generic)
  373. NO_EXPRECISION = 1
  374. endif
  375. ifndef NO_EXPRECISION
  376. ifeq ($(F_COMPILER), GFORTRAN)
  377. # ifeq logical or. GCC or LSB
  378. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
  379. EXPRECISION = 1
  380. CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
  381. FCOMMON_OPT += -m128bit-long-double
  382. endif
  383. ifeq ($(C_COMPILER), CLANG)
  384. EXPRECISION = 1
  385. CCOMMON_OPT += -DEXPRECISION
  386. FCOMMON_OPT += -m128bit-long-double
  387. endif
  388. endif
  389. endif
  390. endif
  391. ifeq ($(C_COMPILER), INTEL)
  392. CCOMMON_OPT += -wd981
  393. endif
  394. ifeq ($(USE_OPENMP), 1)
  395. #check
  396. ifeq ($(USE_THREAD), 0)
  397. $(error OpenBLAS: Cannot set both USE_OPENMP=1 and USE_THREAD=0. The USE_THREAD=0 is only for building single thread version.)
  398. endif
  399. # ifeq logical or. GCC or LSB
  400. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
  401. CCOMMON_OPT += -fopenmp
  402. endif
  403. ifeq ($(C_COMPILER), CLANG)
  404. CCOMMON_OPT += -fopenmp
  405. endif
  406. ifeq ($(C_COMPILER), INTEL)
  407. CCOMMON_OPT += -fopenmp
  408. endif
  409. ifeq ($(C_COMPILER), PGI)
  410. CCOMMON_OPT += -mp
  411. endif
  412. ifeq ($(C_COMPILER), OPEN64)
  413. CCOMMON_OPT += -mp
  414. CEXTRALIB += -lstdc++
  415. endif
  416. ifeq ($(C_COMPILER), PATHSCALE)
  417. CCOMMON_OPT += -mp
  418. endif
  419. endif
  420. ifeq ($(DYNAMIC_ARCH), 1)
  421. ifeq ($(ARCH), x86)
  422. DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
  423. CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
  424. endif
  425. ifeq ($(ARCH), x86_64)
  426. DYNAMIC_CORE = PRESCOTT CORE2
  427. ifeq ($(DYNAMIC_OLDER), 1)
  428. DYNAMIC_CORE += PENRYN DUNNINGTON
  429. endif
  430. DYNAMIC_CORE += NEHALEM
  431. ifeq ($(DYNAMIC_OLDER), 1)
  432. DYNAMIC_CORE += OPTERON OPTERON_SSE3
  433. endif
  434. DYNAMIC_CORE += BARCELONA
  435. ifeq ($(DYNAMIC_OLDER), 1)
  436. DYNAMIC_CORE += BOBCAT ATOM NANO
  437. endif
  438. ifneq ($(NO_AVX), 1)
  439. DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER EXCAVATOR
  440. endif
  441. ifneq ($(NO_AVX2), 1)
  442. DYNAMIC_CORE += HASWELL ZEN
  443. endif
  444. ifneq ($(NO_AVX512), 1)
  445. ifneq ($(NO_AVX2), 1)
  446. DYNAMIC_CORE += SKYLAKEX
  447. endif
  448. endif
  449. endif
  450. ifdef DYNAMIC_LIST
  451. override DYNAMIC_CORE = PRESCOTT $(DYNAMIC_LIST)
  452. XCCOMMON_OPT = -DDYNAMIC_LIST -DDYN_PRESCOTT
  453. XCCOMMON_OPT += $(foreach dcore,$(DYNAMIC_LIST),-DDYN_$(dcore))
  454. CCOMMON_OPT += $(XCCOMMON_OPT)
  455. #CCOMMON_OPT += -DDYNAMIC_LIST='$(DYNAMIC_LIST)'
  456. endif
  457. ifeq ($(ARCH), arm64)
  458. DYNAMIC_CORE = ARMV8
  459. DYNAMIC_CORE += CORTEXA53
  460. DYNAMIC_CORE += CORTEXA57
  461. DYNAMIC_CORE += CORTEXA72
  462. DYNAMIC_CORE += CORTEXA73
  463. DYNAMIC_CORE += FALKOR
  464. DYNAMIC_CORE += THUNDERX
  465. DYNAMIC_CORE += THUNDERX2T99
  466. DYNAMIC_CORE += TSV110
  467. endif
  468. ifeq ($(ARCH), zarch)
  469. DYNAMIC_CORE = Z13
  470. DYNAMIC_CORE += Z14
  471. endif
  472. ifeq ($(ARCH), power)
  473. DYNAMIC_CORE = POWER6
  474. DYNAMIC_CORE += POWER8
  475. ifneq ($(C_COMPILER), GCC)
  476. DYNAMIC_CORE += POWER9
  477. endif
  478. ifeq ($(C_COMPILER), GCC)
  479. ifeq ($(GCCVERSIONGT5), 1)
  480. DYNAMIC_CORE += POWER9
  481. else
  482. $(info, OpenBLAS: Your gcc version is too old to build the POWER9 kernels.)
  483. endif
  484. endif
  485. endif
  486. # If DYNAMIC_CORE is not set, DYNAMIC_ARCH cannot do anything, so force it to empty
  487. ifndef DYNAMIC_CORE
  488. override DYNAMIC_ARCH=
  489. endif
  490. endif
  491. ifeq ($(ARCH), ia64)
  492. NO_BINARY_MODE = 1
  493. BINARY_DEFINED = 1
  494. ifeq ($(F_COMPILER), GFORTRAN)
  495. ifeq ($(C_COMPILER), GCC)
  496. # EXPRECISION = 1
  497. # CCOMMON_OPT += -DEXPRECISION
  498. endif
  499. endif
  500. endif
  501. ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
  502. NO_BINARY_MODE = 1
  503. endif
  504. ifeq ($(ARCH), alpha)
  505. NO_BINARY_MODE = 1
  506. BINARY_DEFINED = 1
  507. endif
  508. ifeq ($(ARCH), arm)
  509. NO_BINARY_MODE = 1
  510. BINARY_DEFINED = 1
  511. CCOMMON_OPT += -marm
  512. FCOMMON_OPT += -marm
  513. # If softfp abi is mentioned on the command line, force it.
  514. ifeq ($(ARM_SOFTFP_ABI), 1)
  515. CCOMMON_OPT += -mfloat-abi=softfp
  516. FCOMMON_OPT += -mfloat-abi=softfp
  517. endif
  518. ifeq ($(OSNAME), Android)
  519. ifeq ($(ARM_SOFTFP_ABI), 1)
  520. EXTRALIB += -lm
  521. else
  522. EXTRALIB += -Wl,-lm_hard
  523. endif
  524. endif
  525. endif
  526. ifeq ($(ARCH), arm64)
  527. NO_BINARY_MODE = 1
  528. BINARY_DEFINED = 1
  529. endif
  530. #
  531. # C Compiler dependent settings
  532. #
  533. # ifeq logical or. GCC or CLANG or LSB
  534. # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
  535. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
  536. CCOMMON_OPT += -Wall
  537. COMMON_PROF += -fno-inline
  538. NO_UNINITIALIZED_WARN = -Wno-uninitialized
  539. ifeq ($(QUIET_MAKE), 1)
  540. CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
  541. endif
  542. ifdef NO_BINARY_MODE
  543. ifeq ($(ARCH), $(filter $(ARCH),mips64))
  544. ifdef BINARY64
  545. CCOMMON_OPT += -mabi=64
  546. else
  547. CCOMMON_OPT += -mabi=n32
  548. endif
  549. BINARY_DEFINED = 1
  550. else ifeq ($(ARCH), $(filter $(ARCH),mips))
  551. CCOMMON_OPT += -mabi=32
  552. BINARY_DEFINED = 1
  553. endif
  554. ifeq ($(CORE), LOONGSON3A)
  555. CCOMMON_OPT += -march=mips64
  556. FCOMMON_OPT += -march=mips64
  557. endif
  558. ifeq ($(CORE), LOONGSON3B)
  559. CCOMMON_OPT += -march=mips64
  560. FCOMMON_OPT += -march=mips64
  561. endif
  562. ifeq ($(CORE), 1004K)
  563. CCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
  564. FCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
  565. endif
  566. ifeq ($(CORE), P5600)
  567. CCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
  568. FCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
  569. endif
  570. ifeq ($(CORE), I6400)
  571. CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
  572. FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
  573. endif
  574. ifeq ($(CORE), P6600)
  575. CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
  576. FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
  577. endif
  578. ifeq ($(CORE), I6500)
  579. CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
  580. FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
  581. endif
  582. ifeq ($(OSNAME), AIX)
  583. BINARY_DEFINED = 1
  584. endif
  585. endif
  586. ifndef BINARY_DEFINED
  587. ifneq ($(OSNAME), AIX)
  588. ifdef BINARY64
  589. CCOMMON_OPT += -m64
  590. else
  591. CCOMMON_OPT += -m32
  592. endif
  593. endif
  594. endif
  595. endif
  596. ifeq ($(C_COMPILER), PGI)
  597. ifdef BINARY64
  598. CCOMMON_OPT += -tp p7-64 -D__MMX__ -Mnollvm
  599. else
  600. CCOMMON_OPT += -tp p7
  601. endif
  602. endif
  603. ifeq ($(C_COMPILER), PATHSCALE)
  604. ifdef BINARY64
  605. CCOMMON_OPT += -m64
  606. else
  607. CCOMMON_OPT += -m32
  608. endif
  609. endif
  610. #
  611. # Fortran Compiler dependent settings
  612. #
  613. ifeq ($(F_COMPILER), FLANG)
  614. CCOMMON_OPT += -DF_INTERFACE_FLANG
  615. ifdef BINARY64
  616. ifdef INTERFACE64
  617. ifneq ($(INTERFACE64), 0)
  618. FCOMMON_OPT += -i8
  619. endif
  620. endif
  621. FCOMMON_OPT += -Wall
  622. else
  623. FCOMMON_OPT += -Wall
  624. endif
  625. ifeq ($(USE_OPENMP), 1)
  626. FCOMMON_OPT += -fopenmp
  627. endif
  628. endif
  629. ifeq ($(F_COMPILER), G77)
  630. CCOMMON_OPT += -DF_INTERFACE_G77
  631. FCOMMON_OPT += -Wall
  632. ifndef NO_BINARY_MODE
  633. ifneq ($(OSNAME), AIX)
  634. ifdef BINARY64
  635. FCOMMON_OPT += -m64
  636. else
  637. FCOMMON_OPT += -m32
  638. endif
  639. endif
  640. endif
  641. endif
  642. ifeq ($(F_COMPILER), G95)
  643. CCOMMON_OPT += -DF_INTERFACE_G95
  644. FCOMMON_OPT += -Wall
  645. ifneq ($(OSNAME), AIX)
  646. ifndef NO_BINARY_MODE
  647. ifdef BINARY64
  648. FCOMMON_OPT += -m64
  649. else
  650. FCOMMON_OPT += -m32
  651. endif
  652. endif
  653. ifneq ($(NO_LAPACKE), 1)
  654. FCOMMON_OPT += -fno-second-underscore
  655. endif
  656. endif
  657. endif
  658. ifeq ($(F_COMPILER), GFORTRAN)
  659. CCOMMON_OPT += -DF_INTERFACE_GFORT
  660. FCOMMON_OPT += -Wall
  661. # make single-threaded LAPACK calls thread-safe #1847
  662. FCOMMON_OPT += -frecursive
  663. # work around ABI problem with passing single-character arguments
  664. FCOMMON_OPT += -fno-optimize-sibling-calls
  665. #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
  666. ifneq ($(NO_LAPACK), 1)
  667. EXTRALIB += -lgfortran
  668. endif
  669. ifdef NO_BINARY_MODE
  670. ifeq ($(ARCH), $(filter $(ARCH),mips64))
  671. ifdef BINARY64
  672. FCOMMON_OPT += -mabi=64
  673. else
  674. FCOMMON_OPT += -mabi=n32
  675. endif
  676. else ifeq ($(ARCH), $(filter $(ARCH),mips))
  677. FCOMMON_OPT += -mabi=32
  678. endif
  679. else
  680. ifdef BINARY64
  681. ifneq ($(OSNAME), AIX)
  682. FCOMMON_OPT += -m64
  683. endif
  684. ifdef INTERFACE64
  685. ifneq ($(INTERFACE64), 0)
  686. FCOMMON_OPT += -fdefault-integer-8
  687. endif
  688. endif
  689. else
  690. ifneq ($(OSNAME), AIX)
  691. FCOMMON_OPT += -m32
  692. endif
  693. endif
  694. endif
  695. ifeq ($(USE_OPENMP), 1)
  696. FCOMMON_OPT += -fopenmp
  697. endif
  698. endif
  699. ifeq ($(F_COMPILER), INTEL)
  700. CCOMMON_OPT += -DF_INTERFACE_INTEL
  701. ifdef INTERFACE64
  702. ifneq ($(INTERFACE64), 0)
  703. FCOMMON_OPT += -i8
  704. endif
  705. endif
  706. ifeq ($(USE_OPENMP), 1)
  707. FCOMMON_OPT += -fopenmp
  708. endif
  709. endif
  710. ifeq ($(F_COMPILER), FUJITSU)
  711. CCOMMON_OPT += -DF_INTERFACE_FUJITSU
  712. ifeq ($(USE_OPENMP), 1)
  713. FCOMMON_OPT += -openmp
  714. endif
  715. endif
  716. ifeq ($(F_COMPILER), IBM)
  717. CCOMMON_OPT += -DF_INTERFACE_IBM
  718. # FCOMMON_OPT += -qarch=440
  719. ifdef BINARY64
  720. FCOMMON_OPT += -q64
  721. ifdef INTERFACE64
  722. ifneq ($(INTERFACE64), 0)
  723. FCOMMON_OPT += -qintsize=8
  724. endif
  725. endif
  726. else
  727. FCOMMON_OPT += -q32
  728. endif
  729. ifeq ($(USE_OPENMP), 1)
  730. FCOMMON_OPT += -openmp
  731. endif
  732. endif
  733. ifeq ($(F_COMPILER), PGI)
  734. CCOMMON_OPT += -DF_INTERFACE_PGI
  735. COMMON_PROF += -DPGICOMPILER
  736. ifdef BINARY64
  737. ifdef INTERFACE64
  738. ifneq ($(INTERFACE64), 0)
  739. FCOMMON_OPT += -i8
  740. endif
  741. endif
  742. FCOMMON_OPT += -tp p7-64
  743. else
  744. FCOMMON_OPT += -tp p7
  745. endif
  746. ifeq ($(USE_OPENMP), 1)
  747. FCOMMON_OPT += -mp
  748. endif
  749. endif
  750. ifeq ($(F_COMPILER), PATHSCALE)
  751. CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
  752. ifdef BINARY64
  753. ifdef INTERFACE64
  754. ifneq ($(INTERFACE64), 0)
  755. FCOMMON_OPT += -i8
  756. endif
  757. endif
  758. endif
  759. ifeq ($(USE_OPENMP), 1)
  760. FCOMMON_OPT += -mp
  761. endif
  762. endif
  763. ifeq ($(F_COMPILER), OPEN64)
  764. CCOMMON_OPT += -DF_INTERFACE_OPEN64
  765. ifdef BINARY64
  766. ifdef INTERFACE64
  767. ifneq ($(INTERFACE64), 0)
  768. FCOMMON_OPT += -i8
  769. endif
  770. endif
  771. endif
  772. ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
  773. ifndef BINARY64
  774. FCOMMON_OPT += -n32
  775. else
  776. FCOMMON_OPT += -n64
  777. endif
  778. ifeq ($(CORE), LOONGSON3A)
  779. FCOMMON_OPT += -loongson3 -static
  780. endif
  781. ifeq ($(CORE), LOONGSON3B)
  782. FCOMMON_OPT += -loongson3 -static
  783. endif
  784. else
  785. ifndef BINARY64
  786. FCOMMON_OPT += -m32
  787. else
  788. FCOMMON_OPT += -m64
  789. endif
  790. endif
  791. ifeq ($(USE_OPENMP), 1)
  792. FEXTRALIB += -lstdc++
  793. FCOMMON_OPT += -mp
  794. endif
  795. endif
  796. ifeq ($(C_COMPILER), OPEN64)
  797. ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
  798. ifndef BINARY64
  799. CCOMMON_OPT += -n32
  800. else
  801. CCOMMON_OPT += -n64
  802. endif
  803. ifeq ($(CORE), LOONGSON3A)
  804. CCOMMON_OPT += -loongson3 -static
  805. endif
  806. ifeq ($(CORE), LOONGSON3B)
  807. CCOMMON_OPT += -loongson3 -static
  808. endif
  809. else
  810. ifndef BINARY64
  811. CCOMMON_OPT += -m32
  812. else
  813. CCOMMON_OPT += -m64
  814. endif
  815. endif
  816. endif
  817. ifeq ($(C_COMPILER), SUN)
  818. CCOMMON_OPT += -w
  819. ifeq ($(ARCH), x86)
  820. CCOMMON_OPT += -m32
  821. else
  822. FCOMMON_OPT += -m64
  823. endif
  824. endif
  825. ifeq ($(F_COMPILER), SUN)
  826. CCOMMON_OPT += -DF_INTERFACE_SUN
  827. ifeq ($(ARCH), x86)
  828. FCOMMON_OPT += -m32
  829. else
  830. FCOMMON_OPT += -m64
  831. endif
  832. ifeq ($(USE_OPENMP), 1)
  833. FCOMMON_OPT += -xopenmp=parallel
  834. endif
  835. endif
  836. ifeq ($(F_COMPILER), COMPAQ)
  837. CCOMMON_OPT += -DF_INTERFACE_COMPAQ
  838. ifeq ($(USE_OPENMP), 1)
  839. FCOMMON_OPT += -openmp
  840. endif
  841. endif
  842. ifdef BINARY64
  843. ifdef INTERFACE64
  844. ifneq ($(INTERFACE64), 0)
  845. CCOMMON_OPT +=
  846. #-DUSE64BITINT
  847. endif
  848. endif
  849. endif
  850. ifeq ($(NEED_PIC), 1)
  851. ifeq ($(C_COMPILER), IBM)
  852. CCOMMON_OPT += -qpic=large
  853. else
  854. CCOMMON_OPT += -fPIC
  855. endif
  856. ifeq ($(F_COMPILER), SUN)
  857. FCOMMON_OPT += -pic
  858. else
  859. FCOMMON_OPT += -fPIC
  860. endif
  861. endif
  862. ifeq ($(DYNAMIC_ARCH), 1)
  863. CCOMMON_OPT += -DDYNAMIC_ARCH
  864. endif
  865. ifeq ($(DYNAMIC_OLDER), 1)
  866. CCOMMON_OPT += -DDYNAMIC_OLDER
  867. endif
  868. ifeq ($(NO_LAPACK), 1)
  869. CCOMMON_OPT += -DNO_LAPACK
  870. #Disable LAPACK C interface
  871. NO_LAPACKE = 1
  872. endif
  873. ifeq ($(NO_LAPACKE), 1)
  874. CCOMMON_OPT += -DNO_LAPACKE
  875. endif
  876. ifeq ($(NO_AVX), 1)
  877. CCOMMON_OPT += -DNO_AVX
  878. endif
  879. ifeq ($(ARCH), x86)
  880. CCOMMON_OPT += -DNO_AVX
  881. endif
  882. ifeq ($(NO_AVX2), 1)
  883. CCOMMON_OPT += -DNO_AVX2
  884. endif
  885. ifeq ($(NO_AVX512), 1)
  886. CCOMMON_OPT += -DNO_AVX512
  887. endif
  888. ifdef SMP
  889. CCOMMON_OPT += -DSMP_SERVER
  890. ifeq ($(ARCH), mips64)
  891. ifneq ($(CORE), LOONGSON3B)
  892. USE_SIMPLE_THREADED_LEVEL3 = 1
  893. endif
  894. endif
  895. ifeq ($(USE_OPENMP), 1)
  896. # USE_SIMPLE_THREADED_LEVEL3 = 1
  897. # NO_AFFINITY = 1
  898. CCOMMON_OPT += -DUSE_OPENMP
  899. endif
  900. ifeq ($(BIGNUMA), 1)
  901. CCOMMON_OPT += -DBIGNUMA
  902. endif
  903. endif
  904. ifeq ($(NO_WARMUP), 1)
  905. CCOMMON_OPT += -DNO_WARMUP
  906. endif
  907. ifeq ($(CONSISTENT_FPCSR), 1)
  908. CCOMMON_OPT += -DCONSISTENT_FPCSR
  909. endif
  910. # Only for development
  911. # CCOMMON_OPT += -DPARAMTEST
  912. # CCOMMON_OPT += -DPREFETCHTEST
  913. # CCOMMON_OPT += -DNO_SWITCHING
  914. # USE_PAPI = 1
  915. ifdef USE_PAPI
  916. CCOMMON_OPT += -DUSE_PAPI
  917. EXTRALIB += -lpapi -lperfctr
  918. endif
  919. ifdef DYNAMIC_THREADS
  920. CCOMMON_OPT += -DDYNAMIC_THREADS
  921. endif
  922. CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
  923. CCOMMON_OPT += -DMAX_PARALLEL_NUMBER=$(NUM_PARALLEL)
  924. ifdef USE_SIMPLE_THREADED_LEVEL3
  925. CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
  926. endif
  927. ifeq ($(USE_TLS), 1)
  928. CCOMMON_OPT += -DUSE_TLS
  929. endif
  930. CCOMMON_OPT += -DVERSION=\"$(VERSION)\"
  931. ifndef SYMBOLPREFIX
  932. SYMBOLPREFIX =
  933. endif
  934. ifndef SYMBOLSUFFIX
  935. SYMBOLSUFFIX =
  936. endif
  937. ifndef LIBNAMESUFFIX
  938. LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)
  939. else
  940. LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX)
  941. endif
  942. ifeq ($(OSNAME), CYGWIN_NT)
  943. LIBPREFIX = cyg$(LIBNAMEBASE)
  944. else
  945. LIBPREFIX = lib$(LIBNAMEBASE)
  946. endif
  947. KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
  948. include $(TOPDIR)/Makefile.$(ARCH)
  949. CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
  950. ifeq ($(CORE), PPC440)
  951. CCOMMON_OPT += -DALLOC_QALLOC
  952. endif
  953. ifeq ($(CORE), PPC440FP2)
  954. STATIC_ALLOCATION = 1
  955. endif
  956. ifneq ($(OSNAME), Linux)
  957. NO_AFFINITY = 1
  958. endif
  959. ifneq ($(ARCH), x86_64)
  960. ifneq ($(ARCH), x86)
  961. ifneq ($(CORE), LOONGSON3B)
  962. NO_AFFINITY = 1
  963. endif
  964. endif
  965. endif
  966. ifdef NO_AFFINITY
  967. ifeq ($(NO_AFFINITY), 0)
  968. override undefine NO_AFFINITY
  969. else
  970. CCOMMON_OPT += -DNO_AFFINITY
  971. endif
  972. endif
  973. ifdef FUNCTION_PROFILE
  974. CCOMMON_OPT += -DFUNCTION_PROFILE
  975. endif
  976. ifdef HUGETLB_ALLOCATION
  977. CCOMMON_OPT += -DALLOC_HUGETLB
  978. endif
  979. ifdef HUGETLBFILE_ALLOCATION
  980. CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
  981. endif
  982. ifdef STATIC_ALLOCATION
  983. CCOMMON_OPT += -DALLOC_STATIC
  984. endif
  985. ifdef DEVICEDRIVER_ALLOCATION
  986. CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
  987. endif
  988. ifdef MIXED_MEMORY_ALLOCATION
  989. CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
  990. endif
  991. ifeq ($(OSNAME), SunOS)
  992. TAR = gtar
  993. PATCH = gpatch
  994. GREP = ggrep
  995. AWK = nawk
  996. else
  997. TAR = tar
  998. PATCH = patch
  999. GREP = grep
  1000. AWK = awk
  1001. endif
  1002. ifndef MD5SUM
  1003. MD5SUM = md5sum
  1004. endif
  1005. REVISION = -r$(VERSION)
  1006. MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
  1007. ifeq ($(DEBUG), 1)
  1008. COMMON_OPT += -g
  1009. endif
  1010. ifeq ($(DEBUG), 1)
  1011. FCOMMON_OPT += -g
  1012. endif
  1013. ifndef COMMON_OPT
  1014. COMMON_OPT = -O2
  1015. endif
  1016. ifndef FCOMMON_OPT
  1017. FCOMMON_OPT = -O2 -frecursive
  1018. endif
  1019. override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
  1020. override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
  1021. override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
  1022. override FPFLAGS += $(FCOMMON_OPT) $(COMMON_PROF)
  1023. #MAKEOVERRIDES =
  1024. ifdef NEED_PIC
  1025. ifeq (,$(findstring PIC,$(FFLAGS)))
  1026. override FFLAGS += -fPIC
  1027. endif
  1028. endif
  1029. #For LAPACK Fortran codes.
  1030. #Disable -fopenmp for LAPACK Fortran codes on Windows.
  1031. ifdef OS_WINDOWS
  1032. LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
  1033. LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
  1034. else
  1035. LAPACK_FFLAGS := $(FFLAGS)
  1036. LAPACK_FPFLAGS := $(FPFLAGS)
  1037. endif
  1038. LAPACK_CFLAGS = $(CFLAGS)
  1039. LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
  1040. ifdef INTERFACE64
  1041. ifneq ($(INTERFACE64), 0)
  1042. LAPACK_CFLAGS += -DLAPACK_ILP64
  1043. endif
  1044. endif
  1045. ifdef OS_WINDOWS
  1046. LAPACK_CFLAGS += -DOPENBLAS_OS_WINDOWS
  1047. endif
  1048. ifeq ($(C_COMPILER), LSB)
  1049. LAPACK_CFLAGS += -DLAPACK_COMPLEX_STRUCTURE
  1050. endif
  1051. ifndef SUFFIX
  1052. SUFFIX = o
  1053. endif
  1054. ifndef PSUFFIX
  1055. PSUFFIX = po
  1056. endif
  1057. ifndef LIBSUFFIX
  1058. LIBSUFFIX = a
  1059. endif
  1060. ifneq ($(DYNAMIC_ARCH), 1)
  1061. ifndef SMP
  1062. LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
  1063. LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
  1064. else
  1065. LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
  1066. LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
  1067. endif
  1068. else
  1069. ifndef SMP
  1070. LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
  1071. LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
  1072. else
  1073. LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
  1074. LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
  1075. endif
  1076. endif
  1077. LIBDLLNAME = $(LIBPREFIX).dll
  1078. IMPLIBNAME = lib$(LIBNAMEBASE).dll.a
  1079. ifneq ($(OSNAME), AIX)
  1080. LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
  1081. else
  1082. LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.a)
  1083. endif
  1084. LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
  1085. LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
  1086. LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
  1087. LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
  1088. LIBS = $(TOPDIR)/$(LIBNAME)
  1089. LIBS_P = $(TOPDIR)/$(LIBNAME_P)
  1090. LIB_COMPONENTS = BLAS
  1091. ifneq ($(NO_CBLAS), 1)
  1092. LIB_COMPONENTS += CBLAS
  1093. endif
  1094. ifneq ($(NO_LAPACK), 1)
  1095. LIB_COMPONENTS += LAPACK
  1096. ifneq ($(NO_LAPACKE), 1)
  1097. LIB_COMPONENTS += LAPACKE
  1098. endif
  1099. ifeq ($(BUILD_RELAPACK), 1)
  1100. LIB_COMPONENTS += ReLAPACK
  1101. endif
  1102. endif
  1103. ifeq ($(ONLY_CBLAS), 1)
  1104. LIB_COMPONENTS = CBLAS
  1105. endif
  1106. export OSNAME
  1107. export ARCH
  1108. export CORE
  1109. export LIBCORE
  1110. export PGCPATH
  1111. export CONFIG
  1112. export CC
  1113. export FC
  1114. export BU
  1115. export FU
  1116. export NEED2UNDERSCORES
  1117. export USE_THREAD
  1118. export NUM_THREADS
  1119. export NUM_CORES
  1120. export SMP
  1121. export MAKEFILE_RULE
  1122. export NEED_PIC
  1123. export BINARY
  1124. export BINARY32
  1125. export BINARY64
  1126. export F_COMPILER
  1127. export C_COMPILER
  1128. export USE_OPENMP
  1129. export CROSS
  1130. export CROSS_SUFFIX
  1131. export NOFORTRAN
  1132. export NO_FBLAS
  1133. export EXTRALIB
  1134. export CEXTRALIB
  1135. export FEXTRALIB
  1136. export HAVE_SSE
  1137. export HAVE_SSE2
  1138. export HAVE_SSE3
  1139. export HAVE_SSSE3
  1140. export HAVE_SSE4_1
  1141. export HAVE_SSE4_2
  1142. export HAVE_SSE4A
  1143. export HAVE_SSE5
  1144. export HAVE_AVX
  1145. export HAVE_VFP
  1146. export HAVE_VFPV3
  1147. export HAVE_VFPV4
  1148. export HAVE_NEON
  1149. export HAVE_MSA
  1150. export MSA_FLAGS
  1151. export KERNELDIR
  1152. export FUNCTION_PROFILE
  1153. export TARGET_CORE
  1154. export NO_AVX512
  1155. export SGEMM_UNROLL_M
  1156. export SGEMM_UNROLL_N
  1157. export DGEMM_UNROLL_M
  1158. export DGEMM_UNROLL_N
  1159. export QGEMM_UNROLL_M
  1160. export QGEMM_UNROLL_N
  1161. export CGEMM_UNROLL_M
  1162. export CGEMM_UNROLL_N
  1163. export ZGEMM_UNROLL_M
  1164. export ZGEMM_UNROLL_N
  1165. export XGEMM_UNROLL_M
  1166. export XGEMM_UNROLL_N
  1167. export CGEMM3M_UNROLL_M
  1168. export CGEMM3M_UNROLL_N
  1169. export ZGEMM3M_UNROLL_M
  1170. export ZGEMM3M_UNROLL_N
  1171. export XGEMM3M_UNROLL_M
  1172. export XGEMM3M_UNROLL_N
  1173. ifdef USE_CUDA
  1174. export CUDADIR
  1175. export CUCC
  1176. export CUFLAGS
  1177. export CULIB
  1178. endif
  1179. .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
  1180. .f.$(SUFFIX):
  1181. $(FC) $(FFLAGS) -c $< -o $(@F)
  1182. .f.$(PSUFFIX):
  1183. $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
  1184. ifdef BINARY64
  1185. PATHSCALEPATH = /opt/pathscale/lib/3.1
  1186. PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
  1187. else
  1188. PATHSCALEPATH = /opt/pathscale/lib/3.1/32
  1189. PGIPATH = /opt/pgi/linux86/7.1-5/lib
  1190. endif
  1191. ACMLPATH = /opt/acml/4.3.0
  1192. ifneq ($(OSNAME), Darwin)
  1193. MKLPATH = /opt/intel/mkl/10.2.2.025/lib
  1194. else
  1195. MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
  1196. endif
  1197. ATLASPATH = /opt/atlas/3.9.17/opteron
  1198. FLAMEPATH = $(HOME)/flame/lib
  1199. ifneq ($(OSNAME), SunOS)
  1200. SUNPATH = /opt/sunstudio12.1
  1201. else
  1202. SUNPATH = /opt/SUNWspro
  1203. endif