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

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