diff --git a/BUILD.gn b/BUILD.gn
index 35d364a..edac93a 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -169,16 +169,10 @@
       "//flutter/fml:fml_tests",
       "//flutter/runtime:runtime_tests",
       "//flutter/runtime:runtime_tests_next",
+      "//flutter/shell/common:shell_tests",
+      "//flutter/shell/common:shell_tests_next",
       "//flutter/shell/platform/fuchsia/flutter:flutter_runner_scenic_tests",
       "//flutter/shell/platform/fuchsia/flutter:flutter_runner_tests",
     ]
-
-    # TODO(fxb/55353): These break with LTO enabled
-    if (!enable_lto) {
-      deps += [
-        "//flutter/shell/common:shell_tests",
-        "//flutter/shell/common:shell_tests_next",
-      ]
-    }
   }
 }
diff --git a/shell/platform/fuchsia/dart_runner/BUILD.gn b/shell/platform/fuchsia/dart_runner/BUILD.gn
index 9f67cf3..197eabe 100644
--- a/shell/platform/fuchsia/dart_runner/BUILD.gn
+++ b/shell/platform/fuchsia/dart_runner/BUILD.gn
@@ -14,22 +14,11 @@
   assert(defined(invoker.product), "The parameter 'product' must be defined")
   assert(defined(invoker.output_name),
          "The parameter 'output_name' must be defined")
-  assert(defined(invoker.extra_deps),
-         "The parameter 'extra_deps' must be defined")
 
   invoker_output_name = invoker.output_name
+  extra_defines = invoker.extra_defines
   extra_deps = invoker.extra_deps
 
-  extra_configs = []
-  if (is_debug) {
-    extra_configs += [ "//third_party/dart/build/config:debug" ]
-  }
-
-  extra_defines = []
-  if (defined(invoker.extra_defines)) {
-    extra_defines += invoker.extra_defines
-  }
-
   executable(target_name) {
     output_name = invoker_output_name
 
@@ -46,8 +35,6 @@
       "service_isolate.h",
     ]
 
-    configs += extra_configs
-
     defines = extra_defines
 
     dart_deps = []
@@ -88,11 +75,10 @@
 runner("dart_jit_runner_bin") {
   output_name = "dart_jit_runner"
   product = false
-
+  extra_defines = []
   if (flutter_runtime_mode == "profile") {
-    extra_defines = [ "FLUTTER_PROFILE" ]
+    extra_defines += [ "FLUTTER_PROFILE" ]
   }
-
   extra_deps = [
     "//third_party/dart/runtime:libdart_jit",
     "//third_party/dart/runtime/platform:libdart_platform_jit",
@@ -102,9 +88,7 @@
 runner("dart_jit_product_runner_bin") {
   output_name = "dart_jit_product_runner"
   product = true
-
   extra_defines = [ "DART_PRODUCT" ]
-
   extra_deps = [
     "//third_party/dart/runtime:libdart_jit_product",
     "//third_party/dart/runtime/platform:libdart_platform_jit_product",
@@ -114,12 +98,10 @@
 runner("dart_aot_runner_bin") {
   output_name = "dart_aot_runner"
   product = false
-
   extra_defines = [ "AOT_RUNTIME" ]
   if (flutter_runtime_mode == "profile") {
     extra_defines += [ "FLUTTER_PROFILE" ]
   }
-
   extra_deps = [
     "embedder:dart_aot_snapshot_cc",
     "//third_party/dart/runtime:libdart_precompiled_runtime",
@@ -130,12 +112,10 @@
 runner("dart_aot_product_runner_bin") {
   output_name = "dart_aot_product_runner"
   product = true
-
   extra_defines = [
     "AOT_RUNTIME",
     "DART_PRODUCT",
   ]
-
   extra_deps = [
     "embedder:dart_aot_product_snapshot_cc",
     "//third_party/dart/runtime:libdart_precompiled_runtime_product",
diff --git a/shell/platform/fuchsia/flutter/BUILD.gn b/shell/platform/fuchsia/flutter/BUILD.gn
index 23a15f1..98befa7 100644
--- a/shell/platform/fuchsia/flutter/BUILD.gn
+++ b/shell/platform/fuchsia/flutter/BUILD.gn
@@ -12,176 +12,27 @@
 import("//flutter/tools/fuchsia/fuchsia_archive.gni")
 import("//flutter/tools/fuchsia/fuchsia_libs.gni")
 import("//flutter/vulkan/config.gni")
+import("engine_flutter_runner.gni")
 
 # Fuchsia uses its own custom Surface implementation.
-shell_gpu_configuration("fuchsia_gpu_configuration_legacy") {
+shell_gpu_configuration("fuchsia_legacy_gpu_configuration") {
   enable_software = false
   enable_gl = false
   enable_vulkan = false
   enable_metal = false
 }
 
-source_set("flutter_runner_sources") {
-  sources = [
-    "accessibility_bridge.cc",
-    "accessibility_bridge.h",
-    "component.cc",
-    "component.h",
-    "compositor_context.cc",
-    "compositor_context.h",
-    "engine.cc",
-    "engine.h",
-    "flutter_runner_product_configuration.cc",
-    "flutter_runner_product_configuration.h",
-    "fuchsia_intl.cc",
-    "fuchsia_intl.h",
-    "isolate_configurator.cc",
-    "isolate_configurator.h",
-    "logging.h",
-    "loop.cc",
-    "loop.h",
-    "platform_view.cc",
-    "platform_view.h",
-    "runner.cc",
-    "runner.h",
-    "session_connection.cc",
-    "session_connection.h",
-    "surface.cc",
-    "surface.h",
-    "task_observers.cc",
-    "task_observers.h",
-    "task_runner_adapter.cc",
-    "task_runner_adapter.h",
-    "thread.cc",
-    "thread.h",
-    "unique_fdio_ns.h",
-    "vsync_recorder.cc",
-    "vsync_recorder.h",
-    "vsync_waiter.cc",
-    "vsync_waiter.h",
-    "vulkan_surface.cc",
-    "vulkan_surface.h",
-    "vulkan_surface_pool.cc",
-    "vulkan_surface_pool.h",
-    "vulkan_surface_producer.cc",
-    "vulkan_surface_producer.h",
-  ]
-
-  # The use of these dependencies is temporary and will be moved behind the
-  # embedder API.
-  flutter_deps = [
-    ":fuchsia_gpu_configuration_legacy",
-    "//flutter/assets",
-    "//flutter/common",
-    "//flutter/flow:flow_fuchsia_legacy",
-    "//flutter/fml",
-    "//flutter/lib/ui:ui_fuchsia_legacy",
-    "//flutter/runtime:runtime_fuchsia_legacy",
-    "//flutter/shell/common:common_fuchsia_legacy",
-    "//flutter/third_party/txt",
-    "//flutter/vulkan",
-  ]
-
-  public_deps = [
-                  "$fuchsia_sdk_root/fidl:fuchsia.sys",
-                  "$fuchsia_sdk_root/pkg:async-loop-cpp",
-                  "$fuchsia_sdk_root/pkg:scenic_cpp",
-                  "$fuchsia_sdk_root/pkg:sys_cpp",
-                  "$fuchsia_sdk_root/pkg:trace",
-                  "$fuchsia_sdk_root/pkg:trace-engine",
-                  "$fuchsia_sdk_root/pkg:trace-provider-so",
-                  "//flutter/shell/platform/fuchsia/dart-pkg/fuchsia",
-                  "//flutter/shell/platform/fuchsia/dart-pkg/zircon",
-                  "//flutter/shell/platform/fuchsia/runtime/dart/utils",
-                ] + flutter_deps
-
-  deps = [
-    "$fuchsia_sdk_root/fidl:fuchsia.accessibility.semantics",
-    "$fuchsia_sdk_root/fidl:fuchsia.fonts",
-    "$fuchsia_sdk_root/fidl:fuchsia.images",
-    "$fuchsia_sdk_root/fidl:fuchsia.intl",
-    "$fuchsia_sdk_root/fidl:fuchsia.io",
-    "$fuchsia_sdk_root/fidl:fuchsia.ui.app",
-    "$fuchsia_sdk_root/fidl:fuchsia.ui.scenic",
-    "$fuchsia_sdk_root/pkg:async-cpp",
-    "$fuchsia_sdk_root/pkg:async-default",
-    "$fuchsia_sdk_root/pkg:async-loop",
-    "$fuchsia_sdk_root/pkg:fdio",
-    "$fuchsia_sdk_root/pkg:fidl_cpp",
-    "$fuchsia_sdk_root/pkg:syslog",
-    "$fuchsia_sdk_root/pkg:vfs_cpp",
-    "$fuchsia_sdk_root/pkg:zx",
-  ]
-}
-
 # Things that explicitly being excluded:
 # 1. Kernel snapshot framework mode.
 # 2. Profiler symbols.
 
-# Builds a flutter_runner
-#
-# Parameters:
-#
-#  output_name (required):
-#    The name of the resulting binary.
-#
-#  extra_deps (required):
-#    Any additional dependencies.
-#
-#  product (required):
-#    Whether to link against a Product mode Dart VM.
-#
-#  extra_defines (optional):
-#    Any additional preprocessor defines.
-template("flutter_runner") {
-  assert(defined(invoker.output_name), "flutter_runner must define output_name")
-  assert(defined(invoker.extra_deps), "flutter_runner must define extra_deps")
-  assert(defined(invoker.product), "flutter_runner must define product")
-
-  invoker_output_name = invoker.output_name
-  extra_deps = invoker.extra_deps
-
-  extra_configs = []
-  if (is_debug) {
-    extra_configs += [ "//third_party/dart/build/config:debug" ]
-  }
-
-  extra_defines = []
-  if (defined(invoker.extra_defines)) {
-    extra_defines += invoker.extra_defines
-  }
-
-  executable(target_name) {
-    output_name = invoker_output_name
-
-    sources = [
-      "main.cc",
-    ]
-
-    configs += extra_configs
-
-    defines = extra_defines
-
-    deps = [ ":flutter_runner_sources" ] + extra_deps
-
-    # The flags below are needed so that Dart's CPU profiler can walk the
-    # C++ stack.
-    cflags = [ "-fno-omit-frame-pointer" ]
-
-    if (!invoker.product) {
-      # This flag is needed so that the call to dladdr() in Dart's native symbol
-      # resolver can report good symbol information for the CPU profiler.
-      ldflags = [ "-rdynamic" ]
-    }
-  }
-}
-
 flutter_runner("jit") {
   output_name = "flutter_jit_runner"
   product = false
 
+  extra_defines = []
   if (flutter_runtime_mode == "profile") {
-    extra_defines = [ "FLUTTER_PROFILE" ]
+    extra_defines += [ "FLUTTER_PROFILE" ]
   }
 
   extra_deps = [
@@ -206,8 +57,9 @@
   output_name = "flutter_aot_runner"
   product = false
 
+  extra_defines = []
   if (flutter_runtime_mode == "profile") {
-    extra_defines = [ "FLUTTER_PROFILE" ]
+    extra_defines += [ "FLUTTER_PROFILE" ]
   }
 
   extra_deps = [
@@ -417,13 +269,41 @@
   output_name = "flutter_runner_tests"
 
   sources = [
+    "accessibility_bridge.cc",
+    "accessibility_bridge.h",
     "accessibility_bridge_unittest.cc",
+    "component.cc",
+    "component.h",
     "component_unittest.cc",
+    "flutter_runner_fakes.h",
+    "flutter_runner_product_configuration.cc",
+    "flutter_runner_product_configuration.h",
+    "fuchsia_intl.cc",
+    "fuchsia_intl.h",
     "fuchsia_intl_unittest.cc",
+    "logging.h",
+    "loop.cc",
+    "loop.h",
+    "platform_view.cc",
+    "platform_view.h",
     "platform_view_unittest.cc",
+    "runner.cc",
+    "runner.h",
     "runner_unittest.cc",
+    "surface.cc",
+    "surface.h",
+    "task_observers.cc",
+    "task_observers.h",
+    "task_runner_adapter.cc",
+    "task_runner_adapter.h",
     "tests/flutter_runner_product_configuration_unittests.cc",
     "tests/vsync_recorder_unittests.cc",
+    "thread.cc",
+    "thread.h",
+    "vsync_recorder.cc",
+    "vsync_recorder.h",
+    "vsync_waiter.cc",
+    "vsync_waiter.h",
     "vsync_waiter_unittests.cc",
   ]
 
@@ -433,7 +313,6 @@
   deps = [
     ":aot",
     ":flutter_runner_fixtures",
-    ":flutter_runner_sources",
     "//build/fuchsia/fidl:fuchsia.accessibility.semantics",
     "//build/fuchsia/pkg:async-default",
     "//build/fuchsia/pkg:async-loop-cpp",
@@ -450,10 +329,6 @@
     "//third_party/dart/runtime:libdart_jit",
     "//third_party/dart/runtime/platform:libdart_platform_jit",
   ]
-
-  if (is_debug) {
-    configs += [ "//third_party/dart/build/config:debug" ]
-  }
 }
 
 executable("flutter_runner_tzdata_unittests") {
@@ -462,6 +337,8 @@
   output_name = "flutter_runner_tzdata_tests"
 
   sources = [
+    "runner.cc",
+    "runner.h",
     "runner_tzdata_unittest.cc",
   ]
 
@@ -471,7 +348,6 @@
   deps = [
     ":aot",
     ":flutter_runner_fixtures",
-    ":flutter_runner_sources",
     "//build/fuchsia/fidl:fuchsia.accessibility.semantics",
     "//build/fuchsia/pkg:async-loop-cpp",
     "//build/fuchsia/pkg:async-loop-default",
@@ -488,10 +364,6 @@
     "//third_party/icu",
     "//third_party/skia",
   ]
-
-  if (is_debug) {
-    configs += [ "//third_party/dart/build/config:debug" ]
-  }
 }
 
 fuchsia_archive("flutter_runner_tests") {
@@ -571,8 +443,46 @@
   output_name = "flutter_runner_scenic_tests"
 
   sources = [
+    "component.cc",
+    "component.h",
+    "compositor_context.cc",
+    "compositor_context.h",
+    "engine.cc",
+    "engine.h",
+    "fuchsia_intl.cc",
+    "fuchsia_intl.h",
+    "isolate_configurator.cc",
+    "isolate_configurator.h",
+    "logging.h",
+    "loop.cc",
+    "loop.h",
+    "platform_view.cc",
+    "platform_view.h",
+    "runner.cc",
+    "runner.h",
+    "session_connection.cc",
+    "session_connection.h",
+    "surface.cc",
+    "surface.h",
+    "task_observers.cc",
+    "task_observers.h",
+    "task_runner_adapter.cc",
+    "task_runner_adapter.h",
     "tests/session_connection_unittests.cc",
+    "thread.cc",
+    "thread.h",
+    "unique_fdio_ns.h",
+    "vsync_recorder.cc",
+    "vsync_recorder.h",
+    "vsync_waiter.cc",
+    "vsync_waiter.h",
     "vsync_waiter_unittests.cc",
+    "vulkan_surface.cc",
+    "vulkan_surface.h",
+    "vulkan_surface_pool.cc",
+    "vulkan_surface_pool.h",
+    "vulkan_surface_producer.cc",
+    "vulkan_surface_producer.h",
   ]
 
   # This is needed for //third_party/googletest for linking zircon symbols.
@@ -580,9 +490,9 @@
 
   deps = [
     ":flutter_runner_fixtures",
-    ":flutter_runner_sources",
     ":jit",
     "$fuchsia_sdk_root/fidl:fuchsia.ui.policy",
+    "$fuchsia_sdk_root/pkg:trace-provider-so",
     "//build/fuchsia/fidl:fuchsia.accessibility.semantics",
     "//build/fuchsia/pkg:async-default",
     "//build/fuchsia/pkg:async-loop-cpp",
@@ -608,10 +518,6 @@
   public_deps = [
     "//third_party/googletest:gtest",
   ]
-
-  if (is_debug) {
-    configs += [ "//third_party/dart/build/config:debug" ]
-  }
 }
 
 fuchsia_archive("flutter_runner_scenic_tests") {
diff --git a/shell/platform/fuchsia/flutter/engine_flutter_runner.gni b/shell/platform/fuchsia/flutter/engine_flutter_runner.gni
new file mode 100644
index 0000000..57fd228
--- /dev/null
+++ b/shell/platform/fuchsia/flutter/engine_flutter_runner.gni
@@ -0,0 +1,150 @@
+# Copyright 2013 The Flutter Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+assert(is_fuchsia)
+
+import("//build/fuchsia/sdk.gni")
+
+# Builds a flutter_runner
+#
+# Parameters:
+#
+#  output_name (required):
+#    The name of the resulting binary.
+#
+#  extra_deps (required):
+#    Any additional dependencies.
+#
+#  product (required):
+#    Whether to link against a Product mode Dart VM.
+#
+#  extra_defines (optional):
+#    Any additional preprocessor defines.
+template("flutter_runner") {
+  assert(defined(invoker.output_name), "flutter_runner must define output_name")
+  assert(defined(invoker.extra_deps), "flutter_runner must define extra_deps")
+  assert(defined(invoker.product), "flutter_runner must define product")
+
+  invoker_output_name = invoker.output_name
+  extra_deps = invoker.extra_deps
+
+  extra_defines = []
+  if (defined(invoker.extra_defines)) {
+    extra_defines += invoker.extra_defines
+  }
+
+  executable(target_name) {
+    output_name = invoker_output_name
+
+    defines = extra_defines
+
+    libs = []
+
+    sources = [
+      "accessibility_bridge.cc",
+      "accessibility_bridge.h",
+      "component.cc",
+      "component.h",
+      "compositor_context.cc",
+      "compositor_context.h",
+      "engine.cc",
+      "engine.h",
+      "flutter_runner_product_configuration.cc",
+      "flutter_runner_product_configuration.h",
+      "fuchsia_intl.cc",
+      "fuchsia_intl.h",
+      "isolate_configurator.cc",
+      "isolate_configurator.h",
+      "logging.h",
+      "loop.cc",
+      "loop.h",
+      "main.cc",
+      "platform_view.cc",
+      "platform_view.h",
+      "runner.cc",
+      "runner.h",
+      "session_connection.cc",
+      "session_connection.h",
+      "surface.cc",
+      "surface.h",
+      "task_observers.cc",
+      "task_observers.h",
+      "task_runner_adapter.cc",
+      "task_runner_adapter.h",
+      "thread.cc",
+      "thread.h",
+      "unique_fdio_ns.h",
+      "vsync_recorder.cc",
+      "vsync_recorder.h",
+      "vsync_waiter.cc",
+      "vsync_waiter.h",
+      "vulkan_surface.cc",
+      "vulkan_surface.h",
+      "vulkan_surface_pool.cc",
+      "vulkan_surface_pool.h",
+      "vulkan_surface_producer.cc",
+      "vulkan_surface_producer.h",
+    ]
+
+    # The use of these dependencies is temporary and will be moved behind the
+    # embedder API.
+    flutter_deps = [
+      "../flutter:fuchsia_legacy_gpu_configuration",
+      "//flutter/assets",
+      "//flutter/common",
+      "//flutter/fml",
+      "//flutter/flow:flow_fuchsia_legacy",
+      "//flutter/lib/ui:ui_fuchsia_legacy",
+      "//flutter/runtime:runtime_fuchsia_legacy",
+      "//flutter/shell/common:common_fuchsia_legacy",
+      "//flutter/vulkan",
+    ]
+
+    _fuchsia_platform = "//flutter/shell/platform/fuchsia"
+
+    # TODO(kaushikiska) evaluate if all of these are needed.
+    fuchsia_deps = [
+      "${_fuchsia_platform}/dart-pkg/fuchsia",
+      "${_fuchsia_platform}/dart-pkg/zircon",
+      "${_fuchsia_platform}/runtime/dart/utils",
+    ]
+
+    deps = [
+             "$fuchsia_sdk_root/fidl:fuchsia.accessibility.semantics",
+             "$fuchsia_sdk_root/fidl:fuchsia.fonts",
+             "$fuchsia_sdk_root/fidl:fuchsia.images",
+             "$fuchsia_sdk_root/fidl:fuchsia.intl",
+             "$fuchsia_sdk_root/fidl:fuchsia.io",
+             "$fuchsia_sdk_root/fidl:fuchsia.sys",
+             "$fuchsia_sdk_root/fidl:fuchsia.ui.app",
+             "$fuchsia_sdk_root/fidl:fuchsia.ui.scenic",
+             "$fuchsia_sdk_root/pkg:async-cpp",
+             "$fuchsia_sdk_root/pkg:async-default",
+             "$fuchsia_sdk_root/pkg:async-loop",
+             "$fuchsia_sdk_root/pkg:async-loop-cpp",
+             "$fuchsia_sdk_root/pkg:fdio",
+             "$fuchsia_sdk_root/pkg:fidl_cpp",
+             "$fuchsia_sdk_root/pkg:scenic_cpp",
+             "$fuchsia_sdk_root/pkg:sys_cpp",
+             "$fuchsia_sdk_root/pkg:syslog",
+             "$fuchsia_sdk_root/pkg:trace",
+             "$fuchsia_sdk_root/pkg:trace-engine",
+             "$fuchsia_sdk_root/pkg:trace-provider-so",
+             "$fuchsia_sdk_root/pkg:vfs_cpp",
+             "$fuchsia_sdk_root/pkg:zx",
+             "//third_party/skia",
+             "//flutter/third_party/tonic",
+           ] + fuchsia_deps + flutter_deps + extra_deps
+
+    # The flags below are needed so that Dart's CPU profiler can walk the
+    # C++ stack.
+    cflags = [ "-fno-omit-frame-pointer" ]
+
+    if (!invoker.product) {
+      # This flag is needed so that the call to dladdr() in Dart's native symbol
+      # resolver can report good symbol information for the CPU profiler.
+      ldflags = [ "-rdynamic" ]
+    }
+  }
+}
diff --git a/tools/fuchsia/build_fuchsia_artifacts.py b/tools/fuchsia/build_fuchsia_artifacts.py
index ae38e73..09ac668 100755
--- a/tools/fuchsia/build_fuchsia_artifacts.py
+++ b/tools/fuchsia/build_fuchsia_artifacts.py
@@ -23,10 +23,6 @@
 _out_dir = os.path.join(_src_root_dir, 'out')
 _bucket_directory = os.path.join(_out_dir, 'fuchsia_bucket')
 _fuchsia_base = 'flutter/shell/platform/fuchsia'
-_default_targets = [
-    'flutter:flutter',
-    'flutter:fuchsia_tests',
-]
 
 
 def IsLinux():
@@ -168,7 +164,8 @@
   deps_bucket_path = os.path.join(_bucket_directory, dst)
   FindFileAndCopyTo('icudtl.dat', source_root, deps_bucket_path)
 
-def BuildBucket(out_dir, runtime_mode, arch, product):
+def BuildBucket(runtime_mode, arch, product):
+  out_dir = 'fuchsia_%s_%s/' % (runtime_mode, arch)
   bucket_dir = 'flutter/%s/%s/' % (arch, runtime_mode)
   deps_dir = 'flutter/%s/deps/' % (arch)
   CopyToBucket(out_dir, bucket_dir, product)
@@ -222,7 +219,16 @@
   target += 'runner'
   return base + target
 
-def BuildTarget(out_dir, runtime_mode, arch, enable_opt, enable_lto, additional_targets=[]):
+
+def GetTargetsToBuild(product=False, additional_targets=[]):
+  targets_to_build = [
+      'flutter/shell/platform/fuchsia:fuchsia',
+  ] + additional_targets
+  return targets_to_build
+
+
+def BuildTarget(runtime_mode, arch, product, enable_lto, additional_targets=[]):
+  out_dir = 'fuchsia_%s_%s' % (runtime_mode, arch)
   flags = [
       '--fuchsia',
       '--fuchsia-cpu',
@@ -231,14 +237,11 @@
       runtime_mode,
   ]
 
-  if not enable_opt:
-    flags.append('--unoptimized')
-
   if not enable_lto:
     flags.append('--no-lto')
 
   RunGN(out_dir, flags)
-  BuildNinjaTargets(out_dir, _default_targets + additional_targets)
+  BuildNinjaTargets(out_dir, GetTargetsToBuild(product))
 
   return
 
@@ -267,12 +270,6 @@
       '--archs', type=str, choices=['x64', 'arm64', 'all'], default='all')
 
   parser.add_argument(
-      '--unoptimized',
-      action='store_true',
-      default=False,
-      help='If set, disables compiler optimizations for the build.')
-
-  parser.add_argument(
       '--no-lto',
       action='store_true',
       default=False,
@@ -298,7 +295,6 @@
   runtime_modes = ['debug', 'profile', 'release']
   product_modes = [False, False, True]
 
-  enable_opt = not args.unoptimized
   enable_lto = not args.no_lto
 
   for arch in archs:
@@ -306,11 +302,10 @@
       runtime_mode = runtime_modes[i]
       product = product_modes[i]
       if build_mode == 'all' or runtime_mode == build_mode:
-        out_dir = 'fuchsia_%s_%s%s' % (runtime_mode, '' if enable_opt else 'unopt_', arch)
         if not args.skip_build:
-          BuildTarget(out_dir, runtime_mode, arch, enable_opt, enable_lto,
+          BuildTarget(runtime_mode, arch, product, enable_lto,
                       args.targets.split(","))
-        BuildBucket(out_dir, runtime_mode, arch, product)
+        BuildBucket(runtime_mode, arch, product)
 
   if args.upload:
     if args.engine_version is None:
