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

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