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 23 kB

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