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

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