From d087fe424de7f60c2d16220aa94fb94bb9bfeb51 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Fri, 31 Dec 2021 21:01:46 +0100 Subject: [PATCH] Android: Set debugger sysroot also for recent Ndk versions Android debug support specifies the sysroot inside the used Ndk. Recent Ndk versions have a different folder structure which moved the sysroot location inside the Ndk to somewhere else. This change adds finding the sysroot in the new directory layout in case it cannot be found in the traditional location. Instead of Ndk version checks, this code uses FilePath::exists to see if the sysroot is valid. Fixes: QTCREATORBUG-26814 Change-Id: I37db3043e405b83168d7c80c522d31bc148e458c Reviewed-by: Assam Boudjelthia --- src/plugins/android/androidconfigurations.cpp | 2 +- src/plugins/android/androiddebugsupport.cpp | 11 ++++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/plugins/android/androidconfigurations.cpp b/src/plugins/android/androidconfigurations.cpp index ca8e29eb383..a58ed30f19e 100644 --- a/src/plugins/android/androidconfigurations.cpp +++ b/src/plugins/android/androidconfigurations.cpp @@ -881,7 +881,7 @@ bool AndroidConfig::isValidNdk(const QString &ndkLocation) const const FilePath ndkPlatformsDir = ndkPath.pathAppended("platforms"); if (version.majorVersion() <= 22 && (!ndkPlatformsDir.exists() || ndkPlatformsDir.toString().contains(' '))) - return false; // TODO: Adapt code that assumes the presence of a "platforms" folder + return false; return true; } diff --git a/src/plugins/android/androiddebugsupport.cpp b/src/plugins/android/androiddebugsupport.cpp index ab7dd8d4301..c92ec6af462 100644 --- a/src/plugins/android/androiddebugsupport.cpp +++ b/src/plugins/android/androiddebugsupport.cpp @@ -168,14 +168,15 @@ void AndroidDebugSupport::start() const int minimumNdk = qt ? qt->minimumNDK() : 0; int sdkVersion = qMax(AndroidManager::minimumSDK(kit), minimumNdk); - // TODO find a way to use the new sysroot layout - // instead ~/android/ndk-bundle/platforms/android-29/arch-arm64 - // use ~/android/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/sysroot if (qtVersion) { - Utils::FilePath sysRoot = AndroidConfigurations::currentConfig().ndkLocation(qtVersion) + const FilePath ndkLocation = + AndroidConfigurations::currentConfig().ndkLocation(qtVersion); + Utils::FilePath sysRoot = ndkLocation / "platforms" / QString("android-%1").arg(sdkVersion) - / devicePreferredAbi; + / devicePreferredAbi; // Legacy Ndk structure + if (!sysRoot.exists()) + sysRoot = AndroidConfig::toolchainPathFromNdk(ndkLocation) / "sysroot"; setSysRoot(sysRoot); qCDebug(androidDebugSupportLog) << "Sysroot: " << sysRoot; }