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

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