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

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