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

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