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

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