diff --git a/engine/src/flutter/common/config.gni b/engine/src/flutter/common/config.gni index 142701b8542..1e22be21da6 100644 --- a/engine/src/flutter/common/config.gni +++ b/engine/src/flutter/common/config.gni @@ -19,6 +19,9 @@ declare_args() { # Whether to build host-side development artifacts. flutter_build_engine_artifacts = true + + # Whether to include backtrace support. + enable_backtrace = true } # feature_defines_list --------------------------------------------------------- diff --git a/engine/src/flutter/fml/BUILD.gn b/engine/src/flutter/fml/BUILD.gn index 1656b114460..9f7310b5b06 100644 --- a/engine/src/flutter/fml/BUILD.gn +++ b/engine/src/flutter/fml/BUILD.gn @@ -97,7 +97,7 @@ source_set("fml") { "wakeable.h", ] - if (is_mac || is_linux || is_win || (is_ios && is_debug)) { + if (enable_backtrace) { sources += [ "backtrace.cc" ] } else { sources += [ "backtrace_stub.cc" ] @@ -116,7 +116,7 @@ source_set("fml") { "//third_party/icu", ] - if (is_mac || is_linux || is_win || (is_ios && is_debug)) { + if (enable_backtrace) { # This abseil dependency is only used by backtrace.cc. deps += [ "//third_party/abseil-cpp/absl/debugging:symbolize" ] } diff --git a/engine/src/flutter/tools/gn b/engine/src/flutter/tools/gn index 366ec6bdd3a..1c13e7bbcab 100755 --- a/engine/src/flutter/tools/gn +++ b/engine/src/flutter/tools/gn @@ -393,6 +393,15 @@ def to_gn_args(args): # flags allow preventing those targets from being part of the build tree. gn_args['enable_desktop_embeddings'] = not args.disable_desktop_embeddings + # Determine whether backtace support should be compiled in. + if args.backtrace: + gn_args['enable_backtrace'] = ( + args.target_os in ['linux', 'mac', 'win'] or + args.target_os == 'ios' and runtime_mode == 'debug' + ) + else: + gn_args['enable_backtrace'] = False + # Overrides whether Boring SSL is compiled with system as. Only meaningful # on Android. gn_args['bssl_use_clang_integrated_as'] = True @@ -773,6 +782,17 @@ def parse_args(args): '--arm-float-abi', type=str, choices=['hard', 'soft', 'softfp'] ) + # Whether to compile in backtrace support. + # Available for Windows and POSIX platforms whose libc includes execinfo.h. + # MUSL doesn't include execinfo.h should be build with --no-backtrace. + parser.add_argument( + '--backtrace', + default=True, + action='store_true', + help='Whether OS support exists for collecting backtraces.' + ) + parser.add_argument('--no-backtrace', dest='backtrace', action='store_false') + parser.add_argument( '--build-engine-artifacts', default=True,