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