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
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417
  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. endif
  642. endif
  643. ifeq ($(F_COMPILER), GFORTRAN)
  644. CCOMMON_OPT += -DF_INTERFACE_GFORT
  645. FCOMMON_OPT += -Wall
  646. # make single-threaded LAPACK calls thread-safe #1847
  647. FCOMMON_OPT += -frecursive
  648. # work around ABI problem with passing single-character arguments
  649. FCOMMON_OPT += -fno-optimize-sibling-calls
  650. #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
  651. ifneq ($(NO_LAPACK), 1)
  652. EXTRALIB += -lgfortran
  653. endif
  654. ifdef NO_BINARY_MODE
  655. ifeq ($(ARCH), $(filter $(ARCH),mips64))
  656. ifdef BINARY64
  657. FCOMMON_OPT += -mabi=64
  658. else
  659. FCOMMON_OPT += -mabi=n32
  660. endif
  661. else ifeq ($(ARCH), $(filter $(ARCH),mips))
  662. FCOMMON_OPT += -mabi=32
  663. endif
  664. else
  665. ifdef BINARY64
  666. ifneq ($(OSNAME), AIX)
  667. FCOMMON_OPT += -m64
  668. endif
  669. ifdef INTERFACE64
  670. ifneq ($(INTERFACE64), 0)
  671. FCOMMON_OPT += -fdefault-integer-8
  672. endif
  673. endif
  674. else
  675. ifneq ($(OSNAME), AIX)
  676. FCOMMON_OPT += -m32
  677. endif
  678. endif
  679. endif
  680. ifeq ($(USE_OPENMP), 1)
  681. FCOMMON_OPT += -fopenmp
  682. endif
  683. endif
  684. ifeq ($(F_COMPILER), INTEL)
  685. CCOMMON_OPT += -DF_INTERFACE_INTEL
  686. ifdef INTERFACE64
  687. ifneq ($(INTERFACE64), 0)
  688. FCOMMON_OPT += -i8
  689. endif
  690. endif
  691. ifeq ($(USE_OPENMP), 1)
  692. FCOMMON_OPT += -fopenmp
  693. endif
  694. endif
  695. ifeq ($(F_COMPILER), FUJITSU)
  696. CCOMMON_OPT += -DF_INTERFACE_FUJITSU
  697. ifeq ($(USE_OPENMP), 1)
  698. FCOMMON_OPT += -openmp
  699. endif
  700. endif
  701. ifeq ($(F_COMPILER), IBM)
  702. CCOMMON_OPT += -DF_INTERFACE_IBM
  703. # FCOMMON_OPT += -qarch=440
  704. ifdef BINARY64
  705. FCOMMON_OPT += -q64
  706. ifdef INTERFACE64
  707. ifneq ($(INTERFACE64), 0)
  708. FCOMMON_OPT += -qintsize=8
  709. endif
  710. endif
  711. else
  712. FCOMMON_OPT += -q32
  713. endif
  714. ifeq ($(USE_OPENMP), 1)
  715. FCOMMON_OPT += -openmp
  716. endif
  717. endif
  718. ifeq ($(F_COMPILER), PGI)
  719. CCOMMON_OPT += -DF_INTERFACE_PGI
  720. COMMON_PROF += -DPGICOMPILER
  721. ifdef BINARY64
  722. ifdef INTERFACE64
  723. ifneq ($(INTERFACE64), 0)
  724. FCOMMON_OPT += -i8
  725. endif
  726. endif
  727. FCOMMON_OPT += -tp p7-64
  728. else
  729. FCOMMON_OPT += -tp p7
  730. endif
  731. ifeq ($(USE_OPENMP), 1)
  732. FCOMMON_OPT += -mp
  733. endif
  734. endif
  735. ifeq ($(F_COMPILER), PATHSCALE)
  736. CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
  737. ifdef BINARY64
  738. ifdef INTERFACE64
  739. ifneq ($(INTERFACE64), 0)
  740. FCOMMON_OPT += -i8
  741. endif
  742. endif
  743. endif
  744. ifeq ($(USE_OPENMP), 1)
  745. FCOMMON_OPT += -mp
  746. endif
  747. endif
  748. ifeq ($(F_COMPILER), OPEN64)
  749. CCOMMON_OPT += -DF_INTERFACE_OPEN64
  750. ifdef BINARY64
  751. ifdef INTERFACE64
  752. ifneq ($(INTERFACE64), 0)
  753. FCOMMON_OPT += -i8
  754. endif
  755. endif
  756. endif
  757. ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
  758. ifndef BINARY64
  759. FCOMMON_OPT += -n32
  760. else
  761. FCOMMON_OPT += -n64
  762. endif
  763. ifeq ($(CORE), LOONGSON3A)
  764. FCOMMON_OPT += -loongson3 -static
  765. endif
  766. ifeq ($(CORE), LOONGSON3B)
  767. FCOMMON_OPT += -loongson3 -static
  768. endif
  769. else
  770. ifndef BINARY64
  771. FCOMMON_OPT += -m32
  772. else
  773. FCOMMON_OPT += -m64
  774. endif
  775. endif
  776. ifeq ($(USE_OPENMP), 1)
  777. FEXTRALIB += -lstdc++
  778. FCOMMON_OPT += -mp
  779. endif
  780. endif
  781. ifeq ($(C_COMPILER), OPEN64)
  782. ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
  783. ifndef BINARY64
  784. CCOMMON_OPT += -n32
  785. else
  786. CCOMMON_OPT += -n64
  787. endif
  788. ifeq ($(CORE), LOONGSON3A)
  789. CCOMMON_OPT += -loongson3 -static
  790. endif
  791. ifeq ($(CORE), LOONGSON3B)
  792. CCOMMON_OPT += -loongson3 -static
  793. endif
  794. else
  795. ifndef BINARY64
  796. CCOMMON_OPT += -m32
  797. else
  798. CCOMMON_OPT += -m64
  799. endif
  800. endif
  801. endif
  802. ifeq ($(C_COMPILER), SUN)
  803. CCOMMON_OPT += -w
  804. ifeq ($(ARCH), x86)
  805. CCOMMON_OPT += -m32
  806. else
  807. FCOMMON_OPT += -m64
  808. endif
  809. endif
  810. ifeq ($(F_COMPILER), SUN)
  811. CCOMMON_OPT += -DF_INTERFACE_SUN
  812. ifeq ($(ARCH), x86)
  813. FCOMMON_OPT += -m32
  814. else
  815. FCOMMON_OPT += -m64
  816. endif
  817. ifeq ($(USE_OPENMP), 1)
  818. FCOMMON_OPT += -xopenmp=parallel
  819. endif
  820. endif
  821. ifeq ($(F_COMPILER), COMPAQ)
  822. CCOMMON_OPT += -DF_INTERFACE_COMPAQ
  823. ifeq ($(USE_OPENMP), 1)
  824. FCOMMON_OPT += -openmp
  825. endif
  826. endif
  827. ifdef BINARY64
  828. ifdef INTERFACE64
  829. ifneq ($(INTERFACE64), 0)
  830. CCOMMON_OPT +=
  831. #-DUSE64BITINT
  832. endif
  833. endif
  834. endif
  835. ifeq ($(NEED_PIC), 1)
  836. ifeq ($(C_COMPILER), IBM)
  837. CCOMMON_OPT += -qpic=large
  838. else
  839. CCOMMON_OPT += -fPIC
  840. endif
  841. ifeq ($(F_COMPILER), SUN)
  842. FCOMMON_OPT += -pic
  843. else
  844. FCOMMON_OPT += -fPIC
  845. endif
  846. endif
  847. ifeq ($(DYNAMIC_ARCH), 1)
  848. CCOMMON_OPT += -DDYNAMIC_ARCH
  849. endif
  850. ifeq ($(DYNAMIC_OLDER), 1)
  851. CCOMMON_OPT += -DDYNAMIC_OLDER
  852. endif
  853. ifeq ($(NO_LAPACK), 1)
  854. CCOMMON_OPT += -DNO_LAPACK
  855. #Disable LAPACK C interface
  856. NO_LAPACKE = 1
  857. endif
  858. ifeq ($(NO_LAPACKE), 1)
  859. CCOMMON_OPT += -DNO_LAPACKE
  860. endif
  861. ifeq ($(NO_AVX), 1)
  862. CCOMMON_OPT += -DNO_AVX
  863. endif
  864. ifeq ($(ARCH), x86)
  865. CCOMMON_OPT += -DNO_AVX
  866. endif
  867. ifeq ($(NO_AVX2), 1)
  868. CCOMMON_OPT += -DNO_AVX2
  869. endif
  870. ifeq ($(NO_AVX512), 1)
  871. CCOMMON_OPT += -DNO_AVX512
  872. endif
  873. ifdef SMP
  874. CCOMMON_OPT += -DSMP_SERVER
  875. ifeq ($(ARCH), mips64)
  876. ifneq ($(CORE), LOONGSON3B)
  877. USE_SIMPLE_THREADED_LEVEL3 = 1
  878. endif
  879. endif
  880. ifeq ($(USE_OPENMP), 1)
  881. # USE_SIMPLE_THREADED_LEVEL3 = 1
  882. # NO_AFFINITY = 1
  883. CCOMMON_OPT += -DUSE_OPENMP
  884. endif
  885. ifeq ($(BIGNUMA), 1)
  886. CCOMMON_OPT += -DBIGNUMA
  887. endif
  888. endif
  889. ifeq ($(NO_WARMUP), 1)
  890. CCOMMON_OPT += -DNO_WARMUP
  891. endif
  892. ifeq ($(CONSISTENT_FPCSR), 1)
  893. CCOMMON_OPT += -DCONSISTENT_FPCSR
  894. endif
  895. # Only for development
  896. # CCOMMON_OPT += -DPARAMTEST
  897. # CCOMMON_OPT += -DPREFETCHTEST
  898. # CCOMMON_OPT += -DNO_SWITCHING
  899. # USE_PAPI = 1
  900. ifdef USE_PAPI
  901. CCOMMON_OPT += -DUSE_PAPI
  902. EXTRALIB += -lpapi -lperfctr
  903. endif
  904. ifdef DYNAMIC_THREADS
  905. CCOMMON_OPT += -DDYNAMIC_THREADS
  906. endif
  907. CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
  908. CCOMMON_OPT += -DMAX_PARALLEL_NUMBER=$(NUM_PARALLEL)
  909. ifdef USE_SIMPLE_THREADED_LEVEL3
  910. CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
  911. endif
  912. ifeq ($(USE_TLS), 1)
  913. CCOMMON_OPT += -DUSE_TLS
  914. endif
  915. CCOMMON_OPT += -DVERSION=\"$(VERSION)\"
  916. ifndef SYMBOLPREFIX
  917. SYMBOLPREFIX =
  918. endif
  919. ifndef SYMBOLSUFFIX
  920. SYMBOLSUFFIX =
  921. endif
  922. ifndef LIBNAMESUFFIX
  923. LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)
  924. else
  925. LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX)
  926. endif
  927. ifeq ($(OSNAME), CYGWIN_NT)
  928. LIBPREFIX = cyg$(LIBNAMEBASE)
  929. else
  930. LIBPREFIX = lib$(LIBNAMEBASE)
  931. endif
  932. KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
  933. include $(TOPDIR)/Makefile.$(ARCH)
  934. CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
  935. ifeq ($(CORE), PPC440)
  936. CCOMMON_OPT += -DALLOC_QALLOC
  937. endif
  938. ifeq ($(CORE), PPC440FP2)
  939. STATIC_ALLOCATION = 1
  940. endif
  941. ifneq ($(OSNAME), Linux)
  942. NO_AFFINITY = 1
  943. endif
  944. ifneq ($(ARCH), x86_64)
  945. ifneq ($(ARCH), x86)
  946. ifneq ($(CORE), LOONGSON3B)
  947. NO_AFFINITY = 1
  948. endif
  949. endif
  950. endif
  951. ifdef NO_AFFINITY
  952. ifeq ($(NO_AFFINITY), 0)
  953. override undefine NO_AFFINITY
  954. else
  955. CCOMMON_OPT += -DNO_AFFINITY
  956. endif
  957. endif
  958. ifdef FUNCTION_PROFILE
  959. CCOMMON_OPT += -DFUNCTION_PROFILE
  960. endif
  961. ifdef HUGETLB_ALLOCATION
  962. CCOMMON_OPT += -DALLOC_HUGETLB
  963. endif
  964. ifdef HUGETLBFILE_ALLOCATION
  965. CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
  966. endif
  967. ifdef STATIC_ALLOCATION
  968. CCOMMON_OPT += -DALLOC_STATIC
  969. endif
  970. ifdef DEVICEDRIVER_ALLOCATION
  971. CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
  972. endif
  973. ifdef MIXED_MEMORY_ALLOCATION
  974. CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
  975. endif
  976. ifeq ($(OSNAME), SunOS)
  977. TAR = gtar
  978. PATCH = gpatch
  979. GREP = ggrep
  980. AWK = nawk
  981. else
  982. TAR = tar
  983. PATCH = patch
  984. GREP = grep
  985. AWK = awk
  986. endif
  987. ifndef MD5SUM
  988. MD5SUM = md5sum
  989. endif
  990. REVISION = -r$(VERSION)
  991. MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
  992. ifeq ($(DEBUG), 1)
  993. COMMON_OPT += -g
  994. endif
  995. ifeq ($(DEBUG), 1)
  996. FCOMMON_OPT += -g
  997. endif
  998. ifndef COMMON_OPT
  999. COMMON_OPT = -O2
  1000. endif
  1001. ifndef FCOMMON_OPT
  1002. FCOMMON_OPT = -O2 -frecursive
  1003. endif
  1004. override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
  1005. override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
  1006. override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
  1007. override FPFLAGS += $(FCOMMON_OPT) $(COMMON_PROF)
  1008. #MAKEOVERRIDES =
  1009. ifdef NEED_PIC
  1010. ifeq (,$(findstring PIC,$(FFLAGS)))
  1011. override FFLAGS += -fPIC
  1012. endif
  1013. endif
  1014. #For LAPACK Fortran codes.
  1015. #Disable -fopenmp for LAPACK Fortran codes on Windows.
  1016. ifdef OS_WINDOWS
  1017. LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
  1018. LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
  1019. else
  1020. LAPACK_FFLAGS := $(FFLAGS)
  1021. LAPACK_FPFLAGS := $(FPFLAGS)
  1022. endif
  1023. LAPACK_CFLAGS = $(CFLAGS)
  1024. LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
  1025. ifdef INTERFACE64
  1026. ifneq ($(INTERFACE64), 0)
  1027. LAPACK_CFLAGS += -DLAPACK_ILP64
  1028. endif
  1029. endif
  1030. ifdef OS_WINDOWS
  1031. LAPACK_CFLAGS += -DOPENBLAS_OS_WINDOWS
  1032. endif
  1033. ifeq ($(C_COMPILER), LSB)
  1034. LAPACK_CFLAGS += -DLAPACK_COMPLEX_STRUCTURE
  1035. endif
  1036. ifndef SUFFIX
  1037. SUFFIX = o
  1038. endif
  1039. ifndef PSUFFIX
  1040. PSUFFIX = po
  1041. endif
  1042. ifndef LIBSUFFIX
  1043. LIBSUFFIX = a
  1044. endif
  1045. ifneq ($(DYNAMIC_ARCH), 1)
  1046. ifndef SMP
  1047. LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
  1048. LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
  1049. else
  1050. LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
  1051. LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
  1052. endif
  1053. else
  1054. ifndef SMP
  1055. LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
  1056. LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
  1057. else
  1058. LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
  1059. LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
  1060. endif
  1061. endif
  1062. LIBDLLNAME = $(LIBPREFIX).dll
  1063. IMPLIBNAME = lib$(LIBNAMEBASE).dll.a
  1064. ifneq ($(OSNAME), AIX)
  1065. LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
  1066. else
  1067. LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.a)
  1068. endif
  1069. LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
  1070. LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
  1071. LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
  1072. LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
  1073. LIBS = $(TOPDIR)/$(LIBNAME)
  1074. LIBS_P = $(TOPDIR)/$(LIBNAME_P)
  1075. LIB_COMPONENTS = BLAS
  1076. ifneq ($(NO_CBLAS), 1)
  1077. LIB_COMPONENTS += CBLAS
  1078. endif
  1079. ifneq ($(NO_LAPACK), 1)
  1080. LIB_COMPONENTS += LAPACK
  1081. ifneq ($(NO_LAPACKE), 1)
  1082. LIB_COMPONENTS += LAPACKE
  1083. endif
  1084. ifeq ($(BUILD_RELAPACK), 1)
  1085. LIB_COMPONENTS += ReLAPACK
  1086. endif
  1087. endif
  1088. ifeq ($(ONLY_CBLAS), 1)
  1089. LIB_COMPONENTS = CBLAS
  1090. endif
  1091. export OSNAME
  1092. export ARCH
  1093. export CORE
  1094. export LIBCORE
  1095. export PGCPATH
  1096. export CONFIG
  1097. export CC
  1098. export FC
  1099. export BU
  1100. export FU
  1101. export NEED2UNDERSCORES
  1102. export USE_THREAD
  1103. export NUM_THREADS
  1104. export NUM_CORES
  1105. export SMP
  1106. export MAKEFILE_RULE
  1107. export NEED_PIC
  1108. export BINARY
  1109. export BINARY32
  1110. export BINARY64
  1111. export F_COMPILER
  1112. export C_COMPILER
  1113. export USE_OPENMP
  1114. export CROSS
  1115. export CROSS_SUFFIX
  1116. export NOFORTRAN
  1117. export NO_FBLAS
  1118. export EXTRALIB
  1119. export CEXTRALIB
  1120. export FEXTRALIB
  1121. export HAVE_SSE
  1122. export HAVE_SSE2
  1123. export HAVE_SSE3
  1124. export HAVE_SSSE3
  1125. export HAVE_SSE4_1
  1126. export HAVE_SSE4_2
  1127. export HAVE_SSE4A
  1128. export HAVE_SSE5
  1129. export HAVE_AVX
  1130. export HAVE_VFP
  1131. export HAVE_VFPV3
  1132. export HAVE_VFPV4
  1133. export HAVE_NEON
  1134. export HAVE_MSA
  1135. export MSA_FLAGS
  1136. export KERNELDIR
  1137. export FUNCTION_PROFILE
  1138. export TARGET_CORE
  1139. export NO_AVX512
  1140. export SGEMM_UNROLL_M
  1141. export SGEMM_UNROLL_N
  1142. export DGEMM_UNROLL_M
  1143. export DGEMM_UNROLL_N
  1144. export QGEMM_UNROLL_M
  1145. export QGEMM_UNROLL_N
  1146. export CGEMM_UNROLL_M
  1147. export CGEMM_UNROLL_N
  1148. export ZGEMM_UNROLL_M
  1149. export ZGEMM_UNROLL_N
  1150. export XGEMM_UNROLL_M
  1151. export XGEMM_UNROLL_N
  1152. export CGEMM3M_UNROLL_M
  1153. export CGEMM3M_UNROLL_N
  1154. export ZGEMM3M_UNROLL_M
  1155. export ZGEMM3M_UNROLL_N
  1156. export XGEMM3M_UNROLL_M
  1157. export XGEMM3M_UNROLL_N
  1158. ifdef USE_CUDA
  1159. export CUDADIR
  1160. export CUCC
  1161. export CUFLAGS
  1162. export CULIB
  1163. endif
  1164. .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
  1165. .f.$(SUFFIX):
  1166. $(FC) $(FFLAGS) -c $< -o $(@F)
  1167. .f.$(PSUFFIX):
  1168. $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
  1169. ifdef BINARY64
  1170. PATHSCALEPATH = /opt/pathscale/lib/3.1
  1171. PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
  1172. else
  1173. PATHSCALEPATH = /opt/pathscale/lib/3.1/32
  1174. PGIPATH = /opt/pgi/linux86/7.1-5/lib
  1175. endif
  1176. ACMLPATH = /opt/acml/4.3.0
  1177. ifneq ($(OSNAME), Darwin)
  1178. MKLPATH = /opt/intel/mkl/10.2.2.025/lib
  1179. else
  1180. MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
  1181. endif
  1182. ATLASPATH = /opt/atlas/3.9.17/opteron
  1183. FLAMEPATH = $(HOME)/flame/lib
  1184. ifneq ($(OSNAME), SunOS)
  1185. SUNPATH = /opt/sunstudio12.1
  1186. else
  1187. SUNPATH = /opt/SUNWspro
  1188. endif