diff --git a/runtime/BUILD.gn b/runtime/BUILD.gn
index 31f9257..524ee04 100644
--- a/runtime/BUILD.gn
+++ b/runtime/BUILD.gn
@@ -27,6 +27,15 @@
   }
 }
 
+# This is a config to use to build PRODUCT mode artifacts in a RELEASE build.
+# If a DEBUG build has been specified it will be ignored.
+config("dart_product_config") {
+  defines = []
+  if (!dart_debug) {
+    defines += [ "PRODUCT" ]
+  }
+}
+
 config("dart_precompiled_runtime_config") {
   defines = []
   defines += [ "DART_PRECOMPILED_RUNTIME" ]
@@ -161,15 +170,11 @@
     extra_deps += invoker.extra_deps
   }
   static_library(target_name) {
-    configs += [
-                 ":dart_config",
-                 ":dart_maybe_product_config",
-               ] + extra_configs
+    configs += [ ":dart_config" ] + extra_configs
     if (is_fuchsia) {
       configs -= [ "//build/config:symbol_visibility_hidden" ]
     }
     deps = [
-             "vm:libdart_platform",
              "third_party/double-conversion/src:libdouble_conversion",
              ":generate_version_cc_file",
            ] + extra_deps
@@ -193,38 +198,95 @@
 
 libdart_library("libdart_jit") {
   extra_deps = [
+    "vm:libdart_platform",
     "vm:libdart_lib_jit",
     "vm:libdart_vm_jit",
   ]
 }
 
-libdart_library("libdart_precompiled_runtime") {
-  extra_configs = [ ":dart_precompiled_runtime_config" ]
+libdart_library("libdart_jit_product") {
+  extra_configs = [ ":dart_product_config" ]
   extra_deps = [
+    "vm:libdart_platform_product",
+    "vm:libdart_lib_jit_product",
+    "vm:libdart_vm_jit_product",
+  ]
+}
+
+libdart_library("libdart_precompiled_runtime") {
+  extra_configs = [
+    ":dart_maybe_product_config",
+    ":dart_precompiled_runtime_config",
+  ]
+  extra_deps = [
+    "vm:libdart_platform",
     "vm:libdart_lib_precompiled_runtime",
     "vm:libdart_vm_precompiled_runtime",
   ]
 }
 
+libdart_library("libdart_precompiled_runtime_product") {
+  extra_configs = [
+    ":dart_product_config",
+    ":dart_precompiled_runtime_config",
+  ]
+  extra_deps = [
+    "vm:libdart_platform_product",
+    "vm:libdart_lib_precompiled_runtime_product",
+    "vm:libdart_vm_precompiled_runtime_product",
+  ]
+}
+
 libdart_library("libdart_nosnapshot_with_precompiler") {
   extra_configs = [
+    ":dart_maybe_product_config",
     ":dart_no_snapshot_config",
     ":dart_precompiler_config",
   ]
   extra_deps = [
+    "vm:libdart_platform",
     "vm:libdart_lib_nosnapshot_with_precompiler",
     "vm:libdart_vm_nosnapshot_with_precompiler",
   ]
 }
 
-libdart_library("libdart_with_precompiler") {
-  extra_configs = [ ":dart_precompiler_config" ]
+libdart_library("libdart_nosnapshot_with_precompiler_product") {
+  extra_configs = [
+    ":dart_product_config",
+    ":dart_no_snapshot_config",
+    ":dart_precompiler_config",
+  ]
   extra_deps = [
+    "vm:libdart_platform_product",
+    "vm:libdart_lib_nosnapshot_with_precompiler_product",
+    "vm:libdart_vm_nosnapshot_with_precompiler_product",
+  ]
+}
+
+libdart_library("libdart_with_precompiler") {
+  extra_configs = [
+    ":dart_maybe_product_config",
+    ":dart_precompiler_config",
+  ]
+  extra_deps = [
+    "vm:libdart_platform",
     "vm:libdart_lib_with_precompiler",
     "vm:libdart_vm_with_precompiler",
   ]
 }
 
+libdart_library("libdart_with_precompiler_product") {
+  extra_configs = [
+    ":dart_product_config",
+    ":dart_precompiler_config",
+  ]
+  extra_deps = [
+    "vm:libdart_platform_product",
+    "vm:libdart_lib_with_precompiler_product",
+    "vm:libdart_vm_with_precompiler_product",
+  ]
+}
+
 action("generate_version_cc_file") {
   deps = [
     "third_party/double-conversion/src:libdouble_conversion",
diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn
index 2e58fdd..cd0213a 100644
--- a/runtime/bin/BUILD.gn
+++ b/runtime/bin/BUILD.gn
@@ -232,172 +232,221 @@
   }
 }
 
-static_library("libdart_builtin") {
-  configs += [
-    "..:dart_config",
-    "..:dart_maybe_product_config",
-  ]
-  if (is_fuchsia) {
-    configs -= [ "//build/config:symbol_visibility_hidden" ]
+template("build_libdart_builtin") {
+  extra_configs = []
+  if (defined(invoker.extra_configs)) {
+    extra_configs += invoker.extra_configs
   }
-  public_configs = [ ":libdart_builtin_config" ]
-  deps = [
-    ":generate_blink_cc_file",
-    ":generate_builtin_cc_file",
-    ":generate_cached_patches_cc_file",
-    ":generate_html_cc_file",
-    ":generate_html_common_cc_file",
-    ":generate_indexed_db_cc_file",
-    ":generate_io_cc_file",
-    ":generate_io_patch_cc_file",
-    ":generate_js_cc_file",
-    ":generate_js_util_cc_file",
-    ":generate_metadata_cc_file",
-    ":generate_svg_cc_file",
-    ":generate_web_audio_cc_file",
-    ":generate_web_gl_cc_file",
-    ":generate_web_sql_cc_file",
-  ]
-  include_dirs = [ ".." ]
-  set_sources_assignment_filter([
-                                  "*_test.cc",
-                                  "*_test.h",
-                                ])
-  sources = [
-              "log_android.cc",
-              "log_fuchsia.cc",
-              "log_linux.cc",
-              "log_macos.cc",
-              "log_win.cc",
-            ] + builtin_impl_sources_gypi
+  static_library(target_name) {
+    configs += [ "..:dart_config" ] + extra_configs
+    if (is_fuchsia) {
+      configs -= [ "//build/config:symbol_visibility_hidden" ]
+    }
+    public_configs = [ ":libdart_builtin_config" ]
+    deps = [
+      ":generate_blink_cc_file",
+      ":generate_builtin_cc_file",
+      ":generate_cached_patches_cc_file",
+      ":generate_html_cc_file",
+      ":generate_html_common_cc_file",
+      ":generate_indexed_db_cc_file",
+      ":generate_io_cc_file",
+      ":generate_io_patch_cc_file",
+      ":generate_js_cc_file",
+      ":generate_js_util_cc_file",
+      ":generate_metadata_cc_file",
+      ":generate_svg_cc_file",
+      ":generate_web_audio_cc_file",
+      ":generate_web_gl_cc_file",
+      ":generate_web_sql_cc_file",
+    ]
+    include_dirs = [ ".." ]
+    set_sources_assignment_filter([
+                                    "*_test.cc",
+                                    "*_test.h",
+                                  ])
+    sources = [
+                "log_android.cc",
+                "log_fuchsia.cc",
+                "log_linux.cc",
+                "log_macos.cc",
+                "log_win.cc",
+              ] + builtin_impl_sources_gypi
+  }
 }
 
-executable("gen_snapshot") {
-  configs += [
-    "..:dart_config",
-    "..:dart_maybe_product_config",
-    "..:dart_precompiler_config",
-  ]
-  if (is_fuchsia) {
-    configs -= [ "//build/config:symbol_visibility_hidden" ]
+build_libdart_builtin("libdart_builtin") {
+  extra_configs = [ "..:dart_maybe_product_config" ]
+}
+
+build_libdart_builtin("libdart_builtin_product") {
+  extra_configs = [ "..:dart_product_config" ]
+}
+
+template("build_gen_snapshot") {
+  extra_configs = []
+  if (defined(invoker.extra_configs)) {
+    extra_configs += invoker.extra_configs
   }
-  deps = [
-    ":gen_resources_cc",
+  extra_deps = []
+  if (defined(invoker.extra_deps)) {
+    extra_deps += invoker.extra_deps
+  }
+  executable(target_name) {
+    configs += [
+                 "..:dart_config",
+                 "..:dart_precompiler_config",
+               ] + extra_configs
+    if (is_fuchsia) {
+      configs -= [ "//build/config:symbol_visibility_hidden" ]
+    }
+    deps = [
+             ":gen_resources_cc",
+             ":generate_builtin_cc_file",
+             ":generate_io_cc_file",
+             ":generate_io_patch_cc_file",
+           ] + extra_deps
+
+    sources = [
+      # Include generated source files.
+      "$target_gen_dir/builtin_gen.cc",
+      "$target_gen_dir/io_gen.cc",
+      "$target_gen_dir/io_patch_gen.cc",
+      "$target_gen_dir/resources_gen.cc",
+      "address_sanitizer.cc",
+      "builtin.cc",
+      "builtin.h",
+      "loader.cc",
+      "loader.h",
+
+      # Very limited native resolver provided.
+      "builtin_common.cc",
+      "builtin_gen_snapshot.cc",
+      "dfe.cc",
+      "dfe.h",
+      "gen_snapshot.cc",
+      "vmservice_impl.cc",
+      "vmservice_impl.h",
+    ]
+
+    include_dirs = [ ".." ]
+
+    if (dart_use_tcmalloc) {
+      deps += [ "//third_party/tcmalloc" ]
+    }
+
+    if (is_mac) {
+      libs = [
+        "CoreFoundation.framework",
+        "CoreServices.framework",
+      ]
+    }
+
+    if (is_win) {
+      libs = [
+        "iphlpapi.lib",
+        "psapi.lib",
+        "ws2_32.lib",
+        "Rpcrt4.lib",
+        "winmm.lib",
+      ]
+    }
+
+    if (is_fuchsia) {
+      libs = [ "launchpad" ]
+    }
+  }
+}
+
+build_gen_snapshot("gen_snapshot") {
+  extra_configs = [ "..:dart_maybe_product_config" ]
+  extra_deps = [
     ":gen_snapshot_dart_io",
-    ":generate_builtin_cc_file",
-    ":generate_io_cc_file",
-    ":generate_io_patch_cc_file",
     ":libdart_builtin",
     "..:libdart_nosnapshot_with_precompiler",
   ]
+}
 
-  sources = [
-    # Include generated source files.
-    "$target_gen_dir/builtin_gen.cc",
-    "$target_gen_dir/io_gen.cc",
-    "$target_gen_dir/io_patch_gen.cc",
-    "$target_gen_dir/resources_gen.cc",
-    "address_sanitizer.cc",
-    "builtin.cc",
-    "builtin.h",
-    "loader.cc",
-    "loader.h",
-
-    # Very limited native resolver provided.
-    "builtin_common.cc",
-    "builtin_gen_snapshot.cc",
-    "dfe.cc",
-    "dfe.h",
-    "gen_snapshot.cc",
-    "vmservice_impl.cc",
-    "vmservice_impl.h",
+build_gen_snapshot("gen_snapshot_product") {
+  extra_configs = [ "..:dart_product_config" ]
+  extra_deps = [
+    ":gen_snapshot_dart_io_product",
+    ":libdart_builtin_product",
+    "..:libdart_nosnapshot_with_precompiler_product",
   ]
-
-  include_dirs = [ ".." ]
-
-  if (dart_use_tcmalloc) {
-    deps += [ "//third_party/tcmalloc" ]
-  }
-
-  if (is_mac) {
-    libs = [
-      "CoreFoundation.framework",
-      "CoreServices.framework",
-    ]
-  }
-
-  if (is_win) {
-    libs = [
-      "iphlpapi.lib",
-      "psapi.lib",
-      "ws2_32.lib",
-      "Rpcrt4.lib",
-      "winmm.lib",
-    ]
-  }
-
-  if (is_fuchsia) {
-    libs = [ "launchpad" ]
-  }
 }
 
 # A source set for the implementation of 'dart:io' library
 # (without secure sockets) suitable for linking with gen_snapshot.
-source_set("gen_snapshot_dart_io") {
-  configs += [
-    "..:dart_config",
-    "..:dart_maybe_product_config",
-    "..:dart_precompiler_config",
-  ]
-  if (is_fuchsia) {
-    configs -= [ "//build/config:symbol_visibility_hidden" ]
+template("build_gen_snapshot_dart_io") {
+  extra_configs = []
+  if (defined(invoker.extra_configs)) {
+    extra_configs += invoker.extra_configs
   }
+  source_set(target_name) {
+    configs += [
+                 "..:dart_config",
+                 "..:dart_precompiler_config",
+               ] + extra_configs
+    if (is_fuchsia) {
+      configs -= [ "//build/config:symbol_visibility_hidden" ]
+    }
 
-  deps = [
-    "$dart_zlib_path",
-  ]
+    deps = [
+      "$dart_zlib_path",
+    ]
 
-  custom_sources_filter = [
-    "*_test.cc",
-    "*_test.h",
-    "builtin.cc",
-    "builtin_common.cc",
-    "builtin_gen_snapshot.cc",
-  ]
-  if (!is_mac && !is_ios) {
-    # Dart tree uses *_macos.* instead of *_mac.*
-    custom_sources_filter += [
-      "*_macos.h",
-      "*_macos.cc",
+    custom_sources_filter = [
+      "*_test.cc",
+      "*_test.h",
+      "builtin.cc",
+      "builtin_common.cc",
+      "builtin_gen_snapshot.cc",
+    ]
+    if (!is_mac && !is_ios) {
+      # Dart tree uses *_macos.* instead of *_mac.*
+      custom_sources_filter += [
+        "*_macos.h",
+        "*_macos.cc",
+      ]
+    }
+    set_sources_assignment_filter(custom_sources_filter)
+
+    defines = [ "DART_IO_SECURE_SOCKET_DISABLED" ]
+
+    sources = io_impl_sources_gypi + builtin_impl_sources_gypi
+    sources += [
+      "io_natives.cc",
+      "io_natives.h",
+    ]
+
+    include_dirs = [
+      "..",
+      "//third_party",
     ]
   }
-  set_sources_assignment_filter(custom_sources_filter)
+}
 
-  defines = [ "DART_IO_SECURE_SOCKET_DISABLED" ]
+build_gen_snapshot_dart_io("gen_snapshot_dart_io") {
+  extra_configs = [ "..:dart_maybe_product_config" ]
+}
 
-  sources = io_impl_sources_gypi + builtin_impl_sources_gypi
-  sources += [
-    "io_natives.cc",
-    "io_natives.h",
-  ]
-
-  include_dirs = [
-    "..",
-    "//third_party",
-  ]
+build_gen_snapshot_dart_io("gen_snapshot_dart_io_product") {
+  extra_configs = [ "..:dart_product_config" ]
 }
 
 # A source set for the implementation of 'dart:io' library.
 template("dart_io") {
+  extra_configs = []
+  if (defined(invoker.extra_configs)) {
+    extra_configs += invoker.extra_configs
+  }
   extra_sources = []
   if (defined(invoker.extra_sources)) {
     extra_sources += invoker.extra_sources
   }
   source_set(target_name) {
-    configs += [
-      "..:dart_config",
-      "..:dart_maybe_product_config",
-    ]
+    configs += [ "..:dart_config" ] + extra_configs
     if (is_fuchsia) {
       configs -= [ "//build/config:symbol_visibility_hidden" ]
     }
@@ -465,6 +514,16 @@
 }
 
 dart_io("embedded_dart_io") {
+  extra_configs = [ "..:dart_maybe_product_config" ]
+  extra_sources = [
+    "builtin_nolib.cc",
+    "embedded_dart_io.cc",
+    "embedded_dart_io.h",
+  ]
+}
+
+dart_io("embedded_dart_io_product") {
+  extra_configs = [ "..:dart_product_config" ]
   extra_sources = [
     "builtin_nolib.cc",
     "embedded_dart_io.cc",
@@ -473,6 +532,7 @@
 }
 
 dart_io("standalone_dart_io") {
+  extra_configs = [ "..:dart_maybe_product_config" ]
   extra_sources = []
 }
 
diff --git a/runtime/vm/BUILD.gn b/runtime/vm/BUILD.gn
index 3a79bd5..f836909 100644
--- a/runtime/vm/BUILD.gn
+++ b/runtime/vm/BUILD.gn
@@ -28,129 +28,117 @@
   }
 }
 
-static_library("libdart_platform") {
-  configs += [
-    "..:dart_config",
-    "..:dart_maybe_product_config",
-  ]
-  if (is_fuchsia) {
-    configs -= [ "//build/config:symbol_visibility_hidden" ]
-    deps = [
-      "//apps/tracing/lib/trace",
-    ]
+template("build_libdart_platform") {
+  extra_configs = []
+  if (defined(invoker.extra_configs)) {
+    extra_configs += invoker.extra_configs
   }
-  public_configs = [ ":libdart_vm_config" ]
+  static_library(target_name) {
+    configs += [ "..:dart_config" ] + extra_configs
+    if (is_fuchsia) {
+      configs -= [ "//build/config:symbol_visibility_hidden" ]
+      deps = [
+        "//apps/tracing/lib/trace",
+      ]
+    }
+    public_configs = [ ":libdart_vm_config" ]
 
-  sources = rebase_path(processed_gypis.platform_sources, ".", "../platform")
+    sources = rebase_path(processed_gypis.platform_sources, ".", "../platform")
 
-  include_dirs = [ ".." ]
+    include_dirs = [ ".." ]
+  }
+}
+
+build_libdart_platform("libdart_platform") {
+  extra_configs = [ "..:dart_maybe_product_config" ]
+}
+
+build_libdart_platform("libdart_platform_product") {
+  extra_configs = [ "..:dart_product_config" ]
 }
 
 vm_sources_list = processed_gypis.vm_sources
 
-source_set("libdart_vm_jit") {
-  configs += [
-    "..:dart_config",
-    "..:dart_maybe_product_config",
-  ]
-  if (is_fuchsia) {
-    configs -= [ "//build/config:symbol_visibility_hidden" ]
-    deps = [
-      "//apps/tracing/lib/trace",
-    ]
+template("build_libdart_vm") {
+  extra_configs = []
+  if (defined(invoker.extra_configs)) {
+    extra_configs += invoker.extra_configs
   }
-  public_configs = [ ":libdart_vm_config" ]
-  set_sources_assignment_filter([
-                                  "*_test.cc",
-                                  "*_test.h",
-                                ])
-  sources = vm_sources_list
-  include_dirs = [ ".." ]
+  source_set(target_name) {
+    configs += [ "..:dart_config" ] + extra_configs
+    if (is_fuchsia) {
+      configs -= [ "//build/config:symbol_visibility_hidden" ]
+      deps = [
+        "//apps/tracing/lib/trace",
+      ]
+    }
+    public_configs = [ ":libdart_vm_config" ]
+    set_sources_assignment_filter([
+                                    "*_test.cc",
+                                    "*_test.h",
+                                  ])
+    sources = vm_sources_list
+    include_dirs = [ ".." ]
+  }
 }
 
-source_set("libdart_vm_precompiled_runtime") {
-  configs += [
-    "..:dart_config",
+build_libdart_vm("libdart_vm_jit") {
+  extra_configs = [ "..:dart_maybe_product_config" ]
+}
+
+build_libdart_vm("libdart_vm_jit_product") {
+  extra_configs = [ "..:dart_product_config" ]
+}
+
+build_libdart_vm("libdart_vm_precompiled_runtime") {
+  extra_configs = [
     "..:dart_maybe_product_config",
     "..:dart_precompiled_runtime_config",
   ]
-  if (is_fuchsia) {
-    configs -= [ "//build/config:symbol_visibility_hidden" ]
-    deps = [
-      "//apps/tracing/lib/trace",
-    ]
-  }
-  public_configs = [ ":libdart_vm_config" ]
-  set_sources_assignment_filter([
-                                  "*_test.cc",
-                                  "*_test.h",
-                                ])
-  sources = vm_sources_list
-  include_dirs = [ ".." ]
 }
 
-source_set("libdart_vm_nosnapshot") {
-  configs += [
-    "..:dart_config",
+build_libdart_vm("libdart_vm_precompiled_runtime_product") {
+  extra_configs = [
+    "..:dart_product_config",
+    "..:dart_precompiled_runtime_config",
+  ]
+}
+
+build_libdart_vm("libdart_vm_nosnapshot") {
+  extra_configs = [
     "..:dart_maybe_product_config",
     "..:dart_no_snapshot_config",
   ]
-  if (is_fuchsia) {
-    configs -= [ "//build/config:symbol_visibility_hidden" ]
-    deps = [
-      "//apps/tracing/lib/trace",
-    ]
-  }
-  public_configs = [ ":libdart_vm_config" ]
-  set_sources_assignment_filter([
-                                  "*_test.cc",
-                                  "*_test.h",
-                                ])
-  sources = vm_sources_list
-  include_dirs = [ ".." ]
 }
 
-source_set("libdart_vm_nosnapshot_with_precompiler") {
-  configs += [
-    "..:dart_config",
+build_libdart_vm("libdart_vm_nosnapshot_with_precompiler") {
+  extra_configs = [
     "..:dart_maybe_product_config",
     "..:dart_precompiler_config",
     "..:dart_no_snapshot_config",
   ]
-  if (is_fuchsia) {
-    configs -= [ "//build/config:symbol_visibility_hidden" ]
-    deps = [
-      "//apps/tracing/lib/trace",
-    ]
-  }
-  public_configs = [ ":libdart_vm_config" ]
-  set_sources_assignment_filter([
-                                  "*_test.cc",
-                                  "*_test.h",
-                                ])
-  sources = vm_sources_list
-  include_dirs = [ ".." ]
 }
 
-source_set("libdart_vm_with_precompiler") {
-  configs += [
-    "..:dart_config",
+build_libdart_vm("libdart_vm_nosnapshot_with_precompiler_product") {
+  extra_configs = [
+    "..:dart_product_config",
+    "..:dart_precompiler_config",
+    "..:dart_no_snapshot_config",
+  ]
+}
+
+build_libdart_vm("libdart_vm_with_precompiler") {
+  extra_configs = [
     "..:dart_maybe_product_config",
     "..:dart_precompiler_config",
   ]
-  if (is_fuchsia) {
-    configs -= [ "//build/config:symbol_visibility_hidden" ]
-    deps = [
-      "//apps/tracing/lib/trace",
-    ]
-  }
-  public_configs = [ ":libdart_vm_config" ]
-  set_sources_assignment_filter([
-                                  "*_test.cc",
-                                  "*_test.h",
-                                ])
-  sources = vm_sources_list
-  include_dirs = [ ".." ]
+}
+
+build_libdart_vm("libdart_vm_with_precompiler_product") {
+  extra_configs = [
+    "..:dart_product_config",
+    "..:dart_precompiler_config",
+  ]
 }
 
 template("process_library_source") {
@@ -199,6 +187,30 @@
   }
 }
 
+template("build_libdart_lib") {
+  extra_configs = []
+  if (defined(invoker.extra_configs)) {
+    extra_configs += invoker.extra_configs
+  }
+  extra_deps = []
+  if (defined(invoker.extra_deps)) {
+    extra_deps += invoker.extra_deps
+  }
+  extra_sources = []
+  if (defined(invoker.extra_sources)) {
+    extra_sources += invoker.extra_sources
+  }
+  source_set(target_name) {
+    configs += [ "..:dart_config" ] + extra_configs
+    if (is_fuchsia) {
+      configs -= [ "//build/config:symbol_visibility_hidden" ]
+    }
+    deps = extra_deps
+    sources = extra_sources
+    include_dirs = [ ".." ]
+  }
+}
+
 # This templates expects invoker.sources to be a list of lists.
 # The lists contain the following information about each library:
 #   library name (string)
@@ -248,57 +260,66 @@
 
   all_libsources = rebase_path(invoker.allsources, ".", "../lib")
 
-  source_set("libdart_lib_nosnapshot_with_precompiler") {
-    configs += [
-      "..:dart_config",
+  build_libdart_lib("libdart_lib_nosnapshot_with_precompiler") {
+    extra_configs = [
       "..:dart_maybe_product_config",
       "..:dart_precompiler_config",
     ]
-    if (is_fuchsia) {
-      configs -= [ "//build/config:symbol_visibility_hidden" ]
-    }
-    deps = libdeps
-    sources = all_libsources + [ "bootstrap.cc" ] + liboutputs
-    include_dirs = [ ".." ]
+    extra_deps = libdeps
+    extra_sources = all_libsources + [ "bootstrap.cc" ] + liboutputs
   }
 
-  source_set("libdart_lib_with_precompiler") {
-    configs += [
-      "..:dart_config",
+  build_libdart_lib("libdart_lib_nosnapshot_with_precompiler_product") {
+    extra_configs = [
+      "..:dart_product_config",
+      "..:dart_precompiler_config",
+    ]
+    extra_deps = libdeps
+    extra_sources = all_libsources + [ "bootstrap.cc" ] + liboutputs
+  }
+
+  build_libdart_lib("libdart_lib_with_precompiler") {
+    extra_configs = [
       "..:dart_maybe_product_config",
       "..:dart_precompiler_config",
     ]
-    if (is_fuchsia) {
-      configs -= [ "//build/config:symbol_visibility_hidden" ]
-    }
-    deps = libdeps
-    sources = all_libsources + [ "bootstrap_nocore.cc" ]
-    include_dirs = [ ".." ]
+    extra_deps = libdeps
+    extra_sources = all_libsources + [ "bootstrap_nocore.cc" ]
   }
 
-  source_set("libdart_lib_jit") {
-    configs += [
-      "..:dart_config",
-      "..:dart_maybe_product_config",
+  build_libdart_lib("libdart_lib_with_precompiler_product") {
+    extra_configs = [
+      "..:dart_product_config",
+      "..:dart_precompiler_config",
     ]
-    if (is_fuchsia) {
-      configs -= [ "//build/config:symbol_visibility_hidden" ]
-    }
-    sources = all_libsources + [ "bootstrap_nocore.cc" ]
-    include_dirs = [ ".." ]
+    extra_deps = libdeps
+    extra_sources = all_libsources + [ "bootstrap_nocore.cc" ]
   }
 
-  source_set("libdart_lib_precompiled_runtime") {
-    configs += [
-      "..:dart_config",
+  build_libdart_lib("libdart_lib_jit") {
+    extra_configs = [ "..:dart_maybe_product_config" ]
+    extra_sources = all_libsources + [ "bootstrap_nocore.cc" ]
+  }
+
+  build_libdart_lib("libdart_lib_jit_product") {
+    extra_configs = [ "..:dart_product_config" ]
+    extra_sources = all_libsources + [ "bootstrap_nocore.cc" ]
+  }
+
+  build_libdart_lib("libdart_lib_precompiled_runtime") {
+    extra_configs = [
       "..:dart_maybe_product_config",
       "..:dart_precompiled_runtime_config",
     ]
-    if (is_fuchsia) {
-      configs -= [ "//build/config:symbol_visibility_hidden" ]
-    }
-    sources = all_libsources + [ "bootstrap_nocore.cc" ]
-    include_dirs = [ ".." ]
+    extra_sources = all_libsources + [ "bootstrap_nocore.cc" ]
+  }
+
+  build_libdart_lib("libdart_lib_precompiled_runtime_product") {
+    extra_configs = [
+      "..:dart_product_config",
+      "..:dart_precompiled_runtime_config",
+    ]
+    extra_sources = all_libsources + [ "bootstrap_nocore.cc" ]
   }
 }
 
