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