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