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