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