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

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