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

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