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

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