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

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