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

13 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986
  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. endif
  23. endif
  24. # Default Fortran compiler (FC) is selected by f_check.
  25. ifndef MAKEFILE_RULE
  26. include $(TOPDIR)/Makefile.rule
  27. else
  28. include $(TOPDIR)/$(MAKEFILE_RULE)
  29. endif
  30. #
  31. # Beginning of system configuration
  32. #
  33. ifndef HOSTCC
  34. HOSTCC = $(CC)
  35. endif
  36. ifdef TARGET
  37. GETARCH_FLAGS := -DFORCE_$(TARGET)
  38. endif
  39. #TARGET_CORE will override TARGET which is used in DYNAMIC_ARCH=1.
  40. #
  41. ifdef TARGET_CORE
  42. GETARCH_FLAGS := -DFORCE_$(TARGET_CORE)
  43. endif
  44. ifdef INTERFACE64
  45. GETARCH_FLAGS += -DUSE64BITINT
  46. endif
  47. ifndef GEMM_MULTITHREAD_THRESHOLD
  48. GEMM_MULTITHREAD_THRESHOLD=4
  49. endif
  50. GETARCH_FLAGS += -DGEMM_MULTITHREAD_THRESHOLD=$(GEMM_MULTITHREAD_THRESHOLD)
  51. ifeq ($(NO_AVX), 1)
  52. GETARCH_FLAGS += -DNO_AVX
  53. endif
  54. ifeq ($(DEBUG), 1)
  55. GETARCH_FLAGS += -g
  56. endif
  57. ifeq ($(QUIET_MAKE), 1)
  58. MAKE += -s
  59. endif
  60. ifndef NO_PARALLEL_MAKE
  61. NO_PARALLEL_MAKE=0
  62. endif
  63. GETARCH_FLAGS += -DNO_PARALLEL_MAKE=$(NO_PARALLEL_MAKE)
  64. ifeq ($(HOSTCC), loongcc)
  65. GETARCH_FLAGS += -static
  66. endif
  67. # This operation is expensive, so execution should be once.
  68. ifndef GOTOBLAS_MAKEFILE
  69. export GOTOBLAS_MAKEFILE = 1
  70. # Generating Makefile.conf and config.h
  71. 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) all)
  72. ifndef TARGET_CORE
  73. include $(TOPDIR)/Makefile.conf
  74. else
  75. include $(TOPDIR)/Makefile_kernel.conf
  76. endif
  77. endif
  78. ifndef NUM_THREADS
  79. NUM_THREADS = $(NUM_CORES)
  80. endif
  81. ifeq ($(NUM_THREADS), 1)
  82. override USE_THREAD = 0
  83. endif
  84. ifdef USE_THREAD
  85. ifeq ($(USE_THREAD), 0)
  86. SMP =
  87. else
  88. SMP = 1
  89. endif
  90. else
  91. ifeq ($(NUM_THREAD), 1)
  92. SMP =
  93. else
  94. SMP = 1
  95. endif
  96. endif
  97. ifndef NEED_PIC
  98. NEED_PIC = 1
  99. endif
  100. ARFLAGS =
  101. CPP = $(COMPILER) -E
  102. AR = $(CROSS_SUFFIX)ar
  103. AS = $(CROSS_SUFFIX)as
  104. LD = $(CROSS_SUFFIX)ld
  105. RANLIB = $(CROSS_SUFFIX)ranlib
  106. NM = $(CROSS_SUFFIX)nm
  107. DLLWRAP = $(CROSS_SUFFIX)dllwrap
  108. #
  109. # OS dependent settings
  110. #
  111. ifeq ($(OSNAME), Darwin)
  112. export MACOSX_DEPLOYMENT_TARGET=10.2
  113. MD5SUM = md5 -r
  114. endif
  115. ifeq ($(OSNAME), FreeBSD)
  116. MD5SUM = md5 -r
  117. endif
  118. ifeq ($(OSNAME), NetBSD)
  119. MD5SUM = md5 -n
  120. endif
  121. ifeq ($(OSNAME), Linux)
  122. EXTRALIB += -lm
  123. endif
  124. ifeq ($(OSNAME), AIX)
  125. EXTRALIB += -lm
  126. endif
  127. ifeq ($(OSNAME), WINNT)
  128. NEED_PIC = 0
  129. NO_EXPRECISION = 1
  130. EXTRALIB += -defaultlib:advapi32
  131. SUFFIX = obj
  132. PSUFFIX = pobj
  133. LIBSUFFIX = a
  134. ifeq ($(C_COMPILER), CLANG)
  135. CCOMMON_OPT += -DMS_ABI
  136. endif
  137. ifeq ($(C_COMPILER), GCC)
  138. #Test for supporting MS_ABI
  139. GCCVERSIONGTEQ4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \>= 4)
  140. GCCVERSIONGT4 := $(shell expr `$(CC) -dumpversion | cut -f1 -d.` \> 4)
  141. GCCMINORVERSIONGTEQ7 := $(shell expr `$(CC) -dumpversion | cut -f2 -d.` \>= 7)
  142. ifeq ($(GCCVERSIONGT4), 1)
  143. # GCC Majar version > 4
  144. # It is compatible with MSVC ABI.
  145. CCOMMON_OPT += -DMS_ABI
  146. endif
  147. ifeq ($(GCCVERSIONGTEQ4), 1)
  148. ifeq ($(GCCMINORVERSIONGTEQ7), 1)
  149. # GCC Version >=4.7
  150. # It is compatible with MSVC ABI.
  151. CCOMMON_OPT += -DMS_ABI
  152. endif
  153. endif
  154. endif
  155. # Ensure the correct stack alignment on Win32
  156. # http://permalink.gmane.org/gmane.comp.lib.openblas.general/97
  157. ifeq ($(ARCH), x86)
  158. CCOMMON_OPT += -mincoming-stack-boundary=2
  159. FCOMMON_OPT += -mincoming-stack-boundary=2
  160. endif
  161. endif
  162. ifeq ($(OSNAME), Interix)
  163. NEED_PIC = 0
  164. NO_EXPRECISION = 1
  165. INTERIX_TOOL_DIR = /opt/gcc.3.3/i586-pc-interix3/bin
  166. endif
  167. ifeq ($(OSNAME), CYGWIN_NT)
  168. NEED_PIC = 0
  169. NO_EXPRECISION = 1
  170. endif
  171. ifneq ($(OSNAME), WINNT)
  172. ifneq ($(OSNAME), CYGWIN_NT)
  173. ifneq ($(OSNAME), Interix)
  174. ifdef SMP
  175. EXTRALIB += -lpthread
  176. endif
  177. endif
  178. endif
  179. endif
  180. ifdef QUAD_PRECISION
  181. CCOMMON_OPT += -DQUAD_PRECISION
  182. NO_EXPRECISION = 1
  183. endif
  184. ifneq ($(ARCH), x86)
  185. ifneq ($(ARCH), x86_64)
  186. NO_EXPRECISION = 1
  187. endif
  188. endif
  189. ifdef UTEST_CHECK
  190. CCOMMON_OPT += -DUTEST_CHECK
  191. SANITY_CHECK = 1
  192. endif
  193. ifdef SANITY_CHECK
  194. CCOMMON_OPT += -DSANITY_CHECK -DREFNAME=$(*F)f$(BU)
  195. endif
  196. #
  197. # Architecture dependent settings
  198. #
  199. ifeq ($(ARCH), x86)
  200. ifndef BINARY
  201. NO_BINARY_MODE = 1
  202. endif
  203. ifndef NO_EXPRECISION
  204. ifeq ($(F_COMPILER), GFORTRAN)
  205. # ifeq logical or. GCC or LSB
  206. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
  207. EXPRECISION = 1
  208. CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
  209. FCOMMON_OPT += -m128bit-long-double
  210. endif
  211. ifeq ($(C_COMPILER), CLANG)
  212. EXPRECISION = 1
  213. CCOMMON_OPT += -DEXPRECISION
  214. FCOMMON_OPT += -m128bit-long-double
  215. endif
  216. endif
  217. endif
  218. endif
  219. ifeq ($(ARCH), x86_64)
  220. ifndef NO_EXPRECISION
  221. ifeq ($(F_COMPILER), GFORTRAN)
  222. # ifeq logical or. GCC or LSB
  223. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
  224. EXPRECISION = 1
  225. CCOMMON_OPT += -DEXPRECISION -m128bit-long-double
  226. FCOMMON_OPT += -m128bit-long-double
  227. endif
  228. ifeq ($(C_COMPILER), CLANG)
  229. EXPRECISION = 1
  230. CCOMMON_OPT += -DEXPRECISION
  231. FCOMMON_OPT += -m128bit-long-double
  232. endif
  233. endif
  234. endif
  235. endif
  236. ifeq ($(C_COMPILER), INTEL)
  237. CCOMMON_OPT += -wd981
  238. endif
  239. ifeq ($(USE_OPENMP), 1)
  240. # ifeq logical or. GCC or LSB
  241. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC LSB))
  242. CCOMMON_OPT += -fopenmp
  243. endif
  244. ifeq ($(C_COMPILER), CLANG)
  245. $(error OpenBLAS: Clang didn't support OpenMP yet.)
  246. CCOMMON_OPT += -fopenmp
  247. endif
  248. ifeq ($(C_COMPILER), INTEL)
  249. CCOMMON_OPT += -openmp
  250. endif
  251. ifeq ($(C_COMPILER), PGI)
  252. CCOMMON_OPT += -mp
  253. endif
  254. ifeq ($(C_COMPILER), OPEN64)
  255. CCOMMON_OPT += -mp
  256. CEXTRALIB += -lstdc++
  257. endif
  258. ifeq ($(C_COMPILER), PATHSCALE)
  259. CCOMMON_OPT += -mp
  260. endif
  261. endif
  262. ifeq ($(DYNAMIC_ARCH), 1)
  263. ifeq ($(ARCH), x86)
  264. DYNAMIC_CORE = KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS \
  265. CORE2 PENRYN DUNNINGTON NEHALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
  266. ifneq ($(NO_AVX), 1)
  267. DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER
  268. endif
  269. endif
  270. ifeq ($(ARCH), x86_64)
  271. DYNAMIC_CORE = PRESCOTT CORE2 PENRYN DUNNINGTON NEHALEM OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO
  272. ifneq ($(NO_AVX), 1)
  273. DYNAMIC_CORE += SANDYBRIDGE BULLDOZER PILEDRIVER
  274. endif
  275. endif
  276. ifndef DYNAMIC_CORE
  277. DYNAMIC_ARCH =
  278. endif
  279. endif
  280. ifeq ($(ARCH), ia64)
  281. NO_BINARY_MODE = 1
  282. BINARY_DEFINED = 1
  283. ifeq ($(F_COMPILER), GFORTRAN)
  284. ifeq ($(C_COMPILER), GCC)
  285. # EXPRECISION = 1
  286. # CCOMMON_OPT += -DEXPRECISION
  287. endif
  288. endif
  289. endif
  290. ifeq ($(ARCH), mips64)
  291. NO_BINARY_MODE = 1
  292. endif
  293. ifeq ($(ARCH), alpha)
  294. NO_BINARY_MODE = 1
  295. BINARY_DEFINED = 1
  296. endif
  297. #
  298. # C Compiler dependent settings
  299. #
  300. # ifeq logical or. GCC or CLANG or LSB
  301. # http://stackoverflow.com/questions/7656425/makefile-ifeq-logical-or
  302. ifeq ($(C_COMPILER), $(filter $(C_COMPILER),GCC CLANG LSB))
  303. CCOMMON_OPT += -Wall
  304. COMMON_PROF += -fno-inline
  305. NO_UNINITIALIZED_WARN = -Wno-uninitialized
  306. ifeq ($(QUIET_MAKE), 1)
  307. CCOMMON_OPT += $(NO_UNINITIALIZED_WARN) -Wno-unused
  308. endif
  309. ifdef NO_BINARY_MODE
  310. ifeq ($(ARCH), mips64)
  311. ifdef BINARY64
  312. CCOMMON_OPT += -mabi=64
  313. else
  314. CCOMMON_OPT += -mabi=n32
  315. endif
  316. BINARY_DEFINED = 1
  317. endif
  318. ifeq ($(CORE), LOONGSON3A)
  319. CCOMMON_OPT += -march=mips64
  320. FCOMMON_OPT += -march=mips64
  321. endif
  322. ifeq ($(CORE), LOONGSON3B)
  323. CCOMMON_OPT += -march=mips64
  324. FCOMMON_OPT += -march=mips64
  325. endif
  326. ifeq ($(OSNAME), AIX)
  327. BINARY_DEFINED = 1
  328. endif
  329. endif
  330. ifndef BINARY_DEFINED
  331. ifdef BINARY64
  332. CCOMMON_OPT += -m64
  333. else
  334. CCOMMON_OPT += -m32
  335. endif
  336. endif
  337. endif
  338. ifeq ($(C_COMPILER), PGI)
  339. ifdef BINARY64
  340. CCOMMON_OPT += -tp p7-64
  341. else
  342. CCOMMON_OPT += -tp p7
  343. endif
  344. endif
  345. ifeq ($(C_COMPILER), PATHSCALE)
  346. ifdef BINARY64
  347. CCOMMON_OPT += -m64
  348. else
  349. CCOMMON_OPT += -m32
  350. endif
  351. endif
  352. #
  353. # Fortran Compiler dependent settings
  354. #
  355. ifeq ($(F_COMPILER), G77)
  356. CCOMMON_OPT += -DF_INTERFACE_G77
  357. FCOMMON_OPT += -Wall
  358. ifndef NO_BINARY_MODE
  359. ifdef BINARY64
  360. FCOMMON_OPT += -m64
  361. else
  362. FCOMMON_OPT += -m32
  363. endif
  364. endif
  365. endif
  366. ifeq ($(F_COMPILER), G95)
  367. CCOMMON_OPT += -DF_INTERFACE_G95
  368. FCOMMON_OPT += -Wall
  369. ifndef NO_BINARY_MODE
  370. ifdef BINARY64
  371. FCOMMON_OPT += -m64
  372. else
  373. FCOMMON_OPT += -m32
  374. endif
  375. endif
  376. endif
  377. ifeq ($(F_COMPILER), GFORTRAN)
  378. CCOMMON_OPT += -DF_INTERFACE_GFORT
  379. FCOMMON_OPT += -Wall
  380. #Don't include -lgfortran, when NO_LAPACK=1 or lsbcc
  381. ifneq ($(NO_LAPACK), 1)
  382. ifneq ($(C_COMPILER), LSB)
  383. EXTRALIB += -lgfortran
  384. endif
  385. endif
  386. ifdef NO_BINARY_MODE
  387. ifeq ($(ARCH), mips64)
  388. ifdef BINARY64
  389. FCOMMON_OPT += -mabi=64
  390. else
  391. FCOMMON_OPT += -mabi=n32
  392. endif
  393. endif
  394. else
  395. ifdef BINARY64
  396. FCOMMON_OPT += -m64
  397. ifdef INTERFACE64
  398. FCOMMON_OPT += -fdefault-integer-8
  399. endif
  400. else
  401. FCOMMON_OPT += -m32
  402. endif
  403. endif
  404. ifdef USE_OPENMP
  405. FCOMMON_OPT += -fopenmp
  406. endif
  407. endif
  408. ifeq ($(F_COMPILER), INTEL)
  409. CCOMMON_OPT += -DF_INTERFACE_INTEL
  410. ifdef INTERFACE64
  411. FCOMMON_OPT += -i8
  412. endif
  413. ifdef USE_OPENMP
  414. FCOMMON_OPT += -openmp
  415. endif
  416. endif
  417. ifeq ($(F_COMPILER), FUJITSU)
  418. CCOMMON_OPT += -DF_INTERFACE_FUJITSU
  419. ifdef USE_OPENMP
  420. FCOMMON_OPT += -openmp
  421. endif
  422. endif
  423. ifeq ($(F_COMPILER), IBM)
  424. CCOMMON_OPT += -DF_INTERFACE_IBM
  425. # FCOMMON_OPT += -qarch=440
  426. ifdef BINARY64
  427. FCOMMON_OPT += -q64
  428. ifdef INTERFACE64
  429. FCOMMON_OPT += -qintsize=8
  430. endif
  431. else
  432. FCOMMON_OPT += -q32
  433. endif
  434. ifdef USE_OPENMP
  435. FCOMMON_OPT += -openmp
  436. endif
  437. endif
  438. ifeq ($(F_COMPILER), PGI)
  439. CCOMMON_OPT += -DF_INTERFACE_PGI
  440. COMMON_PROF += -DPGICOMPILER
  441. ifdef BINARY64
  442. ifdef INTERFACE64
  443. FCOMMON_OPT += -i8
  444. endif
  445. FCOMMON_OPT += -tp p7-64
  446. else
  447. FCOMMON_OPT += -tp p7
  448. endif
  449. ifdef USE_OPENMP
  450. FCOMMON_OPT += -mp
  451. endif
  452. endif
  453. ifeq ($(F_COMPILER), PATHSCALE)
  454. CCOMMON_OPT += -DF_INTERFACE_PATHSCALE
  455. ifdef BINARY64
  456. ifdef INTERFACE64
  457. FCOMMON_OPT += -i8
  458. endif
  459. endif
  460. ifneq ($(ARCH), mips64)
  461. ifndef BINARY64
  462. FCOMMON_OPT += -m32
  463. else
  464. FCOMMON_OPT += -m64
  465. endif
  466. else
  467. ifdef BINARY64
  468. FCOMMON_OPT += -mabi=64
  469. else
  470. FCOMMON_OPT += -mabi=n32
  471. endif
  472. endif
  473. ifdef USE_OPENMP
  474. FCOMMON_OPT += -mp
  475. endif
  476. endif
  477. ifeq ($(F_COMPILER), OPEN64)
  478. CCOMMON_OPT += -DF_INTERFACE_OPEN64
  479. ifdef BINARY64
  480. ifdef INTERFACE64
  481. FCOMMON_OPT += -i8
  482. endif
  483. endif
  484. ifeq ($(ARCH), mips64)
  485. ifndef BINARY64
  486. FCOMMON_OPT += -n32
  487. else
  488. FCOMMON_OPT += -n64
  489. endif
  490. ifeq ($(CORE), LOONGSON3A)
  491. FCOMMON_OPT += -loongson3 -static
  492. endif
  493. ifeq ($(CORE), LOONGSON3B)
  494. FCOMMON_OPT += -loongson3 -static
  495. endif
  496. else
  497. ifndef BINARY64
  498. FCOMMON_OPT += -m32
  499. else
  500. FCOMMON_OPT += -m64
  501. endif
  502. endif
  503. ifdef USE_OPENMP
  504. FEXTRALIB += -lstdc++
  505. FCOMMON_OPT += -mp
  506. endif
  507. endif
  508. ifeq ($(C_COMPILER), OPEN64)
  509. ifeq ($(ARCH), mips64)
  510. ifndef BINARY64
  511. CCOMMON_OPT += -n32
  512. else
  513. CCOMMON_OPT += -n64
  514. endif
  515. ifeq ($(CORE), LOONGSON3A)
  516. CCOMMON_OPT += -loongson3 -static
  517. endif
  518. ifeq ($(CORE), LOONGSON3B)
  519. CCOMMON_OPT += -loongson3 -static
  520. endif
  521. else
  522. ifndef BINARY64
  523. CCOMMON_OPT += -m32
  524. else
  525. CCOMMON_OPT += -m64
  526. endif
  527. endif
  528. endif
  529. ifeq ($(C_COMPILER), SUN)
  530. CCOMMON_OPT += -w
  531. ifeq ($(ARCH), x86)
  532. CCOMMON_OPT += -m32
  533. else
  534. FCOMMON_OPT += -m64
  535. endif
  536. endif
  537. ifeq ($(F_COMPILER), SUN)
  538. CCOMMON_OPT += -DF_INTERFACE_SUN
  539. ifeq ($(ARCH), x86)
  540. FCOMMON_OPT += -m32
  541. else
  542. FCOMMON_OPT += -m64
  543. endif
  544. ifdef USE_OPENMP
  545. FCOMMON_OPT += -xopenmp=parallel
  546. endif
  547. endif
  548. ifeq ($(F_COMPILER), COMPAQ)
  549. CCOMMON_OPT += -DF_INTERFACE_COMPAQ
  550. ifdef USE_OPENMP
  551. FCOMMON_OPT += -openmp
  552. endif
  553. endif
  554. ifdef BINARY64
  555. ifdef INTERFACE64
  556. CCOMMON_OPT +=
  557. #-DUSE64BITINT
  558. endif
  559. endif
  560. ifeq ($(NEED_PIC), 1)
  561. ifeq ($(C_COMPILER), IBM)
  562. CCOMMON_OPT += -qpic=large
  563. else
  564. CCOMMON_OPT += -fPIC
  565. endif
  566. ifeq ($(F_COMPILER), SUN)
  567. FCOMMON_OPT += -pic
  568. else
  569. FCOMMON_OPT += -fPIC
  570. endif
  571. endif
  572. ifeq ($(DYNAMIC_ARCH), 1)
  573. CCOMMON_OPT += -DDYNAMIC_ARCH
  574. endif
  575. ifeq ($(NO_LAPACK), 1)
  576. CCOMMON_OPT += -DNO_LAPACK
  577. #Disable LAPACK C interface
  578. NO_LAPACKE = 1
  579. endif
  580. ifeq ($(NO_LAPACKE), 1)
  581. CCOMMON_OPT += -DNO_LAPACKE
  582. endif
  583. ifeq ($(NO_AVX), 1)
  584. CCOMMON_OPT += -DNO_AVX
  585. endif
  586. ifdef SMP
  587. CCOMMON_OPT += -DSMP_SERVER
  588. ifeq ($(ARCH), mips64)
  589. ifneq ($(CORE), LOONGSON3B)
  590. USE_SIMPLE_THREADED_LEVEL3 = 1
  591. endif
  592. endif
  593. ifeq ($(USE_OPENMP), 1)
  594. # USE_SIMPLE_THREADED_LEVEL3 = 1
  595. # NO_AFFINITY = 1
  596. CCOMMON_OPT += -DUSE_OPENMP
  597. endif
  598. endif
  599. ifeq ($(NO_WARMUP), 1)
  600. CCOMMON_OPT += -DNO_WARMUP
  601. endif
  602. ifeq ($(CONSISTENT_FPCSR), 1)
  603. CCOMMON_OPT += -DCONSISTENT_FPCSR
  604. endif
  605. # Only for development
  606. # CCOMMON_OPT += -DPARAMTEST
  607. # CCOMMON_OPT += -DPREFETCHTEST
  608. # CCOMMON_OPT += -DNO_SWITCHING
  609. # USE_PAPI = 1
  610. ifdef USE_PAPI
  611. CCOMMON_OPT += -DUSE_PAPI
  612. EXTRALIB += -lpapi -lperfctr
  613. endif
  614. ifdef DYNAMIC_THREADS
  615. CCOMMON_OPT += -DDYNAMIC_THREADS
  616. endif
  617. CCOMMON_OPT += -DMAX_CPU_NUMBER=$(NUM_THREADS)
  618. ifdef USE_SIMPLE_THREADED_LEVEL3
  619. CCOMMON_OPT += -DUSE_SIMPLE_THREADED_LEVEL3
  620. endif
  621. ifndef LIBNAMESUFFIX
  622. LIBPREFIX = libopenblas
  623. else
  624. LIBPREFIX = libopenblas_$(LIBNAMESUFFIX)
  625. endif
  626. KERNELDIR = $(TOPDIR)/kernel/$(ARCH)
  627. include $(TOPDIR)/Makefile.$(ARCH)
  628. CCOMMON_OPT += -DASMNAME=$(FU)$(*F) -DASMFNAME=$(FU)$(*F)$(BU) -DNAME=$(*F)$(BU) -DCNAME=$(*F) -DCHAR_NAME=\"$(*F)$(BU)\" -DCHAR_CNAME=\"$(*F)\"
  629. ifeq ($(CORE), PPC440)
  630. CCOMMON_OPT += -DALLOC_QALLOC
  631. endif
  632. ifeq ($(CORE), PPC440FP2)
  633. STATIC_ALLOCATION = 1
  634. endif
  635. ifneq ($(OSNAME), Linux)
  636. NO_AFFINITY = 1
  637. endif
  638. ifneq ($(ARCH), x86_64)
  639. ifneq ($(ARCH), x86)
  640. ifneq ($(CORE), LOONGSON3B)
  641. NO_AFFINITY = 1
  642. endif
  643. endif
  644. endif
  645. ifdef NO_AFFINITY
  646. CCOMMON_OPT += -DNO_AFFINITY
  647. endif
  648. ifdef FUNCTION_PROFILE
  649. CCOMMON_OPT += -DFUNCTION_PROFILE
  650. endif
  651. ifdef HUGETLB_ALLOCATION
  652. CCOMMON_OPT += -DALLOC_HUGETLB
  653. endif
  654. ifdef HUGETLBFILE_ALLOCATION
  655. CCOMMON_OPT += -DALLOC_HUGETLBFILE -DHUGETLB_FILE_NAME=$(HUGETLBFILE_ALLOCATION)
  656. endif
  657. ifdef STATIC_ALLOCATION
  658. CCOMMON_OPT += -DALLOC_STATIC
  659. endif
  660. ifdef DEVICEDRIVER_ALLOCATION
  661. CCOMMON_OPT += -DALLOC_DEVICEDRIVER -DDEVICEDRIVER_NAME=\"/dev/mapper\"
  662. endif
  663. ifdef MIXED_MEMORY_ALLOCATION
  664. CCOMMON_OPT += -DMIXED_MEMORY_ALLOCATION
  665. endif
  666. ifeq ($(OSNAME), SunOS)
  667. TAR = gtar
  668. PATCH = gpatch
  669. GREP = ggrep
  670. else
  671. TAR = tar
  672. PATCH = patch
  673. GREP = grep
  674. endif
  675. ifndef MD5SUM
  676. MD5SUM = md5sum
  677. endif
  678. AWK = awk
  679. REVISION = -r$(VERSION)
  680. MAJOR_VERSION = $(word 1,$(subst ., ,$(VERSION)))
  681. ifeq ($(DEBUG), 1)
  682. COMMON_OPT += -g
  683. endif
  684. ifndef COMMON_OPT
  685. COMMON_OPT = -O2
  686. endif
  687. override CFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR)
  688. override PFLAGS += $(COMMON_OPT) $(CCOMMON_OPT) -I$(TOPDIR) -DPROFILE $(COMMON_PROF)
  689. override FFLAGS += $(COMMON_OPT) $(FCOMMON_OPT)
  690. override FPFLAGS += $(COMMON_OPT) $(FCOMMON_OPT) $(COMMON_PROF)
  691. #MAKEOVERRIDES =
  692. LAPACK_CFLAGS = $(CFLAGS)
  693. LAPACK_CFLAGS += -DHAVE_LAPACK_CONFIG_H
  694. ifdef INTERFACE64
  695. LAPACK_CFLAGS += -DLAPACK_ILP64
  696. endif
  697. ifeq ($(C_COMPILER), LSB)
  698. LAPACK_CFLAGS += -DLAPACK_COMPLEX_STRUCTURE
  699. endif
  700. ifndef SUFFIX
  701. SUFFIX = o
  702. endif
  703. ifndef PSUFFIX
  704. PSUFFIX = po
  705. endif
  706. ifndef LIBSUFFIX
  707. LIBSUFFIX = a
  708. endif
  709. ifneq ($(DYNAMIC_ARCH), 1)
  710. ifndef SMP
  711. LIBNAME = $(LIBPREFIX)_$(LIBCORE)$(REVISION).$(LIBSUFFIX)
  712. LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)$(REVISION)_p.$(LIBSUFFIX)
  713. else
  714. LIBNAME = $(LIBPREFIX)_$(LIBCORE)p$(REVISION).$(LIBSUFFIX)
  715. LIBNAME_P = $(LIBPREFIX)_$(LIBCORE)p$(REVISION)_p.$(LIBSUFFIX)
  716. endif
  717. else
  718. ifndef SMP
  719. LIBNAME = $(LIBPREFIX)$(REVISION).$(LIBSUFFIX)
  720. LIBNAME_P = $(LIBPREFIX)$(REVISION)_p.$(LIBSUFFIX)
  721. else
  722. LIBNAME = $(LIBPREFIX)p$(REVISION).$(LIBSUFFIX)
  723. LIBNAME_P = $(LIBPREFIX)p$(REVISION)_p.$(LIBSUFFIX)
  724. endif
  725. endif
  726. LIBDLLNAME = $(LIBPREFIX).dll
  727. LIBSONAME = $(LIBNAME:.$(LIBSUFFIX)=.so)
  728. LIBDYNNAME = $(LIBNAME:.$(LIBSUFFIX)=.dylib)
  729. LIBDEFNAME = $(LIBNAME:.$(LIBSUFFIX)=.def)
  730. LIBEXPNAME = $(LIBNAME:.$(LIBSUFFIX)=.exp)
  731. LIBZIPNAME = $(LIBNAME:.$(LIBSUFFIX)=.zip)
  732. LIBS = $(TOPDIR)/$(LIBNAME)
  733. LIBS_P = $(TOPDIR)/$(LIBNAME_P)
  734. export OSNAME
  735. export ARCH
  736. export CORE
  737. export LIBCORE
  738. export PGCPATH
  739. export CONFIG
  740. export CC
  741. export FC
  742. export BU
  743. export FU
  744. export USE_THREAD
  745. export NUM_THREADS
  746. export NUM_CORES
  747. export SMP
  748. export MAKEFILE_RULE
  749. export NEED_PIC
  750. export BINARY
  751. export BINARY32
  752. export BINARY64
  753. export F_COMPILER
  754. export C_COMPILER
  755. export USE_OPENMP
  756. export CROSS
  757. export CROSS_SUFFIX
  758. export NOFORTRAN
  759. export EXTRALIB
  760. export CEXTRALIB
  761. export FEXTRALIB
  762. export HAVE_SSE
  763. export HAVE_SSE2
  764. export HAVE_SSE3
  765. export HAVE_SSSE3
  766. export HAVE_SSE4_1
  767. export HAVE_SSE4_2
  768. export HAVE_SSE4A
  769. export HAVE_SSE5
  770. export HAVE_AVX
  771. export KERNELDIR
  772. export FUNCTION_PROFILE
  773. export TARGET_CORE
  774. export SGEMM_UNROLL_M
  775. export SGEMM_UNROLL_N
  776. export DGEMM_UNROLL_M
  777. export DGEMM_UNROLL_N
  778. export QGEMM_UNROLL_M
  779. export QGEMM_UNROLL_N
  780. export CGEMM_UNROLL_M
  781. export CGEMM_UNROLL_N
  782. export ZGEMM_UNROLL_M
  783. export ZGEMM_UNROLL_N
  784. export XGEMM_UNROLL_M
  785. export XGEMM_UNROLL_N
  786. export CGEMM3M_UNROLL_M
  787. export CGEMM3M_UNROLL_N
  788. export ZGEMM3M_UNROLL_M
  789. export ZGEMM3M_UNROLL_N
  790. export XGEMM3M_UNROLL_M
  791. export XGEMM3M_UNROLL_N
  792. ifdef USE_CUDA
  793. export CUDADIR
  794. export CUCC
  795. export CUFLAGS
  796. export CULIB
  797. endif
  798. .SUFFIXES: .$(PSUFFIX) .$(SUFFIX) .f
  799. .f.$(SUFFIX):
  800. $(FC) $(FFLAGS) -c $< -o $(@F)
  801. .f.$(PSUFFIX):
  802. $(FC) $(FPFLAGS) -pg -c $< -o $(@F)
  803. ifdef BINARY64
  804. PATHSCALEPATH = /opt/pathscale/lib/3.1
  805. PGIPATH = /opt/pgi/linux86-64/7.1-5/lib
  806. else
  807. PATHSCALEPATH = /opt/pathscale/lib/3.1/32
  808. PGIPATH = /opt/pgi/linux86/7.1-5/lib
  809. endif
  810. ACMLPATH = /opt/acml/4.3.0
  811. ifneq ($(OSNAME), Darwin)
  812. MKLPATH = /opt/intel/mkl/10.2.2.025/lib
  813. else
  814. MKLPATH = /Library/Frameworks/Intel_MKL.framework/Versions/10.0.1.014/lib
  815. endif
  816. ATLASPATH = /opt/atlas/3.9.17/opteron
  817. FLAMEPATH = $(HOME)/flame/lib
  818. ifneq ($(OSNAME), SunOS)
  819. SUNPATH = /opt/sunstudio12.1
  820. else
  821. SUNPATH = /opt/SUNWspro
  822. endif