diff --git a/DEPS b/DEPS index a6e90a2efb0..b61b7e43f14 100644 --- a/DEPS +++ b/DEPS @@ -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", diff --git a/build/config/BUILDCONFIG.gn b/build/config/BUILDCONFIG.gn index f222624dfd6..bdc2ee4ede8 100644 --- a/build/config/BUILDCONFIG.gn +++ b/build/config/BUILDCONFIG.gn @@ -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 diff --git a/build/config/android/BUILD.gn b/build/config/android/BUILD.gn index 7beb2c8508d..66f9c496044 100644 --- a/build/config/android/BUILD.gn +++ b/build/config/android/BUILD.gn @@ -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") ] } } diff --git a/build/config/android/config.gni b/build/config/android/config.gni index b5501357f42..b46e8237a42 100644 --- a/build/config/android/config.gni +++ b/build/config/android/config.gni @@ -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") { diff --git a/build/config/compiler/BUILD.gn b/build/config/compiler/BUILD.gn index 4f367d4fe1f..18377bae89a 100644 --- a/build/config/compiler/BUILD.gn +++ b/build/config/compiler/BUILD.gn @@ -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" ] - } } } diff --git a/build/config/sysroot.gni b/build/config/sysroot.gni index 0d94caea784..ba510206492 100644 --- a/build/config/sysroot.gni +++ b/build/config/sysroot.gni @@ -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 diff --git a/build/toolchain/android/BUILD.gn b/build/toolchain/android/BUILD.gn index 5d12dcf07e0..e85b05efd23 100644 --- a/build/toolchain/android/BUILD.gn +++ b/build/toolchain/android/BUILD.gn @@ -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" } diff --git a/pkg/test_runner/lib/src/compiler_configuration.dart b/pkg/test_runner/lib/src/compiler_configuration.dart index 67f09d56080..f5ae56500e6 100644 --- a/pkg/test_runner/lib/src/compiler_configuration.dart +++ b/pkg/test_runner/lib/src/compiler_configuration.dart @@ -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 = []; List? 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 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, diff --git a/pkg/test_runner/lib/src/configuration.dart b/pkg/test_runner/lib/src/configuration.dart index 60623bef2b2..05ce94a41d6 100644 --- a/pkg/test_runner/lib/src/configuration.dart +++ b/pkg/test_runner/lib/src/configuration.dart @@ -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; } diff --git a/pkg/test_runner/lib/src/process_queue.dart b/pkg/test_runner/lib/src/process_queue.dart index 8b3c738ce30..995b1b93950 100644 --- a/pkg/test_runner/lib/src/process_queue.dart +++ b/pkg/test_runner/lib/src/process_queue.dart @@ -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( diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json index 911b232199d..0c2cc8da65c 100644 --- a/tools/bots/test_matrix.json +++ b/tools/bots/test_matrix.json @@ -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 }