You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

Makefile.system 21 kB

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