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
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173
  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. ifneq ($(ARCH), x86)
  253. ifneq ($(ARCH), x86_64)
  254. NO_EXPRECISION = 1
  255. endif
  256. endif
  257. ifdef UTEST_CHECK
  258. CCOMMON_OPT += -DUTEST_CHECK
  259. SANITY_CHECK = 1
  260. endif
  261. ifdef SANITY_CHECK
  262. CCOMMON_OPT += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
  263. endif
  264. ifdef MAX_STACK_ALLOC
  265. CCOMMON_OPT += -DMAX_STACK_ALLOC=$(MAX_STACK_ALLOC)
  266. endif
  267. #
  268. # Architecture dependent settings
  269. #
  270. ifeq ($(ARCH), x86)
  271. ifndef BINARY
  272. NO_BINARY_MODE = 1
  273. endif
  274. ifeq ($(CORE), generic)
  275. NO_EXPRECISION = 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. ifeq ($(CORE), generic)
  295. NO_EXPRECISION = 1
  296. endif
  297. ifndef NO_EXPRECISION
  298. ifeq ($(F_COMPILER), GFORTRAN)
  299. # ifeq logical or. GCC or LSB
  300. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
  301. EXPRECISION = 1
  302. CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
  303. FCOMMON_OPT += -m128bit-long-double
  304. endif
  305. ifeq ($(C_COMPILER), CLANG)
  306. EXPRECISION = 1
  307. CCOMMON_OPT += -DEXPRECISION
  308. FCOMMON_OPT += -m128bit-long-double
  309. endif
  310. endif
  311. endif
  312. endif
  313. ifeq ($(C_COMPILER), INTEL)
  314. CCOMMON_OPT += -wd981
  315. endif
  316. ifeq ($(USE_OPENMP), 1)
  317. #check
  318. ifeq ($(USE_THREAD), 0)
  319. $(error OpenBLAS: Cannot set both USE_OPENMP=1 and USE_THREAD=0. The USE_THREAD=0 is only for building single thread version.)
  320. endif
  321. # ifeq logical or. GCC or LSB
  322. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
  323. CCOMMON_OPT += -fopenmp
  324. endif
  325. ifeq ($(C_COMPILER), CLANG)
  326. $(error OpenBLAS: Clang didn't support OpenMP yet.)
  327. CCOMMON_OPT += -fopenmp
  328. endif
  329. ifeq ($(C_COMPILER), INTEL)
  330. CCOMMON_OPT += -openmp
  331. endif
  332. ifeq ($(C_COMPILER), PGI)
  333. CCOMMON_OPT += -mp
  334. endif
  335. ifeq ($(C_COMPILER), OPEN64)
  336. CCOMMON_OPT += -mp
  337. CEXTRALIB += -lstdc++
  338. endif
  339. ifeq ($(C_COMPILER), PATHSCALE)
  340. CCOMMON_OPT += -mp
  341. endif
  342. endif
  343. ifeq ($(DYNAMIC_ARCH), 1)
  344. ifeq ($(ARCH), x86)
  345. DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
  346. CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
  347. endif
  348. ifeq ($(ARCH), x86_64)
  349. DYNAMIC_CORE = PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
  350. ifneq ($(NO_AVX), 1)
  351. DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER STEAMROLLER EXCAVATOR
  352. endif
  353. ifneq ($(NO_AVX2), 1)
  354. DYNAMIC_CORE += HASWELL
  355. endif
  356. endif
  357. ifndef DYNAMIC_CORE
  358. DYNAMIC_ARCH =
  359. endif
  360. endif
  361. ifeq ($(ARCH), ia64)
  362. NO_BINARY_MODE = 1
  363. BINARY_DEFINED = 1
  364. ifeq ($(F_COMPILER), GFORTRAN)
  365. ifeq ($(C_COMPILER), GCC)
  366. # EXPRECISION = 1
  367. # CCOMMON_OPT += -DEXPRECISION
  368. endif
  369. endif
  370. endif
  371. ifeq ($(ARCH), mips64)
  372. NO_BINARY_MODE = 1
  373. endif
  374. ifeq ($(ARCH), alpha)
  375. NO_BINARY_MODE = 1
  376. BINARY_DEFINED = 1
  377. endif
  378. ifeq ($(ARCH), arm)
  379. NO_BINARY_MODE = 1
  380. BINARY_DEFINED = 1
  381. endif
  382. ifeq ($(ARCH), arm64)
  383. NO_BINARY_MODE = 1
  384. BINARY_DEFINED = 1
  385. endif
  386. #
  387. # C Compiler dependent settings
  388. #
  389. # ifeq logical or. GCC or CLANG or LSB
  390. # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
  391. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
  392. CCOMMON_OPT += -Wall
  393. COMMON_PROF += -fno-inline
  394. NO_UNINITIALIZED_WARN = -Wno-uninitialized
  395. ifeq ($(QUIET_MAKE), 1)
  396. CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
  397. endif
  398. ifdef NO_BINARY_MODE
  399. ifeq ($(ARCH), mips64)
  400. ifdef BINARY64
  401. CCOMMON_OPT += -mabi=64
  402. else
  403. CCOMMON_OPT += -mabi=n32
  404. endif
  405. BINARY_DEFINED = 1
  406. endif
  407. ifeq ($(CORE), LOONGSON3A)
  408. CCOMMON_OPT += -march=mips64
  409. FCOMMON_OPT += -march=mips64
  410. endif
  411. ifeq ($(CORE), LOONGSON3B)
  412. CCOMMON_OPT += -march=mips64
  413. FCOMMON_OPT += -march=mips64
  414. endif
  415. ifeq ($(OSNAME), AIX)
  416. BINARY_DEFINED = 1
  417. endif
  418. endif
  419. ifndef BINARY_DEFINED
  420. ifdef BINARY64
  421. CCOMMON_OPT += -m64
  422. else
  423. CCOMMON_OPT += -m32
  424. endif
  425. endif
  426. endif
  427. ifeq ($(C_COMPILER), PGI)
  428. ifdef BINARY64
  429. CCOMMON_OPT += -tp p7-64
  430. else
  431. CCOMMON_OPT += -tp p7
  432. endif
  433. endif
  434. ifeq ($(C_COMPILER), PATHSCALE)
  435. ifdef BINARY64
  436. CCOMMON_OPT += -m64
  437. else
  438. CCOMMON_OPT += -m32
  439. endif
  440. endif
  441. #
  442. # Fortran Compiler dependent settings
  443. #
  444. ifeq ($(F_COMPILER), G77)
  445. CCOMMON_OPT += -DF_INTERFACE_G77
  446. FCOMMON_OPT += -Wall
  447. ifndef NO_BINARY_MODE
  448. ifdef BINARY64
  449. FCOMMON_OPT += -m64
  450. else
  451. FCOMMON_OPT += -m32
  452. endif
  453. endif
  454. endif
  455. ifeq ($(F_COMPILER), G95)
  456. CCOMMON_OPT += -DF_INTERFACE_G95
  457. FCOMMON_OPT += -Wall
  458. ifndef NO_BINARY_MODE
  459. ifdef BINARY64
  460. FCOMMON_OPT += -m64
  461. else
  462. FCOMMON_OPT += -m32
  463. endif
  464. endif
  465. endif
  466. ifeq ($(F_COMPILER), GFORTRAN)
  467. CCOMMON_OPT += -DF_INTERFACE_GFORT
  468. FCOMMON_OPT += -Wall
  469. #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
  470. ifneq ($(NO_LAPACK), 1)
  471. EXTRALIB += -lgfortran
  472. endif
  473. ifdef NO_BINARY_MODE
  474. ifeq ($(ARCH), mips64)
  475. ifdef BINARY64
  476. FCOMMON_OPT += -mabi=64
  477. else
  478. FCOMMON_OPT += -mabi=n32
  479. endif
  480. endif
  481. else
  482. ifdef BINARY64
  483. FCOMMON_OPT += -m64
  484. ifdef INTERFACE64
  485. ifneq ($(INTERFACE64), 0)
  486. FCOMMON_OPT += -fdefault-integer-8
  487. endif
  488. endif
  489. else
  490. FCOMMON_OPT += -m32
  491. endif
  492. endif
  493. ifeq ($(USE_OPENMP), 1)
  494. FCOMMON_OPT += -fopenmp
  495. endif
  496. endif
  497. ifeq ($(F_COMPILER), INTEL)
  498. CCOMMON_OPT += -DF_INTERFACE_INTEL
  499. ifdef INTERFACE64
  500. ifneq ($(INTERFACE64), 0)
  501. FCOMMON_OPT += -i8
  502. endif
  503. endif
  504. ifeq ($(USE_OPENMP), 1)
  505. FCOMMON_OPT += -openmp
  506. endif
  507. endif
  508. ifeq ($(F_COMPILER), FUJITSU)
  509. CCOMMON_OPT += -DF_INTERFACE_FUJITSU
  510. ifeq ($(USE_OPENMP), 1)
  511. FCOMMON_OPT += -openmp
  512. endif
  513. endif
  514. ifeq ($(F_COMPILER), IBM)
  515. CCOMMON_OPT += -DF_INTERFACE_IBM
  516. # FCOMMON_OPT += -qarch=440
  517. ifdef BINARY64
  518. FCOMMON_OPT += -q64
  519. ifdef INTERFACE64
  520. ifneq ($(INTERFACE64), 0)
  521. FCOMMON_OPT += -qintsize=8
  522. endif
  523. endif
  524. else
  525. FCOMMON_OPT += -q32
  526. endif
  527. ifeq ($(USE_OPENMP), 1)
  528. FCOMMON_OPT += -openmp
  529. endif
  530. endif
  531. ifeq ($(F_COMPILER), PGI)
  532. CCOMMON_OPT += -DF_INTERFACE_PGI
  533. COMMON_PROF += -DPGICOMPILER
  534. ifdef BINARY64
  535. ifdef INTERFACE64
  536. ifneq ($(INTERFACE64), 0)
  537. FCOMMON_OPT += -i8
  538. endif
  539. endif
  540. FCOMMON_OPT += -tp p7-64
  541. else
  542. FCOMMON_OPT += -tp p7
  543. endif
  544. ifeq ($(USE_OPENMP), 1)
  545. FCOMMON_OPT += -mp
  546. endif
  547. endif
  548. ifeq ($(F_COMPILER), PATHSCALE)
  549. CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
  550. ifdef BINARY64
  551. ifdef INTERFACE64
  552. ifneq ($(INTERFACE64), 0)
  553. FCOMMON_OPT += -i8
  554. endif
  555. endif
  556. endif
  557. ifneq ($(ARCH), mips64)
  558. ifndef BINARY64
  559. FCOMMON_OPT += -m32
  560. else
  561. FCOMMON_OPT += -m64
  562. endif
  563. else
  564. ifdef BINARY64
  565. FCOMMON_OPT += -mabi=64
  566. else
  567. FCOMMON_OPT += -mabi=n32
  568. endif
  569. endif
  570. ifeq ($(USE_OPENMP), 1)
  571. FCOMMON_OPT += -mp
  572. endif
  573. endif
  574. ifeq ($(F_COMPILER), OPEN64)
  575. CCOMMON_OPT += -DF_INTERFACE_OPEN64
  576. ifdef BINARY64
  577. ifdef INTERFACE64
  578. ifneq ($(INTERFACE64), 0)
  579. FCOMMON_OPT += -i8
  580. endif
  581. endif
  582. endif
  583. ifeq ($(ARCH), mips64)
  584. ifndef BINARY64
  585. FCOMMON_OPT += -n32
  586. else
  587. FCOMMON_OPT += -n64
  588. endif
  589. ifeq ($(CORE), LOONGSON3A)
  590. FCOMMON_OPT += -loongson3 -static
  591. endif
  592. ifeq ($(CORE), LOONGSON3B)
  593. FCOMMON_OPT += -loongson3 -static
  594. endif
  595. else
  596. ifndef BINARY64
  597. FCOMMON_OPT += -m32
  598. else
  599. FCOMMON_OPT += -m64
  600. endif
  601. endif
  602. ifeq ($(USE_OPENMP), 1)
  603. FEXTRALIB += -lstdc++
  604. FCOMMON_OPT += -mp
  605. endif
  606. endif
  607. ifeq ($(C_COMPILER), OPEN64)
  608. ifeq ($(ARCH), mips64)
  609. ifndef BINARY64
  610. CCOMMON_OPT += -n32
  611. else
  612. CCOMMON_OPT += -n64
  613. endif
  614. ifeq ($(CORE), LOONGSON3A)
  615. CCOMMON_OPT += -loongson3 -static
  616. endif
  617. ifeq ($(CORE), LOONGSON3B)
  618. CCOMMON_OPT += -loongson3 -static
  619. endif
  620. else
  621. ifndef BINARY64
  622. CCOMMON_OPT += -m32
  623. else
  624. CCOMMON_OPT += -m64
  625. endif
  626. endif
  627. endif
  628. ifeq ($(C_COMPILER), SUN)
  629. CCOMMON_OPT += -w
  630. ifeq ($(ARCH), x86)
  631. CCOMMON_OPT += -m32
  632. else
  633. FCOMMON_OPT += -m64
  634. endif
  635. endif
  636. ifeq ($(F_COMPILER), SUN)
  637. CCOMMON_OPT += -DF_INTERFACE_SUN
  638. ifeq ($(ARCH), x86)
  639. FCOMMON_OPT += -m32
  640. else
  641. FCOMMON_OPT += -m64
  642. endif
  643. ifeq ($(USE_OPENMP), 1)
  644. FCOMMON_OPT += -xopenmp=parallel
  645. endif
  646. endif
  647. ifeq ($(F_COMPILER), COMPAQ)
  648. CCOMMON_OPT += -DF_INTERFACE_COMPAQ
  649. ifeq ($(USE_OPENMP), 1)
  650. FCOMMON_OPT += -openmp
  651. endif
  652. endif
  653. ifdef BINARY64
  654. ifdef INTERFACE64
  655. ifneq ($(INTERFACE64), 0)
  656. CCOMMON_OPT +=
  657. #-DUSE64BITINT
  658. endif
  659. endif
  660. endif
  661. ifeq ($(NEED_PIC), 1)
  662. ifeq ($(C_COMPILER), IBM)
  663. CCOMMON_OPT += -qpic=large
  664. else
  665. CCOMMON_OPT += -fPIC
  666. endif
  667. ifeq ($(F_COMPILER), SUN)
  668. FCOMMON_OPT += -pic
  669. else
  670. FCOMMON_OPT += -fPIC
  671. endif
  672. endif
  673. ifeq ($(DYNAMIC_ARCH), 1)
  674. CCOMMON_OPT += -DDYNAMIC_ARCH
  675. endif
  676. ifeq ($(NO_LAPACK), 1)
  677. CCOMMON_OPT += -DNO_LAPACK
  678. #Disable LAPACK C interface
  679. NO_LAPACKE = 1
  680. endif
  681. ifeq ($(NO_LAPACKE), 1)
  682. CCOMMON_OPT += -DNO_LAPACKE
  683. endif
  684. ifeq ($(NO_AVX), 1)
  685. CCOMMON_OPT += -DNO_AVX
  686. endif
  687. ifeq ($(ARCH), x86)
  688. CCOMMON_OPT += -DNO_AVX
  689. endif
  690. ifeq ($(NO_AVX2), 1)
  691. CCOMMON_OPT += -DNO_AVX2
  692. endif
  693. ifdef SMP
  694. CCOMMON_OPT += -DSMP_SERVER
  695. ifeq ($(ARCH), mips64)
  696. ifneq ($(CORE), LOONGSON3B)
  697. USE_SIMPLE_THREADED_LEVEL3 = 1
  698. endif
  699. endif
  700. ifeq ($(USE_OPENMP), 1)
  701. # USE_SIMPLE_THREADED_LEVEL3 = 1
  702. # NO_AFFINITY = 1
  703. CCOMMON_OPT += -DUSE_OPENMP
  704. endif
  705. ifeq ($(BIGNUMA), 1)
  706. CCOMMON_OPT += -DBIGNUMA
  707. endif
  708. endif
  709. ifeq ($(NO_WARMUP), 1)
  710. CCOMMON_OPT += -DNO_WARMUP
  711. endif
  712. ifeq ($(CONSISTENT_FPCSR), 1)
  713. CCOMMON_OPT += -DCONSISTENT_FPCSR
  714. endif
  715. # Only for development
  716. # CCOMMON_OPT += -DPARAMTEST
  717. # CCOMMON_OPT += -DPREFETCHTEST
  718. # CCOMMON_OPT += -DNO_SWITCHING
  719. # USE_PAPI = 1
  720. ifdef USE_PAPI
  721. CCOMMON_OPT += -DUSE_PAPI
  722. EXTRALIB += -lpapi -lperfctr
  723. endif
  724. ifdef DYNAMIC_THREADS
  725. CCOMMON_OPT += -DDYNAMIC_THREADS
  726. endif
  727. CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
  728. ifdef USE_SIMPLE_THREADED_LEVEL3
  729. CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
  730. endif
  731. ifndef SYMBOLPREFIX
  732. SYMBOLPREFIX =
  733. endif
  734. ifndef SYMBOLSUFFIX
  735. SYMBOLSUFFIX =
  736. endif
  737. ifndef LIBNAMESUFFIX
  738. LIBPREFIX = lib$(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)
  739. else
  740. LIBPREFIX = lib$(SYMBOLPREFIX)openblas$(SYMBOLSUFFIX)_$(LIBNAMESUFFIX)
  741. endif
  742. KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
  743. include $(TOPDIR)/Makefile.$(ARCH)
  744. CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
  745. ifeq ($(CORE), PPC440)
  746. CCOMMON_OPT += -DALLOC_QALLOC
  747. endif
  748. ifeq ($(CORE), PPC440FP2)
  749. STATIC_ALLOCATION = 1
  750. endif
  751. ifneq ($(OSNAME), Linux)
  752. NO_AFFINITY = 1
  753. endif
  754. ifneq ($(ARCH), x86_64)
  755. ifneq ($(ARCH), x86)
  756. ifneq ($(CORE), LOONGSON3B)
  757. NO_AFFINITY = 1
  758. endif
  759. endif
  760. endif
  761. ifdef NO_AFFINITY
  762. CCOMMON_OPT += -DNO_AFFINITY
  763. endif
  764. ifdef FUNCTION_PROFILE
  765. CCOMMON_OPT += -DFUNCTION_PROFILE
  766. endif
  767. ifdef HUGETLB_ALLOCATION
  768. CCOMMON_OPT += -DALLOC_HUGETLB
  769. endif
  770. ifdef HUGETLBFILE_ALLOCATION
  771. CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
  772. endif
  773. ifdef STATIC_ALLOCATION
  774. CCOMMON_OPT += -DALLOC_STATIC
  775. endif
  776. ifdef DEVICEDRIVER_ALLOCATION
  777. CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
  778. endif
  779. ifdef MIXED_MEMORY_ALLOCATION
  780. CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
  781. endif
  782. ifeq ($(OSNAME), SunOS)
  783. TAR = gtar
  784. PATCH = gpatch
  785. GREP = ggrep
  786. else
  787. TAR = tar
  788. PATCH = patch
  789. GREP = grep
  790. endif
  791. ifndef MD5SUM
  792. MD5SUM = md5sum
  793. endif
  794. AWK = awk
  795. REVISION = -r$(VERSION)
  796. MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
  797. ifeq ($(DEBUG), 1)
  798. COMMON_OPT += -g
  799. endif
  800. ifndef COMMON_OPT
  801. COMMON_OPT = -O2
  802. endif
  803. override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
  804. override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
  805. override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
  806. override FPFLAGS += $(COMMON_OPT) $(FCOMMON_OPT) $(COMMON_PROF)
  807. #MAKEOVERRIDES =
  808. #For LAPACK Fortran codes.
  809. #Disable -fopenmp for LAPACK Fortran codes on Windows.
  810. ifdef OS_WINDOWS
  811. LAPACK_FFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FFLAGS))
  812. LAPACK_FPFLAGS := $(filter-out -fopenmp -mp -openmp -xopenmp=parallel,$(FPFLAGS))
  813. else
  814. LAPACK_FFLAGS := $(FFLAGS)
  815. LAPACK_FPFLAGS := $(FPFLAGS)
  816. endif
  817. LAPACK_CFLAGS = $(CFLAGS)
  818. LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
  819. ifdef INTERFACE64
  820. ifneq ($(INTERFACE64), 0)
  821. LAPACK_CFLAGS += -DLAPACK_ILP64
  822. endif
  823. endif
  824. ifdef OS_WINDOWS
  825. LAPACK_CFLAGS += -DOPENBLAS_OS_WINDOWS
  826. endif
  827. ifeq ($(C_COMPILER), LSB)
  828. LAPACK_CFLAGS += -DLAPACK_COMPLEX_STRUCTURE
  829. endif
  830. ifndef SUFFIX
  831. SUFFIX = o
  832. endif
  833. ifndef PSUFFIX
  834. PSUFFIX = po
  835. endif
  836. ifndef LIBSUFFIX
  837. LIBSUFFIX = a
  838. endif
  839. ifneq ($(DYNAMIC_ARCH), 1)
  840. ifndef SMP
  841. LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
  842. LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
  843. else
  844. LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
  845. LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
  846. endif
  847. else
  848. ifndef SMP
  849. LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
  850. LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
  851. else
  852. LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
  853. LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
  854. endif
  855. endif
  856. LIBDLLNAME = $(LIBPREFIX).dll
  857. LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
  858. LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
  859. LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
  860. LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
  861. LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
  862. LIBS = $(TOPDIR)/$(LIBNAME)
  863. LIBS_P = $(TOPDIR)/$(LIBNAME_P)
  864. LIB_COMPONENTS = BLAS
  865. ifneq ($(NO_CBLAS), 1)
  866. LIB_COMPONENTS += CBLAS
  867. endif
  868. ifneq ($(NO_LAPACK), 1)
  869. LIB_COMPONENTS += LAPACK
  870. ifneq ($(NO_LAPACKE), 1)
  871. LIB_COMPONENTS += LAPACKE
  872. endif
  873. endif
  874. ifeq ($(ONLY_CBLAS), 1)
  875. LIB_COMPONENTS = CBLAS
  876. endif
  877. export OSNAME
  878. export ARCH
  879. export CORE
  880. export LIBCORE
  881. export PGCPATH
  882. export CONFIG
  883. export CC
  884. export FC
  885. export BU
  886. export FU
  887. export NEED2UNDERSCORES
  888. export USE_THREAD
  889. export NUM_THREADS
  890. export NUM_CORES
  891. export SMP
  892. export MAKEFILE_RULE
  893. export NEED_PIC
  894. export BINARY
  895. export BINARY32
  896. export BINARY64
  897. export F_COMPILER
  898. export C_COMPILER
  899. export USE_OPENMP
  900. export CROSS
  901. export CROSS_SUFFIX
  902. export NOFORTRAN
  903. export NO_FBLAS
  904. export EXTRALIB
  905. export CEXTRALIB
  906. export FEXTRALIB
  907. export HAVE_SSE
  908. export HAVE_SSE2
  909. export HAVE_SSE3
  910. export HAVE_SSSE3
  911. export HAVE_SSE4_1
  912. export HAVE_SSE4_2
  913. export HAVE_SSE4A
  914. export HAVE_SSE5
  915. export HAVE_AVX
  916. export HAVE_VFP
  917. export HAVE_VFPV3
  918. export HAVE_VFPV4
  919. export HAVE_NEON
  920. export KERNELDIR
  921. export FUNCTION_PROFILE
  922. export TARGET_CORE
  923. export SGEMM_UNROLL_M
  924. export SGEMM_UNROLL_N
  925. export DGEMM_UNROLL_M
  926. export DGEMM_UNROLL_N
  927. export QGEMM_UNROLL_M
  928. export QGEMM_UNROLL_N
  929. export CGEMM_UNROLL_M
  930. export CGEMM_UNROLL_N
  931. export ZGEMM_UNROLL_M
  932. export ZGEMM_UNROLL_N
  933. export XGEMM_UNROLL_M
  934. export XGEMM_UNROLL_N
  935. export CGEMM3M_UNROLL_M
  936. export CGEMM3M_UNROLL_N
  937. export ZGEMM3M_UNROLL_M
  938. export ZGEMM3M_UNROLL_N
  939. export XGEMM3M_UNROLL_M
  940. export XGEMM3M_UNROLL_N
  941. ifdef USE_CUDA
  942. export CUDADIR
  943. export CUCC
  944. export CUFLAGS
  945. export CULIB
  946. endif
  947. .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
  948. .f.$(SUFFIX):
  949. $(FC) $(FFLAGS) -c $< -o $(@F)
  950. .f.$(PSUFFIX):
  951. $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
  952. ifdef BINARY64
  953. PATHSCALEPATH = /opt/pathscale/lib/3.1
  954. PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
  955. else
  956. PATHSCALEPATH = /opt/pathscale/lib/3.1/32
  957. PGIPATH = /opt/pgi/linux86/7.1-5/lib
  958. endif
  959. ACMLPATH = /opt/acml/4.3.0
  960. ifneq ($(OSNAME), Darwin)
  961. MKLPATH = /opt/intel/mkl/10.2.2.025/lib
  962. else
  963. MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
  964. endif
  965. ATLASPATH = /opt/atlas/3.9.17/opteron
  966. FLAMEPATH = $(HOME)/flame/lib
  967. ifneq ($(OSNAME), SunOS)
  968. SUNPATH = /opt/sunstudio12.1
  969. else
  970. SUNPATH = /opt/SUNWspro
  971. endif