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