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

13 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108
  1. #
  2. # Include user definition
  3. #
  4. # TO suppress recursive includes
  5. INCLUDED = 1
  6. ifndef TOPDIR
  7. TOPDIR = .
  8. endif
  9. NETLIB_LAPACK_DIR = $(TOPDIR)/lapack-netlib
  10. # Default C compiler
  11. # - Only set if not specified on the command line or inherited from the environment.
  12. # - CC is an implicit variable so neither '?=' or 'ifndef' can be used.
  13. # http://stackoverflow.com/questions/4029274/mingw-and-make-variables
  14. # - Default value is 'cc' which is not always a valid command (e.g. MinGW).
  15. ifeq ($(origin CC),default)
  16. CC = gcc
  17. # Change the default compile to clang on Mac OSX.
  18. # http://stackoverflow.com/questions/714100/os-detecting-makefile
  19. UNAME_S := $(shell uname -s)
  20. ifeq ($(UNAME_S),Darwin)
  21. CC = clang
  22. endif
  23. endif
  24. # Default Fortran compiler (FC) is selected by f_check.
  25. ifndef MAKEFILE_RULE
  26. include $(TOPDIR)/Makefile.rule
  27. else
  28. include $(TOPDIR)/$(MAKEFILE_RULE)
  29. endif
  30. #
  31. # Beginning of system configuration
  32. #
  33. ifndef HOSTCC
  34. HOSTCC = $(CC)
  35. endif
  36. ifdef TARGET
  37. GETARCH_FLAGS := -DFORCE_$(TARGET)
  38. endif
  39. # Force fallbacks for 32bit
  40. ifeq ($(BINARY), 32)
  41. ifeq ($(TARGET), HASWELL)
  42. GETARCH_FLAGS := -DFORCE_NEHALEM
  43. endif
  44. ifeq ($(TARGET), SANDYBRIDGE)
  45. GETARCH_FLAGS := -DFORCE_NEHALEM
  46. endif
  47. ifeq ($(TARGET), BULLDOZER)
  48. GETARCH_FLAGS := -DFORCE_BARCELONA
  49. endif
  50. ifeq ($(TARGET), PILEDRIVER)
  51. GETARCH_FLAGS := -DFORCE_BARCELONA
  52. endif
  53. endif
  54. #TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1.
  55. #
  56. ifdef TARGET_CORE
  57. GETARCH_FLAGS := -DFORCE_$(TARGET_CORE)
  58. endif
  59. # Force fallbacks for 32bit
  60. ifeq ($(BINARY), 32)
  61. ifeq ($(TARGET_CORE), HASWELL)
  62. GETARCH_FLAGS := -DFORCE_NEHALEM
  63. endif
  64. ifeq ($(TARGET_CORE), SANDYBRIDGE)
  65. GETARCH_FLAGS := -DFORCE_NEHALEM
  66. endif
  67. ifeq ($(TARGET_CORE), BULLDOZER)
  68. GETARCH_FLAGS := -DFORCE_BARCELONA
  69. endif
  70. ifeq ($(TARGET_CORE), PILEDRIVER)
  71. GETARCH_FLAGS := -DFORCE_BARCELONA
  72. endif
  73. endif
  74. ifdef INTERFACE64
  75. ifneq ($(INTERFACE64), 0)
  76. GETARCH_FLAGS += -DUSE64BITINT
  77. endif
  78. endif
  79. ifndef GEMM_MULTITHREAD_THRESHOLD
  80. GEMM_MULTITHREAD_THRESHOLD=4
  81. endif
  82. GETARCH_FLAGS += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD)
  83. ifeq ($(NO_AVX), 1)
  84. GETARCH_FLAGS += -DNO_AVX
  85. endif
  86. ifeq ($(BINARY), 32)
  87. GETARCH_FLAGS += -DNO_AVX
  88. endif
  89. ifeq ($(DEBUG), 1)
  90. GETARCH_FLAGS += -g
  91. endif
  92. ifeq ($(QUIET_MAKE), 1)
  93. MAKE += -s
  94. endif
  95. ifndef NO_PARALLEL_MAKE
  96. NO_PARALLEL_MAKE=0
  97. endif
  98. GETARCH_FLAGS += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE)
  99. ifeq ($(HOSTCC), loongcc)
  100. GETARCH_FLAGS += -static
  101. endif
  102. #if don't use Fortran, it will only compile CBLAS.
  103. ifeq ($(ONLY_CBLAS), 1)
  104. NO_LAPACK = 1
  105. else
  106. ONLY_CBLAS = 0
  107. endif
  108. # This operation is expensive, so execution should be once.
  109. ifndef GOTOBLAS_MAKEFILE
  110. export GOTOBLAS_MAKEFILE = 1
  111. # Generating Makefile.conf and config.h
  112. 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) all)
  113. ifndef TARGET_CORE
  114. include $(TOPDIR)/Makefile.conf
  115. else
  116. include $(TOPDIR)/Makefile_kernel.conf
  117. endif
  118. endif
  119. ifndef NUM_THREADS
  120. NUM_THREADS = $(NUM_CORES)
  121. endif
  122. ifeq ($(NUM_THREADS), 1)
  123. override USE_THREAD = 0
  124. endif
  125. ifdef USE_THREAD
  126. ifeq ($(USE_THREAD), 0)
  127. SMP =
  128. else
  129. SMP = 1
  130. endif
  131. else
  132. ifeq ($(NUM_THREAD), 1)
  133. SMP =
  134. else
  135. SMP = 1
  136. endif
  137. endif
  138. ifndef NEED_PIC
  139. NEED_PIC = 1
  140. endif
  141. ARFLAGS =
  142. CPP = $(COMPILER) -E
  143. AR = $(CROSS_SUFFIX)ar
  144. AS = $(CROSS_SUFFIX)as
  145. LD = $(CROSS_SUFFIX)ld
  146. RANLIB = $(CROSS_SUFFIX)ranlib
  147. NM = $(CROSS_SUFFIX)nm
  148. DLLWRAP = $(CROSS_SUFFIX)dllwrap
  149. #
  150. # OS dependent settings
  151. #
  152. ifeq ($(OSNAME), Darwin)
  153. export MACOSX_DEPLOYMENT_TARGET=10.2
  154. MD5SUM = md5 -r
  155. endif
  156. ifeq ($(OSNAME), FreeBSD)
  157. MD5SUM = md5 -r
  158. endif
  159. ifeq ($(OSNAME), NetBSD)
  160. MD5SUM = md5 -n
  161. endif
  162. ifeq ($(OSNAME), Linux)
  163. EXTRALIB += -lm
  164. NO_EXPRECISION = 1
  165. endif
  166. ifeq ($(OSNAME), AIX)
  167. EXTRALIB += -lm
  168. endif
  169. ifeq ($(OSNAME), WINNT)
  170. NEED_PIC = 0
  171. NO_EXPRECISION = 1
  172. EXTRALIB += -defaultlib:advapi32
  173. SUFFIX = obj
  174. PSUFFIX = pobj
  175. LIBSUFFIX = a
  176. ifeq ($(C_COMPILER), CLANG)
  177. CCOMMON_OPT += -DMS_ABI
  178. endif
  179. ifeq ($(C_COMPILER), GCC)
  180. #Test for supporting MS_ABI
  181. GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
  182. GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
  183. GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
  184. ifeq ($(GCCVERSIONGT4), 1)
  185. # GCC Majar version > 4
  186. # It is compatible with MSVC ABI.
  187. CCOMMON_OPT += -DMS_ABI
  188. endif
  189. ifeq ($(GCCVERSIONGTEQ4), 1)
  190. ifeq ($(GCCMINORVERSIONGTEQ7), 1)
  191. # GCC Version >=4.7
  192. # It is compatible with MSVC ABI.
  193. CCOMMON_OPT += -DMS_ABI
  194. endif
  195. endif
  196. endif
  197. # Ensure the correct stack alignment on Win32
  198. # http://permalink.gmane.org/gmane.comp.lib.openblas.general/97
  199. ifeq ($(ARCH), x86)
  200. CCOMMON_OPT += -mincoming-stack-boundary=2
  201. FCOMMON_OPT += -mincoming-stack-boundary=2
  202. endif
  203. endif
  204. ifeq ($(OSNAME), Interix)
  205. NEED_PIC = 0
  206. NO_EXPRECISION = 1
  207. INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
  208. endif
  209. ifeq ($(OSNAME), CYGWIN_NT)
  210. NEED_PIC = 0
  211. NO_EXPRECISION = 1
  212. endif
  213. ifneq ($(OSNAME), WINNT)
  214. ifneq ($(OSNAME), CYGWIN_NT)
  215. ifneq ($(OSNAME), Interix)
  216. ifdef SMP
  217. EXTRALIB += -lpthread
  218. endif
  219. endif
  220. endif
  221. endif
  222. # ifeq logical or
  223. ifeq ($(OSNAME), $(filter $(OSNAME),WINNT CYGWIN_NT Interix))
  224. OS_WINDOWS=1
  225. endif
  226. ifdef QUAD_PRECISION
  227. CCOMMON_OPT += -DQUAD_PRECISION
  228. NO_EXPRECISION = 1
  229. endif
  230. ifneq ($(ARCH), x86)
  231. ifneq ($(ARCH), x86_64)
  232. NO_EXPRECISION = 1
  233. endif
  234. endif
  235. ifdef UTEST_CHECK
  236. CCOMMON_OPT += -DUTEST_CHECK
  237. SANITY_CHECK = 1
  238. endif
  239. ifdef SANITY_CHECK
  240. CCOMMON_OPT += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
  241. endif
  242. #
  243. # Architecture dependent settings
  244. #
  245. ifeq ($(ARCH), x86)
  246. ifndef BINARY
  247. NO_BINARY_MODE = 1
  248. endif
  249. ifndef NO_EXPRECISION
  250. ifeq ($(F_COMPILER), GFORTRAN)
  251. # ifeq logical or. GCC or LSB
  252. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
  253. EXPRECISION = 1
  254. CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
  255. FCOMMON_OPT += -m128bit-long-double
  256. endif
  257. ifeq ($(C_COMPILER), CLANG)
  258. EXPRECISION = 1
  259. CCOMMON_OPT += -DEXPRECISION
  260. FCOMMON_OPT += -m128bit-long-double
  261. endif
  262. endif
  263. endif
  264. endif
  265. ifeq ($(ARCH), x86_64)
  266. ifndef NO_EXPRECISION
  267. ifeq ($(F_COMPILER), GFORTRAN)
  268. # ifeq logical or. GCC or LSB
  269. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
  270. EXPRECISION = 1
  271. CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
  272. FCOMMON_OPT += -m128bit-long-double
  273. endif
  274. ifeq ($(C_COMPILER), CLANG)
  275. EXPRECISION = 1
  276. CCOMMON_OPT += -DEXPRECISION
  277. FCOMMON_OPT += -m128bit-long-double
  278. endif
  279. endif
  280. endif
  281. endif
  282. ifeq ($(C_COMPILER), INTEL)
  283. CCOMMON_OPT += -wd981
  284. endif
  285. ifeq ($(USE_OPENMP), 1)
  286. # ifeq logical or. GCC or LSB
  287. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
  288. CCOMMON_OPT += -fopenmp
  289. endif
  290. ifeq ($(C_COMPILER), CLANG)
  291. $(error OpenBLAS: Clang didn't support OpenMP yet.)
  292. CCOMMON_OPT += -fopenmp
  293. endif
  294. ifeq ($(C_COMPILER), INTEL)
  295. CCOMMON_OPT += -openmp
  296. endif
  297. ifeq ($(C_COMPILER), PGI)
  298. CCOMMON_OPT += -mp
  299. endif
  300. ifeq ($(C_COMPILER), OPEN64)
  301. CCOMMON_OPT += -mp
  302. CEXTRALIB += -lstdc++
  303. endif
  304. ifeq ($(C_COMPILER), PATHSCALE)
  305. CCOMMON_OPT += -mp
  306. endif
  307. endif
  308. ifeq ($(DYNAMIC_ARCH), 1)
  309. ifeq ($(ARCH), x86)
  310. DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
  311. CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
  312. endif
  313. ifeq ($(ARCH), x86_64)
  314. DYNAMIC_CORE = PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
  315. ifneq ($(NO_AVX), 1)
  316. DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER HASWELL
  317. endif
  318. endif
  319. ifndef DYNAMIC_CORE
  320. DYNAMIC_ARCH =
  321. endif
  322. endif
  323. ifeq ($(ARCH), ia64)
  324. NO_BINARY_MODE = 1
  325. BINARY_DEFINED = 1
  326. ifeq ($(F_COMPILER), GFORTRAN)
  327. ifeq ($(C_COMPILER), GCC)
  328. # EXPRECISION = 1
  329. # CCOMMON_OPT += -DEXPRECISION
  330. endif
  331. endif
  332. endif
  333. ifeq ($(ARCH), mips64)
  334. NO_BINARY_MODE = 1
  335. endif
  336. ifeq ($(ARCH), alpha)
  337. NO_BINARY_MODE = 1
  338. BINARY_DEFINED = 1
  339. endif
  340. ifeq ($(ARCH), arm)
  341. NO_BINARY_MODE = 1
  342. BINARY_DEFINED = 1
  343. endif
  344. ifeq ($(ARCH), arm64)
  345. NO_BINARY_MODE = 1
  346. BINARY_DEFINED = 1
  347. endif
  348. #
  349. # C Compiler dependent settings
  350. #
  351. # ifeq logical or. GCC or CLANG or LSB
  352. # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
  353. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
  354. CCOMMON_OPT += -Wall
  355. COMMON_PROF += -fno-inline
  356. NO_UNINITIALIZED_WARN = -Wno-uninitialized
  357. ifeq ($(QUIET_MAKE), 1)
  358. CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
  359. endif
  360. ifdef NO_BINARY_MODE
  361. ifeq ($(ARCH), mips64)
  362. ifdef BINARY64
  363. CCOMMON_OPT += -mabi=64
  364. else
  365. CCOMMON_OPT += -mabi=n32
  366. endif
  367. BINARY_DEFINED = 1
  368. endif
  369. ifeq ($(CORE), LOONGSON3A)
  370. CCOMMON_OPT += -march=mips64
  371. FCOMMON_OPT += -march=mips64
  372. endif
  373. ifeq ($(CORE), LOONGSON3B)
  374. CCOMMON_OPT += -march=mips64
  375. FCOMMON_OPT += -march=mips64
  376. endif
  377. ifeq ($(OSNAME), AIX)
  378. BINARY_DEFINED = 1
  379. endif
  380. endif
  381. ifndef BINARY_DEFINED
  382. ifdef BINARY64
  383. CCOMMON_OPT += -m64
  384. else
  385. CCOMMON_OPT += -m32
  386. endif
  387. endif
  388. endif
  389. ifeq ($(C_COMPILER), PGI)
  390. ifdef BINARY64
  391. CCOMMON_OPT += -tp p7-64
  392. else
  393. CCOMMON_OPT += -tp p7
  394. endif
  395. endif
  396. ifeq ($(C_COMPILER), PATHSCALE)
  397. ifdef BINARY64
  398. CCOMMON_OPT += -m64
  399. else
  400. CCOMMON_OPT += -m32
  401. endif
  402. endif
  403. #
  404. # Fortran Compiler dependent settings
  405. #
  406. ifeq ($(F_COMPILER), G77)
  407. CCOMMON_OPT += -DF_INTERFACE_G77
  408. FCOMMON_OPT += -Wall
  409. ifndef NO_BINARY_MODE
  410. ifdef BINARY64
  411. FCOMMON_OPT += -m64
  412. else
  413. FCOMMON_OPT += -m32
  414. endif
  415. endif
  416. endif
  417. ifeq ($(F_COMPILER), G95)
  418. CCOMMON_OPT += -DF_INTERFACE_G95
  419. FCOMMON_OPT += -Wall
  420. ifndef NO_BINARY_MODE
  421. ifdef BINARY64
  422. FCOMMON_OPT += -m64
  423. else
  424. FCOMMON_OPT += -m32
  425. endif
  426. endif
  427. endif
  428. ifeq ($(F_COMPILER), GFORTRAN)
  429. CCOMMON_OPT += -DF_INTERFACE_GFORT
  430. FCOMMON_OPT += -Wall
  431. #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
  432. ifneq ($(NO_LAPACK), 1)
  433. EXTRALIB += -lgfortran
  434. endif
  435. ifdef NO_BINARY_MODE
  436. ifeq ($(ARCH), mips64)
  437. ifdef BINARY64
  438. FCOMMON_OPT += -mabi=64
  439. else
  440. FCOMMON_OPT += -mabi=n32
  441. endif
  442. endif
  443. else
  444. ifdef BINARY64
  445. FCOMMON_OPT += -m64
  446. ifdef INTERFACE64
  447. ifneq ($(INTERFACE64), 0)
  448. FCOMMON_OPT += -fdefault-integer-8
  449. endif
  450. endif
  451. else
  452. FCOMMON_OPT += -m32
  453. endif
  454. endif
  455. ifdef USE_OPENMP
  456. FCOMMON_OPT += -fopenmp
  457. endif
  458. endif
  459. ifeq ($(F_COMPILER), INTEL)
  460. CCOMMON_OPT += -DF_INTERFACE_INTEL
  461. ifdef INTERFACE64
  462. ifneq ($(INTERFACE64), 0)
  463. FCOMMON_OPT += -i8
  464. endif
  465. endif
  466. ifdef USE_OPENMP
  467. FCOMMON_OPT += -openmp
  468. endif
  469. endif
  470. ifeq ($(F_COMPILER), FUJITSU)
  471. CCOMMON_OPT += -DF_INTERFACE_FUJITSU
  472. ifdef USE_OPENMP
  473. FCOMMON_OPT += -openmp
  474. endif
  475. endif
  476. ifeq ($(F_COMPILER), IBM)
  477. CCOMMON_OPT += -DF_INTERFACE_IBM
  478. # FCOMMON_OPT += -qarch=440
  479. ifdef BINARY64
  480. FCOMMON_OPT += -q64
  481. ifdef INTERFACE64
  482. ifneq ($(INTERFACE64), 0)
  483. FCOMMON_OPT += -qintsize=8
  484. endif
  485. endif
  486. else
  487. FCOMMON_OPT += -q32
  488. endif
  489. ifdef USE_OPENMP
  490. FCOMMON_OPT += -openmp
  491. endif
  492. endif
  493. ifeq ($(F_COMPILER), PGI)
  494. CCOMMON_OPT += -DF_INTERFACE_PGI
  495. COMMON_PROF += -DPGICOMPILER
  496. ifdef BINARY64
  497. ifdef INTERFACE64
  498. ifneq ($(INTERFACE64), 0)
  499. FCOMMON_OPT += -i8
  500. endif
  501. endif
  502. FCOMMON_OPT += -tp p7-64
  503. else
  504. FCOMMON_OPT += -tp p7
  505. endif
  506. ifdef USE_OPENMP
  507. FCOMMON_OPT += -mp
  508. endif
  509. endif
  510. ifeq ($(F_COMPILER), PATHSCALE)
  511. CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
  512. ifdef BINARY64
  513. ifdef INTERFACE64
  514. ifneq ($(INTERFACE64), 0)
  515. FCOMMON_OPT += -i8
  516. endif
  517. endif
  518. endif
  519. ifneq ($(ARCH), mips64)
  520. ifndef BINARY64
  521. FCOMMON_OPT += -m32
  522. else
  523. FCOMMON_OPT += -m64
  524. endif
  525. else
  526. ifdef BINARY64
  527. FCOMMON_OPT += -mabi=64
  528. else
  529. FCOMMON_OPT += -mabi=n32
  530. endif
  531. endif
  532. ifdef USE_OPENMP
  533. FCOMMON_OPT += -mp
  534. endif
  535. endif
  536. ifeq ($(F_COMPILER), OPEN64)
  537. CCOMMON_OPT += -DF_INTERFACE_OPEN64
  538. ifdef BINARY64
  539. ifdef INTERFACE64
  540. ifneq ($(INTERFACE64), 0)
  541. FCOMMON_OPT += -i8
  542. endif
  543. endif
  544. endif
  545. ifeq ($(ARCH), mips64)
  546. ifndef BINARY64
  547. FCOMMON_OPT += -n32
  548. else
  549. FCOMMON_OPT += -n64
  550. endif
  551. ifeq ($(CORE), LOONGSON3A)
  552. FCOMMON_OPT += -loongson3 -static
  553. endif
  554. ifeq ($(CORE), LOONGSON3B)
  555. FCOMMON_OPT += -loongson3 -static
  556. endif
  557. else
  558. ifndef BINARY64
  559. FCOMMON_OPT += -m32
  560. else
  561. FCOMMON_OPT += -m64
  562. endif
  563. endif
  564. ifdef USE_OPENMP
  565. FEXTRALIB += -lstdc++
  566. FCOMMON_OPT += -mp
  567. endif
  568. endif
  569. ifeq ($(C_COMPILER), OPEN64)
  570. ifeq ($(ARCH), mips64)
  571. ifndef BINARY64
  572. CCOMMON_OPT += -n32
  573. else
  574. CCOMMON_OPT += -n64
  575. endif
  576. ifeq ($(CORE), LOONGSON3A)
  577. CCOMMON_OPT += -loongson3 -static
  578. endif
  579. ifeq ($(CORE), LOONGSON3B)
  580. CCOMMON_OPT += -loongson3 -static
  581. endif
  582. else
  583. ifndef BINARY64
  584. CCOMMON_OPT += -m32
  585. else
  586. CCOMMON_OPT += -m64
  587. endif
  588. endif
  589. endif
  590. ifeq ($(C_COMPILER), SUN)
  591. CCOMMON_OPT += -w
  592. ifeq ($(ARCH), x86)
  593. CCOMMON_OPT += -m32
  594. else
  595. FCOMMON_OPT += -m64
  596. endif
  597. endif
  598. ifeq ($(F_COMPILER), SUN)
  599. CCOMMON_OPT += -DF_INTERFACE_SUN
  600. ifeq ($(ARCH), x86)
  601. FCOMMON_OPT += -m32
  602. else
  603. FCOMMON_OPT += -m64
  604. endif
  605. ifdef USE_OPENMP
  606. FCOMMON_OPT += -xopenmp=parallel
  607. endif
  608. endif
  609. ifeq ($(F_COMPILER), COMPAQ)
  610. CCOMMON_OPT += -DF_INTERFACE_COMPAQ
  611. ifdef USE_OPENMP
  612. FCOMMON_OPT += -openmp
  613. endif
  614. endif
  615. ifdef BINARY64
  616. ifdef INTERFACE64
  617. ifneq ($(INTERFACE64), 0)
  618. CCOMMON_OPT +=
  619. #-DUSE64BITINT
  620. endif
  621. endif
  622. endif
  623. ifeq ($(NEED_PIC), 1)
  624. ifeq ($(C_COMPILER), IBM)
  625. CCOMMON_OPT += -qpic=large
  626. else
  627. CCOMMON_OPT += -fPIC
  628. endif
  629. ifeq ($(F_COMPILER), SUN)
  630. FCOMMON_OPT += -pic
  631. else
  632. FCOMMON_OPT += -fPIC
  633. endif
  634. endif
  635. ifeq ($(DYNAMIC_ARCH), 1)
  636. CCOMMON_OPT += -DDYNAMIC_ARCH
  637. endif
  638. ifeq ($(NO_LAPACK), 1)
  639. CCOMMON_OPT += -DNO_LAPACK
  640. #Disable LAPACK C interface
  641. NO_LAPACKE = 1
  642. endif
  643. ifeq ($(NO_LAPACKE), 1)
  644. CCOMMON_OPT += -DNO_LAPACKE
  645. endif
  646. ifeq ($(NO_AVX), 1)
  647. CCOMMON_OPT += -DNO_AVX
  648. endif
  649. ifeq ($(BINARY), 32)
  650. CCOMMON_OPT += -DNO_AVX
  651. endif
  652. ifdef SMP
  653. CCOMMON_OPT += -DSMP_SERVER
  654. ifeq ($(ARCH), mips64)
  655. ifneq ($(CORE), LOONGSON3B)
  656. USE_SIMPLE_THREADED_LEVEL3 = 1
  657. endif
  658. endif
  659. ifeq ($(USE_OPENMP), 1)
  660. # USE_SIMPLE_THREADED_LEVEL3 = 1
  661. # NO_AFFINITY = 1
  662. CCOMMON_OPT += -DUSE_OPENMP
  663. endif
  664. endif
  665. ifeq ($(NO_WARMUP), 1)
  666. CCOMMON_OPT += -DNO_WARMUP
  667. endif
  668. ifeq ($(CONSISTENT_FPCSR), 1)
  669. CCOMMON_OPT += -DCONSISTENT_FPCSR
  670. endif
  671. # Only for development
  672. # CCOMMON_OPT += -DPARAMTEST
  673. # CCOMMON_OPT += -DPREFETCHTEST
  674. # CCOMMON_OPT += -DNO_SWITCHING
  675. # USE_PAPI = 1
  676. ifdef USE_PAPI
  677. CCOMMON_OPT += -DUSE_PAPI
  678. EXTRALIB += -lpapi -lperfctr
  679. endif
  680. ifdef DYNAMIC_THREADS
  681. CCOMMON_OPT += -DDYNAMIC_THREADS
  682. endif
  683. CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
  684. ifdef USE_SIMPLE_THREADED_LEVEL3
  685. CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
  686. endif
  687. ifndef LIBNAMESUFFIX
  688. LIBPREFIX = libopenblas
  689. else
  690. LIBPREFIX = libopenblas_$(LIBNAMESUFFIX)
  691. endif
  692. KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
  693. include $(TOPDIR)/Makefile.$(ARCH)
  694. CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
  695. ifeq ($(CORE), PPC440)
  696. CCOMMON_OPT += -DALLOC_QALLOC
  697. endif
  698. ifeq ($(CORE), PPC440FP2)
  699. STATIC_ALLOCATION = 1
  700. endif
  701. ifneq ($(OSNAME), Linux)
  702. NO_AFFINITY = 1
  703. endif
  704. ifneq ($(ARCH), x86_64)
  705. ifneq ($(ARCH), x86)
  706. ifneq ($(CORE), LOONGSON3B)
  707. NO_AFFINITY = 1
  708. endif
  709. endif
  710. endif
  711. ifdef NO_AFFINITY
  712. CCOMMON_OPT += -DNO_AFFINITY
  713. endif
  714. ifdef FUNCTION_PROFILE
  715. CCOMMON_OPT += -DFUNCTION_PROFILE
  716. endif
  717. ifdef HUGETLB_ALLOCATION
  718. CCOMMON_OPT += -DALLOC_HUGETLB
  719. endif
  720. ifdef HUGETLBFILE_ALLOCATION
  721. CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
  722. endif
  723. ifdef STATIC_ALLOCATION
  724. CCOMMON_OPT += -DALLOC_STATIC
  725. endif
  726. ifdef DEVICEDRIVER_ALLOCATION
  727. CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
  728. endif
  729. ifdef MIXED_MEMORY_ALLOCATION
  730. CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
  731. endif
  732. ifeq ($(OSNAME), SunOS)
  733. TAR = gtar
  734. PATCH = gpatch
  735. GREP = ggrep
  736. else
  737. TAR = tar
  738. PATCH = patch
  739. GREP = grep
  740. endif
  741. ifndef MD5SUM
  742. MD5SUM = md5sum
  743. endif
  744. AWK = awk
  745. REVISION = -r$(VERSION)
  746. MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
  747. ifeq ($(DEBUG), 1)
  748. COMMON_OPT += -g
  749. endif
  750. ifndef COMMON_OPT
  751. COMMON_OPT = -O2
  752. endif
  753. override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
  754. override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
  755. override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
  756. override FPFLAGS += $(COMMON_OPT) $(FCOMMON_OPT) $(COMMON_PROF)
  757. #MAKEOVERRIDES =
  758. #For LAPACK Fortran codes.
  759. #Disable -fopenmp for LAPACK Fortran codes on Windows.
  760. ifdef OS_WINDOWS
  761. LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
  762. LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
  763. else
  764. LAPACK_FFLAGS := $(FFLAGS)
  765. LAPACK_FPFLAGS := $(FPFLAGS)
  766. endif
  767. LAPACK_CFLAGS = $(CFLAGS)
  768. LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
  769. ifdef INTERFACE64
  770. ifneq ($(INTERFACE64), 0)
  771. LAPACK_CFLAGS += -DLAPACK_ILP64
  772. endif
  773. endif
  774. ifdef OS_WINDOWS
  775. LAPACK_CFLAGS += -DOPENBLAS_OS_WINDOWS
  776. endif
  777. ifeq ($(C_COMPILER), LSB)
  778. LAPACK_CFLAGS += -DLAPACK_COMPLEX_STRUCTURE
  779. endif
  780. ifndef SUFFIX
  781. SUFFIX = o
  782. endif
  783. ifndef PSUFFIX
  784. PSUFFIX = po
  785. endif
  786. ifndef LIBSUFFIX
  787. LIBSUFFIX = a
  788. endif
  789. ifneq ($(DYNAMIC_ARCH), 1)
  790. ifndef SMP
  791. LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
  792. LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
  793. else
  794. LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
  795. LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
  796. endif
  797. else
  798. ifndef SMP
  799. LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
  800. LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
  801. else
  802. LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
  803. LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
  804. endif
  805. endif
  806. LIBDLLNAME = $(LIBPREFIX).dll
  807. LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
  808. LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
  809. LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
  810. LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
  811. LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
  812. LIBS = $(TOPDIR)/$(LIBNAME)
  813. LIBS_P = $(TOPDIR)/$(LIBNAME_P)
  814. LIB_COMPONENTS = BLAS
  815. ifneq ($(NO_CBLAS), 1)
  816. LIB_COMPONENTS += CBLAS
  817. endif
  818. ifneq ($(NO_LAPACK), 1)
  819. LIB_COMPONENTS += LAPACK
  820. ifneq ($(NO_LAPACKE), 1)
  821. LIB_COMPONENTS += LAPACKE
  822. endif
  823. endif
  824. ifeq ($(ONLY_CBLAS), 1)
  825. LIB_COMPONENTS = CBLAS
  826. endif
  827. export OSNAME
  828. export ARCH
  829. export CORE
  830. export LIBCORE
  831. export PGCPATH
  832. export CONFIG
  833. export CC
  834. export FC
  835. export BU
  836. export FU
  837. export NEED2UNDERSCORES
  838. export USE_THREAD
  839. export NUM_THREADS
  840. export NUM_CORES
  841. export SMP
  842. export MAKEFILE_RULE
  843. export NEED_PIC
  844. export BINARY
  845. export BINARY32
  846. export BINARY64
  847. export F_COMPILER
  848. export C_COMPILER
  849. export USE_OPENMP
  850. export CROSS
  851. export CROSS_SUFFIX
  852. export NOFORTRAN
  853. export NO_FBLAS
  854. export EXTRALIB
  855. export CEXTRALIB
  856. export FEXTRALIB
  857. export HAVE_SSE
  858. export HAVE_SSE2
  859. export HAVE_SSE3
  860. export HAVE_SSSE3
  861. export HAVE_SSE4_1
  862. export HAVE_SSE4_2
  863. export HAVE_SSE4A
  864. export HAVE_SSE5
  865. export HAVE_AVX
  866. export HAVE_VFP
  867. export HAVE_VFPV3
  868. export HAVE_VFPV4
  869. export HAVE_NEON
  870. export KERNELDIR
  871. export FUNCTION_PROFILE
  872. export TARGET_CORE
  873. export SGEMM_UNROLL_M
  874. export SGEMM_UNROLL_N
  875. export DGEMM_UNROLL_M
  876. export DGEMM_UNROLL_N
  877. export QGEMM_UNROLL_M
  878. export QGEMM_UNROLL_N
  879. export CGEMM_UNROLL_M
  880. export CGEMM_UNROLL_N
  881. export ZGEMM_UNROLL_M
  882. export ZGEMM_UNROLL_N
  883. export XGEMM_UNROLL_M
  884. export XGEMM_UNROLL_N
  885. export CGEMM3M_UNROLL_M
  886. export CGEMM3M_UNROLL_N
  887. export ZGEMM3M_UNROLL_M
  888. export ZGEMM3M_UNROLL_N
  889. export XGEMM3M_UNROLL_M
  890. export XGEMM3M_UNROLL_N
  891. ifdef USE_CUDA
  892. export CUDADIR
  893. export CUCC
  894. export CUFLAGS
  895. export CULIB
  896. endif
  897. .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
  898. .f.$(SUFFIX):
  899. $(FC) $(FFLAGS) -c $< -o $(@F)
  900. .f.$(PSUFFIX):
  901. $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
  902. ifdef BINARY64
  903. PATHSCALEPATH = /opt/pathscale/lib/3.1
  904. PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
  905. else
  906. PATHSCALEPATH = /opt/pathscale/lib/3.1/32
  907. PGIPATH = /opt/pgi/linux86/7.1-5/lib
  908. endif
  909. ACMLPATH = /opt/acml/4.3.0
  910. ifneq ($(OSNAME), Darwin)
  911. MKLPATH = /opt/intel/mkl/10.2.2.025/lib
  912. else
  913. MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
  914. endif
  915. ATLASPATH = /opt/atlas/3.9.17/opteron
  916. FLAMEPATH = $(HOME)/flame/lib
  917. ifneq ($(OSNAME), SunOS)
  918. SUNPATH = /opt/sunstudio12.1
  919. else
  920. SUNPATH = /opt/SUNWspro
  921. endif