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

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