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
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199
  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 mips))
  406. ifdef BINARY64
  407. CCOMMON_OPT += -mabi=64
  408. else
  409. CCOMMON_OPT += -mabi=32
  410. endif
  411. BINARY_DEFINED = 1
  412. endif
  413. ifeq ($(CORE), LOONGSON3A)
  414. CCOMMON_OPT += -march=mips64
  415. FCOMMON_OPT += -march=mips64
  416. endif
  417. ifeq ($(CORE), LOONGSON3B)
  418. CCOMMON_OPT += -march=mips64
  419. FCOMMON_OPT += -march=mips64
  420. endif
  421. ifeq ($(CORE), P5600)
  422. CCOMMON_OPT += -mmsa
  423. FCOMMON_OPT += -mmsa
  424. endif
  425. ifeq ($(CORE), I6400)
  426. CCOMMON_OPT += -mmsa
  427. FCOMMON_OPT += -mmsa
  428. endif
  429. ifeq ($(OSNAME), AIX)
  430. BINARY_DEFINED = 1
  431. endif
  432. endif
  433. ifndef BINARY_DEFINED
  434. ifdef BINARY64
  435. CCOMMON_OPT += -m64
  436. else
  437. CCOMMON_OPT += -m32
  438. endif
  439. endif
  440. endif
  441. ifeq ($(C_COMPILER), PGI)
  442. ifdef BINARY64
  443. CCOMMON_OPT += -tp p7-64
  444. else
  445. CCOMMON_OPT += -tp p7
  446. endif
  447. endif
  448. ifeq ($(C_COMPILER), PATHSCALE)
  449. ifdef BINARY64
  450. CCOMMON_OPT += -m64
  451. else
  452. CCOMMON_OPT += -m32
  453. endif
  454. endif
  455. #
  456. # Fortran Compiler dependent settings
  457. #
  458. ifeq ($(F_COMPILER), G77)
  459. CCOMMON_OPT += -DF_INTERFACE_G77
  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), G95)
  470. CCOMMON_OPT += -DF_INTERFACE_G95
  471. FCOMMON_OPT += -Wall
  472. ifndef NO_BINARY_MODE
  473. ifdef BINARY64
  474. FCOMMON_OPT += -m64
  475. else
  476. FCOMMON_OPT += -m32
  477. endif
  478. endif
  479. endif
  480. ifeq ($(F_COMPILER), GFORTRAN)
  481. CCOMMON_OPT += -DF_INTERFACE_GFORT
  482. FCOMMON_OPT += -Wall
  483. #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
  484. ifneq ($(NO_LAPACK), 1)
  485. EXTRALIB += -lgfortran
  486. endif
  487. ifdef NO_BINARY_MODE
  488. ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
  489. ifdef BINARY64
  490. FCOMMON_OPT += -mabi=64
  491. else
  492. FCOMMON_OPT += -mabi=32
  493. endif
  494. endif
  495. else
  496. ifdef BINARY64
  497. FCOMMON_OPT += -m64
  498. ifdef INTERFACE64
  499. ifneq ($(INTERFACE64), 0)
  500. FCOMMON_OPT += -fdefault-integer-8
  501. endif
  502. endif
  503. else
  504. FCOMMON_OPT += -m32
  505. endif
  506. endif
  507. ifeq ($(USE_OPENMP), 1)
  508. FCOMMON_OPT += -fopenmp
  509. endif
  510. endif
  511. ifeq ($(F_COMPILER), INTEL)
  512. CCOMMON_OPT += -DF_INTERFACE_INTEL
  513. ifdef INTERFACE64
  514. ifneq ($(INTERFACE64), 0)
  515. FCOMMON_OPT += -i8
  516. endif
  517. endif
  518. ifeq ($(USE_OPENMP), 1)
  519. FCOMMON_OPT += -openmp
  520. endif
  521. endif
  522. ifeq ($(F_COMPILER), FUJITSU)
  523. CCOMMON_OPT += -DF_INTERFACE_FUJITSU
  524. ifeq ($(USE_OPENMP), 1)
  525. FCOMMON_OPT += -openmp
  526. endif
  527. endif
  528. ifeq ($(F_COMPILER), IBM)
  529. CCOMMON_OPT += -DF_INTERFACE_IBM
  530. # FCOMMON_OPT += -qarch=440
  531. ifdef BINARY64
  532. FCOMMON_OPT += -q64
  533. ifdef INTERFACE64
  534. ifneq ($(INTERFACE64), 0)
  535. FCOMMON_OPT += -qintsize=8
  536. endif
  537. endif
  538. else
  539. FCOMMON_OPT += -q32
  540. endif
  541. ifeq ($(USE_OPENMP), 1)
  542. FCOMMON_OPT += -openmp
  543. endif
  544. endif
  545. ifeq ($(F_COMPILER), PGI)
  546. CCOMMON_OPT += -DF_INTERFACE_PGI
  547. COMMON_PROF += -DPGICOMPILER
  548. ifdef BINARY64
  549. ifdef INTERFACE64
  550. ifneq ($(INTERFACE64), 0)
  551. FCOMMON_OPT += -i8
  552. endif
  553. endif
  554. FCOMMON_OPT += -tp p7-64
  555. else
  556. FCOMMON_OPT += -tp p7
  557. endif
  558. ifeq ($(USE_OPENMP), 1)
  559. FCOMMON_OPT += -mp
  560. endif
  561. endif
  562. ifeq ($(F_COMPILER), PATHSCALE)
  563. CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
  564. ifdef BINARY64
  565. ifdef INTERFACE64
  566. ifneq ($(INTERFACE64), 0)
  567. FCOMMON_OPT += -i8
  568. endif
  569. endif
  570. endif
  571. ifeq ($(filter $(ARCH),mips64 mips))
  572. ifndef BINARY64
  573. FCOMMON_OPT += -m32
  574. else
  575. FCOMMON_OPT += -m64
  576. endif
  577. else
  578. ifdef BINARY64
  579. FCOMMON_OPT += -mabi=64
  580. else
  581. FCOMMON_OPT += -mabi=32
  582. endif
  583. endif
  584. ifeq ($(USE_OPENMP), 1)
  585. FCOMMON_OPT += -mp
  586. endif
  587. endif
  588. ifeq ($(F_COMPILER), OPEN64)
  589. CCOMMON_OPT += -DF_INTERFACE_OPEN64
  590. ifdef BINARY64
  591. ifdef INTERFACE64
  592. ifneq ($(INTERFACE64), 0)
  593. FCOMMON_OPT += -i8
  594. endif
  595. endif
  596. endif
  597. ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
  598. ifndef BINARY64
  599. FCOMMON_OPT += -n32
  600. else
  601. FCOMMON_OPT += -n64
  602. endif
  603. ifeq ($(CORE), LOONGSON3A)
  604. FCOMMON_OPT += -loongson3 -static
  605. endif
  606. ifeq ($(CORE), LOONGSON3B)
  607. FCOMMON_OPT += -loongson3 -static
  608. endif
  609. else
  610. ifndef BINARY64
  611. FCOMMON_OPT += -m32
  612. else
  613. FCOMMON_OPT += -m64
  614. endif
  615. endif
  616. ifeq ($(USE_OPENMP), 1)
  617. FEXTRALIB += -lstdc++
  618. FCOMMON_OPT += -mp
  619. endif
  620. endif
  621. ifeq ($(C_COMPILER), OPEN64)
  622. ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
  623. ifndef BINARY64
  624. CCOMMON_OPT += -n32
  625. else
  626. CCOMMON_OPT += -n64
  627. endif
  628. ifeq ($(CORE), LOONGSON3A)
  629. CCOMMON_OPT += -loongson3 -static
  630. endif
  631. ifeq ($(CORE), LOONGSON3B)
  632. CCOMMON_OPT += -loongson3 -static
  633. endif
  634. else
  635. ifndef BINARY64
  636. CCOMMON_OPT += -m32
  637. else
  638. CCOMMON_OPT += -m64
  639. endif
  640. endif
  641. endif
  642. ifeq ($(C_COMPILER), SUN)
  643. CCOMMON_OPT += -w
  644. ifeq ($(ARCH), x86)
  645. CCOMMON_OPT += -m32
  646. else
  647. FCOMMON_OPT += -m64
  648. endif
  649. endif
  650. ifeq ($(F_COMPILER), SUN)
  651. CCOMMON_OPT += -DF_INTERFACE_SUN
  652. ifeq ($(ARCH), x86)
  653. FCOMMON_OPT += -m32
  654. else
  655. FCOMMON_OPT += -m64
  656. endif
  657. ifeq ($(USE_OPENMP), 1)
  658. FCOMMON_OPT += -xopenmp=parallel
  659. endif
  660. endif
  661. ifeq ($(F_COMPILER), COMPAQ)
  662. CCOMMON_OPT += -DF_INTERFACE_COMPAQ
  663. ifeq ($(USE_OPENMP), 1)
  664. FCOMMON_OPT += -openmp
  665. endif
  666. endif
  667. ifdef BINARY64
  668. ifdef INTERFACE64
  669. ifneq ($(INTERFACE64), 0)
  670. CCOMMON_OPT +=
  671. #-DUSE64BITINT
  672. endif
  673. endif
  674. endif
  675. ifeq ($(NEED_PIC), 1)
  676. ifeq ($(C_COMPILER), IBM)
  677. CCOMMON_OPT += -qpic=large
  678. else
  679. CCOMMON_OPT += -fPIC
  680. endif
  681. ifeq ($(F_COMPILER), SUN)
  682. FCOMMON_OPT += -pic
  683. else
  684. FCOMMON_OPT += -fPIC
  685. endif
  686. endif
  687. ifeq ($(DYNAMIC_ARCH), 1)
  688. CCOMMON_OPT += -DDYNAMIC_ARCH
  689. endif
  690. ifeq ($(NO_LAPACK), 1)
  691. CCOMMON_OPT += -DNO_LAPACK
  692. #Disable LAPACK C interface
  693. NO_LAPACKE = 1
  694. endif
  695. ifeq ($(NO_LAPACKE), 1)
  696. CCOMMON_OPT += -DNO_LAPACKE
  697. endif
  698. ifeq ($(NO_AVX), 1)
  699. CCOMMON_OPT += -DNO_AVX
  700. endif
  701. ifeq ($(ARCH), x86)
  702. CCOMMON_OPT += -DNO_AVX
  703. endif
  704. ifeq ($(NO_AVX2), 1)
  705. CCOMMON_OPT += -DNO_AVX2
  706. endif
  707. ifdef SMP
  708. CCOMMON_OPT += -DSMP_SERVER
  709. ifeq ($(ARCH), mips64)
  710. ifneq ($(CORE), LOONGSON3B)
  711. USE_SIMPLE_THREADED_LEVEL3 = 1
  712. endif
  713. endif
  714. ifeq ($(USE_OPENMP), 1)
  715. # USE_SIMPLE_THREADED_LEVEL3 = 1
  716. # NO_AFFINITY = 1
  717. CCOMMON_OPT += -DUSE_OPENMP
  718. endif
  719. ifeq ($(BIGNUMA), 1)
  720. CCOMMON_OPT += -DBIGNUMA
  721. endif
  722. endif
  723. ifeq ($(NO_WARMUP), 1)
  724. CCOMMON_OPT += -DNO_WARMUP
  725. endif
  726. ifeq ($(CONSISTENT_FPCSR), 1)
  727. CCOMMON_OPT += -DCONSISTENT_FPCSR
  728. endif
  729. # Only for development
  730. # CCOMMON_OPT += -DPARAMTEST
  731. # CCOMMON_OPT += -DPREFETCHTEST
  732. # CCOMMON_OPT += -DNO_SWITCHING
  733. # USE_PAPI = 1
  734. ifdef USE_PAPI
  735. CCOMMON_OPT += -DUSE_PAPI
  736. EXTRALIB += -lpapi -lperfctr
  737. endif
  738. ifdef DYNAMIC_THREADS
  739. CCOMMON_OPT += -DDYNAMIC_THREADS
  740. endif
  741. CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
  742. ifdef USE_SIMPLE_THREADED_LEVEL3
  743. CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
  744. endif
  745. ifndef SYMBOLPREFIX
  746. SYMBOLPREFIX =
  747. endif
  748. ifndef SYMBOLSUFFIX
  749. SYMBOLSUFFIX =
  750. endif
  751. ifndef LIBNAMESUFFIX
  752. LIBPREFIX = lib$(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)
  753. else
  754. LIBPREFIX = lib$(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX)
  755. endif
  756. KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
  757. include $(TOPDIR)/Makefile.$(ARCH)
  758. CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
  759. ifeq ($(CORE), PPC440)
  760. CCOMMON_OPT += -DALLOC_QALLOC
  761. endif
  762. ifeq ($(CORE), PPC440FP2)
  763. STATIC_ALLOCATION = 1
  764. endif
  765. ifneq ($(OSNAME), Linux)
  766. NO_AFFINITY = 1
  767. endif
  768. ifneq ($(ARCH), x86_64)
  769. ifneq ($(ARCH), x86)
  770. ifneq ($(CORE), LOONGSON3B)
  771. NO_AFFINITY = 1
  772. endif
  773. endif
  774. endif
  775. ifdef NO_AFFINITY
  776. CCOMMON_OPT += -DNO_AFFINITY
  777. endif
  778. ifdef FUNCTION_PROFILE
  779. CCOMMON_OPT += -DFUNCTION_PROFILE
  780. endif
  781. ifdef HUGETLB_ALLOCATION
  782. CCOMMON_OPT += -DALLOC_HUGETLB
  783. endif
  784. ifdef HUGETLBFILE_ALLOCATION
  785. CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
  786. endif
  787. ifdef STATIC_ALLOCATION
  788. CCOMMON_OPT += -DALLOC_STATIC
  789. endif
  790. ifdef DEVICEDRIVER_ALLOCATION
  791. CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
  792. endif
  793. ifdef MIXED_MEMORY_ALLOCATION
  794. CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
  795. endif
  796. ifeq ($(OSNAME), SunOS)
  797. TAR = gtar
  798. PATCH = gpatch
  799. GREP = ggrep
  800. AWK = nawk
  801. else
  802. TAR = tar
  803. PATCH = patch
  804. GREP = grep
  805. AWK = awk
  806. endif
  807. ifndef MD5SUM
  808. MD5SUM = md5sum
  809. endif
  810. REVISION = -r$(VERSION)
  811. MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
  812. ifeq ($(DEBUG), 1)
  813. COMMON_OPT += -g
  814. endif
  815. ifeq ($(DEBUG), 1)
  816. FCOMMON_OPT += -g
  817. endif
  818. ifndef COMMON_OPT
  819. COMMON_OPT = -O2
  820. endif
  821. ifndef FCOMMON_OPT
  822. FCOMMON_OPT = -O2 -frecursive
  823. endif
  824. override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
  825. override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
  826. override FFLAGS += $(FCOMMON_OPT)
  827. override FPFLAGS += $(FCOMMON_OPT) $(COMMON_PROF)
  828. #MAKEOVERRIDES =
  829. #For LAPACK Fortran codes.
  830. #Disable -fopenmp for LAPACK Fortran codes on Windows.
  831. ifdef OS_WINDOWS
  832. LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
  833. LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
  834. else
  835. LAPACK_FFLAGS := $(FFLAGS)
  836. LAPACK_FPFLAGS := $(FPFLAGS)
  837. endif
  838. LAPACK_CFLAGS = $(CFLAGS)
  839. LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
  840. ifdef INTERFACE64
  841. ifneq ($(INTERFACE64), 0)
  842. LAPACK_CFLAGS += -DLAPACK_ILP64
  843. endif
  844. endif
  845. ifdef OS_WINDOWS
  846. LAPACK_CFLAGS += -DOPENBLAS_OS_WINDOWS
  847. endif
  848. ifeq ($(C_COMPILER), LSB)
  849. LAPACK_CFLAGS += -DLAPACK_COMPLEX_STRUCTURE
  850. endif
  851. ifndef SUFFIX
  852. SUFFIX = o
  853. endif
  854. ifndef PSUFFIX
  855. PSUFFIX = po
  856. endif
  857. ifndef LIBSUFFIX
  858. LIBSUFFIX = a
  859. endif
  860. ifneq ($(DYNAMIC_ARCH), 1)
  861. ifndef SMP
  862. LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
  863. LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
  864. else
  865. LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
  866. LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
  867. endif
  868. else
  869. ifndef SMP
  870. LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
  871. LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
  872. else
  873. LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
  874. LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
  875. endif
  876. endif
  877. LIBDLLNAME = $(LIBPREFIX).dll
  878. LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
  879. LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
  880. LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
  881. LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
  882. LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
  883. LIBS = $(TOPDIR)/$(LIBNAME)
  884. LIBS_P = $(TOPDIR)/$(LIBNAME_P)
  885. LIB_COMPONENTS = BLAS
  886. ifneq ($(NO_CBLAS), 1)
  887. LIB_COMPONENTS += CBLAS
  888. endif
  889. ifneq ($(NO_LAPACK), 1)
  890. LIB_COMPONENTS += LAPACK
  891. ifneq ($(NO_LAPACKE), 1)
  892. LIB_COMPONENTS += LAPACKE
  893. endif
  894. endif
  895. ifeq ($(ONLY_CBLAS), 1)
  896. LIB_COMPONENTS = CBLAS
  897. endif
  898. export OSNAME
  899. export ARCH
  900. export CORE
  901. export LIBCORE
  902. export PGCPATH
  903. export CONFIG
  904. export CC
  905. export FC
  906. export BU
  907. export FU
  908. export NEED2UNDERSCORES
  909. export USE_THREAD
  910. export NUM_THREADS
  911. export NUM_CORES
  912. export SMP
  913. export MAKEFILE_RULE
  914. export NEED_PIC
  915. export BINARY
  916. export BINARY32
  917. export BINARY64
  918. export F_COMPILER
  919. export C_COMPILER
  920. export USE_OPENMP
  921. export CROSS
  922. export CROSS_SUFFIX
  923. export NOFORTRAN
  924. export NO_FBLAS
  925. export EXTRALIB
  926. export CEXTRALIB
  927. export FEXTRALIB
  928. export HAVE_SSE
  929. export HAVE_SSE2
  930. export HAVE_SSE3
  931. export HAVE_SSSE3
  932. export HAVE_SSE4_1
  933. export HAVE_SSE4_2
  934. export HAVE_SSE4A
  935. export HAVE_SSE5
  936. export HAVE_AVX
  937. export HAVE_VFP
  938. export HAVE_VFPV3
  939. export HAVE_VFPV4
  940. export HAVE_NEON
  941. export KERNELDIR
  942. export FUNCTION_PROFILE
  943. export TARGET_CORE
  944. export SGEMM_UNROLL_M
  945. export SGEMM_UNROLL_N
  946. export DGEMM_UNROLL_M
  947. export DGEMM_UNROLL_N
  948. export QGEMM_UNROLL_M
  949. export QGEMM_UNROLL_N
  950. export CGEMM_UNROLL_M
  951. export CGEMM_UNROLL_N
  952. export ZGEMM_UNROLL_M
  953. export ZGEMM_UNROLL_N
  954. export XGEMM_UNROLL_M
  955. export XGEMM_UNROLL_N
  956. export CGEMM3M_UNROLL_M
  957. export CGEMM3M_UNROLL_N
  958. export ZGEMM3M_UNROLL_M
  959. export ZGEMM3M_UNROLL_N
  960. export XGEMM3M_UNROLL_M
  961. export XGEMM3M_UNROLL_N
  962. ifdef USE_CUDA
  963. export CUDADIR
  964. export CUCC
  965. export CUFLAGS
  966. export CULIB
  967. endif
  968. .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
  969. .f.$(SUFFIX):
  970. $(FC) $(FFLAGS) -c $< -o $(@F)
  971. .f.$(PSUFFIX):
  972. $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
  973. ifdef BINARY64
  974. PATHSCALEPATH = /opt/pathscale/lib/3.1
  975. PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
  976. else
  977. PATHSCALEPATH = /opt/pathscale/lib/3.1/32
  978. PGIPATH = /opt/pgi/linux86/7.1-5/lib
  979. endif
  980. ACMLPATH = /opt/acml/4.3.0
  981. ifneq ($(OSNAME), Darwin)
  982. MKLPATH = /opt/intel/mkl/10.2.2.025/lib
  983. else
  984. MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
  985. endif
  986. ATLASPATH = /opt/atlas/3.9.17/opteron
  987. FLAMEPATH = $(HOME)/flame/lib
  988. ifneq ($(OSNAME), SunOS)
  989. SUNPATH = /opt/sunstudio12.1
  990. else
  991. SUNPATH = /opt/SUNWspro
  992. endif