summaryrefslogtreecommitdiff
path: root/src/plugins
diff options
context:
space:
mode:
authorDaniel Teske <daniel.teske@digia.com>2013-02-26 15:53:33 +0100
committerDaniel Teske <daniel.teske@digia.com>2013-03-04 14:56:45 +0100
commit78aa64e06b60bac232fddf87dea3509d1e08c1c0 (patch)
tree6b3cb5a06e34146212c4116c7dcad2aafc598363 /src/plugins
parentfde3803ca8f08b1ad737256cef934fca525df3fa (diff)
downloadqt-creator-78aa64e06b60bac232fddf87dea3509d1e08c1c0.tar.gz
Android: Deploy libgnustl_shared.so directly from android-ndk
Task-number: QTCREATORBUG-8688 Change-Id: I890663c96d11a38275724b792eca0be782df673f Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@digia.com> Reviewed-by: Eike Ziller <eike.ziller@digia.com>
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/android/androiddeploystep.cpp20
-rw-r--r--src/plugins/android/androiddeploystep.h2
-rw-r--r--src/plugins/android/androidmanager.cpp17
-rw-r--r--src/plugins/android/androidmanager.h2
4 files changed, 40 insertions, 1 deletions
diff --git a/src/plugins/android/androiddeploystep.cpp b/src/plugins/android/androiddeploystep.cpp
index 759243cf7e..35ca2f48f1 100644
--- a/src/plugins/android/androiddeploystep.cpp
+++ b/src/plugins/android/androiddeploystep.cpp
@@ -121,6 +121,10 @@ bool AndroidDeployStep::init()
return false;
}
m_ndkToolChainVersion = static_cast<AndroidToolChain *>(tc)->ndkToolChainVersion();
+
+ QString arch = static_cast<Qt4Project *>(project())->rootQt4ProjectNode()->singleVariableValue(Qt4ProjectManager::AndroidArchVar);
+ if (!arch.isEmpty())
+ m_libgnustl = AndroidManager::libGnuStl(arch, m_ndkToolChainVersion);
return true;
}
@@ -402,6 +406,22 @@ bool AndroidDeployStep::deployPackage()
remoteRoot + QLatin1String("/lib"),
true,
QStringList() << QLatin1String("*.so"));
+
+ // don't use the libgnustl_shared.so from the qt directory
+ for (int i = 0; i < deployList.count(); ++i) {
+ if (deployList.at(i).remoteFileName == QLatin1String("/data/local/tmp/qt/lib/libgnustl_shared.so")) {
+ deployList.removeAt(i);
+ break;
+ }
+ }
+
+ // We want to deploy that *always*
+ // since even if the timestamps did not change, the toolchain might have changed
+ // leading to a different file
+ deployList.append(DeployItem(m_libgnustl,
+ QDateTime::currentDateTimeUtc().toTime_t(),
+ QLatin1String("/data/local/tmp/qt/lib/libgnustl_shared.so"), false));
+
collectFiles(&deployList,
m_qtVersionSourcePath + QLatin1String("/plugins"),
remoteRoot + QLatin1String("/plugins"),
diff --git a/src/plugins/android/androiddeploystep.h b/src/plugins/android/androiddeploystep.h
index fb31ad9f60..5b69569f2a 100644
--- a/src/plugins/android/androiddeploystep.h
+++ b/src/plugins/android/androiddeploystep.h
@@ -154,7 +154,7 @@ private:
QString m_runQASIPackagePath;
AndroidDeployAction m_runDeployAction;
QString m_ndkToolChainVersion;
-
+ QString m_libgnustl;
static const Core::Id Id;
};
diff --git a/src/plugins/android/androidmanager.cpp b/src/plugins/android/androidmanager.cpp
index 779fa61fde..2910964b3f 100644
--- a/src/plugins/android/androidmanager.cpp
+++ b/src/plugins/android/androidmanager.cpp
@@ -585,7 +585,12 @@ QStringList AndroidManager::availableQtLibs(ProjectExplorer::Target *target)
ProjectExplorer::ToolChain *tc = ProjectExplorer::ToolChainKitInformation::toolChain(target->kit());
if (tc->type() != QLatin1String(Constants::ANDROID_TOOLCHAIN_TYPE))
return QStringList();
+
+ Qt4ProjectManager::Qt4Project *project = static_cast<Qt4ProjectManager::Qt4Project *>(target->project());
+ QString arch = project->rootQt4ProjectNode()->singleVariableValue(Qt4ProjectManager::AndroidArchVar);
+
AndroidToolChain *atc = static_cast<AndroidToolChain *>(tc);
+ QString libgnustl = libGnuStl(arch, atc->ndkToolChainVersion());
Utils::FileName readelfPath = AndroidConfigurations::instance().readelfPath(target->activeRunConfiguration()->abi().architecture(),
atc->ndkToolChainVersion());
@@ -613,6 +618,9 @@ QStringList AndroidManager::availableQtLibs(ProjectExplorer::Target *target)
mapLibs[library].dependencies = dependencies(readelfPath, libPath.absolutePath());
}
+ const QString library = libgnustl.mid(libgnustl.lastIndexOf(QLatin1Char('/')) + 1);
+ mapLibs[library] = Library();;
+
// clean dependencies
foreach (const QString &key, mapLibs.keys()) {
int it = 0;
@@ -950,5 +958,14 @@ bool AndroidManager::qtLibrariesLessThan(const Library &a, const Library &b)
return a.level < b.level;
}
+QString AndroidManager::libGnuStl(const QString &arch, const QString &ndkToolChainVersion)
+{
+ return AndroidConfigurations::instance().config().ndkLocation.toString()
+ + QLatin1String("/sources/cxx-stl/gnu-libstdc++/")
+ + ndkToolChainVersion + QLatin1String("/libs/")
+ + arch
+ + QLatin1String("/libgnustl_shared.so");
+}
+
} // namespace Internal
} // namespace Qt4ProjectManager
diff --git a/src/plugins/android/androidmanager.h b/src/plugins/android/androidmanager.h
index 56a703c652..22bd5a6494 100644
--- a/src/plugins/android/androidmanager.h
+++ b/src/plugins/android/androidmanager.h
@@ -112,6 +112,8 @@ public:
static QStringList prebundledLibs(ProjectExplorer::Target *target);
static bool setPrebundledLibs(ProjectExplorer::Target *target, const QStringList &libs);
+ static QString libGnuStl(const QString &arch, const QString &ndkToolChainVersion);
+
private:
static void raiseError(const QString &reason);
static bool openXmlFile(QDomDocument &doc, const Utils::FileName &fileName);