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