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

13 years ago
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058
  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 HASWELL
  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 HASWELL
  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. ifeq ($(ARCH), arm)
  308. NO_BINARY_MODE = 1
  309. BINARY_DEFINED = 1
  310. endif
  311. ifeq ($(ARCH), arm64)
  312. NO_BINARY_MODE = 1
  313. BINARY_DEFINED = 1
  314. endif
  315. #
  316. # C Compiler dependent settings
  317. #
  318. # ifeq logical or. GCC or CLANG or LSB
  319. # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
  320. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
  321. CCOMMON_OPT += -Wall
  322. COMMON_PROF += -fno-inline
  323. NO_UNINITIALIZED_WARN = -Wno-uninitialized
  324. ifeq ($(QUIET_MAKE), 1)
  325. CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
  326. endif
  327. ifdef NO_BINARY_MODE
  328. ifeq ($(ARCH), mips64)
  329. ifdef BINARY64
  330. CCOMMON_OPT += -mabi=64
  331. else
  332. CCOMMON_OPT += -mabi=n32
  333. endif
  334. BINARY_DEFINED = 1
  335. endif
  336. ifeq ($(CORE), LOONGSON3A)
  337. CCOMMON_OPT += -march=mips64
  338. FCOMMON_OPT += -march=mips64
  339. endif
  340. ifeq ($(CORE), LOONGSON3B)
  341. CCOMMON_OPT += -march=mips64
  342. FCOMMON_OPT += -march=mips64
  343. endif
  344. ifeq ($(OSNAME), AIX)
  345. BINARY_DEFINED = 1
  346. endif
  347. endif
  348. ifndef BINARY_DEFINED
  349. ifdef BINARY64
  350. CCOMMON_OPT += -m64
  351. else
  352. CCOMMON_OPT += -m32
  353. endif
  354. endif
  355. endif
  356. ifeq ($(C_COMPILER), PGI)
  357. ifdef BINARY64
  358. CCOMMON_OPT += -tp p7-64
  359. else
  360. CCOMMON_OPT += -tp p7
  361. endif
  362. endif
  363. ifeq ($(C_COMPILER), PATHSCALE)
  364. ifdef BINARY64
  365. CCOMMON_OPT += -m64
  366. else
  367. CCOMMON_OPT += -m32
  368. endif
  369. endif
  370. #
  371. # Fortran Compiler dependent settings
  372. #
  373. ifeq ($(F_COMPILER), G77)
  374. CCOMMON_OPT += -DF_INTERFACE_G77
  375. FCOMMON_OPT += -Wall
  376. ifndef NO_BINARY_MODE
  377. ifdef BINARY64
  378. FCOMMON_OPT += -m64
  379. else
  380. FCOMMON_OPT += -m32
  381. endif
  382. endif
  383. endif
  384. ifeq ($(F_COMPILER), G95)
  385. CCOMMON_OPT += -DF_INTERFACE_G95
  386. FCOMMON_OPT += -Wall
  387. ifndef NO_BINARY_MODE
  388. ifdef BINARY64
  389. FCOMMON_OPT += -m64
  390. else
  391. FCOMMON_OPT += -m32
  392. endif
  393. endif
  394. endif
  395. ifeq ($(F_COMPILER), GFORTRAN)
  396. CCOMMON_OPT += -DF_INTERFACE_GFORT
  397. FCOMMON_OPT += -Wall
  398. #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
  399. ifneq ($(NO_LAPACK), 1)
  400. EXTRALIB += -lgfortran
  401. endif
  402. ifdef NO_BINARY_MODE
  403. ifeq ($(ARCH), mips64)
  404. ifdef BINARY64
  405. FCOMMON_OPT += -mabi=64
  406. else
  407. FCOMMON_OPT += -mabi=n32
  408. endif
  409. endif
  410. else
  411. ifdef BINARY64
  412. FCOMMON_OPT += -m64
  413. ifdef INTERFACE64
  414. FCOMMON_OPT += -fdefault-integer-8
  415. endif
  416. else
  417. FCOMMON_OPT += -m32
  418. endif
  419. endif
  420. ifdef USE_OPENMP
  421. FCOMMON_OPT += -fopenmp
  422. endif
  423. endif
  424. ifeq ($(F_COMPILER), INTEL)
  425. CCOMMON_OPT += -DF_INTERFACE_INTEL
  426. ifdef INTERFACE64
  427. FCOMMON_OPT += -i8
  428. endif
  429. ifdef USE_OPENMP
  430. FCOMMON_OPT += -openmp
  431. endif
  432. endif
  433. ifeq ($(F_COMPILER), FUJITSU)
  434. CCOMMON_OPT += -DF_INTERFACE_FUJITSU
  435. ifdef USE_OPENMP
  436. FCOMMON_OPT += -openmp
  437. endif
  438. endif
  439. ifeq ($(F_COMPILER), IBM)
  440. CCOMMON_OPT += -DF_INTERFACE_IBM
  441. # FCOMMON_OPT += -qarch=440
  442. ifdef BINARY64
  443. FCOMMON_OPT += -q64
  444. ifdef INTERFACE64
  445. FCOMMON_OPT += -qintsize=8
  446. endif
  447. else
  448. FCOMMON_OPT += -q32
  449. endif
  450. ifdef USE_OPENMP
  451. FCOMMON_OPT += -openmp
  452. endif
  453. endif
  454. ifeq ($(F_COMPILER), PGI)
  455. CCOMMON_OPT += -DF_INTERFACE_PGI
  456. COMMON_PROF += -DPGICOMPILER
  457. ifdef BINARY64
  458. ifdef INTERFACE64
  459. FCOMMON_OPT += -i8
  460. endif
  461. FCOMMON_OPT += -tp p7-64
  462. else
  463. FCOMMON_OPT += -tp p7
  464. endif
  465. ifdef USE_OPENMP
  466. FCOMMON_OPT += -mp
  467. endif
  468. endif
  469. ifeq ($(F_COMPILER), PATHSCALE)
  470. CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
  471. ifdef BINARY64
  472. ifdef INTERFACE64
  473. FCOMMON_OPT += -i8
  474. endif
  475. endif
  476. ifneq ($(ARCH), mips64)
  477. ifndef BINARY64
  478. FCOMMON_OPT += -m32
  479. else
  480. FCOMMON_OPT += -m64
  481. endif
  482. else
  483. ifdef BINARY64
  484. FCOMMON_OPT += -mabi=64
  485. else
  486. FCOMMON_OPT += -mabi=n32
  487. endif
  488. endif
  489. ifdef USE_OPENMP
  490. FCOMMON_OPT += -mp
  491. endif
  492. endif
  493. ifeq ($(F_COMPILER), OPEN64)
  494. CCOMMON_OPT += -DF_INTERFACE_OPEN64
  495. ifdef BINARY64
  496. ifdef INTERFACE64
  497. FCOMMON_OPT += -i8
  498. endif
  499. endif
  500. ifeq ($(ARCH), mips64)
  501. ifndef BINARY64
  502. FCOMMON_OPT += -n32
  503. else
  504. FCOMMON_OPT += -n64
  505. endif
  506. ifeq ($(CORE), LOONGSON3A)
  507. FCOMMON_OPT += -loongson3 -static
  508. endif
  509. ifeq ($(CORE), LOONGSON3B)
  510. FCOMMON_OPT += -loongson3 -static
  511. endif
  512. else
  513. ifndef BINARY64
  514. FCOMMON_OPT += -m32
  515. else
  516. FCOMMON_OPT += -m64
  517. endif
  518. endif
  519. ifdef USE_OPENMP
  520. FEXTRALIB += -lstdc++
  521. FCOMMON_OPT += -mp
  522. endif
  523. endif
  524. ifeq ($(C_COMPILER), OPEN64)
  525. ifeq ($(ARCH), mips64)
  526. ifndef BINARY64
  527. CCOMMON_OPT += -n32
  528. else
  529. CCOMMON_OPT += -n64
  530. endif
  531. ifeq ($(CORE), LOONGSON3A)
  532. CCOMMON_OPT += -loongson3 -static
  533. endif
  534. ifeq ($(CORE), LOONGSON3B)
  535. CCOMMON_OPT += -loongson3 -static
  536. endif
  537. else
  538. ifndef BINARY64
  539. CCOMMON_OPT += -m32
  540. else
  541. CCOMMON_OPT += -m64
  542. endif
  543. endif
  544. endif
  545. ifeq ($(C_COMPILER), SUN)
  546. CCOMMON_OPT += -w
  547. ifeq ($(ARCH), x86)
  548. CCOMMON_OPT += -m32
  549. else
  550. FCOMMON_OPT += -m64
  551. endif
  552. endif
  553. ifeq ($(F_COMPILER), SUN)
  554. CCOMMON_OPT += -DF_INTERFACE_SUN
  555. ifeq ($(ARCH), x86)
  556. FCOMMON_OPT += -m32
  557. else
  558. FCOMMON_OPT += -m64
  559. endif
  560. ifdef USE_OPENMP
  561. FCOMMON_OPT += -xopenmp=parallel
  562. endif
  563. endif
  564. ifeq ($(F_COMPILER), COMPAQ)
  565. CCOMMON_OPT += -DF_INTERFACE_COMPAQ
  566. ifdef USE_OPENMP
  567. FCOMMON_OPT += -openmp
  568. endif
  569. endif
  570. ifdef BINARY64
  571. ifdef INTERFACE64
  572. CCOMMON_OPT +=
  573. #-DUSE64BITINT
  574. endif
  575. endif
  576. ifeq ($(NEED_PIC), 1)
  577. ifeq ($(C_COMPILER), IBM)
  578. CCOMMON_OPT += -qpic=large
  579. else
  580. CCOMMON_OPT += -fPIC
  581. endif
  582. ifeq ($(F_COMPILER), SUN)
  583. FCOMMON_OPT += -pic
  584. else
  585. FCOMMON_OPT += -fPIC
  586. endif
  587. endif
  588. ifeq ($(DYNAMIC_ARCH), 1)
  589. CCOMMON_OPT += -DDYNAMIC_ARCH
  590. endif
  591. ifeq ($(NO_LAPACK), 1)
  592. CCOMMON_OPT += -DNO_LAPACK
  593. #Disable LAPACK C interface
  594. NO_LAPACKE = 1
  595. endif
  596. ifeq ($(NO_LAPACKE), 1)
  597. CCOMMON_OPT += -DNO_LAPACKE
  598. endif
  599. ifeq ($(NO_AVX), 1)
  600. CCOMMON_OPT += -DNO_AVX
  601. endif
  602. ifdef SMP
  603. CCOMMON_OPT += -DSMP_SERVER
  604. ifeq ($(ARCH), mips64)
  605. ifneq ($(CORE), LOONGSON3B)
  606. USE_SIMPLE_THREADED_LEVEL3 = 1
  607. endif
  608. endif
  609. ifeq ($(USE_OPENMP), 1)
  610. # USE_SIMPLE_THREADED_LEVEL3 = 1
  611. # NO_AFFINITY = 1
  612. CCOMMON_OPT += -DUSE_OPENMP
  613. endif
  614. endif
  615. ifeq ($(NO_WARMUP), 1)
  616. CCOMMON_OPT += -DNO_WARMUP
  617. endif
  618. ifeq ($(CONSISTENT_FPCSR), 1)
  619. CCOMMON_OPT += -DCONSISTENT_FPCSR
  620. endif
  621. # Only for development
  622. # CCOMMON_OPT += -DPARAMTEST
  623. # CCOMMON_OPT += -DPREFETCHTEST
  624. # CCOMMON_OPT += -DNO_SWITCHING
  625. # USE_PAPI = 1
  626. ifdef USE_PAPI
  627. CCOMMON_OPT += -DUSE_PAPI
  628. EXTRALIB += -lpapi -lperfctr
  629. endif
  630. ifdef DYNAMIC_THREADS
  631. CCOMMON_OPT += -DDYNAMIC_THREADS
  632. endif
  633. CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
  634. ifdef USE_SIMPLE_THREADED_LEVEL3
  635. CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
  636. endif
  637. ifndef LIBNAMESUFFIX
  638. LIBPREFIX = libopenblas
  639. else
  640. LIBPREFIX = libopenblas_$(LIBNAMESUFFIX)
  641. endif
  642. KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
  643. include $(TOPDIR)/Makefile.$(ARCH)
  644. CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
  645. ifeq ($(CORE), PPC440)
  646. CCOMMON_OPT += -DALLOC_QALLOC
  647. endif
  648. ifeq ($(CORE), PPC440FP2)
  649. STATIC_ALLOCATION = 1
  650. endif
  651. ifneq ($(OSNAME), Linux)
  652. NO_AFFINITY = 1
  653. endif
  654. ifneq ($(ARCH), x86_64)
  655. ifneq ($(ARCH), x86)
  656. ifneq ($(CORE), LOONGSON3B)
  657. NO_AFFINITY = 1
  658. endif
  659. endif
  660. endif
  661. ifdef NO_AFFINITY
  662. CCOMMON_OPT += -DNO_AFFINITY
  663. endif
  664. ifdef FUNCTION_PROFILE
  665. CCOMMON_OPT += -DFUNCTION_PROFILE
  666. endif
  667. ifdef HUGETLB_ALLOCATION
  668. CCOMMON_OPT += -DALLOC_HUGETLB
  669. endif
  670. ifdef HUGETLBFILE_ALLOCATION
  671. CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
  672. endif
  673. ifdef STATIC_ALLOCATION
  674. CCOMMON_OPT += -DALLOC_STATIC
  675. endif
  676. ifdef DEVICEDRIVER_ALLOCATION
  677. CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
  678. endif
  679. ifdef MIXED_MEMORY_ALLOCATION
  680. CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
  681. endif
  682. ifeq ($(OSNAME), SunOS)
  683. TAR = gtar
  684. PATCH = gpatch
  685. GREP = ggrep
  686. else
  687. TAR = tar
  688. PATCH = patch
  689. GREP = grep
  690. endif
  691. ifndef MD5SUM
  692. MD5SUM = md5sum
  693. endif
  694. AWK = awk
  695. REVISION = -r$(VERSION)
  696. MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
  697. ifeq ($(DEBUG), 1)
  698. COMMON_OPT += -g
  699. endif
  700. ifndef COMMON_OPT
  701. ifeq ($(ARCH), arm)
  702. COMMON_OPT = -O3
  703. endif
  704. endif
  705. ifndef COMMON_OPT
  706. ifeq ($(ARCH), arm64)
  707. COMMON_OPT = -O3
  708. endif
  709. endif
  710. ifndef COMMON_OPT
  711. COMMON_OPT = -O2
  712. endif
  713. override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
  714. override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
  715. override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
  716. override FPFLAGS += $(COMMON_OPT) $(FCOMMON_OPT) $(COMMON_PROF)
  717. #MAKEOVERRIDES =
  718. #For LAPACK Fortran codes.
  719. #Disable -fopenmp for LAPACK Fortran codes on Windows.
  720. ifdef OS_WINDOWS
  721. LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
  722. LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
  723. else
  724. LAPACK_FFLAGS := $(FFLAGS)
  725. LAPACK_FPFLAGS := $(FPFLAGS)
  726. endif
  727. LAPACK_CFLAGS = $(CFLAGS)
  728. LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
  729. ifdef INTERFACE64
  730. LAPACK_CFLAGS += -DLAPACK_ILP64
  731. endif
  732. ifdef OS_WINDOWS
  733. LAPACK_CFLAGS += -DOPENBLAS_OS_WINDOWS
  734. endif
  735. ifeq ($(C_COMPILER), LSB)
  736. LAPACK_CFLAGS += -DLAPACK_COMPLEX_STRUCTURE
  737. endif
  738. ifndef SUFFIX
  739. SUFFIX = o
  740. endif
  741. ifndef PSUFFIX
  742. PSUFFIX = po
  743. endif
  744. ifndef LIBSUFFIX
  745. LIBSUFFIX = a
  746. endif
  747. ifneq ($(DYNAMIC_ARCH), 1)
  748. ifndef SMP
  749. LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
  750. LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
  751. else
  752. LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
  753. LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
  754. endif
  755. else
  756. ifndef SMP
  757. LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
  758. LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
  759. else
  760. LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
  761. LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
  762. endif
  763. endif
  764. LIBDLLNAME = $(LIBPREFIX).dll
  765. LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
  766. LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
  767. LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
  768. LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
  769. LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
  770. LIBS = $(TOPDIR)/$(LIBNAME)
  771. LIBS_P = $(TOPDIR)/$(LIBNAME_P)
  772. LIB_COMPONENTS = BLAS
  773. ifneq ($(NO_CBLAS), 1)
  774. LIB_COMPONENTS += CBLAS
  775. endif
  776. ifneq ($(NO_LAPACK), 1)
  777. LIB_COMPONENTS += LAPACK
  778. ifneq ($(NO_LAPACKE), 1)
  779. LIB_COMPONENTS += LAPACKE
  780. endif
  781. endif
  782. ifeq ($(ONLY_CBLAS), 1)
  783. LIB_COMPONENTS = CBLAS
  784. endif
  785. export OSNAME
  786. export ARCH
  787. export CORE
  788. export LIBCORE
  789. export PGCPATH
  790. export CONFIG
  791. export CC
  792. export FC
  793. export BU
  794. export FU
  795. export NEED2UNDERSCORES
  796. export USE_THREAD
  797. export NUM_THREADS
  798. export NUM_CORES
  799. export SMP
  800. export MAKEFILE_RULE
  801. export NEED_PIC
  802. export BINARY
  803. export BINARY32
  804. export BINARY64
  805. export F_COMPILER
  806. export C_COMPILER
  807. export USE_OPENMP
  808. export CROSS
  809. export CROSS_SUFFIX
  810. export NOFORTRAN
  811. export NO_FBLAS
  812. export EXTRALIB
  813. export CEXTRALIB
  814. export FEXTRALIB
  815. export HAVE_SSE
  816. export HAVE_SSE2
  817. export HAVE_SSE3
  818. export HAVE_SSSE3
  819. export HAVE_SSE4_1
  820. export HAVE_SSE4_2
  821. export HAVE_SSE4A
  822. export HAVE_SSE5
  823. export HAVE_AVX
  824. export HAVE_VFP
  825. export HAVE_VFPV3
  826. export HAVE_VFPV4
  827. export HAVE_NEON
  828. export KERNELDIR
  829. export FUNCTION_PROFILE
  830. export TARGET_CORE
  831. export SGEMM_UNROLL_M
  832. export SGEMM_UNROLL_N
  833. export DGEMM_UNROLL_M
  834. export DGEMM_UNROLL_N
  835. export QGEMM_UNROLL_M
  836. export QGEMM_UNROLL_N
  837. export CGEMM_UNROLL_M
  838. export CGEMM_UNROLL_N
  839. export ZGEMM_UNROLL_M
  840. export ZGEMM_UNROLL_N
  841. export XGEMM_UNROLL_M
  842. export XGEMM_UNROLL_N
  843. export CGEMM3M_UNROLL_M
  844. export CGEMM3M_UNROLL_N
  845. export ZGEMM3M_UNROLL_M
  846. export ZGEMM3M_UNROLL_N
  847. export XGEMM3M_UNROLL_M
  848. export XGEMM3M_UNROLL_N
  849. ifdef USE_CUDA
  850. export CUDADIR
  851. export CUCC
  852. export CUFLAGS
  853. export CULIB
  854. endif
  855. .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
  856. .f.$(SUFFIX):
  857. $(FC) $(FFLAGS) -c $< -o $(@F)
  858. .f.$(PSUFFIX):
  859. $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
  860. ifdef BINARY64
  861. PATHSCALEPATH = /opt/pathscale/lib/3.1
  862. PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
  863. else
  864. PATHSCALEPATH = /opt/pathscale/lib/3.1/32
  865. PGIPATH = /opt/pgi/linux86/7.1-5/lib
  866. endif
  867. ACMLPATH = /opt/acml/4.3.0
  868. ifneq ($(OSNAME), Darwin)
  869. MKLPATH = /opt/intel/mkl/10.2.2.025/lib
  870. else
  871. MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
  872. endif
  873. ATLASPATH = /opt/atlas/3.9.17/opteron
  874. FLAMEPATH = $(HOME)/flame/lib
  875. ifneq ($(OSNAME), SunOS)
  876. SUNPATH = /opt/sunstudio12.1
  877. else
  878. SUNPATH = /opt/SUNWspro
  879. endif