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. ifneq ($(OSNAME), Android)
  242. ifdef SMP
  243. EXTRALIB += -lpthread
  244. endif
  245. endif
  246. endif
  247. endif
  248. endif
  249. # ifeq logical or
  250. ifeq ($(OSNAME), $(filter $(OSNAME),WINNT CYGWIN_NT Interix))
  251. OS_WINDOWS=1
  252. endif
  253. ifdef QUAD_PRECISION
  254. CCOMMON_OPT += -DQUAD_PRECISION
  255. NO_EXPRECISION = 1
  256. endif
  257. ifneq ($(ARCH), x86)
  258. ifneq ($(ARCH), x86_64)
  259. NO_EXPRECISION = 1
  260. endif
  261. endif
  262. ifdef UTEST_CHECK
  263. CCOMMON_OPT += -DUTEST_CHECK
  264. SANITY_CHECK = 1
  265. endif
  266. ifdef SANITY_CHECK
  267. CCOMMON_OPT += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
  268. endif
  269. MAX_STACK_ALLOC ?= 2048
  270. ifneq ($(MAX_STACK_ALLOC), 0)
  271. CCOMMON_OPT += -DMAX_STACK_ALLOC=$(MAX_STACK_ALLOC)
  272. endif
  273. #
  274. # Architecture dependent settings
  275. #
  276. ifeq ($(ARCH), x86)
  277. ifndef BINARY
  278. NO_BINARY_MODE = 1
  279. endif
  280. ifeq ($(CORE), generic)
  281. NO_EXPRECISION = 1
  282. endif
  283. ifndef NO_EXPRECISION
  284. ifeq ($(F_COMPILER), GFORTRAN)
  285. # ifeq logical or. GCC or LSB
  286. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
  287. EXPRECISION = 1
  288. CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
  289. FCOMMON_OPT += -m128bit-long-double
  290. endif
  291. ifeq ($(C_COMPILER), CLANG)
  292. EXPRECISION = 1
  293. CCOMMON_OPT += -DEXPRECISION
  294. FCOMMON_OPT += -m128bit-long-double
  295. endif
  296. endif
  297. endif
  298. endif
  299. ifeq ($(ARCH), x86_64)
  300. ifeq ($(CORE), generic)
  301. NO_EXPRECISION = 1
  302. endif
  303. ifndef NO_EXPRECISION
  304. ifeq ($(F_COMPILER), GFORTRAN)
  305. # ifeq logical or. GCC or LSB
  306. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
  307. EXPRECISION = 1
  308. CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
  309. FCOMMON_OPT += -m128bit-long-double
  310. endif
  311. ifeq ($(C_COMPILER), CLANG)
  312. EXPRECISION = 1
  313. CCOMMON_OPT += -DEXPRECISION
  314. FCOMMON_OPT += -m128bit-long-double
  315. endif
  316. endif
  317. endif
  318. endif
  319. ifeq ($(C_COMPILER), INTEL)
  320. CCOMMON_OPT += -wd981
  321. endif
  322. ifeq ($(USE_OPENMP), 1)
  323. #check
  324. ifeq ($(USE_THREAD), 0)
  325. $(error OpenBLAS: Cannot set both USE_OPENMP=1 and USE_THREAD=0. The USE_THREAD=0 is only for building single thread version.)
  326. endif
  327. # ifeq logical or. GCC or LSB
  328. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
  329. CCOMMON_OPT += -fopenmp
  330. endif
  331. ifeq ($(C_COMPILER), CLANG)
  332. $(error OpenBLAS: Clang didn't support OpenMP yet.)
  333. CCOMMON_OPT += -fopenmp
  334. endif
  335. ifeq ($(C_COMPILER), INTEL)
  336. CCOMMON_OPT += -openmp
  337. endif
  338. ifeq ($(C_COMPILER), PGI)
  339. CCOMMON_OPT += -mp
  340. endif
  341. ifeq ($(C_COMPILER), OPEN64)
  342. CCOMMON_OPT += -mp
  343. CEXTRALIB += -lstdc++
  344. endif
  345. ifeq ($(C_COMPILER), PATHSCALE)
  346. CCOMMON_OPT += -mp
  347. endif
  348. endif
  349. ifeq ($(DYNAMIC_ARCH), 1)
  350. ifeq ($(ARCH), x86)
  351. DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
  352. CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
  353. endif
  354. ifeq ($(ARCH), x86_64)
  355. DYNAMIC_CORE = PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
  356. ifneq ($(NO_AVX), 1)
  357. DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER EXCAVATOR
  358. endif
  359. ifneq ($(NO_AVX2), 1)
  360. DYNAMIC_CORE += HASWELL
  361. endif
  362. endif
  363. ifndef DYNAMIC_CORE
  364. DYNAMIC_ARCH =
  365. endif
  366. endif
  367. ifeq ($(ARCH), ia64)
  368. NO_BINARY_MODE = 1
  369. BINARY_DEFINED = 1
  370. ifeq ($(F_COMPILER), GFORTRAN)
  371. ifeq ($(C_COMPILER), GCC)
  372. # EXPRECISION = 1
  373. # CCOMMON_OPT += -DEXPRECISION
  374. endif
  375. endif
  376. endif
  377. ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
  378. NO_BINARY_MODE = 1
  379. endif
  380. ifeq ($(ARCH), alpha)
  381. NO_BINARY_MODE = 1
  382. BINARY_DEFINED = 1
  383. endif
  384. ifeq ($(ARCH), arm)
  385. NO_BINARY_MODE = 1
  386. BINARY_DEFINED = 1
  387. endif
  388. ifeq ($(ARCH), arm64)
  389. NO_BINARY_MODE = 1
  390. BINARY_DEFINED = 1
  391. endif
  392. #
  393. # C Compiler dependent settings
  394. #
  395. # ifeq logical or. GCC or CLANG or LSB
  396. # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
  397. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
  398. CCOMMON_OPT += -Wall
  399. COMMON_PROF += -fno-inline
  400. NO_UNINITIALIZED_WARN = -Wno-uninitialized
  401. ifeq ($(QUIET_MAKE), 1)
  402. CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
  403. endif
  404. ifdef NO_BINARY_MODE
  405. ifeq ($(ARCH), $(filter $(ARCH),mips64))
  406. ifdef BINARY64
  407. CCOMMON_OPT += -mabi=64
  408. else
  409. CCOMMON_OPT += -mabi=n32
  410. endif
  411. BINARY_DEFINED = 1
  412. else ifeq ($(ARCH), $(filter $(ARCH),mips))
  413. CCOMMON_OPT += -mabi=32
  414. BINARY_DEFINED = 1
  415. endif
  416. ifeq ($(CORE), LOONGSON3A)
  417. CCOMMON_OPT += -march=mips64
  418. FCOMMON_OPT += -march=mips64
  419. endif
  420. ifeq ($(CORE), LOONGSON3B)
  421. CCOMMON_OPT += -march=mips64
  422. FCOMMON_OPT += -march=mips64
  423. endif
  424. ifeq ($(CORE), P5600)
  425. CCOMMON_OPT += -mmsa
  426. FCOMMON_OPT += -mmsa
  427. endif
  428. ifeq ($(CORE), I6400)
  429. CCOMMON_OPT += -mmsa
  430. FCOMMON_OPT += -mmsa
  431. endif
  432. ifeq ($(OSNAME), AIX)
  433. BINARY_DEFINED = 1
  434. endif
  435. endif
  436. ifndef BINARY_DEFINED
  437. ifdef BINARY64
  438. CCOMMON_OPT += -m64
  439. else
  440. CCOMMON_OPT += -m32
  441. endif
  442. endif
  443. endif
  444. ifeq ($(C_COMPILER), PGI)
  445. ifdef BINARY64
  446. CCOMMON_OPT += -tp p7-64
  447. else
  448. CCOMMON_OPT += -tp p7
  449. endif
  450. endif
  451. ifeq ($(C_COMPILER), PATHSCALE)
  452. ifdef BINARY64
  453. CCOMMON_OPT += -m64
  454. else
  455. CCOMMON_OPT += -m32
  456. endif
  457. endif
  458. #
  459. # Fortran Compiler dependent settings
  460. #
  461. ifeq ($(F_COMPILER), G77)
  462. CCOMMON_OPT += -DF_INTERFACE_G77
  463. FCOMMON_OPT += -Wall
  464. ifndef NO_BINARY_MODE
  465. ifdef BINARY64
  466. FCOMMON_OPT += -m64
  467. else
  468. FCOMMON_OPT += -m32
  469. endif
  470. endif
  471. endif
  472. ifeq ($(F_COMPILER), G95)
  473. CCOMMON_OPT += -DF_INTERFACE_G95
  474. FCOMMON_OPT += -Wall
  475. ifndef NO_BINARY_MODE
  476. ifdef BINARY64
  477. FCOMMON_OPT += -m64
  478. else
  479. FCOMMON_OPT += -m32
  480. endif
  481. endif
  482. endif
  483. ifeq ($(F_COMPILER), GFORTRAN)
  484. CCOMMON_OPT += -DF_INTERFACE_GFORT
  485. FCOMMON_OPT += -Wall
  486. #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
  487. ifneq ($(NO_LAPACK), 1)
  488. EXTRALIB += -lgfortran
  489. endif
  490. ifdef NO_BINARY_MODE
  491. ifeq ($(ARCH), $(filter $(ARCH),mips64))
  492. ifdef BINARY64
  493. FCOMMON_OPT += -mabi=64
  494. else
  495. FCOMMON_OPT += -mabi=n32
  496. endif
  497. else ifeq ($(ARCH), $(filter $(ARCH),mips))
  498. FCOMMON_OPT += -mabi=32
  499. endif
  500. else
  501. ifdef BINARY64
  502. FCOMMON_OPT += -m64
  503. ifdef INTERFACE64
  504. ifneq ($(INTERFACE64), 0)
  505. FCOMMON_OPT += -fdefault-integer-8
  506. endif
  507. endif
  508. else
  509. FCOMMON_OPT += -m32
  510. endif
  511. endif
  512. ifeq ($(USE_OPENMP), 1)
  513. FCOMMON_OPT += -fopenmp
  514. endif
  515. endif
  516. ifeq ($(F_COMPILER), INTEL)
  517. CCOMMON_OPT += -DF_INTERFACE_INTEL
  518. ifdef INTERFACE64
  519. ifneq ($(INTERFACE64), 0)
  520. FCOMMON_OPT += -i8
  521. endif
  522. endif
  523. ifeq ($(USE_OPENMP), 1)
  524. FCOMMON_OPT += -openmp
  525. endif
  526. endif
  527. ifeq ($(F_COMPILER), FUJITSU)
  528. CCOMMON_OPT += -DF_INTERFACE_FUJITSU
  529. ifeq ($(USE_OPENMP), 1)
  530. FCOMMON_OPT += -openmp
  531. endif
  532. endif
  533. ifeq ($(F_COMPILER), IBM)
  534. CCOMMON_OPT += -DF_INTERFACE_IBM
  535. # FCOMMON_OPT += -qarch=440
  536. ifdef BINARY64
  537. FCOMMON_OPT += -q64
  538. ifdef INTERFACE64
  539. ifneq ($(INTERFACE64), 0)
  540. FCOMMON_OPT += -qintsize=8
  541. endif
  542. endif
  543. else
  544. FCOMMON_OPT += -q32
  545. endif
  546. ifeq ($(USE_OPENMP), 1)
  547. FCOMMON_OPT += -openmp
  548. endif
  549. endif
  550. ifeq ($(F_COMPILER), PGI)
  551. CCOMMON_OPT += -DF_INTERFACE_PGI
  552. COMMON_PROF += -DPGICOMPILER
  553. ifdef BINARY64
  554. ifdef INTERFACE64
  555. ifneq ($(INTERFACE64), 0)
  556. FCOMMON_OPT += -i8
  557. endif
  558. endif
  559. FCOMMON_OPT += -tp p7-64
  560. else
  561. FCOMMON_OPT += -tp p7
  562. endif
  563. ifeq ($(USE_OPENMP), 1)
  564. FCOMMON_OPT += -mp
  565. endif
  566. endif
  567. ifeq ($(F_COMPILER), PATHSCALE)
  568. CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
  569. ifdef BINARY64
  570. ifdef INTERFACE64
  571. ifneq ($(INTERFACE64), 0)
  572. FCOMMON_OPT += -i8
  573. endif
  574. endif
  575. endif
  576. ifeq ($(USE_OPENMP), 1)
  577. FCOMMON_OPT += -mp
  578. endif
  579. endif
  580. ifeq ($(F_COMPILER), OPEN64)
  581. CCOMMON_OPT += -DF_INTERFACE_OPEN64
  582. ifdef BINARY64
  583. ifdef INTERFACE64
  584. ifneq ($(INTERFACE64), 0)
  585. FCOMMON_OPT += -i8
  586. endif
  587. endif
  588. endif
  589. ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
  590. ifndef BINARY64
  591. FCOMMON_OPT += -n32
  592. else
  593. FCOMMON_OPT += -n64
  594. endif
  595. ifeq ($(CORE), LOONGSON3A)
  596. FCOMMON_OPT += -loongson3 -static
  597. endif
  598. ifeq ($(CORE), LOONGSON3B)
  599. FCOMMON_OPT += -loongson3 -static
  600. endif
  601. else
  602. ifndef BINARY64
  603. FCOMMON_OPT += -m32
  604. else
  605. FCOMMON_OPT += -m64
  606. endif
  607. endif
  608. ifeq ($(USE_OPENMP), 1)
  609. FEXTRALIB += -lstdc++
  610. FCOMMON_OPT += -mp
  611. endif
  612. endif
  613. ifeq ($(C_COMPILER), OPEN64)
  614. ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
  615. ifndef BINARY64
  616. CCOMMON_OPT += -n32
  617. else
  618. CCOMMON_OPT += -n64
  619. endif
  620. ifeq ($(CORE), LOONGSON3A)
  621. CCOMMON_OPT += -loongson3 -static
  622. endif
  623. ifeq ($(CORE), LOONGSON3B)
  624. CCOMMON_OPT += -loongson3 -static
  625. endif
  626. else
  627. ifndef BINARY64
  628. CCOMMON_OPT += -m32
  629. else
  630. CCOMMON_OPT += -m64
  631. endif
  632. endif
  633. endif
  634. ifeq ($(C_COMPILER), SUN)
  635. CCOMMON_OPT += -w
  636. ifeq ($(ARCH), x86)
  637. CCOMMON_OPT += -m32
  638. else
  639. FCOMMON_OPT += -m64
  640. endif
  641. endif
  642. ifeq ($(F_COMPILER), SUN)
  643. CCOMMON_OPT += -DF_INTERFACE_SUN
  644. ifeq ($(ARCH), x86)
  645. FCOMMON_OPT += -m32
  646. else
  647. FCOMMON_OPT += -m64
  648. endif
  649. ifeq ($(USE_OPENMP), 1)
  650. FCOMMON_OPT += -xopenmp=parallel
  651. endif
  652. endif
  653. ifeq ($(F_COMPILER), COMPAQ)
  654. CCOMMON_OPT += -DF_INTERFACE_COMPAQ
  655. ifeq ($(USE_OPENMP), 1)
  656. FCOMMON_OPT += -openmp
  657. endif
  658. endif
  659. ifdef BINARY64
  660. ifdef INTERFACE64
  661. ifneq ($(INTERFACE64), 0)
  662. CCOMMON_OPT +=
  663. #-DUSE64BITINT
  664. endif
  665. endif
  666. endif
  667. ifeq ($(NEED_PIC), 1)
  668. ifeq ($(C_COMPILER), IBM)
  669. CCOMMON_OPT += -qpic=large
  670. else
  671. CCOMMON_OPT += -fPIC
  672. endif
  673. ifeq ($(F_COMPILER), SUN)
  674. FCOMMON_OPT += -pic
  675. else
  676. FCOMMON_OPT += -fPIC
  677. endif
  678. endif
  679. ifeq ($(DYNAMIC_ARCH), 1)
  680. CCOMMON_OPT += -DDYNAMIC_ARCH
  681. endif
  682. ifeq ($(NO_LAPACK), 1)
  683. CCOMMON_OPT += -DNO_LAPACK
  684. #Disable LAPACK C interface
  685. NO_LAPACKE = 1
  686. endif
  687. ifeq ($(NO_LAPACKE), 1)
  688. CCOMMON_OPT += -DNO_LAPACKE
  689. endif
  690. ifeq ($(NO_AVX), 1)
  691. CCOMMON_OPT += -DNO_AVX
  692. endif
  693. ifeq ($(ARCH), x86)
  694. CCOMMON_OPT += -DNO_AVX
  695. endif
  696. ifeq ($(NO_AVX2), 1)
  697. CCOMMON_OPT += -DNO_AVX2
  698. endif
  699. ifdef SMP
  700. CCOMMON_OPT += -DSMP_SERVER
  701. ifeq ($(ARCH), mips64)
  702. ifneq ($(CORE), LOONGSON3B)
  703. USE_SIMPLE_THREADED_LEVEL3 = 1
  704. endif
  705. endif
  706. ifeq ($(USE_OPENMP), 1)
  707. # USE_SIMPLE_THREADED_LEVEL3 = 1
  708. # NO_AFFINITY = 1
  709. CCOMMON_OPT += -DUSE_OPENMP
  710. endif
  711. ifeq ($(BIGNUMA), 1)
  712. CCOMMON_OPT += -DBIGNUMA
  713. endif
  714. endif
  715. ifeq ($(NO_WARMUP), 1)
  716. CCOMMON_OPT += -DNO_WARMUP
  717. endif
  718. ifeq ($(CONSISTENT_FPCSR), 1)
  719. CCOMMON_OPT += -DCONSISTENT_FPCSR
  720. endif
  721. # Only for development
  722. # CCOMMON_OPT += -DPARAMTEST
  723. # CCOMMON_OPT += -DPREFETCHTEST
  724. # CCOMMON_OPT += -DNO_SWITCHING
  725. # USE_PAPI = 1
  726. ifdef USE_PAPI
  727. CCOMMON_OPT += -DUSE_PAPI
  728. EXTRALIB += -lpapi -lperfctr
  729. endif
  730. ifdef DYNAMIC_THREADS
  731. CCOMMON_OPT += -DDYNAMIC_THREADS
  732. endif
  733. CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
  734. ifdef USE_SIMPLE_THREADED_LEVEL3
  735. CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
  736. endif
  737. ifndef SYMBOLPREFIX
  738. SYMBOLPREFIX =
  739. endif
  740. ifndef SYMBOLSUFFIX
  741. SYMBOLSUFFIX =
  742. endif
  743. ifndef LIBNAMESUFFIX
  744. LIBPREFIX = lib$(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)
  745. else
  746. LIBPREFIX = lib$(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX)
  747. endif
  748. KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
  749. include $(TOPDIR)/Makefile.$(ARCH)
  750. CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
  751. ifeq ($(CORE), PPC440)
  752. CCOMMON_OPT += -DALLOC_QALLOC
  753. endif
  754. ifeq ($(CORE), PPC440FP2)
  755. STATIC_ALLOCATION = 1
  756. endif
  757. ifneq ($(OSNAME), Linux)
  758. NO_AFFINITY = 1
  759. endif
  760. ifneq ($(ARCH), x86_64)
  761. ifneq ($(ARCH), x86)
  762. ifneq ($(CORE), LOONGSON3B)
  763. NO_AFFINITY = 1
  764. endif
  765. endif
  766. endif
  767. ifdef NO_AFFINITY
  768. CCOMMON_OPT += -DNO_AFFINITY
  769. endif
  770. ifdef FUNCTION_PROFILE
  771. CCOMMON_OPT += -DFUNCTION_PROFILE
  772. endif
  773. ifdef HUGETLB_ALLOCATION
  774. CCOMMON_OPT += -DALLOC_HUGETLB
  775. endif
  776. ifdef HUGETLBFILE_ALLOCATION
  777. CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
  778. endif
  779. ifdef STATIC_ALLOCATION
  780. CCOMMON_OPT += -DALLOC_STATIC
  781. endif
  782. ifdef DEVICEDRIVER_ALLOCATION
  783. CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
  784. endif
  785. ifdef MIXED_MEMORY_ALLOCATION
  786. CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
  787. endif
  788. ifeq ($(OSNAME), SunOS)
  789. TAR = gtar
  790. PATCH = gpatch
  791. GREP = ggrep
  792. AWK = nawk
  793. else
  794. TAR = tar
  795. PATCH = patch
  796. GREP = grep
  797. AWK = awk
  798. endif
  799. ifndef MD5SUM
  800. MD5SUM = md5sum
  801. endif
  802. REVISION = -r$(VERSION)
  803. MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
  804. ifeq ($(DEBUG), 1)
  805. COMMON_OPT += -g
  806. endif
  807. ifeq ($(DEBUG), 1)
  808. FCOMMON_OPT += -g
  809. endif
  810. ifndef COMMON_OPT
  811. COMMON_OPT = -O2
  812. endif
  813. ifndef FCOMMON_OPT
  814. FCOMMON_OPT = -O2 -frecursive
  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