diff --git a/fusl/BUILD.gn b/fusl/BUILD.gn
index a03a358..a352bcb 100644
--- a/fusl/BUILD.gn
+++ b/fusl/BUILD.gn
@@ -1472,48 +1472,57 @@
 sysroot_lib_dir = "${sysroot}/usr/lib"
 sysroot_include_dir = "${sysroot}/usr/include"
 
-action("copy_crt_objects") {
-  deps = [
-    ":crt",
-  ]
-  script = "tools/copy_crt.py"
-
-  args = [
-    "--source",
-    rebase_path("${target_out_dir}/crt", root_build_dir),
-
-    "--target",
-    rebase_path("${sysroot_lib_dir}", root_build_dir),
-
-    # GN mangling prefix. It corresponds to e.g. the first few
-    # characters of "crt.Scrt1.o". This is included to catch some of
-    # the brittleness in this script, which depends on where exactly
-    # GN places and names things. If this changes, this and the
-    # following path names must also change.
-    "--gn-prefix",
-    "crt.",
-
-    # Object files.
-    "crt.Scrt1.o",
-    "crt.crt1.o",
-    "crt.rcrt1.o",
-  ]
-
-  # Arch-specific object files.
-  if (current_cpu == "x64") {
-    args += [
-      "x86_64/crt.crti.o",
-      "x86_64/crt.crtn.o",
-    ]
+template("copy_objects") {
+  assert(defined(invoker.input_dir), "input_dir must be defined")
+  assert(defined(invoker.output_dir), "output_dir must be defined")
+  object_prefix = ""
+  if (defined(invoker.object_prefix)) {
+    object_prefix = invoker.object_prefix
   }
+  foreach(file, invoker.sources) {
+    copy("copy_${file}") {
+      sources = [
+        rebase_path("${invoker.input_dir}/${object_prefix}${file}",
+                    "",
+                    target_out_dir),
+      ]
+      outputs = [
+        "${invoker.output_dir}/${file}",
+      ]
+      deps = [
+        ":crt",
+      ]
+    }
+  }
+  group(target_name) {
+    deps = [
+      ":crt",
+    ]
+    foreach(file, invoker.sources) {
+      deps += [ ":copy_$file" ]
+    }
+  }
+}
 
-  outputs = [
-    "${sysroot_lib_dir}/Scrt1.o",
-    "${sysroot_lib_dir}/crt1.o",
-    "${sysroot_lib_dir}/crti.o",
-    "${sysroot_lib_dir}/crtn.o",
-    "${sysroot_lib_dir}/rcrt1.o",
+copy_objects("copy_crt_objects") {
+  sources = [
+    "Scrt1.o",
+    "crt1.o",
+    "rcrt1.o",
   ]
+  object_prefix = "crt."
+  input_dir = "crt"
+  output_dir = "${sysroot_lib_dir}"
+}
+
+copy_objects("copy_crt_x64_objects") {
+  sources = [
+    "crti.o",
+    "crtn.o",
+  ]
+  object_prefix = "crt."
+  input_dir = "crt/x86_64"
+  output_dir = "${sysroot_lib_dir}"
 }
 
 copy("copy_include") {
@@ -1558,6 +1567,9 @@
     ":copy_include_bits",
     ":copy_libc",
   ]
+  if (current_cpu == "x64") {
+    deps += [ ":copy_crt_x64_objects" ]
+  }
 }
 
 group("fusl") {
diff --git a/fusl/tools/copy_crt.py b/fusl/tools/copy_crt.py
deleted file mode 100755
index 5041465..0000000
--- a/fusl/tools/copy_crt.py
+++ /dev/null
@@ -1,59 +0,0 @@
-#!/usr/bin/env python
-# Copyright 2016 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-"""A tool to populate the C runtime portions of a fusl sysroot. This
-script primarily exists because it is easier to copy manually than to
-teach GN how to treat .o files as first class outputs."""
-
-import argparse
-import os
-import shutil
-import sys
-
-def copy_sysroot(args, files):
-  try:
-    os.makedirs(args.target)
-  except OSError:
-    # It already exists. Probably.
-    pass
-
-  for file in files:
-    source_file = os.path.join(args.source, file)
-
-  # Some source files will be under a subdirectory, so take the last
-  # path component.
-  _, stripped_file = os.path.split(source_file)
-  # Strip out the prefix gn places for its object files.
-  assert(stripped_file.startswith(args.gn_prefix))
-  stripped_file = stripped_file[len(args.gn_prefix):]
-  target_file = os.path.join(args.target, stripped_file)
-
-  shutil.copyfile(source_file, target_file)
-
-
-def parse():
-  parser = argparse.ArgumentParser()
-
-  parser.add_argument('--source',
-                      required=True,
-                      help='Source directory')
-  parser.add_argument('--target',
-                      required=True,
-                      help='Target directory')
-  parser.add_argument('--gn-prefix',
-                      required=True,
-                      help='File prefix added by GN')
-
-  return parser.parse_known_args()
-
-
-def main():
-  args, files = parse()
-  copy_sysroot(args, files)
-  return 0
-
-
-if __name__ == '__main__':
-  sys.exit(main())
