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

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