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
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426
  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. GCCVERSIONGTEQ9 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 9)
  272. GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
  273. ifeq ($(GCCVERSIONGT4), 1)
  274. # GCC Major version > 4
  275. # It is compatible with MSVC ABI.
  276. CCOMMON_OPT += -DMS_ABI
  277. endif
  278. ifeq ($(GCCVERSIONGTEQ4), 1)
  279. ifeq ($(GCCMINORVERSIONGTEQ7), 1)
  280. # GCC Version >=4.7
  281. # It is compatible with MSVC ABI.
  282. CCOMMON_OPT += -DMS_ABI
  283. endif
  284. endif
  285. endif
  286. # Ensure the correct stack alignment on Win32
  287. # http://permalink.gmane.org/gmane.comp.lib.openblas.general/97
  288. ifeq ($(ARCH), x86)
  289. CCOMMON_OPT += -mincoming-stack-boundary=2
  290. FCOMMON_OPT += -mincoming-stack-boundary=2
  291. endif
  292. endif
  293. ifeq ($(OSNAME), Interix)
  294. NEED_PIC = 0
  295. NO_EXPRECISION = 1
  296. INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
  297. endif
  298. ifeq ($(OSNAME), CYGWIN_NT)
  299. NEED_PIC = 0
  300. NO_EXPRECISION = 1
  301. OS_CYGWIN_NT = 1
  302. endif
  303. ifneq ($(OSNAME), WINNT)
  304. ifneq ($(OSNAME), CYGWIN_NT)
  305. ifneq ($(OSNAME), Interix)
  306. ifneq ($(OSNAME), Android)
  307. ifdef SMP
  308. EXTRALIB += -lpthread
  309. endif
  310. endif
  311. endif
  312. endif
  313. endif
  314. # ifeq logical or
  315. ifeq ($(OSNAME), $(filter $(OSNAME),WINNT CYGWIN_NT Interix))
  316. OS_WINDOWS=1
  317. endif
  318. ifdef QUAD_PRECISION
  319. CCOMMON_OPT += -DQUAD_PRECISION
  320. NO_EXPRECISION = 1
  321. endif
  322. ifneq ($(ARCH), x86)
  323. ifneq ($(ARCH), x86_64)
  324. NO_EXPRECISION = 1
  325. endif
  326. endif
  327. ifdef UTEST_CHECK
  328. CCOMMON_OPT += -DUTEST_CHECK
  329. SANITY_CHECK = 1
  330. endif
  331. ifdef SANITY_CHECK
  332. CCOMMON_OPT += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
  333. endif
  334. MAX_STACK_ALLOC ?= 2048
  335. ifneq ($(MAX_STACK_ALLOC), 0)
  336. CCOMMON_OPT += -DMAX_STACK_ALLOC=$(MAX_STACK_ALLOC)
  337. endif
  338. ifdef USE_LOCKING
  339. ifneq ($(USE_LOCKING), 0)
  340. CCOMMON_OPT += -DUSE_LOCKING
  341. endif
  342. endif
  343. #
  344. # Architecture dependent settings
  345. #
  346. ifeq ($(ARCH), x86)
  347. ifndef BINARY
  348. NO_BINARY_MODE = 1
  349. endif
  350. ifeq ($(CORE), generic)
  351. NO_EXPRECISION = 1
  352. endif
  353. ifndef NO_EXPRECISION
  354. ifeq ($(F_COMPILER), GFORTRAN)
  355. # ifeq logical or. GCC or LSB
  356. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
  357. EXPRECISION = 1
  358. CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
  359. FCOMMON_OPT += -m128bit-long-double
  360. endif
  361. ifeq ($(C_COMPILER), CLANG)
  362. EXPRECISION = 1
  363. CCOMMON_OPT += -DEXPRECISION
  364. FCOMMON_OPT += -m128bit-long-double
  365. endif
  366. endif
  367. endif
  368. endif
  369. ifeq ($(ARCH), x86_64)
  370. ifeq ($(CORE), generic)
  371. NO_EXPRECISION = 1
  372. endif
  373. ifndef NO_EXPRECISION
  374. ifeq ($(F_COMPILER), GFORTRAN)
  375. # ifeq logical or. GCC or LSB
  376. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
  377. EXPRECISION = 1
  378. CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
  379. FCOMMON_OPT += -m128bit-long-double
  380. endif
  381. ifeq ($(C_COMPILER), CLANG)
  382. EXPRECISION = 1
  383. CCOMMON_OPT += -DEXPRECISION
  384. FCOMMON_OPT += -m128bit-long-double
  385. endif
  386. endif
  387. endif
  388. endif
  389. ifeq ($(C_COMPILER), INTEL)
  390. CCOMMON_OPT += -wd981
  391. endif
  392. ifeq ($(USE_OPENMP), 1)
  393. #check
  394. ifeq ($(USE_THREAD), 0)
  395. $(error OpenBLAS: Cannot set both USE_OPENMP=1 and USE_THREAD=0. The USE_THREAD=0 is only for building single thread version.)
  396. endif
  397. # ifeq logical or. GCC or LSB
  398. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
  399. CCOMMON_OPT += -fopenmp
  400. endif
  401. ifeq ($(C_COMPILER), CLANG)
  402. CCOMMON_OPT += -fopenmp
  403. endif
  404. ifeq ($(C_COMPILER), INTEL)
  405. CCOMMON_OPT += -fopenmp
  406. endif
  407. ifeq ($(C_COMPILER), PGI)
  408. CCOMMON_OPT += -mp
  409. endif
  410. ifeq ($(C_COMPILER), OPEN64)
  411. CCOMMON_OPT += -mp
  412. CEXTRALIB += -lstdc++
  413. endif
  414. ifeq ($(C_COMPILER), PATHSCALE)
  415. CCOMMON_OPT += -mp
  416. endif
  417. endif
  418. ifeq ($(DYNAMIC_ARCH), 1)
  419. ifeq ($(ARCH), x86)
  420. DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
  421. CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
  422. endif
  423. ifeq ($(ARCH), x86_64)
  424. DYNAMIC_CORE = PRESCOTT CORE2
  425. ifeq ($(DYNAMIC_OLDER), 1)
  426. DYNAMIC_CORE += PENRYN DUNNINGTON
  427. endif
  428. DYNAMIC_CORE += NEHALEM
  429. ifeq ($(DYNAMIC_OLDER), 1)
  430. DYNAMIC_CORE += OPTERON OPTERON_SSE3
  431. endif
  432. DYNAMIC_CORE += BARCELONA
  433. ifeq ($(DYNAMIC_OLDER), 1)
  434. DYNAMIC_CORE += BOBCAT ATOM NANO
  435. endif
  436. ifneq ($(NO_AVX), 1)
  437. DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER EXCAVATOR
  438. endif
  439. ifneq ($(NO_AVX2), 1)
  440. DYNAMIC_CORE += HASWELL ZEN
  441. endif
  442. ifneq ($(NO_AVX512), 1)
  443. ifneq ($(NO_AVX2), 1)
  444. DYNAMIC_CORE += SKYLAKEX
  445. endif
  446. endif
  447. endif
  448. ifdef DYNAMIC_LIST
  449. override DYNAMIC_CORE = PRESCOTT $(DYNAMIC_LIST)
  450. XCCOMMON_OPT = -DDYNAMIC_LIST -DDYN_PRESCOTT
  451. XCCOMMON_OPT += $(foreach dcore,$(DYNAMIC_LIST),-DDYN_$(dcore))
  452. CCOMMON_OPT += $(XCCOMMON_OPT)
  453. #CCOMMON_OPT += -DDYNAMIC_LIST='$(DYNAMIC_LIST)'
  454. endif
  455. ifeq ($(ARCH), arm64)
  456. DYNAMIC_CORE = ARMV8
  457. DYNAMIC_CORE += CORTEXA53
  458. DYNAMIC_CORE += CORTEXA57
  459. DYNAMIC_CORE += CORTEXA72
  460. DYNAMIC_CORE += CORTEXA73
  461. DYNAMIC_CORE += FALKOR
  462. DYNAMIC_CORE += THUNDERX
  463. DYNAMIC_CORE += THUNDERX2T99
  464. DYNAMIC_CORE += TSV110
  465. endif
  466. ifeq ($(ARCH), power)
  467. DYNAMIC_CORE = POWER6
  468. DYNAMIC_CORE += POWER8
  469. ifneq ($(C_COMPILER), GCC)
  470. DYNAMIC_CORE += POWER9
  471. endif
  472. ifeq ($(C_COMPILER), GCC)
  473. ifeq ($(GCCVERSIONGT5), 1)
  474. DYNAMIC_CORE += POWER9
  475. else
  476. $(info, OpenBLAS: Your gcc version is too old to build the POWER9 kernels.)
  477. endif
  478. endif
  479. endif
  480. # If DYNAMIC_CORE is not set, DYNAMIC_ARCH cannot do anything, so force it to empty
  481. ifndef DYNAMIC_CORE
  482. override DYNAMIC_ARCH=
  483. endif
  484. endif
  485. ifeq ($(ARCH), ia64)
  486. NO_BINARY_MODE = 1
  487. BINARY_DEFINED = 1
  488. ifeq ($(F_COMPILER), GFORTRAN)
  489. ifeq ($(C_COMPILER), GCC)
  490. # EXPRECISION = 1
  491. # CCOMMON_OPT += -DEXPRECISION
  492. endif
  493. endif
  494. endif
  495. ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
  496. NO_BINARY_MODE = 1
  497. endif
  498. ifeq ($(ARCH), alpha)
  499. NO_BINARY_MODE = 1
  500. BINARY_DEFINED = 1
  501. endif
  502. ifeq ($(ARCH), arm)
  503. NO_BINARY_MODE = 1
  504. BINARY_DEFINED = 1
  505. CCOMMON_OPT += -marm
  506. FCOMMON_OPT += -marm
  507. # If softfp abi is mentioned on the command line, force it.
  508. ifeq ($(ARM_SOFTFP_ABI), 1)
  509. CCOMMON_OPT += -mfloat-abi=softfp
  510. FCOMMON_OPT += -mfloat-abi=softfp
  511. endif
  512. ifeq ($(OSNAME), Android)
  513. ifeq ($(ARM_SOFTFP_ABI), 1)
  514. EXTRALIB += -lm
  515. else
  516. EXTRALIB += -Wl,-lm_hard
  517. endif
  518. endif
  519. endif
  520. ifeq ($(ARCH), arm64)
  521. NO_BINARY_MODE = 1
  522. BINARY_DEFINED = 1
  523. endif
  524. #
  525. # C Compiler dependent settings
  526. #
  527. # ifeq logical or. GCC or CLANG or LSB
  528. # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
  529. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
  530. CCOMMON_OPT += -Wall
  531. COMMON_PROF += -fno-inline
  532. NO_UNINITIALIZED_WARN = -Wno-uninitialized
  533. ifeq ($(QUIET_MAKE), 1)
  534. CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
  535. endif
  536. ifdef NO_BINARY_MODE
  537. ifeq ($(ARCH), $(filter $(ARCH),mips64))
  538. ifdef BINARY64
  539. CCOMMON_OPT += -mabi=64
  540. else
  541. CCOMMON_OPT += -mabi=n32
  542. endif
  543. BINARY_DEFINED = 1
  544. else ifeq ($(ARCH), $(filter $(ARCH),mips))
  545. CCOMMON_OPT += -mabi=32
  546. BINARY_DEFINED = 1
  547. endif
  548. ifeq ($(CORE), LOONGSON3A)
  549. CCOMMON_OPT += -march=mips64
  550. FCOMMON_OPT += -march=mips64
  551. endif
  552. ifeq ($(CORE), LOONGSON3B)
  553. CCOMMON_OPT += -march=mips64
  554. FCOMMON_OPT += -march=mips64
  555. endif
  556. ifeq ($(CORE), 1004K)
  557. CCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
  558. FCOMMON_OPT += -mips32r2 $(MSA_FLAGS)
  559. endif
  560. ifeq ($(CORE), P5600)
  561. CCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
  562. FCOMMON_OPT += -mips32r5 -mnan=2008 -mtune=p5600 $(MSA_FLAGS)
  563. endif
  564. ifeq ($(CORE), I6400)
  565. CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
  566. FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
  567. endif
  568. ifeq ($(CORE), P6600)
  569. CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
  570. FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=p6600 $(MSA_FLAGS)
  571. endif
  572. ifeq ($(CORE), I6500)
  573. CCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
  574. FCOMMON_OPT += -mips64r6 -mnan=2008 -mtune=i6400 $(MSA_FLAGS)
  575. endif
  576. ifeq ($(OSNAME), AIX)
  577. BINARY_DEFINED = 1
  578. endif
  579. endif
  580. ifndef BINARY_DEFINED
  581. ifneq ($(OSNAME), AIX)
  582. ifdef BINARY64
  583. CCOMMON_OPT += -m64
  584. else
  585. CCOMMON_OPT += -m32
  586. endif
  587. endif
  588. endif
  589. endif
  590. ifeq ($(C_COMPILER), PGI)
  591. ifdef BINARY64
  592. CCOMMON_OPT += -tp p7-64 -D__MMX__ -Mnollvm
  593. else
  594. CCOMMON_OPT += -tp p7
  595. endif
  596. endif
  597. ifeq ($(C_COMPILER), PATHSCALE)
  598. ifdef BINARY64
  599. CCOMMON_OPT += -m64
  600. else
  601. CCOMMON_OPT += -m32
  602. endif
  603. endif
  604. #
  605. # Fortran Compiler dependent settings
  606. #
  607. ifeq ($(F_COMPILER), FLANG)
  608. CCOMMON_OPT += -DF_INTERFACE_FLANG
  609. ifdef BINARY64
  610. ifdef INTERFACE64
  611. ifneq ($(INTERFACE64), 0)
  612. FCOMMON_OPT += -i8
  613. endif
  614. endif
  615. FCOMMON_OPT += -Wall
  616. else
  617. FCOMMON_OPT += -Wall
  618. endif
  619. ifeq ($(USE_OPENMP), 1)
  620. FCOMMON_OPT += -fopenmp
  621. endif
  622. endif
  623. ifeq ($(F_COMPILER), G77)
  624. CCOMMON_OPT += -DF_INTERFACE_G77
  625. FCOMMON_OPT += -Wall
  626. ifndef NO_BINARY_MODE
  627. ifneq ($(OSNAME), AIX)
  628. ifdef BINARY64
  629. FCOMMON_OPT += -m64
  630. else
  631. FCOMMON_OPT += -m32
  632. endif
  633. endif
  634. endif
  635. endif
  636. ifeq ($(F_COMPILER), G95)
  637. CCOMMON_OPT += -DF_INTERFACE_G95
  638. FCOMMON_OPT += -Wall
  639. ifneq ($(OSNAME), AIX)
  640. ifndef NO_BINARY_MODE
  641. ifdef BINARY64
  642. FCOMMON_OPT += -m64
  643. else
  644. FCOMMON_OPT += -m32
  645. endif
  646. endif
  647. ifneq ($(NO_LAPACKE), 1)
  648. FCOMMON_OPT += -fno-second-underscore
  649. endif
  650. endif
  651. endif
  652. ifeq ($(F_COMPILER), GFORTRAN)
  653. CCOMMON_OPT += -DF_INTERFACE_GFORT
  654. FCOMMON_OPT += -Wall
  655. # make single-threaded LAPACK calls thread-safe #1847
  656. FCOMMON_OPT += -frecursive
  657. # work around ABI problem with passing single-character arguments
  658. FCOMMON_OPT += -fno-optimize-sibling-calls
  659. #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
  660. ifneq ($(NO_LAPACK), 1)
  661. EXTRALIB += -lgfortran
  662. endif
  663. ifdef NO_BINARY_MODE
  664. ifeq ($(ARCH), $(filter $(ARCH),mips64))
  665. ifdef BINARY64
  666. FCOMMON_OPT += -mabi=64
  667. else
  668. FCOMMON_OPT += -mabi=n32
  669. endif
  670. else ifeq ($(ARCH), $(filter $(ARCH),mips))
  671. FCOMMON_OPT += -mabi=32
  672. endif
  673. else
  674. ifdef BINARY64
  675. ifneq ($(OSNAME), AIX)
  676. FCOMMON_OPT += -m64
  677. endif
  678. ifdef INTERFACE64
  679. ifneq ($(INTERFACE64), 0)
  680. FCOMMON_OPT += -fdefault-integer-8
  681. endif
  682. endif
  683. else
  684. ifneq ($(OSNAME), AIX)
  685. FCOMMON_OPT += -m32
  686. endif
  687. endif
  688. endif
  689. ifeq ($(USE_OPENMP), 1)
  690. FCOMMON_OPT += -fopenmp
  691. endif
  692. endif
  693. ifeq ($(F_COMPILER), INTEL)
  694. CCOMMON_OPT += -DF_INTERFACE_INTEL
  695. ifdef INTERFACE64
  696. ifneq ($(INTERFACE64), 0)
  697. FCOMMON_OPT += -i8
  698. endif
  699. endif
  700. ifeq ($(USE_OPENMP), 1)
  701. FCOMMON_OPT += -fopenmp
  702. endif
  703. endif
  704. ifeq ($(F_COMPILER), FUJITSU)
  705. CCOMMON_OPT += -DF_INTERFACE_FUJITSU
  706. ifeq ($(USE_OPENMP), 1)
  707. FCOMMON_OPT += -openmp
  708. endif
  709. endif
  710. ifeq ($(F_COMPILER), IBM)
  711. CCOMMON_OPT += -DF_INTERFACE_IBM
  712. # FCOMMON_OPT += -qarch=440
  713. ifdef BINARY64
  714. FCOMMON_OPT += -q64
  715. ifdef INTERFACE64
  716. ifneq ($(INTERFACE64), 0)
  717. FCOMMON_OPT += -qintsize=8
  718. endif
  719. endif
  720. else
  721. FCOMMON_OPT += -q32
  722. endif
  723. ifeq ($(USE_OPENMP), 1)
  724. FCOMMON_OPT += -openmp
  725. endif
  726. endif
  727. ifeq ($(F_COMPILER), PGI)
  728. CCOMMON_OPT += -DF_INTERFACE_PGI
  729. COMMON_PROF += -DPGICOMPILER
  730. ifdef BINARY64
  731. ifdef INTERFACE64
  732. ifneq ($(INTERFACE64), 0)
  733. FCOMMON_OPT += -i8
  734. endif
  735. endif
  736. FCOMMON_OPT += -tp p7-64
  737. else
  738. FCOMMON_OPT += -tp p7
  739. endif
  740. ifeq ($(USE_OPENMP), 1)
  741. FCOMMON_OPT += -mp
  742. endif
  743. endif
  744. ifeq ($(F_COMPILER), PATHSCALE)
  745. CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
  746. ifdef BINARY64
  747. ifdef INTERFACE64
  748. ifneq ($(INTERFACE64), 0)
  749. FCOMMON_OPT += -i8
  750. endif
  751. endif
  752. endif
  753. ifeq ($(USE_OPENMP), 1)
  754. FCOMMON_OPT += -mp
  755. endif
  756. endif
  757. ifeq ($(F_COMPILER), OPEN64)
  758. CCOMMON_OPT += -DF_INTERFACE_OPEN64
  759. ifdef BINARY64
  760. ifdef INTERFACE64
  761. ifneq ($(INTERFACE64), 0)
  762. FCOMMON_OPT += -i8
  763. endif
  764. endif
  765. endif
  766. ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
  767. ifndef BINARY64
  768. FCOMMON_OPT += -n32
  769. else
  770. FCOMMON_OPT += -n64
  771. endif
  772. ifeq ($(CORE), LOONGSON3A)
  773. FCOMMON_OPT += -loongson3 -static
  774. endif
  775. ifeq ($(CORE), LOONGSON3B)
  776. FCOMMON_OPT += -loongson3 -static
  777. endif
  778. else
  779. ifndef BINARY64
  780. FCOMMON_OPT += -m32
  781. else
  782. FCOMMON_OPT += -m64
  783. endif
  784. endif
  785. ifeq ($(USE_OPENMP), 1)
  786. FEXTRALIB += -lstdc++
  787. FCOMMON_OPT += -mp
  788. endif
  789. endif
  790. ifeq ($(C_COMPILER), OPEN64)
  791. ifeq ($(ARCH), $(filter $(ARCH),mips64 mips))
  792. ifndef BINARY64
  793. CCOMMON_OPT += -n32
  794. else
  795. CCOMMON_OPT += -n64
  796. endif
  797. ifeq ($(CORE), LOONGSON3A)
  798. CCOMMON_OPT += -loongson3 -static
  799. endif
  800. ifeq ($(CORE), LOONGSON3B)
  801. CCOMMON_OPT += -loongson3 -static
  802. endif
  803. else
  804. ifndef BINARY64
  805. CCOMMON_OPT += -m32
  806. else
  807. CCOMMON_OPT += -m64
  808. endif
  809. endif
  810. endif
  811. ifeq ($(C_COMPILER), SUN)
  812. CCOMMON_OPT += -w
  813. ifeq ($(ARCH), x86)
  814. CCOMMON_OPT += -m32
  815. else
  816. FCOMMON_OPT += -m64
  817. endif
  818. endif
  819. ifeq ($(F_COMPILER), SUN)
  820. CCOMMON_OPT += -DF_INTERFACE_SUN
  821. ifeq ($(ARCH), x86)
  822. FCOMMON_OPT += -m32
  823. else
  824. FCOMMON_OPT += -m64
  825. endif
  826. ifeq ($(USE_OPENMP), 1)
  827. FCOMMON_OPT += -xopenmp=parallel
  828. endif
  829. endif
  830. ifeq ($(F_COMPILER), COMPAQ)
  831. CCOMMON_OPT += -DF_INTERFACE_COMPAQ
  832. ifeq ($(USE_OPENMP), 1)
  833. FCOMMON_OPT += -openmp
  834. endif
  835. endif
  836. ifdef BINARY64
  837. ifdef INTERFACE64
  838. ifneq ($(INTERFACE64), 0)
  839. CCOMMON_OPT +=
  840. #-DUSE64BITINT
  841. endif
  842. endif
  843. endif
  844. ifeq ($(NEED_PIC), 1)
  845. ifeq ($(C_COMPILER), IBM)
  846. CCOMMON_OPT += -qpic=large
  847. else
  848. CCOMMON_OPT += -fPIC
  849. endif
  850. ifeq ($(F_COMPILER), SUN)
  851. FCOMMON_OPT += -pic
  852. else
  853. FCOMMON_OPT += -fPIC
  854. endif
  855. endif
  856. ifeq ($(DYNAMIC_ARCH), 1)
  857. CCOMMON_OPT += -DDYNAMIC_ARCH
  858. endif
  859. ifeq ($(DYNAMIC_OLDER), 1)
  860. CCOMMON_OPT += -DDYNAMIC_OLDER
  861. endif
  862. ifeq ($(NO_LAPACK), 1)
  863. CCOMMON_OPT += -DNO_LAPACK
  864. #Disable LAPACK C interface
  865. NO_LAPACKE = 1
  866. endif
  867. ifeq ($(NO_LAPACKE), 1)
  868. CCOMMON_OPT += -DNO_LAPACKE
  869. endif
  870. ifeq ($(NO_AVX), 1)
  871. CCOMMON_OPT += -DNO_AVX
  872. endif
  873. ifeq ($(ARCH), x86)
  874. CCOMMON_OPT += -DNO_AVX
  875. endif
  876. ifeq ($(NO_AVX2), 1)
  877. CCOMMON_OPT += -DNO_AVX2
  878. endif
  879. ifeq ($(NO_AVX512), 1)
  880. CCOMMON_OPT += -DNO_AVX512
  881. endif
  882. ifdef SMP
  883. CCOMMON_OPT += -DSMP_SERVER
  884. ifeq ($(ARCH), mips64)
  885. ifneq ($(CORE), LOONGSON3B)
  886. USE_SIMPLE_THREADED_LEVEL3 = 1
  887. endif
  888. endif
  889. ifeq ($(USE_OPENMP), 1)
  890. # USE_SIMPLE_THREADED_LEVEL3 = 1
  891. # NO_AFFINITY = 1
  892. CCOMMON_OPT += -DUSE_OPENMP
  893. endif
  894. ifeq ($(BIGNUMA), 1)
  895. CCOMMON_OPT += -DBIGNUMA
  896. endif
  897. endif
  898. ifeq ($(NO_WARMUP), 1)
  899. CCOMMON_OPT += -DNO_WARMUP
  900. endif
  901. ifeq ($(CONSISTENT_FPCSR), 1)
  902. CCOMMON_OPT += -DCONSISTENT_FPCSR
  903. endif
  904. # Only for development
  905. # CCOMMON_OPT += -DPARAMTEST
  906. # CCOMMON_OPT += -DPREFETCHTEST
  907. # CCOMMON_OPT += -DNO_SWITCHING
  908. # USE_PAPI = 1
  909. ifdef USE_PAPI
  910. CCOMMON_OPT += -DUSE_PAPI
  911. EXTRALIB += -lpapi -lperfctr
  912. endif
  913. ifdef DYNAMIC_THREADS
  914. CCOMMON_OPT += -DDYNAMIC_THREADS
  915. endif
  916. CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
  917. CCOMMON_OPT += -DMAX_PARALLEL_NUMBER=$(NUM_PARALLEL)
  918. ifdef USE_SIMPLE_THREADED_LEVEL3
  919. CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
  920. endif
  921. ifeq ($(USE_TLS), 1)
  922. CCOMMON_OPT += -DUSE_TLS
  923. endif
  924. CCOMMON_OPT += -DVERSION=\"$(VERSION)\"
  925. ifndef SYMBOLPREFIX
  926. SYMBOLPREFIX =
  927. endif
  928. ifndef SYMBOLSUFFIX
  929. SYMBOLSUFFIX =
  930. endif
  931. ifndef LIBNAMESUFFIX
  932. LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)
  933. else
  934. LIBNAMEBASE = $(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX)
  935. endif
  936. ifeq ($(OSNAME), CYGWIN_NT)
  937. LIBPREFIX = cyg$(LIBNAMEBASE)
  938. else
  939. LIBPREFIX = lib$(LIBNAMEBASE)
  940. endif
  941. KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
  942. include $(TOPDIR)/Makefile.$(ARCH)
  943. CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
  944. ifeq ($(CORE), PPC440)
  945. CCOMMON_OPT += -DALLOC_QALLOC
  946. endif
  947. ifeq ($(CORE), PPC440FP2)
  948. STATIC_ALLOCATION = 1
  949. endif
  950. ifneq ($(OSNAME), Linux)
  951. NO_AFFINITY = 1
  952. endif
  953. ifneq ($(ARCH), x86_64)
  954. ifneq ($(ARCH), x86)
  955. ifneq ($(CORE), LOONGSON3B)
  956. NO_AFFINITY = 1
  957. endif
  958. endif
  959. endif
  960. ifdef NO_AFFINITY
  961. ifeq ($(NO_AFFINITY), 0)
  962. override undefine NO_AFFINITY
  963. else
  964. CCOMMON_OPT += -DNO_AFFINITY
  965. endif
  966. endif
  967. ifdef FUNCTION_PROFILE
  968. CCOMMON_OPT += -DFUNCTION_PROFILE
  969. endif
  970. ifdef HUGETLB_ALLOCATION
  971. CCOMMON_OPT += -DALLOC_HUGETLB
  972. endif
  973. ifdef HUGETLBFILE_ALLOCATION
  974. CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
  975. endif
  976. ifdef STATIC_ALLOCATION
  977. CCOMMON_OPT += -DALLOC_STATIC
  978. endif
  979. ifdef DEVICEDRIVER_ALLOCATION
  980. CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
  981. endif
  982. ifdef MIXED_MEMORY_ALLOCATION
  983. CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
  984. endif
  985. ifeq ($(OSNAME), SunOS)
  986. TAR = gtar
  987. PATCH = gpatch
  988. GREP = ggrep
  989. AWK = nawk
  990. else
  991. TAR = tar
  992. PATCH = patch
  993. GREP = grep
  994. AWK = awk
  995. endif
  996. ifndef MD5SUM
  997. MD5SUM = md5sum
  998. endif
  999. REVISION = -r$(VERSION)
  1000. MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
  1001. ifeq ($(DEBUG), 1)
  1002. COMMON_OPT += -g
  1003. endif
  1004. ifeq ($(DEBUG), 1)
  1005. FCOMMON_OPT += -g
  1006. endif
  1007. ifndef COMMON_OPT
  1008. COMMON_OPT = -O2
  1009. endif
  1010. ifndef FCOMMON_OPT
  1011. FCOMMON_OPT = -O2 -frecursive
  1012. endif
  1013. override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
  1014. override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
  1015. override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
  1016. override FPFLAGS += $(FCOMMON_OPT) $(COMMON_PROF)
  1017. #MAKEOVERRIDES =
  1018. ifdef NEED_PIC
  1019. ifeq (,$(findstring PIC,$(FFLAGS)))
  1020. override FFLAGS += -fPIC
  1021. endif
  1022. endif
  1023. #For LAPACK Fortran codes.
  1024. #Disable -fopenmp for LAPACK Fortran codes on Windows.
  1025. ifdef OS_WINDOWS
  1026. LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
  1027. LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
  1028. else
  1029. LAPACK_FFLAGS := $(FFLAGS)
  1030. LAPACK_FPFLAGS := $(FPFLAGS)
  1031. endif
  1032. LAPACK_CFLAGS = $(CFLAGS)
  1033. LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
  1034. ifdef INTERFACE64
  1035. ifneq ($(INTERFACE64), 0)
  1036. LAPACK_CFLAGS += -DLAPACK_ILP64
  1037. endif
  1038. endif
  1039. ifdef OS_WINDOWS
  1040. LAPACK_CFLAGS += -DOPENBLAS_OS_WINDOWS
  1041. endif
  1042. ifeq ($(C_COMPILER), LSB)
  1043. LAPACK_CFLAGS += -DLAPACK_COMPLEX_STRUCTURE
  1044. endif
  1045. ifndef SUFFIX
  1046. SUFFIX = o
  1047. endif
  1048. ifndef PSUFFIX
  1049. PSUFFIX = po
  1050. endif
  1051. ifndef LIBSUFFIX
  1052. LIBSUFFIX = a
  1053. endif
  1054. ifneq ($(DYNAMIC_ARCH), 1)
  1055. ifndef SMP
  1056. LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
  1057. LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
  1058. else
  1059. LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
  1060. LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
  1061. endif
  1062. else
  1063. ifndef SMP
  1064. LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
  1065. LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
  1066. else
  1067. LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
  1068. LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
  1069. endif
  1070. endif
  1071. LIBDLLNAME = $(LIBPREFIX).dll
  1072. IMPLIBNAME = lib$(LIBNAMEBASE).dll.a
  1073. ifneq ($(OSNAME), AIX)
  1074. LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
  1075. else
  1076. LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.a)
  1077. endif
  1078. LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
  1079. LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
  1080. LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
  1081. LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
  1082. LIBS = $(TOPDIR)/$(LIBNAME)
  1083. LIBS_P = $(TOPDIR)/$(LIBNAME_P)
  1084. LIB_COMPONENTS = BLAS
  1085. ifneq ($(NO_CBLAS), 1)
  1086. LIB_COMPONENTS += CBLAS
  1087. endif
  1088. ifneq ($(NO_LAPACK), 1)
  1089. LIB_COMPONENTS += LAPACK
  1090. ifneq ($(NO_LAPACKE), 1)
  1091. LIB_COMPONENTS += LAPACKE
  1092. endif
  1093. ifeq ($(BUILD_RELAPACK), 1)
  1094. LIB_COMPONENTS += ReLAPACK
  1095. endif
  1096. endif
  1097. ifeq ($(ONLY_CBLAS), 1)
  1098. LIB_COMPONENTS = CBLAS
  1099. endif
  1100. export OSNAME
  1101. export ARCH
  1102. export CORE
  1103. export LIBCORE
  1104. export PGCPATH
  1105. export CONFIG
  1106. export CC
  1107. export FC
  1108. export BU
  1109. export FU
  1110. export NEED2UNDERSCORES
  1111. export USE_THREAD
  1112. export NUM_THREADS
  1113. export NUM_CORES
  1114. export SMP
  1115. export MAKEFILE_RULE
  1116. export NEED_PIC
  1117. export BINARY
  1118. export BINARY32
  1119. export BINARY64
  1120. export F_COMPILER
  1121. export C_COMPILER
  1122. export USE_OPENMP
  1123. export CROSS
  1124. export CROSS_SUFFIX
  1125. export NOFORTRAN
  1126. export NO_FBLAS
  1127. export EXTRALIB
  1128. export CEXTRALIB
  1129. export FEXTRALIB
  1130. export HAVE_SSE
  1131. export HAVE_SSE2
  1132. export HAVE_SSE3
  1133. export HAVE_SSSE3
  1134. export HAVE_SSE4_1
  1135. export HAVE_SSE4_2
  1136. export HAVE_SSE4A
  1137. export HAVE_SSE5
  1138. export HAVE_AVX
  1139. export HAVE_VFP
  1140. export HAVE_VFPV3
  1141. export HAVE_VFPV4
  1142. export HAVE_NEON
  1143. export HAVE_MSA
  1144. export MSA_FLAGS
  1145. export KERNELDIR
  1146. export FUNCTION_PROFILE
  1147. export TARGET_CORE
  1148. export NO_AVX512
  1149. export SGEMM_UNROLL_M
  1150. export SGEMM_UNROLL_N
  1151. export DGEMM_UNROLL_M
  1152. export DGEMM_UNROLL_N
  1153. export QGEMM_UNROLL_M
  1154. export QGEMM_UNROLL_N
  1155. export CGEMM_UNROLL_M
  1156. export CGEMM_UNROLL_N
  1157. export ZGEMM_UNROLL_M
  1158. export ZGEMM_UNROLL_N
  1159. export XGEMM_UNROLL_M
  1160. export XGEMM_UNROLL_N
  1161. export CGEMM3M_UNROLL_M
  1162. export CGEMM3M_UNROLL_N
  1163. export ZGEMM3M_UNROLL_M
  1164. export ZGEMM3M_UNROLL_N
  1165. export XGEMM3M_UNROLL_M
  1166. export XGEMM3M_UNROLL_N
  1167. ifdef USE_CUDA
  1168. export CUDADIR
  1169. export CUCC
  1170. export CUFLAGS
  1171. export CULIB
  1172. endif
  1173. .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
  1174. .f.$(SUFFIX):
  1175. $(FC) $(FFLAGS) -c $< -o $(@F)
  1176. .f.$(PSUFFIX):
  1177. $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
  1178. ifdef BINARY64
  1179. PATHSCALEPATH = /opt/pathscale/lib/3.1
  1180. PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
  1181. else
  1182. PATHSCALEPATH = /opt/pathscale/lib/3.1/32
  1183. PGIPATH = /opt/pgi/linux86/7.1-5/lib
  1184. endif
  1185. ACMLPATH = /opt/acml/4.3.0
  1186. ifneq ($(OSNAME), Darwin)
  1187. MKLPATH = /opt/intel/mkl/10.2.2.025/lib
  1188. else
  1189. MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
  1190. endif
  1191. ATLASPATH = /opt/atlas/3.9.17/opteron
  1192. FLAMEPATH = $(HOME)/flame/lib
  1193. ifneq ($(OSNAME), SunOS)
  1194. SUNPATH = /opt/sunstudio12.1
  1195. else
  1196. SUNPATH = /opt/SUNWspro
  1197. endif