aboutsummaryrefslogtreecommitdiffstats
path: root/share/qbs/modules/cpp
diff options
context:
space:
mode:
authorBogDan Vatra <bogdan@kde.org>2019-04-22 17:56:22 +0300
committerBogDan Vatra <bogdan@kdab.com>2019-04-25 13:05:33 +0000
commit65cb0d3e2d669151560b53fdbbd3f2f0efb29c44 (patch)
treec19ff0707513cfbfefe38c8b4a474be7ea812126 /share/qbs/modules/cpp
parentb9987bd2392d11629db3bb50de25987aa45d9cbd (diff)
Android: Nuke support for old NDKs
- Support NDK only r19+ - Remove deprecated and unsupported stl libs: "system", "gabi++_static", "gabi++_shared", "stlport_static", "stlport_shared", "gnustl_static", "gnustl_shared" - Fix armv7a link (we need to link against libc++.[a/so].API) - Use lldb - Use llvm bin utils [ChangeLog][Android] Support NDK only r19+, remove deprecated and unsupported stl libs, use lldb and llvm bin utils Change-Id: If9d5d5462dffb6c9bf481f910ee2c3ba03bc5649 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'share/qbs/modules/cpp')
-rw-r--r--share/qbs/modules/cpp/android-gcc.qbs133
1 files changed, 32 insertions, 101 deletions
diff --git a/share/qbs/modules/cpp/android-gcc.qbs b/share/qbs/modules/cpp/android-gcc.qbs
index 23b50b14e..75f4299f7 100644
--- a/share/qbs/modules/cpp/android-gcc.qbs
+++ b/share/qbs/modules/cpp/android-gcc.qbs
@@ -39,44 +39,16 @@ import 'gcc.js' as Gcc
LinuxGCC {
Depends { name: "Android.ndk" }
- condition: qbs.targetOS.contains("android") &&
- qbs.toolchain && qbs.toolchain.contains("gcc")
+ condition: qbs.targetOS.contains("android") && qbs.toolchain && qbs.toolchain.contains("llvm")
priority: 2
rpaths: [rpathOrigin]
- property string toolchainDir: {
- if (qbs.toolchain && qbs.toolchain.contains("clang")) {
- return Utilities.versionCompare(Android.ndk.version, "10") <= 0
- ? "llvm-" + Android.ndk.toolchainVersionNumber : "llvm";
- }
- return NdkUtils.getBinutilsPath(Android.ndk, toolchainTriple + "-")
- }
-
property string cxxStlBaseDir: FileInfo.joinPaths(Android.ndk.ndkDir, "sources", "cxx-stl")
- property string gabiBaseDir: FileInfo.joinPaths(cxxStlBaseDir, "gabi++")
- property string stlPortBaseDir: FileInfo.joinPaths(cxxStlBaseDir, "stlport")
- property string gnuStlBaseDir: FileInfo.joinPaths(cxxStlBaseDir, "gnu-libstdc++",
- Android.ndk.toolchainVersionNumber)
- property string llvmStlBaseDir: FileInfo.joinPaths(cxxStlBaseDir, "llvm-libc++")
- property string stlBaseDir: {
- if (Android.ndk.appStl.startsWith("gabi++_"))
- return gabiBaseDir;
- else if (Android.ndk.appStl.startsWith("stlport_"))
- return stlPortBaseDir;
- else if (Android.ndk.appStl.startsWith("gnustl_"))
- return gnuStlBaseDir;
- else if (Android.ndk.appStl.startsWith("c++_"))
- return llvmStlBaseDir;
- return undefined;
- }
+ property string stlBaseDir: FileInfo.joinPaths(cxxStlBaseDir, "llvm-libc++")
property string stlLibsDir: {
- if (stlBaseDir) {
- var infix = Android.ndk.abi;
- if (Android.ndk.armMode === "thumb" && !Android.ndk.haveUnifiedStl)
- infix = FileInfo.joinPaths(infix, "thumb");
- return FileInfo.joinPaths(stlBaseDir, "libs", infix);
- }
+ if (stlBaseDir)
+ return FileInfo.joinPaths(stlBaseDir, "libs", Android.ndk.abi);
return undefined;
}
@@ -84,7 +56,7 @@ LinuxGCC {
? FileInfo.joinPaths(stlLibsDir, dynamicLibraryPrefix + Android.ndk.appStl + dynamicLibrarySuffix)
: undefined
property string staticStlFilePath: (stlLibsDir && Android.ndk.appStl.endsWith("_static"))
- ? FileInfo.joinPaths(stlLibsDir, staticLibraryPrefix + Android.ndk.appStl + staticLibrarySuffix)
+ ? FileInfo.joinPaths(stlLibsDir, NdkUtils.stlFilePath(staticLibraryPrefix, Android.ndk, staticLibrarySuffix))
: undefined
Group {
@@ -104,17 +76,13 @@ LinuxGCC {
}
toolchainInstallPath: FileInfo.joinPaths(Android.ndk.ndkDir, "toolchains",
- toolchainDir, "prebuilt",
+ "llvm", "prebuilt",
Android.ndk.hostArch, "bin")
property string toolchainTriple: [targetAbi === "androideabi" ? "arm" : targetArch,
targetSystem, targetAbi].join("-")
- toolchainPrefix: {
- if (qbs.toolchain && qbs.toolchain.contains("clang"))
- return undefined;
- return toolchainTriple + "-";
- }
+ toolchainPrefix: undefined
machineType: {
if (Android.ndk.abi === "armeabi")
@@ -128,20 +96,18 @@ LinuxGCC {
enableExceptions: Android.ndk.appStl !== "system"
enableRtti: Android.ndk.appStl !== "system"
- commonCompilerFlags: NdkUtils.commonCompilerFlags(qbs.toolchain, qbs.buildVariant,
- Android.ndk.abi, Android.ndk.armMode)
+ commonCompilerFlags: NdkUtils.commonCompilerFlags(qbs.toolchain, qbs.buildVariant, Android.ndk)
- linkerFlags: {
- var flags = NdkUtils.commonLinkerFlags(Android.ndk.abi);
- if (qbs.toolchainType === "clang") {
- flags = flags.concat(["--exclude-libs", "libgcc.a", "--exclude-libs", "libatomic.a"]);
- if (Android.ndk.appStl.startsWith("c++") && Android.ndk.abi === "armeabi-v7a")
- flags = flags.concat(["--exclude-libs", "libunwind.a"]);
- }
+ linkerFlags: NdkUtils.commonLinkerFlags(Android.ndk.abi);
+ driverLinkerFlags: {
+ var flags = ["-fuse-ld=lld", "-Wl,--exclude-libs,libgcc.a", "-Wl,--exclude-libs,libatomic.a"];
+ if (Android.ndk.appStl.startsWith("c++") && Android.ndk.abi === "armeabi-v7a")
+ flags = flags.concat(["-Wl,--exclude-libs,libunwind.a"]);
return flags;
}
- platformDriverFlags: ["-no-canonical-prefixes"]
+ platformDriverFlags: ["-fdata-sections", "-ffunction-sections", "-funwind-tables",
+ "-fstack-protector-strong", "-no-canonical-prefixes"]
libraryPaths: {
var prefix = FileInfo.joinPaths(sysroot, "usr");
@@ -149,77 +115,42 @@ LinuxGCC {
if (Android.ndk.abi === "mips64" || Android.ndk.abi === "x86_64") // no lib64 for arm64-v8a
paths.push(FileInfo.joinPaths(prefix, "lib64"));
paths.push(FileInfo.joinPaths(prefix, "lib"));
+ paths.push(stlLibsDir);
return paths;
}
dynamicLibraries: {
var libs = ["c", "m"];
if (sharedStlFilePath)
- libs.push(sharedStlFilePath);
- return libs;
- }
- staticLibraries: {
- var libs = [];
- if (qbs.toolchainType === "gcc")
- libs.push("gcc");
-
- if (staticStlFilePath) {
- libs.push(staticStlFilePath);
- if (Android.ndk.appStl === "c++_static") {
- var libAbi = FileInfo.joinPaths(stlLibsDir, "libc++abi.a");
- if (File.exists(libAbi))
- libs.push(libAbi);
- }
- }
+ libs.push(FileInfo.joinPaths(stlLibsDir, NdkUtils.stlFilePath(dynamicLibraryPrefix, Android.ndk, dynamicLibrarySuffix)));
return libs;
}
+ staticLibraries: staticStlFilePath
systemIncludePaths: {
- var includes = [];
- if (Android.ndk.useUnifiedHeaders) {
- // Might not be needed with Clang in a future NDK release
- includes.push(FileInfo.joinPaths(sysroot, "usr", "include", toolchainTriple));
- }
- if (Android.ndk.appStl === "system") {
- includes.push(FileInfo.joinPaths(cxxStlBaseDir, "system", "include"));
- } else if (Android.ndk.appStl.startsWith("gabi++")) {
- includes.push(FileInfo.joinPaths(gabiBaseDir, "include"));
- } else if (Android.ndk.appStl.startsWith("stlport")) {
- includes.push(FileInfo.joinPaths(stlPortBaseDir, "stlport"));
- } else if (Android.ndk.appStl.startsWith("gnustl")) {
- includes.push(FileInfo.joinPaths(gnuStlBaseDir, "include"));
- includes.push(FileInfo.joinPaths(gnuStlBaseDir, "libs", Android.ndk.abi, "include"));
- includes.push(FileInfo.joinPaths(gnuStlBaseDir, "include", "backward"));
- } else if (Android.ndk.appStl.startsWith("c++_")) {
- if (Utilities.versionCompare(Android.ndk.version, "13") >= 0) {
- includes.push(FileInfo.joinPaths(llvmStlBaseDir, "include"));
- includes.push(FileInfo.joinPaths(llvmStlBaseDir + "abi", "include"));
- } else {
- includes.push(FileInfo.joinPaths(llvmStlBaseDir, "libcxx", "include"));
- includes.push(FileInfo.joinPaths(llvmStlBaseDir + "abi", "libcxxabi", "include"));
- }
+ var includes = [FileInfo.joinPaths(sysroot, "usr", "include", toolchainTriple)];
+ if (Android.ndk.abi === "armeabi-v7a") {
+ includes.push(FileInfo.joinPaths(Android.ndk.ndkDir, "sources", "android",
+ "support", "include"));
}
+ includes.push(FileInfo.joinPaths(stlBaseDir, "include"));
+ includes.push(FileInfo.joinPaths(stlBaseDir + "abi", "include"));
return includes;
}
+
defines: {
var list = ["ANDROID"];
- if (Android.ndk.useUnifiedHeaders) {
- // Might be superseded by an -mandroid-version or similar Clang compiler flag in future
- list.push("__ANDROID_API__=" + Android.ndk.platformVersion);
- }
+ // Might be superseded by an -mandroid-version or similar Clang compiler flag in future
+ list.push("__ANDROID_API__=" + Android.ndk.platformVersion);
return list;
}
- binutilsPath: FileInfo.joinPaths(Android.ndk.ndkDir, "toolchains",
- NdkUtils.getBinutilsPath(Android.ndk, toolchainTriple + "-"),
- "prebuilt", Android.ndk.hostArch, "bin");
- binutilsPathPrefix: Gcc.pathPrefix(binutilsPath, toolchainTriple + "-")
- driverFlags: qbs.toolchain.contains("clang") && Utilities.versionCompare(Android.ndk.version, "19") < 0
- ? ["-gcc-toolchain", FileInfo.path(binutilsPath)].concat(base || []) : base
+
+ binutilsPath: FileInfo.joinPaths(Android.ndk.ndkDir, "toolchains", "llvm", "prebuilt",
+ Android.ndk.hostArch, "bin");
+ binutilsPathPrefix: "llvm-"
syslibroot: FileInfo.joinPaths(Android.ndk.ndkDir, "platforms",
Android.ndk.platform, "arch-"
+ NdkUtils.abiNameToDirName(Android.ndk.abi))
- sysroot: !Android.ndk.useUnifiedHeaders
- ? syslibroot
- : FileInfo.joinPaths(Android.ndk.ndkDir, "sysroot")
+ sysroot: FileInfo.joinPaths(Android.ndk.ndkDir, "sysroot")
targetArch: {
switch (qbs.architecture) {