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