--- a/build/toolchain/linux/BUILD.gn
+++ b/build/toolchain/linux/BUILD.gn
@@ -21,6 +21,24 @@ clang_toolchain("clang_arm64") {
   }
 }
 
+gcc_toolchain("arm64") {
+  toolprefix = "aarch64-linux-gnu-"
+
+  cc = "${toolprefix}gcc"
+  cxx = "${toolprefix}g++"
+
+  ar = "${toolprefix}ar"
+  ld = cxx
+  readelf = "${toolprefix}readelf"
+  nm = "${toolprefix}nm"
+
+  toolchain_args = {
+    current_cpu = "arm64"
+    current_os = "linux"
+    is_clang = false
+  }
+}
+
 gcc_toolchain("arm") {
   toolprefix = "arm-linux-gnueabihf-"
 
--- a/tools/gn/args.cc
+++ b/tools/gn/args.cc
@@ -266,6 +266,7 @@ void Args::SetSystemVarsLocked(Scope* de
   static const char kX86[] = "x86";
   static const char kX64[] = "x64";
   static const char kArm[] = "arm";
+  static const char kArm64[] = "arm64";
   static const char kMips[] = "mipsel";
   static const char kS390X[] = "s390x";
   static const char kPPC64[] = "ppc64";
@@ -280,6 +281,8 @@ void Args::SetSystemVarsLocked(Scope* de
     arch = kX64;
   else if (os_arch.substr(0, 3) == "arm")
     arch = kArm;
+  else if (os_arch == "aarch64")
+    arch = kArm64;
   else if (os_arch == "mips")
     arch = kMips;
   else if (os_arch == "s390x")
