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