File indexing completed on 2024-04-28 04:37:47
0001 /* 0002 SPDX-FileCopyrightText: 2017 Aleix Pol Gonzalez <aleixpol@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-only 0005 */ 0006 0007 #include "androidruntime.h" 0008 #include "androidpreferencessettings.h" 0009 #include "debug_android.h" 0010 0011 #include <KProcess> 0012 #include <QProcess> 0013 #include <QUrl> 0014 0015 using namespace KDevelop; 0016 0017 AndroidPreferencesSettings* AndroidRuntime::s_settings = nullptr; 0018 0019 AndroidRuntime::AndroidRuntime() 0020 : KDevelop::IRuntime() 0021 { 0022 } 0023 0024 AndroidRuntime::~AndroidRuntime() 0025 { 0026 } 0027 0028 void AndroidRuntime::setEnabled(bool /*enable*/) 0029 { 0030 } 0031 0032 static void setEnvironmentVariables(QProcess* process) 0033 { 0034 auto env = process->processEnvironment(); 0035 env.insert(QStringLiteral("ANDROID_NDK"), QUrl(AndroidRuntime::s_settings->ndk()).toLocalFile()); 0036 env.insert(QStringLiteral("ANDROID_SDK_ROOT"), QUrl(AndroidRuntime::s_settings->sdk()).toLocalFile()); 0037 process->setProcessEnvironment(env); 0038 } 0039 0040 //integrates with ECM 0041 static QStringList args() 0042 { 0043 return { 0044 QLatin1String("-DCMAKE_TOOLCHAIN_FILE=") + QUrl(AndroidRuntime::s_settings->cmakeToolchain()).toLocalFile(), 0045 QLatin1String("-DANDROID_ABI=") + AndroidRuntime::s_settings->abi(), 0046 QLatin1String("-DANDROID_NDK=") + QUrl(AndroidRuntime::s_settings->ndk()).toLocalFile(), 0047 QLatin1String("-DANDROID_TOOLCHAIN=") + AndroidRuntime::s_settings->toolchain(), 0048 QLatin1String("-DANDROID_API_LEVEL=") + AndroidRuntime::s_settings->api(), 0049 QLatin1String("-DANDROID_ARCHITECTURE=") + AndroidRuntime::s_settings->arch(), 0050 QLatin1String("-DANDROID_SDK_BUILD_TOOLS_REVISION=") + AndroidRuntime::s_settings->buildtools() 0051 }; 0052 } 0053 0054 void AndroidRuntime::startProcess(QProcess* process) const 0055 { 0056 if (process->program().endsWith(QLatin1String("cmake"))) { 0057 process->setArguments(process->arguments() << args()); 0058 setEnvironmentVariables(process); 0059 } 0060 0061 qCDebug(ANDROID) << "starting qprocess" << process->program() << process->arguments(); 0062 process->start(); 0063 } 0064 0065 void AndroidRuntime::startProcess(KProcess* process) const 0066 { 0067 if (process->program().first().endsWith(QLatin1String("cmake"))) { 0068 process->setProgram(process->program() << args()); 0069 setEnvironmentVariables(process); 0070 } 0071 0072 qCDebug(ANDROID) << "starting kprocess" << process->program().join(QLatin1Char(' ')); 0073 process->start(); 0074 } 0075 0076 QByteArray AndroidRuntime::getenv(const QByteArray &varname) const 0077 { 0078 return qgetenv(varname.constData()); 0079 } 0080 0081 QString AndroidRuntime::findExecutable(const QString& executableName) const 0082 { 0083 QStringList rtPaths; 0084 0085 auto envPaths = getenv(QByteArrayLiteral("PATH")).split(':'); 0086 std::transform(envPaths.begin(), envPaths.end(), std::back_inserter(rtPaths), 0087 [this](QByteArray p) { 0088 return pathInHost(Path(QString::fromLocal8Bit(p))).toLocalFile(); 0089 }); 0090 0091 return QStandardPaths::findExecutable(executableName, rtPaths); 0092 } 0093 0094 #include "moc_androidruntime.cpp"