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

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