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