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

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