1
0
mirror of https://github.com/dart-lang/sdk synced 2024-07-05 09:20:04 +00:00

[build, test_runner] Update to NDK 27.

Notably, this carries us across the gcc->llvm transition.

Change-Id: I46203749c64c7ef0f52de40abcd4a073517cb06f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/330949
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Zach Anderson <zra@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
This commit is contained in:
Ryan Macnak 2023-10-18 22:38:23 +00:00
parent 5a0ff4ceb1
commit 99bb8aa4a5
11 changed files with 70 additions and 234 deletions

9
DEPS
View File

@ -605,7 +605,7 @@ Var("dart_root") + "/third_party/pkg/tar":
"dep_type": "cipd",
},
Var("dart_root") + "/third_party/canary_ndk": {
Var("dart_root") + "/third_party/android_tools/ndk": {
"packages": [
{
"package": "flutter/android/ndk/${{os}}-amd64",
@ -615,12 +615,11 @@ Var("dart_root") + "/third_party/pkg/tar":
"condition": "download_android_deps",
"dep_type": "cipd",
},
Var("dart_root") + "/third_party/android_tools": {
Var("dart_root") + "/third_party/android_tools/sdk/platform-tools": {
"packages": [
{
"package": "flutter/android/sdk/all/${{os}}-amd64",
"version": "version:33v6"
"package": "flutter/android/sdk/platform-tools/linux-amd64",
"version": "1tZc4sOxZS6FQIvT5i0wwdycmM8AO7QZY32FC9_HfR4C"
}
],
"condition": "download_android_deps",

View File

@ -222,7 +222,7 @@ if (!is_clang && (is_asan || is_lsan || is_msan || is_tsan || is_ubsan)) {
is_clang = true
}
use_flutter_cxx = is_msan || is_tsan || is_android
use_flutter_cxx = is_msan || is_tsan
# =============================================================================
# TARGET DEFAULTS

View File

@ -8,16 +8,15 @@ import("//build/config/sysroot.gni")
config("sdk") {
if (sysroot != "") {
cflags = [ "--sysroot=" + sysroot ]
ldflags = [ "-L" + rebase_path("$android_lib") ]
# Need to get some linker flags out of the sysroot.
sysroot_ld_path = rebase_path("//build/config/linux/sysroot_ld_path.py")
ldflags += [ exec_script(sysroot_ld_path,
[
rebase_path("//build/linux/sysroot_ld_path.sh"),
sysroot,
],
"value") ]
ldflags = [ exec_script(sysroot_ld_path,
[
rebase_path("//build/linux/sysroot_ld_path.sh"),
sysroot,
],
"value") ]
}
}

View File

@ -55,9 +55,6 @@ if (is_android) {
# Path to the Android NDK and SDK.
android_ndk_root = "//third_party/android_tools/ndk"
if (current_cpu == "riscv64") {
android_ndk_root = "//third_party/canary_ndk"
}
android_ndk_include_dir = "$android_ndk_root/usr/include"
android_sdk = "${android_sdk_root}/platforms/android-${android_sdk_version}"
@ -75,77 +72,17 @@ if (is_android) {
# associated platform.
if (current_cpu == "riscv64") {
android_api_level = 35
} else if (current_cpu == "x64" || current_cpu == "arm64") {
android_api_level = 22
} else {
android_api_level = 19
android_api_level = 21
}
# Toolchain root directory for each build. The actual binaries are inside
# a "bin" directory inside of these.
_android_toolchain_version = "4.9"
llvm_android_toolchain_root = "$android_ndk_root/toolchains/llvm/prebuilt/${android_host_os}-${android_host_arch}"
x86_android_toolchain_root = "$android_ndk_root/toolchains/x86-${_android_toolchain_version}/prebuilt/${android_host_os}-${android_host_arch}"
arm_android_toolchain_root = "$android_ndk_root/toolchains/arm-linux-androideabi-${_android_toolchain_version}/prebuilt/${android_host_os}-${android_host_arch}"
x86_64_android_toolchain_root = "$android_ndk_root/toolchains/x86_64-${_android_toolchain_version}/prebuilt/${android_host_os}-${android_host_arch}"
arm64_android_toolchain_root = "$android_ndk_root/toolchains/aarch64-linux-android-${_android_toolchain_version}/prebuilt/${android_host_os}-${android_host_arch}"
riscv64_android_toolchain_root = "$android_ndk_root/toolchains/llvm/prebuilt/${android_host_os}-${android_host_arch}"
x86_android_lib = "$llvm_android_toolchain_root/sysroot/usr/lib/i686-linux-android/${android_api_level}"
arm_android_lib = "$llvm_android_toolchain_root/sysroot/usr/lib/arm-linux-androideabi/${android_api_level}"
x86_64_android_lib = "$llvm_android_toolchain_root/sysroot/usr/lib/x86_64-linux-android/${android_api_level}"
arm64_android_lib = "$llvm_android_toolchain_root/sysroot/usr/lib/aarch64-linux-android/${android_api_level}"
riscv64_android_lib = "$llvm_android_toolchain_root/sysroot/usr/lib/riscv64-linux-android/${android_api_level}"
# Location of libgcc. This is only needed for the current GN toolchain, so we
# only need to define the current one, rather than one for every platform
# like the toolchain roots.
if (current_cpu == "x86") {
android_prebuilt_arch = "android-x86"
android_target_triple = "i686-linux-android"
android_toolchain_root = "$x86_android_toolchain_root"
android_lib = "$x86_android_lib"
} else if (current_cpu == "arm") {
android_prebuilt_arch = "android-arm"
android_target_triple = "arm-linux-androideabi"
android_toolchain_root = "$arm_android_toolchain_root"
android_lib = "$arm_android_lib"
} else if (current_cpu == "x64") {
android_prebuilt_arch = "android-x86_64"
android_target_triple = "x86_64-linux-android"
android_toolchain_root = "$x86_64_android_toolchain_root"
android_lib = "$x86_64_android_lib"
} else if (current_cpu == "arm64") {
android_prebuilt_arch = "android-arm64"
android_target_triple = "aarch64-linux-android"
android_toolchain_root = "$arm64_android_toolchain_root"
android_lib = "$arm64_android_lib"
} else if (current_cpu == "riscv64") {
android_prebuilt_arch = "android-riscv64"
android_target_triple = "riscv64-linux-android"
android_toolchain_root = "$riscv64_android_toolchain_root"
android_lib = "$riscv64_android_lib"
} else {
assert(false, "Need android libgcc support for your target arch.")
}
android_tool_prefix = "$android_toolchain_root/bin/$android_target_triple-"
android_readelf = "${android_tool_prefix}readelf"
android_objcopy = "${android_tool_prefix}objcopy"
android_gdbserver =
"$android_ndk_root/prebuilt/$android_prebuilt_arch/gdbserver/gdbserver"
android_toolchain_root = "$android_ndk_root/toolchains/llvm/prebuilt/${android_host_os}-${android_host_arch}"
# Toolchain stuff ------------------------------------------------------------
android_libcpp_root = "$android_ndk_root/sources/cxx-stl/llvm-libc++"
if (component_mode == "shared_library") {
android_libcpp_library = "c++_shared"
} else {
android_libcpp_library = "c++_static"
}
if (component_mode == "shared_library") {
# By appending .cr, we prevent name collisions with libraries already
# loaded by the Android zygote.
@ -159,12 +96,7 @@ if (is_android) {
if (current_cpu == "x86") {
android_app_abi = "x86"
} else if (current_cpu == "arm") {
import("//build/config/arm.gni")
if (arm_version < 7) {
android_app_abi = "armeabi"
} else {
android_app_abi = "armeabi-v7a"
}
android_app_abi = "armeabi-v7a"
} else if (current_cpu == "x64") {
android_app_abi = "x86_64"
} else if (current_cpu == "arm64") {

View File

@ -360,14 +360,6 @@ config("compiler") {
"-funwind-tables",
"-fno-short-enums",
]
if (!is_clang) {
# Clang doesn't support these flags.
cflags += [ "-finline-limit=64" ]
}
if (current_cpu == "arm64") {
# TODO (https://github.com/flutter/flutter/issues/75348).
cflags += [ "-mno-outline-atomics" ]
}
if (is_asan) {
# Android build relies on -Wl,--gc-sections removing unreachable code.
# ASan instrumentation for globals inhibits this and results in a library
@ -382,21 +374,11 @@ config("compiler") {
# to say that it does. Define them here instead.
defines += [ "HAVE_SYS_UIO_H" ]
# Use gold for Android for most CPU architectures.
if (is_clang) {
# Let clang find the ld.gold in the NDK.
toolchain_root = rebase_path(android_toolchain_root, root_build_dir)
ldflags += [ "--gcc-toolchain=$toolchain_root" ]
}
ldflags += [
# Don't allow visible symbols from libgcc or libc++ to be
# re-exported.
"-Wl,--exclude-libs=libgcc.a",
"-Wl,--exclude-libs=libc++_static.a",
"-fuse-ld=lld",
# Currently defaults to 4k, but Android will be moving to 16k page size,
# and for future-proofing, 64k boundaries will be required.
"-Wl,-z,max-page-size=65536",
@ -404,20 +386,20 @@ config("compiler") {
if (is_clang) {
if (current_cpu == "arm") {
cflags += [ "--target=arm-linux-androideabi" ]
ldflags += [ "--target=arm-linux-androideabi" ]
cflags += [ "--target=arm-linux-androideabi${android_api_level}" ]
ldflags += [ "--target=arm-linux-androideabi${android_api_level}" ]
} else if (current_cpu == "arm64") {
cflags += [ "--target=aarch64-linux-android" ]
ldflags += [ "--target=aarch64-linux-android" ]
cflags += [ "--target=aarch64-linux-android${android_api_level}" ]
ldflags += [ "--target=aarch64-linux-android${android_api_level}" ]
} else if (current_cpu == "x86") {
cflags += [ "--target=i686-linux-androideabi" ]
ldflags += [ "--target=i686-linux-androideabi" ]
cflags += [ "--target=i686-linux-androideabi${android_api_level}" ]
ldflags += [ "--target=i686-linux-androideabi${android_api_level}" ]
} else if (current_cpu == "x64") {
cflags += [ "--target=x86_64-linux-androideabi" ]
ldflags += [ "--target=x86_64-linux-androideabi" ]
cflags += [ "--target=x86_64-linux-androideabi${android_api_level}" ]
ldflags += [ "--target=x86_64-linux-androideabi${android_api_level}" ]
} else if (current_cpu == "riscv64") {
cflags += [ "--target=riscv64-linux-android" ]
ldflags += [ "--target=riscv64-linux-android" ]
cflags += [ "--target=riscv64-linux-android${android_api_level}" ]
ldflags += [ "--target=riscv64-linux-android${android_api_level}" ]
}
}
}
@ -587,46 +569,17 @@ config("runtime_library") {
]
} else if (is_android) {
# Android standard library setup.
if (is_clang) {
# Work around incompatibilities between bionic and clang headers.
defines += [ "__compiler_offsetof=__builtin_offsetof" ]
}
defines += [ "__GNU_SOURCE=1" ] # Necessary for clone().
ldflags += [
"-Wl,--warn-shared-textrel",
"-nostdlib",
"-static-libstdc++",
]
cflags += [ "-D__ANDROID_API__=$android_api_level" ]
lib_dirs += [ "$android_libcpp_root/libs/$android_app_abi" ]
if (android_api_level < 21) {
libs += [ "android_support" ]
}
if (current_cpu == "arm") {
libs += [ "unwind" ]
}
libs += [
"gcc",
"c",
"dl",
"m",
]
if (current_cpu == "riscv64") {
libs -= [ "gcc" ]
lib_dirs += [ "//third_party/canary_ndk/toolchains/llvm/prebuilt/${android_host_os}-${android_host_arch}/lib/clang/17/lib/linux/" ]
libs += [ "clang_rt.builtins-riscv64-android" ]
}
# Clang with libc++ does not require an explicit atomic library reference.
if (!is_clang) {
libs += [ "atomic" ]
}
}
}

View File

@ -64,7 +64,7 @@ if ((current_toolchain == host_toolchain ||
sysroot = target_sysroot
} else if (is_android) {
import("//build/config/android/config.gni")
sysroot = rebase_path("$llvm_android_toolchain_root/sysroot")
sysroot = rebase_path("$android_toolchain_root/sysroot")
} else if (is_mac) {
import("//build/config/mac/mac_sdk.gni")
sysroot = mac_sdk_path

View File

@ -17,20 +17,8 @@ import("//build/toolchain/goma.gni")
# Prefix to be added to the tool names.
# - toolchain_cpu
# Same as gcc_toolchain
template("android_gcc_toolchain") {
template("android_toolchain") {
gcc_toolchain(target_name) {
# Make our manually injected libs relative to the build dir.
android_ndk_lib = rebase_path(invoker.android_ndk_lib_dir, root_build_dir)
libs_section_prefix = "$android_ndk_lib/crtbegin_dynamic.o"
libs_section_postfix = "$android_ndk_lib/crtend_android.o"
solink_libs_section_prefix = "$android_ndk_lib/crtbegin_so.o"
solink_libs_section_postfix = "$android_ndk_lib/crtend_so.o"
# The tools should be run relative to the build dir.
tool_prefix = rebase_path(invoker.tool_prefix, root_build_dir)
if (use_goma) {
assert(!use_ccache, "Goma and ccache can't be used together.")
compiler_prefix = "$goma_dir/gomacc "
@ -40,33 +28,18 @@ template("android_gcc_toolchain") {
compiler_prefix = ""
}
is_clang = invoker.is_clang
if (is_clang) {
not_needed([ "tool_prefix" ])
prefix =
rebase_path("//buildtools/${host_os}-x64/clang/bin", root_build_dir)
if (current_cpu == "riscv64") {
prefix = rebase_path(
"//third_party/canary_ndk/toolchains/llvm/prebuilt/${android_host_os}-${android_host_arch}/bin",
root_build_dir)
}
is_clang = true
prefix = rebase_path(
"${android_ndk_root}/toolchains/llvm/prebuilt/${android_host_os}-${android_host_arch}/bin",
root_build_dir)
cc = compiler_prefix + prefix + "/clang"
cxx = compiler_prefix + prefix + "/clang++"
ar = prefix + "/llvm-ar"
ld = cxx
readelf = prefix + "/llvm-readelf"
nm = prefix + "/llvm-nm"
android_strip = prefix + "/llvm-strip"
} else {
cc = compiler_prefix + tool_prefix + "gcc"
cxx = compiler_prefix + tool_prefix + "g++"
ar = tool_prefix + "ar"
ld = cxx
readelf = tool_prefix + "readelf"
nm = tool_prefix + "nm"
android_strip = tool_prefix + "strip"
}
cc = compiler_prefix + prefix + "/clang"
cxx = compiler_prefix + prefix + "/clang++"
ar = prefix + "/llvm-ar"
ld = cxx
readelf = prefix + "/llvm-readelf"
nm = prefix + "/llvm-nm"
android_strip = prefix + "/llvm-strip"
toolchain_os = "android"
toolchain_cpu = invoker.toolchain_cpu
@ -94,51 +67,22 @@ template("android_gcc_toolchain") {
}
}
template("android_gcc_toolchains_helper") {
android_gcc_toolchain(target_name) {
android_ndk_lib_dir = invoker.android_ndk_lib_dir
tool_prefix = invoker.tool_prefix
toolchain_cpu = invoker.toolchain_cpu
}
android_gcc_toolchain("clang_$target_name") {
android_ndk_lib_dir = invoker.android_ndk_lib_dir
tool_prefix = invoker.tool_prefix
toolchain_cpu = invoker.toolchain_cpu
is_clang = true
}
}
android_gcc_toolchains_helper("x86") {
android_ndk_lib_dir = x86_android_lib
tool_prefix = "$llvm_android_toolchain_root/bin/i686-linux-android-"
android_toolchain("clang_x86") {
toolchain_cpu = "x86"
}
android_gcc_toolchains_helper("arm") {
android_ndk_lib_dir = arm_android_lib
tool_prefix = "$llvm_android_toolchain_root/bin/arm-linux-androideabi-"
android_toolchain("clang_arm") {
toolchain_cpu = "arm"
}
android_gcc_toolchains_helper("x64") {
android_ndk_lib_dir = x86_64_android_lib
tool_prefix = "$llvm_android_toolchain_root/bin/x86_64-linux-android-"
android_toolchain("clang_x64") {
toolchain_cpu = "x86_64"
}
android_gcc_toolchains_helper("arm64") {
android_ndk_lib_dir = arm64_android_lib
tool_prefix = "$llvm_android_toolchain_root/bin/aarch64-linux-android-"
android_toolchain("clang_arm64") {
toolchain_cpu = "aarch64"
}
android_gcc_toolchains_helper("riscv64") {
android_ndk_lib_dir = riscv64_android_lib
tool_prefix = "$llvm_android_toolchain_root/bin/riscv64-linux-android-"
android_toolchain("clang_riscv64") {
toolchain_cpu = "riscv64"
}

View File

@ -950,7 +950,7 @@ class PrecompilerCompilerConfiguration extends CompilerConfiguration
if (_isAndroid) {
if (_isArm || _isIA32) {
exec = "$buildDir/$clang32/gen_snapshot";
} else if (_isArm64 || _isX64 || _isArmX64) {
} else if (_isArm64 || _isX64 || _isArmX64 || _isRiscv64) {
exec = "$buildDir/$clang64/gen_snapshot";
} else {
// Guaranteed by package:test_runner/src/configuration.dart's
@ -1046,19 +1046,22 @@ class PrecompilerCompilerConfiguration extends CompilerConfiguration
var ldFlags = <String>[];
List<String>? target;
if (_isAndroid) {
if (_isArm || _isArmX64) {
cc =
'$ndkPath/toolchains/llvm/prebuilt/$host-x86_64/bin/armv7a-linux-androideabi21-clang';
} else if (_isArm64) {
cc =
'$ndkPath/toolchains/llvm/prebuilt/$host-x86_64/bin/aarch64-linux-android21-clang';
cc = '$ndkPath/toolchains/llvm/prebuilt/$host-x86_64/bin/clang';
if (_isIA32) {
ldFlags.add('--target=i686-linux-androideabi');
} else if (_isX64) {
cc =
'$ndkPath/toolchains/llvm/prebuilt/$host-x86_64/bin/x86_64-linux-android21-clang';
ldFlags.add('--target=x86_64-linux-androideabi');
} else if (_isArm || _isArmX64) {
ldFlags.add('--target=arm-linux-androideabi');
} else if (_isArm64) {
ldFlags.add('--target=aarch64-linux-android');
} else if (_isRiscv64) {
ldFlags.add('--target=riscv64-linux-android');
} else {
throw 'Unimplemented';
}
shared = '-shared';
ldFlags.add('-nostdlib');
ldFlags.add('-Wl,--no-undefined');
ldFlags.add('-Wl,-z,max-page-size=65536');
} else if (Platform.isLinux) {
@ -1129,8 +1132,8 @@ class PrecompilerCompilerConfiguration extends CompilerConfiguration
Command computeStripCommand(
String tempDir, Map<String, String> environmentOverrides) {
var stripTool = "$ndkPath/toolchains/$abiTriple-4.9/prebuilt/"
"$host-x86_64/bin/$abiTriple-strip";
var stripTool = "$ndkPath/toolchains/llvm/prebuilt/"
"$host-x86_64/bin/llvm-strip";
var args = ['--strip-unneeded', "$tempDir/out.aotsnapshot"];
return CompilationCommand('strip', tempDir, bootstrapDependencies(),
stripTool, args, environmentOverrides,

View File

@ -459,9 +459,10 @@ class TestConfiguration {
architecture == Architecture.arm ||
architecture == Architecture.arm_x64 ||
architecture == Architecture.arm64 ||
architecture == Architecture.arm64c)) {
print("Warning: Android only supports the following "
"architectures: ia32/x64/arm/arm64/arm64c/arm_x64.");
architecture == Architecture.arm64c ||
architecture == Architecture.riscv64)) {
print("Warning: Android only supports the following architectures: "
"ia32/x64/x64c/arm/arm64/arm64c/arm_x64/riscv64.");
isValid = false;
}

View File

@ -645,8 +645,12 @@ class CommandExecutorImpl implements CommandExecutor {
steps.add(() => device.runAdbShellCommand(['rm', '-Rf', deviceTestDir]));
steps.add(() => device.runAdbShellCommand(['mkdir', '-p', deviceTestDir]));
steps.add(() => device.pushCachedData('$buildPath/dart_precompiled_runtime',
steps.add(() => device.pushCachedData(
'$buildPath/exe.stripped/dart_precompiled_runtime',
'$devicedir/dart_precompiled_runtime'));
steps.add(() => device.pushCachedData(
'$buildPath/dart_precompiled_runtime.sym',
'$devicedir/dart_precompiled_runtime.sym'));
steps.add(
() => device.pushCachedData(processTest, '$devicedir/process_test'));
steps.add(() => device.pushCachedData(

View File

@ -239,8 +239,9 @@
"buildtools/mac-x64/clang/bin/llvm-symbolizer",
"buildtools/win-x64/clang/bin/llvm-symbolizer.exe",
"third_party/android_tools/sdk/platform-tools/adb",
"third_party/android_tools/ndk/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64/bin/aarch64-linux-android-strip",
"third_party/android_tools/ndk/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-strip",
"third_party/android_tools/ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/../lib/x86_64-unknown-linux-gnu/libc++.so",
"third_party/android_tools/ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-objcopy",
"third_party/android_tools/ndk/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip",
"third_party/devtools/",
"third_party/webdriver/",
"third_party/pkg/",
@ -574,7 +575,7 @@
"use-elf": true
}
},
"vm-aot-android-(debug|product|release)-(arm|arm64|arm64c)": {
"vm-aot-android-(debug|product|release)-(ia32|x64|x64c|arm|arm64|arm64c|riscv64)": {
"options": {
"use-elf": true
}