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