aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sci-libs/magma')
-rw-r--r--sci-libs/magma/ChangeLog21
-rw-r--r--sci-libs/magma/Manifest1
-rw-r--r--sci-libs/magma/files/magma-1.2.1-duplicate-symbols.patch612
-rw-r--r--sci-libs/magma/files/magma-1.2.1-no-cuda-driver.patch38
-rw-r--r--sci-libs/magma/magma-1.2.1.ebuild111
-rw-r--r--sci-libs/magma/metadata.xml15
6 files changed, 798 insertions, 0 deletions
diff --git a/sci-libs/magma/ChangeLog b/sci-libs/magma/ChangeLog
new file mode 100644
index 000000000..460bde832
--- /dev/null
+++ b/sci-libs/magma/ChangeLog
@@ -0,0 +1,21 @@
+# ChangeLog for sci-libs/magma
+# Copyright 1999-2012 Gentoo Foundation; Distributed under the GPL v2
+# $Header: $
+
+*magma-1.2.1 (03 Jul 2012)
+
+ 03 Jul 2012; Sébastien Fabbro <bicatali@gentoo.org>
+ +files/magma-1.2.1-duplicate-symbols.patch,
+ +files/magma-1.2.1-no-cuda-driver.patch, +magma-1.2.1.ebuild,
+ -files/magma-1.2.0-cblas-dotc.patch,
+ -files/magma-1.2.0-duplicate-symbols.patch, -magma-1.2.0.ebuild:
+ sci-libs/magma: Version bump. Updated patches
+
+*magma-1.2.0 (25 Jun 2012)
+
+ 25 Jun 2012; Sébastien Fabbro <bicatali@gentoo.org>
+ +files/magma-1.2.0-cblas-dotc.patch,
+ +files/magma-1.2.0-duplicate-symbols.patch, +magma-1.2.0.ebuild,
+ +metadata.xml:
+ sci-libs/magma: Initial import
+
diff --git a/sci-libs/magma/Manifest b/sci-libs/magma/Manifest
new file mode 100644
index 000000000..9a312f75d
--- /dev/null
+++ b/sci-libs/magma/Manifest
@@ -0,0 +1 @@
+DIST magma-1.2.1.tar.gz 2978267 RMD160 914c1cb21dee07cceb0099ec4c77e6affc6c2e3b SHA1 f843ac1364d1964e6cfd2ee69c57aff7727814c5 SHA256 a1036a9d523c2ec974c743e21a33a1a6aad1a61c8d4cb686ea08249749a0c73d SHA512 1c2045031a3d2df218e0717628ff0c0e1a074020b35b0146ee4c915e0d30ea9fa0b9a198014503a4f35f7ab15dd44d58e79339df17624c52f164b99bd86c6aac WHIRLPOOL 1efebb520cbae1ccf3a3435663d6e304c48948c05590bd866e4a82089bbf4147d37d730cea899471df8a24ded7a804bb86cc237cafbfcc93783578fc33caf975
diff --git a/sci-libs/magma/files/magma-1.2.1-duplicate-symbols.patch b/sci-libs/magma/files/magma-1.2.1-duplicate-symbols.patch
new file mode 100644
index 000000000..8fd2d0dde
--- /dev/null
+++ b/sci-libs/magma/files/magma-1.2.1-duplicate-symbols.patch
@@ -0,0 +1,612 @@
+diff -Nur magma-1.2.1.orig/src/cheevx_gpu.cpp magma-1.2.1/src/cheevx_gpu.cpp
+--- magma-1.2.1.orig/src/cheevx_gpu.cpp 2012-07-03 11:59:28.923659921 -0700
++++ magma-1.2.1/src/cheevx_gpu.cpp 2012-07-03 11:59:45.428746349 -0700
+@@ -12,27 +12,6 @@
+ */
+ #include "common_magma.h"
+
+-/* These interfaces are used for TAU profiling */
+-extern"C"{
+- void Mylapackf77_cstein(magma_int_t *n, float *d, float *e, magma_int_t *m,
+- float *w, magma_int_t *iblock, magma_int_t *isplit,
+- cuFloatComplex *z, magma_int_t *ldz, float *work,
+- magma_int_t *iwork, magma_int_t *ifail, magma_int_t *info)
+- {
+- lapackf77_cstein(n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info);
+- }
+-
+- void Mylapackf77_sstebz(char *range, char *order, magma_int_t *n, float *vl,
+- float *vu, magma_int_t *il, magma_int_t *iu, float *abstol,
+- float *d, float *e, magma_int_t *m, magma_int_t *nsplit,
+- float *w, magma_int_t *iblock, magma_int_t *isplit,
+- float *work, magma_int_t *iwork, magma_int_t *info)
+- {
+- lapackf77_sstebz(range, order, n, vl, vu, il, iu, abstol,
+- d, e, m, nsplit, w, iblock, isplit, work, iwork,info);
+- }
+-}
+-
+ extern "C" magma_int_t
+ magma_cheevx_gpu(char jobz, char range, char uplo, magma_int_t n,
+ cuFloatComplex *da, magma_int_t ldda, float vl, float vu,
+@@ -404,12 +383,12 @@
+ indisp = indibl + n;
+ indiwk = indisp + n;
+
+- Mylapackf77_sstebz(range_, order, &n, &vl, &vu, &il, &iu, &abstol, &rwork[indd], &rwork[inde], m,
++ lapackf77_sstebz(range_, order, &n, &vl, &vu, &il, &iu, &abstol, &rwork[indd], &rwork[inde], m,
+ &nsplit, &w[1], &iwork[indibl], &iwork[indisp], &rwork[indrwk], &iwork[indiwk], info);
+
+ if (wantz) {
+
+- Mylapackf77_cstein(&n, &rwork[indd], &rwork[inde], m, &w[1], &iwork[indibl], &iwork[indisp],
++ lapackf77_cstein(&n, &rwork[indd], &rwork[inde], m, &w[1], &iwork[indibl], &iwork[indisp],
+ wz, &ldwz, &rwork[indrwk], &iwork[indiwk], &ifail[1], info);
+
+ magma_csetmatrix( n, *m, wz, ldwz, dz, lddz );
+diff -Nur magma-1.2.1.orig/src/chegvd.cpp magma-1.2.1/src/chegvd.cpp
+--- magma-1.2.1.orig/src/chegvd.cpp 2012-07-03 11:59:28.932659966 -0700
++++ magma-1.2.1/src/chegvd.cpp 2012-07-03 11:59:45.428746349 -0700
+@@ -13,26 +13,6 @@
+ */
+ #include "common_magma.h"
+
+-/* This ctrmm interface is used for TAU profiling */
+-void Mymagma_ctrmm(char side, char uplo, char trans, char unit,
+- magma_int_t n, magma_int_t m,
+- cuFloatComplex alpha, cuFloatComplex *db, magma_int_t lddb,
+- cuFloatComplex *dz, magma_int_t lddz)
+-{
+- magma_ctrmm(side, uplo, trans, unit, n, m, alpha, db, lddb, dz, lddz);
+- magma_device_sync();
+-}
+-
+-/* This ctrsm interface is used for TAU profiling */
+-void Mymagma_ctrsm(char side, char uplo, char trans, char unit,
+- magma_int_t n, magma_int_t m,
+- cuFloatComplex alpha, cuFloatComplex *db, magma_int_t lddb,
+- cuFloatComplex *dz, magma_int_t lddz)
+-{
+- magma_ctrsm(side, uplo, trans, unit, n, m, alpha, db, lddb, dz, lddz);
+- magma_device_sync();
+-}
+-
+ extern "C" magma_int_t
+ magma_chegvd(magma_int_t itype, char jobz, char uplo, magma_int_t n,
+ cuFloatComplex *a, magma_int_t lda, cuFloatComplex *b, magma_int_t ldb,
+@@ -324,7 +304,7 @@
+ *(unsigned char *)trans = MagmaNoTrans;
+ }
+
+- Mymagma_ctrsm(MagmaLeft, uplo_[0], *trans, MagmaNonUnit,
++ magma_ctrsm(MagmaLeft, uplo_[0], *trans, MagmaNonUnit,
+ n, n, c_one, db, lddb, da, ldda);
+
+ } else if (itype == 3)
+@@ -337,7 +317,7 @@
+ *(unsigned char *)trans = MagmaConjTrans;
+ }
+
+- Mymagma_ctrmm(MagmaLeft, uplo_[0], *trans, MagmaNonUnit,
++ magma_ctrmm(MagmaLeft, uplo_[0], *trans, MagmaNonUnit,
+ n, n, c_one, db, lddb, da, ldda);
+ }
+
+diff -Nur magma-1.2.1.orig/src/chegvdx.cpp magma-1.2.1/src/chegvdx.cpp
+--- magma-1.2.1.orig/src/chegvdx.cpp 2012-07-03 11:59:28.921659909 -0700
++++ magma-1.2.1/src/chegvdx.cpp 2012-07-03 11:59:45.428746349 -0700
+@@ -12,22 +12,6 @@
+ */
+ #include "common_magma.h"
+
+-void Mymagma_ctrmm(char side, char uplo, char trans, char unit, magma_int_t n, magma_int_t m,
+- cuFloatComplex alpha, cuFloatComplex *db, magma_int_t lddb,
+- cuFloatComplex *dz, magma_int_t lddz)
+-{
+- magma_ctrmm(side, uplo, trans, unit, n, m, alpha, db, lddb, dz, lddz);
+- magma_device_sync();
+-}
+-
+-void Mymagma_ctrsm(char side, char uplo, char trans, char unit, magma_int_t n, magma_int_t m,
+- cuFloatComplex alpha, cuFloatComplex *db, magma_int_t lddb,
+- cuFloatComplex *dz, magma_int_t lddz)
+-{
+- magma_ctrsm(side, uplo, trans, unit, n, m, alpha, db, lddb, dz, lddz);
+- magma_device_sync();
+-}
+-
+ extern "C" magma_int_t
+ magma_chegvdx(magma_int_t itype, char jobz, char range, char uplo, magma_int_t n,
+ cuFloatComplex *a, magma_int_t lda, cuFloatComplex *b, magma_int_t ldb,
+@@ -363,7 +347,7 @@
+ *(unsigned char *)trans = MagmaNoTrans;
+ }
+
+- Mymagma_ctrsm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one, db, lddb, da, ldda);
++ magma_ctrsm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one, db, lddb, da, ldda);
+
+ } else if (itype == 3) {
+
+@@ -375,7 +359,7 @@
+ *(unsigned char *)trans = MagmaConjTrans;
+ }
+
+- Mymagma_ctrmm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one, db, lddb, da, ldda);
++ magma_ctrmm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one, db, lddb, da, ldda);
+
+ }
+
+diff -Nur magma-1.2.1.orig/src/chegvr.cpp magma-1.2.1/src/chegvr.cpp
+--- magma-1.2.1.orig/src/chegvr.cpp 2012-07-03 11:59:28.932659966 -0700
++++ magma-1.2.1/src/chegvr.cpp 2012-07-03 11:59:45.429746354 -0700
+@@ -12,24 +12,6 @@
+ */
+ #include "common_magma.h"
+
+-void Mymagma_ctrmm(char side, char uplo, char trans, char unit,
+- magma_int_t n, magma_int_t m,
+- cuFloatComplex alpha, cuFloatComplex *db, magma_int_t lddb,
+- cuFloatComplex *dz, magma_int_t lddz)
+-{
+- magma_ctrmm(side, uplo, trans, unit, n, m, alpha, db, lddb, dz, lddz);
+- magma_device_sync();
+-}
+-
+-void Mymagma_ctrsm(char side, char uplo, char trans, char unit,
+- magma_int_t n, magma_int_t m,
+- cuFloatComplex alpha, cuFloatComplex *db, magma_int_t lddb,
+- cuFloatComplex *dz, magma_int_t lddz)
+-{
+- magma_ctrsm(side, uplo, trans, unit, n, m, alpha, db, lddb, dz, lddz);
+- magma_device_sync();
+-}
+-
+ extern "C" magma_int_t
+ magma_chegvr(magma_int_t itype, char jobz, char range, char uplo, magma_int_t n,
+ cuFloatComplex *a, magma_int_t lda, cuFloatComplex *b, magma_int_t ldb,
+@@ -408,7 +390,7 @@
+ *(unsigned char *)trans = MagmaNoTrans;
+ }
+
+- Mymagma_ctrsm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one,
++ magma_ctrsm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one,
+ db, lddb, dz, lddz);
+
+ } else if (itype == 3) {
+@@ -421,7 +403,7 @@
+ *(unsigned char *)trans = MagmaConjTrans;
+ }
+
+- Mymagma_ctrmm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one,
++ magma_ctrmm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one,
+ db, lddb, dz, lddz);
+ }
+
+diff -Nur magma-1.2.1.orig/src/chegvx.cpp magma-1.2.1/src/chegvx.cpp
+--- magma-1.2.1.orig/src/chegvx.cpp 2012-07-03 11:59:28.923659921 -0700
++++ magma-1.2.1/src/chegvx.cpp 2012-07-03 11:59:45.429746354 -0700
+@@ -12,22 +12,6 @@
+ */
+ #include "common_magma.h"
+
+-void Mymagma_ctrmm(char side, char uplo, char trans, char unit, magma_int_t n, magma_int_t m,
+- cuFloatComplex alpha, cuFloatComplex *db, magma_int_t lddb,
+- cuFloatComplex *dz, magma_int_t lddz)
+-{
+- magma_ctrmm(side, uplo, trans, unit, n, m, alpha, db, lddb, dz, lddz);
+- magma_device_sync();
+-}
+-
+-void Mymagma_ctrsm(char side, char uplo, char trans, char unit, magma_int_t n, magma_int_t m,
+- cuFloatComplex alpha, cuFloatComplex *db, magma_int_t lddb,
+- cuFloatComplex *dz, magma_int_t lddz)
+-{
+- magma_ctrsm(side, uplo, trans, unit, n, m, alpha, db, lddb, dz, lddz);
+- magma_device_sync();
+-}
+-
+ extern "C" magma_int_t
+ magma_chegvx(magma_int_t itype, char jobz, char range, char uplo, magma_int_t n,
+ cuFloatComplex *a, magma_int_t lda, cuFloatComplex *b, magma_int_t ldb,
+@@ -330,7 +314,7 @@
+ *(unsigned char *)trans = MagmaNoTrans;
+ }
+
+- Mymagma_ctrsm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one, db, lddb, dz, lddz);
++ magma_ctrsm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one, db, lddb, dz, lddz);
+
+ } else if (itype == 3) {
+
+@@ -343,7 +327,7 @@
+ *(unsigned char *)trans = MagmaConjTrans;
+ }
+
+- Mymagma_ctrmm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one, db, lddb, dz, lddz);
++ magma_ctrmm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one, db, lddb, dz, lddz);
+
+ }
+
+diff -Nur magma-1.2.1.orig/src/cstedx_m.cpp magma-1.2.1/src/cstedx_m.cpp
+--- magma-1.2.1.orig/src/cstedx_m.cpp 2012-07-03 11:59:28.921659909 -0700
++++ magma-1.2.1/src/cstedx_m.cpp 2012-07-03 11:59:45.429746354 -0700
+@@ -16,10 +16,7 @@
+ float* work, magma_int_t lwork, magma_int_t* iwork, magma_int_t liwork,
+ magma_int_t* info);
+
+- magma_int_t get_cstedx_smlsize()
+- {
+- return 25;
+- }
++ magma_int_t get_cstedx_smlsize();
+ }
+
+ extern "C" magma_int_t
+diff -Nur magma-1.2.1.orig/src/dlaex0_m.cpp magma-1.2.1/src/dlaex0_m.cpp
+--- magma-1.2.1.orig/src/dlaex0_m.cpp 2012-07-03 11:59:28.933659971 -0700
++++ magma-1.2.1/src/dlaex0_m.cpp 2012-07-03 11:59:45.430746359 -0700
+@@ -22,10 +22,7 @@
+
+ int magma_get_dlaex3_m_nb();
+
+- magma_int_t get_dlaex0_smlsize()
+- {
+- return 25;
+- }
++ magma_int_t get_dlaex0_smlsize();
+ }
+
+ extern "C" magma_int_t
+diff -Nur magma-1.2.1.orig/src/dlaex3_m.cpp magma-1.2.1/src/dlaex3_m.cpp
+--- magma-1.2.1.orig/src/dlaex3_m.cpp 2012-07-03 11:59:28.929659951 -0700
++++ magma-1.2.1/src/dlaex3_m.cpp 2012-07-03 11:59:45.430746359 -0700
+@@ -34,7 +34,7 @@
+ }
+
+ extern"C"{
+- void dvrange(magma_int_t k, double *d, magma_int_t *il, magma_int_t *iu, double vl, double vu)
++ void ddvrange(magma_int_t k, double *d, magma_int_t *il, magma_int_t *iu, double vl, double vu)
+ {
+ magma_int_t i;
+
+@@ -51,7 +51,7 @@
+ return;
+ }
+
+- void dirange(magma_int_t k, magma_int_t* indxq, magma_int_t *iil, magma_int_t *iiu, magma_int_t il, magma_int_t iu)
++ void ddirange(magma_int_t k, magma_int_t* indxq, magma_int_t *iil, magma_int_t *iiu, magma_int_t il, magma_int_t iu)
+ {
+ magma_int_t i;
+
+@@ -362,9 +362,9 @@
+
+ //compute the lower and upper bound of the non-deflated eigenvectors
+ if (valeig)
+- dvrange(k, d, &iil, &iiu, vl, vu);
++ ddvrange(k, d, &iil, &iiu, vl, vu);
+ else if (indeig)
+- dirange(k, indxq, &iil, &iiu, il, iu);
++ ddirange(k, indxq, &iil, &iiu, il, iu);
+ else {
+ iil = 1;
+ iiu = k;
+diff -Nur magma-1.2.1.orig/src/dstedx_m.cpp magma-1.2.1/src/dstedx_m.cpp
+--- magma-1.2.1.orig/src/dstedx_m.cpp 2012-07-03 11:59:28.920659903 -0700
++++ magma-1.2.1/src/dstedx_m.cpp 2012-07-03 11:59:45.430746359 -0700
+@@ -26,10 +26,7 @@
+
+ double lapackf77_dlanst( char* norm, magma_int_t* n, double* d, double* e);
+
+- magma_int_t get_dstedx_smlsize()
+- {
+- return 25;
+- }
++ magma_int_t get_dstedx_smlsize();
+ }
+
+ extern "C" magma_int_t
+diff -Nur magma-1.2.1.orig/src/slaex0_m.cpp magma-1.2.1/src/slaex0_m.cpp
+--- magma-1.2.1.orig/src/slaex0_m.cpp 2012-07-03 11:59:28.931659961 -0700
++++ magma-1.2.1/src/slaex0_m.cpp 2012-07-03 11:59:45.431746364 -0700
+@@ -22,10 +22,7 @@
+
+ int magma_get_slaex3_m_nb();
+
+- magma_int_t get_slaex0_smlsize()
+- {
+- return 25;
+- }
++ magma_int_t get_slaex0_smlsize();
+ }
+
+ extern "C" magma_int_t
+diff -Nur magma-1.2.1.orig/src/slaex3_m.cpp magma-1.2.1/src/slaex3_m.cpp
+--- magma-1.2.1.orig/src/slaex3_m.cpp 2012-07-03 11:59:28.920659903 -0700
++++ magma-1.2.1/src/slaex3_m.cpp 2012-07-03 11:59:45.431746364 -0700
+@@ -34,7 +34,7 @@
+ }
+
+ extern"C"{
+- void dvrange(magma_int_t k, float *d, magma_int_t *il, magma_int_t *iu, float vl, float vu)
++ void sdvrange(magma_int_t k, float *d, magma_int_t *il, magma_int_t *iu, float vl, float vu)
+ {
+ magma_int_t i;
+
+@@ -51,7 +51,7 @@
+ return;
+ }
+
+- void dirange(magma_int_t k, magma_int_t* indxq, magma_int_t *iil, magma_int_t *iiu, magma_int_t il, magma_int_t iu)
++ void sdirange(magma_int_t k, magma_int_t* indxq, magma_int_t *iil, magma_int_t *iiu, magma_int_t il, magma_int_t iu)
+ {
+ magma_int_t i;
+
+@@ -362,9 +362,9 @@
+
+ //compute the lower and upper bound of the non-deflated eigenvectors
+ if (valeig)
+- dvrange(k, d, &iil, &iiu, vl, vu);
++ sdvrange(k, d, &iil, &iiu, vl, vu);
+ else if (indeig)
+- dirange(k, indxq, &iil, &iiu, il, iu);
++ sdirange(k, indxq, &iil, &iiu, il, iu);
+ else {
+ iil = 1;
+ iiu = k;
+diff -Nur magma-1.2.1.orig/src/sstedx_m.cpp magma-1.2.1/src/sstedx_m.cpp
+--- magma-1.2.1.orig/src/sstedx_m.cpp 2012-07-03 11:59:28.932659966 -0700
++++ magma-1.2.1/src/sstedx_m.cpp 2012-07-03 11:59:45.431746364 -0700
+@@ -26,10 +26,7 @@
+
+ float lapackf77_slanst( char* norm, magma_int_t* n, float* d, float* e);
+
+- magma_int_t get_sstedx_smlsize()
+- {
+- return 25;
+- }
++ magma_int_t get_sstedx_smlsize();
+ }
+
+ extern "C" magma_int_t
+diff -Nur magma-1.2.1.orig/src/zheevx_gpu.cpp magma-1.2.1/src/zheevx_gpu.cpp
+--- magma-1.2.1.orig/src/zheevx_gpu.cpp 2012-07-03 11:59:28.934659976 -0700
++++ magma-1.2.1/src/zheevx_gpu.cpp 2012-07-03 11:59:45.431746364 -0700
+@@ -12,27 +12,6 @@
+ */
+ #include "common_magma.h"
+
+-/* These interfaces are used for TAU profiling */
+-extern"C"{
+- void Mylapackf77_zstein(magma_int_t *n, double *d, double *e, magma_int_t *m,
+- double *w, magma_int_t *iblock, magma_int_t *isplit,
+- cuDoubleComplex *z, magma_int_t *ldz, double *work,
+- magma_int_t *iwork, magma_int_t *ifail, magma_int_t *info)
+- {
+- lapackf77_zstein(n, d, e, m, w, iblock, isplit, z, ldz, work, iwork, ifail, info);
+- }
+-
+- void Mylapackf77_dstebz(char *range, char *order, magma_int_t *n, double *vl,
+- double *vu, magma_int_t *il, magma_int_t *iu, double *abstol,
+- double *d, double *e, magma_int_t *m, magma_int_t *nsplit,
+- double *w, magma_int_t *iblock, magma_int_t *isplit,
+- double *work, magma_int_t *iwork, magma_int_t *info)
+- {
+- lapackf77_dstebz(range, order, n, vl, vu, il, iu, abstol,
+- d, e, m, nsplit, w, iblock, isplit, work, iwork,info);
+- }
+-}
+-
+ extern "C" magma_int_t
+ magma_zheevx_gpu(char jobz, char range, char uplo, magma_int_t n,
+ cuDoubleComplex *da, magma_int_t ldda, double vl, double vu,
+@@ -404,12 +383,12 @@
+ indisp = indibl + n;
+ indiwk = indisp + n;
+
+- Mylapackf77_dstebz(range_, order, &n, &vl, &vu, &il, &iu, &abstol, &rwork[indd], &rwork[inde], m,
++ lapackf77_dstebz(range_, order, &n, &vl, &vu, &il, &iu, &abstol, &rwork[indd], &rwork[inde], m,
+ &nsplit, &w[1], &iwork[indibl], &iwork[indisp], &rwork[indrwk], &iwork[indiwk], info);
+
+ if (wantz) {
+
+- Mylapackf77_zstein(&n, &rwork[indd], &rwork[inde], m, &w[1], &iwork[indibl], &iwork[indisp],
++ lapackf77_zstein(&n, &rwork[indd], &rwork[inde], m, &w[1], &iwork[indibl], &iwork[indisp],
+ wz, &ldwz, &rwork[indrwk], &iwork[indiwk], &ifail[1], info);
+
+ magma_zsetmatrix( n, *m, wz, ldwz, dz, lddz );
+diff -Nur magma-1.2.1.orig/src/zhegvd.cpp magma-1.2.1/src/zhegvd.cpp
+--- magma-1.2.1.orig/src/zhegvd.cpp 2012-07-03 11:59:28.920659903 -0700
++++ magma-1.2.1/src/zhegvd.cpp 2012-07-03 11:59:45.432746370 -0700
+@@ -13,26 +13,6 @@
+ */
+ #include "common_magma.h"
+
+-/* This ztrmm interface is used for TAU profiling */
+-void Mymagma_ztrmm(char side, char uplo, char trans, char unit,
+- magma_int_t n, magma_int_t m,
+- cuDoubleComplex alpha, cuDoubleComplex *db, magma_int_t lddb,
+- cuDoubleComplex *dz, magma_int_t lddz)
+-{
+- magma_ztrmm(side, uplo, trans, unit, n, m, alpha, db, lddb, dz, lddz);
+- magma_device_sync();
+-}
+-
+-/* This ztrsm interface is used for TAU profiling */
+-void Mymagma_ztrsm(char side, char uplo, char trans, char unit,
+- magma_int_t n, magma_int_t m,
+- cuDoubleComplex alpha, cuDoubleComplex *db, magma_int_t lddb,
+- cuDoubleComplex *dz, magma_int_t lddz)
+-{
+- magma_ztrsm(side, uplo, trans, unit, n, m, alpha, db, lddb, dz, lddz);
+- magma_device_sync();
+-}
+-
+ extern "C" magma_int_t
+ magma_zhegvd(magma_int_t itype, char jobz, char uplo, magma_int_t n,
+ cuDoubleComplex *a, magma_int_t lda, cuDoubleComplex *b, magma_int_t ldb,
+@@ -324,7 +304,7 @@
+ *(unsigned char *)trans = MagmaNoTrans;
+ }
+
+- Mymagma_ztrsm(MagmaLeft, uplo_[0], *trans, MagmaNonUnit,
++ magma_ztrsm(MagmaLeft, uplo_[0], *trans, MagmaNonUnit,
+ n, n, c_one, db, lddb, da, ldda);
+
+ } else if (itype == 3)
+@@ -337,7 +317,7 @@
+ *(unsigned char *)trans = MagmaConjTrans;
+ }
+
+- Mymagma_ztrmm(MagmaLeft, uplo_[0], *trans, MagmaNonUnit,
++ magma_ztrmm(MagmaLeft, uplo_[0], *trans, MagmaNonUnit,
+ n, n, c_one, db, lddb, da, ldda);
+ }
+
+diff -Nur magma-1.2.1.orig/src/zhegvdx.cpp magma-1.2.1/src/zhegvdx.cpp
+--- magma-1.2.1.orig/src/zhegvdx.cpp 2012-07-03 11:59:28.922659915 -0700
++++ magma-1.2.1/src/zhegvdx.cpp 2012-07-03 11:59:45.432746370 -0700
+@@ -12,22 +12,6 @@
+ */
+ #include "common_magma.h"
+
+-void Mymagma_ztrmm(char side, char uplo, char trans, char unit, magma_int_t n, magma_int_t m,
+- cuDoubleComplex alpha, cuDoubleComplex *db, magma_int_t lddb,
+- cuDoubleComplex *dz, magma_int_t lddz)
+-{
+- magma_ztrmm(side, uplo, trans, unit, n, m, alpha, db, lddb, dz, lddz);
+- magma_device_sync();
+-}
+-
+-void Mymagma_ztrsm(char side, char uplo, char trans, char unit, magma_int_t n, magma_int_t m,
+- cuDoubleComplex alpha, cuDoubleComplex *db, magma_int_t lddb,
+- cuDoubleComplex *dz, magma_int_t lddz)
+-{
+- magma_ztrsm(side, uplo, trans, unit, n, m, alpha, db, lddb, dz, lddz);
+- magma_device_sync();
+-}
+-
+ extern "C" magma_int_t
+ magma_zhegvdx(magma_int_t itype, char jobz, char range, char uplo, magma_int_t n,
+ cuDoubleComplex *a, magma_int_t lda, cuDoubleComplex *b, magma_int_t ldb,
+@@ -363,7 +347,7 @@
+ *(unsigned char *)trans = MagmaNoTrans;
+ }
+
+- Mymagma_ztrsm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one, db, lddb, da, ldda);
++ magma_ztrsm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one, db, lddb, da, ldda);
+
+ } else if (itype == 3) {
+
+@@ -375,7 +359,7 @@
+ *(unsigned char *)trans = MagmaConjTrans;
+ }
+
+- Mymagma_ztrmm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one, db, lddb, da, ldda);
++ magma_ztrmm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one, db, lddb, da, ldda);
+
+ }
+
+diff -Nur magma-1.2.1.orig/src/zhegvr.cpp magma-1.2.1/src/zhegvr.cpp
+--- magma-1.2.1.orig/src/zhegvr.cpp 2012-07-03 11:59:28.930659956 -0700
++++ magma-1.2.1/src/zhegvr.cpp 2012-07-03 11:59:45.432746370 -0700
+@@ -12,24 +12,6 @@
+ */
+ #include "common_magma.h"
+
+-void Mymagma_ztrmm(char side, char uplo, char trans, char unit,
+- magma_int_t n, magma_int_t m,
+- cuDoubleComplex alpha, cuDoubleComplex *db, magma_int_t lddb,
+- cuDoubleComplex *dz, magma_int_t lddz)
+-{
+- magma_ztrmm(side, uplo, trans, unit, n, m, alpha, db, lddb, dz, lddz);
+- magma_device_sync();
+-}
+-
+-void Mymagma_ztrsm(char side, char uplo, char trans, char unit,
+- magma_int_t n, magma_int_t m,
+- cuDoubleComplex alpha, cuDoubleComplex *db, magma_int_t lddb,
+- cuDoubleComplex *dz, magma_int_t lddz)
+-{
+- magma_ztrsm(side, uplo, trans, unit, n, m, alpha, db, lddb, dz, lddz);
+- magma_device_sync();
+-}
+-
+ extern "C" magma_int_t
+ magma_zhegvr(magma_int_t itype, char jobz, char range, char uplo, magma_int_t n,
+ cuDoubleComplex *a, magma_int_t lda, cuDoubleComplex *b, magma_int_t ldb,
+@@ -408,7 +390,7 @@
+ *(unsigned char *)trans = MagmaNoTrans;
+ }
+
+- Mymagma_ztrsm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one,
++ magma_ztrsm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one,
+ db, lddb, dz, lddz);
+
+ } else if (itype == 3) {
+@@ -421,7 +403,7 @@
+ *(unsigned char *)trans = MagmaConjTrans;
+ }
+
+- Mymagma_ztrmm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one,
++ magma_ztrmm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one,
+ db, lddb, dz, lddz);
+ }
+
+diff -Nur magma-1.2.1.orig/src/zhegvx.cpp magma-1.2.1/src/zhegvx.cpp
+--- magma-1.2.1.orig/src/zhegvx.cpp 2012-07-03 11:59:28.914659873 -0700
++++ magma-1.2.1/src/zhegvx.cpp 2012-07-03 11:59:45.433746376 -0700
+@@ -12,22 +12,6 @@
+ */
+ #include "common_magma.h"
+
+-void Mymagma_ztrmm(char side, char uplo, char trans, char unit, magma_int_t n, magma_int_t m,
+- cuDoubleComplex alpha, cuDoubleComplex *db, magma_int_t lddb,
+- cuDoubleComplex *dz, magma_int_t lddz)
+-{
+- magma_ztrmm(side, uplo, trans, unit, n, m, alpha, db, lddb, dz, lddz);
+- magma_device_sync();
+-}
+-
+-void Mymagma_ztrsm(char side, char uplo, char trans, char unit, magma_int_t n, magma_int_t m,
+- cuDoubleComplex alpha, cuDoubleComplex *db, magma_int_t lddb,
+- cuDoubleComplex *dz, magma_int_t lddz)
+-{
+- magma_ztrsm(side, uplo, trans, unit, n, m, alpha, db, lddb, dz, lddz);
+- magma_device_sync();
+-}
+-
+ extern "C" magma_int_t
+ magma_zhegvx(magma_int_t itype, char jobz, char range, char uplo, magma_int_t n,
+ cuDoubleComplex *a, magma_int_t lda, cuDoubleComplex *b, magma_int_t ldb,
+@@ -330,7 +314,7 @@
+ *(unsigned char *)trans = MagmaNoTrans;
+ }
+
+- Mymagma_ztrsm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one, db, lddb, dz, lddz);
++ magma_ztrsm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one, db, lddb, dz, lddz);
+
+ } else if (itype == 3) {
+
+@@ -343,7 +327,7 @@
+ *(unsigned char *)trans = MagmaConjTrans;
+ }
+
+- Mymagma_ztrmm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one, db, lddb, dz, lddz);
++ magma_ztrmm(MagmaLeft, uplo, *trans, MagmaNonUnit, n, *m, c_one, db, lddb, dz, lddz);
+
+ }
+
+diff -Nur magma-1.2.1.orig/src/zstedx_m.cpp magma-1.2.1/src/zstedx_m.cpp
+--- magma-1.2.1.orig/src/zstedx_m.cpp 2012-07-03 11:59:28.921659909 -0700
++++ magma-1.2.1/src/zstedx_m.cpp 2012-07-03 11:59:45.433746376 -0700
+@@ -16,10 +16,7 @@
+ double* work, magma_int_t lwork, magma_int_t* iwork, magma_int_t liwork,
+ magma_int_t* info);
+
+- magma_int_t get_zstedx_smlsize()
+- {
+- return 25;
+- }
++ magma_int_t get_zstedx_smlsize();
+ }
+
+ extern "C" magma_int_t
diff --git a/sci-libs/magma/files/magma-1.2.1-no-cuda-driver.patch b/sci-libs/magma/files/magma-1.2.1-no-cuda-driver.patch
new file mode 100644
index 000000000..9dc99a865
--- /dev/null
+++ b/sci-libs/magma/files/magma-1.2.1-no-cuda-driver.patch
@@ -0,0 +1,38 @@
+--- magma-1.2.1.orig/testing/lin/Makefile 2012-07-03 11:59:28.875659669 -0700
++++ magma-1.2.1/testing/lin/Makefile 2012-07-03 12:01:05.546166252 -0700
+@@ -266,7 +266,7 @@
+ ../matgen/$(TMGLIB) -o xlintsts \
+ ../fortran.o \
+ $(LDOPTS) -L../../lib \
+- -lcuda -lmagma -lmagmablas \
++ -lmagma -lmagmablas \
+ $(LIBDIR) $(LIB)
+
+ xlintstc : $(ALINTST) $(CLINTST) $(SCLNTST) ../fortran.o
+@@ -274,7 +274,7 @@
+ ../matgen/$(TMGLIB) -o xlintstc \
+ ../fortran.o \
+ $(LDOPTS) -L../../lib \
+- -lcuda -lmagma -lmagmablas \
++ -lmagma -lmagmablas \
+ $(LIBDIR) $(LIB)
+
+ xlintstd : $(ALINTST) $(DLINTST) $(DZLNTST) ../fortran.o
+@@ -282,7 +282,7 @@
+ ../matgen/$(TMGLIB) -o xlintstd \
+ ../fortran.o \
+ $(LDOPTS) -L../../lib \
+- -lcuda -lmagma -lmagmablas \
++ -lmagma -lmagmablas \
+ $(LIBDIR) $(LIB)
+
+ xlintstz : $(ALINTST) $(ZLINTST) $(DZLNTST) ../fortran.o
+@@ -290,7 +290,7 @@
+ ../matgen/$(TMGLIB) -o xlintstz \
+ ../fortran.o \
+ $(LDOPTS) -L../../lib \
+- -lcuda -lmagma -lmagmablas -lmagma \
++ -lmagma -lmagmablas -lmagma \
+ $(LIBDIR) $(LIB)
+
+ $(ALINTST): $(FRC)
diff --git a/sci-libs/magma/magma-1.2.1.ebuild b/sci-libs/magma/magma-1.2.1.ebuild
new file mode 100644
index 000000000..65b822c11
--- /dev/null
+++ b/sci-libs/magma/magma-1.2.1.ebuild
@@ -0,0 +1,111 @@
+# Copyright 1999-2012 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: $
+
+EAPI=4
+
+FORTRAN_STANDARD="77 90"
+inherit eutils fortran-2 toolchain-funcs versionator
+
+DESCRIPTION="Matrix Algebra on GPU and Multicore Architectures"
+HOMEPAGE="http://icl.cs.utk.edu/magma/"
+SRC_URI="http://icl.cs.utk.edu/projectsfiles/${PN}/${P}.tar.gz"
+
+LICENSE="BSD"
+SLOT="0"
+KEYWORDS="~amd64 ~x86 ~amd64-linux ~x86-linux"
+IUSE="fermi static-libs tesla"
+
+RDEPEND="dev-util/nvidia-cuda-toolkit
+ virtual/cblas
+ virtual/lapack"
+DEPEND="${RDEPEND}
+ virtual/pkgconfig"
+
+make_shared_lib() {
+ local libstatic=${1}
+ local soname=$(basename "${1%.a}").so.$(get_major_version)
+ shift
+ einfo "Making ${soname}"
+ ${LINK:-$(tc-getCC)} ${LDFLAGS} \
+ -shared -Wl,-soname="${soname}" \
+ -Wl,--whole-archive "${libstatic}" -Wl,--no-whole-archive \
+ "$@" -o $(dirname "${libstatic}")/"${soname}" \
+ || die "${soname} failed"
+ ln -s "${soname}" $(dirname "${libstatic}")/"${soname%.*}"
+}
+
+src_prepare() {
+ epatch \
+ "${FILESDIR}"/${P}-duplicate-symbols.patch \
+ "${FILESDIR}"/${P}-no-cuda-driver.patch
+
+ # distributed pc file not so useful so replace it
+ cat <<-EOF > ${PN}.pc
+ prefix=${EPREFIX}/usr
+ libdir=\${prefix}/$(get_libdir)
+ includedir=\${prefix}/include/${PN}
+ Name: ${PN}
+ Description: ${DESCRIPTION}
+ Version: ${PV}
+ URL: ${HOMEPAGE}
+ Libs: -L\${libdir} -lmagma -lmagmablas
+ Libs.private: -lm -lpthread -ldl -lcublas -lcudart
+ Cflags: -I\${includedir}
+ Requires: cblas lapack
+ EOF
+}
+
+src_configure() {
+ cat <<-EOF > make.inc
+ ARCH = $(tc-getAR)
+ ARCHFLAGS = cr
+ RANLIB = $(tc-getRANLIB)
+ NVCC = nvcc
+ CC = $(tc-getCXX)
+ FORT = $(tc-getFC)
+ INC = -I${EPREFIX}/opt/cuda/include -DADD_
+ OPTS = ${CFLAGS} -fPIC
+ FOPTS = ${FFLAGS} -fPIC -x f95-cpp-input
+ F77OPTS = ${FFLAGS} -fPIC
+ NVOPTS = -DADD_ --compiler-options '-fPIC ${CFLAGS}' -DUNIX
+ LOADER = $(tc-getFC)
+ LIBBLAS = $(pkg-config --libs cblas)
+ LIBLAPACK = $(pkg-config --libs lapack)
+ CUDADIR = ${EPREFIX}/opt/cuda
+ LIBCUDA = -L\$(CUDADIR)/$(get_libdir) -lcublas -lcudart
+ LIB = -pthread -lm -ldl \$(LIBCUDA) \$(LIBBLAS) \$(LIBLAPACK) -lstdc++
+ EOF
+ if use fermi; then
+ echo >> make.inc "GPU_TARGET = Fermi"
+ elif use tesla; then
+ echo >> make.inc "GPU_TARGET = Tesla"
+ fi
+}
+
+src_compile() {
+ emake lib
+ make_shared_lib lib/libmagma.a
+ make_shared_lib lib/libmagmablas.a
+ if use static-libs; then
+ emake cleanall
+ sed 's/-fPIC//g' make.inc
+ emake lib
+ fi
+}
+
+src_test() {
+ emake test lapacktest
+ cd testing/lin
+ python lapack_testing.py || die
+}
+
+src_install() {
+ dolib.so lib/lib*.so*
+ use static-libs && dolib.a lib/lib*.a
+ insinto /usr/include/${PN}
+ doins include/*.h
+ insinto /usr/$(get_libdir)/pkgconfig
+ doins ${PN}.pc
+ dodoc README ReleaseNotes
+}
diff --git a/sci-libs/magma/metadata.xml b/sci-libs/magma/metadata.xml
new file mode 100644
index 000000000..195c0d273
--- /dev/null
+++ b/sci-libs/magma/metadata.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE pkgmetadata SYSTEM "http://www.gentoo.org/dtd/metadata.dtd">
+<pkgmetadata>
+<herd>sci</herd>
+<longdescription lang="en">
+ The Matrix Algebra on GPU and Multicore Architectures
+ project aims to develop a dense linear algebra library
+ similar to LAPACK but for heterogeneous/hybrid architectures, starting
+ with current "Multicore+GPU" systems.
+</longdescription>
+<use>
+ <flag name="fermi">Compile for GPU NVIDIA Fermi family (2.x cards)</flag>
+ <flag name="tesla">Compile for GPU NVIDIA Tesla family (1.x cards)></flag>
+</use>
+</pkgmetadata>