diff --git a/android/adb_gdb b/android/adb_gdb index 5c5f727a3..07178c2bd 100755 --- a/android/adb_gdb +++ b/android/adb_gdb @@ -473,14 +473,11 @@ get_ndk_toolchain_prebuilt () { local SUBPATH="$3" local NAME="$(get_arch_toolchain_prefix $ARCH)" local FILE TARGET - FILE=$NDK_DIR/toolchains/$NAME-4.8/prebuilt/$SUBPATH + FILE=$NDK_DIR/toolchains/$NAME-4.9/prebuilt/$SUBPATH if [ ! -f "$FILE" ]; then - FILE=$NDK_DIR/toolchains/$NAME-4.9/prebuilt/$SUBPATH + FILE=$NDK_DIR/toolchains/$NAME-4.8/prebuilt/$SUBPATH if [ ! -f "$FILE" ]; then - FILE=$NDK_DIR/toolchains/$NAME-4.6/prebuilt/$SUBPATH - if [ ! -f "$FILE" ]; then - FILE= - fi + FILE= fi fi echo "$FILE" diff --git a/common.gypi b/common.gypi index c605039d8..6b9d54361 100644 --- a/common.gypi +++ b/common.gypi @@ -1536,17 +1536,20 @@ # it takes effect here. ['os_posix==1 and OS!="mac" and OS!="ios" and clang==0 and asan==0 and lsan==0 and tsan==0 and msan==0 and ubsan_vptr==0', { 'conditions': [ - ['OS=="android"', { - # We directly set the gcc versions since we know what we use. - 'gcc_version%': 48, - }, { - 'gcc_version%': '=48 and clang==0', { 'target_defaults': { diff --git a/config/android/config.gni b/config/android/config.gni index 29d739a43..5c1be46a4 100644 --- a/config/android/config.gni +++ b/config/android/config.gni @@ -78,7 +78,7 @@ if (is_android) { # Toolchain root directory for each build. The actual binaries are inside # a "bin" directory inside of these. - _android_toolchain_version = "4.8" + _android_toolchain_version = "4.9" 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}" mips_android_toolchain_root = "$android_ndk_root/toolchains/mipsel-linux-android-${_android_toolchain_version}/prebuilt/${android_host_os}-${android_host_arch}" diff --git a/config/compiler/BUILD.gn b/config/compiler/BUILD.gn index b04d6dfe3..59c467303 100644 --- a/config/compiler/BUILD.gn +++ b/config/compiler/BUILD.gn @@ -160,6 +160,20 @@ config("compiler") { cflags += [ "-mthumb-interwork" ] } } + if (!is_clang) { + # Clang doesn't support these flags. + cflags += [ + # The tree-sra optimization (scalar replacement for + # aggregates enabling subsequent optimizations) leads to + # invalid code generation when using the Android NDK's + # compiler (r5-r7). This can be verified using + # webkit_unit_tests' WTF.Checked_int8_t test. + "-fno-tree-sra", + # The following option is disabled to improve binary + # size and performance in gcc 4.9. + "-fno-caller-saves", + ] + } } } @@ -256,15 +270,6 @@ config("compiler") { # Clang doesn't support these flags. cflags += [ "-finline-limit=64", - # The following 6 options are disabled to save on - # binary size in gcc 4.8. - # TODO(fdegans) Reevaluate when we upgrade GCC. - "-fno-partial-inlining", - "-fno-early-inlining", - "-fno-tree-copy-prop", - "-fno-tree-loop-optimize", - "-fno-move-loop-invariants", - "-fno-caller-saves", ] } if (is_android_webview_build) { diff --git a/config/gcc/gcc_version.gni b/config/gcc/gcc_version.gni index 79b117459..9b27c9047 100644 --- a/config/gcc/gcc_version.gni +++ b/config/gcc/gcc_version.gni @@ -5,7 +5,12 @@ if (is_clang) { gcc_version = 0 } else if (is_android) { - gcc_version = 48 + import("//build/config/android/config.gni") + if (is_android_webview_build) { + gcc_version = 48 + } else { + gcc_version = 49 + } } else { gcc_version = exec_script("../../compiler_version.py", [ "host", "compiler" ], "value") }