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