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