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