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

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