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

Makefile.system 22 kB

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