diff --git a/src/gn/command_gen.cc b/src/gn/command_gen.cc
index 57828ad..0059689 100644
--- a/src/gn/command_gen.cc
+++ b/src/gn/command_gen.cc
@@ -42,6 +42,7 @@
 const char kSwitchIdeValueWinSdk[] = "winsdk";
 const char kSwitchIdeValueXcode[] = "xcode";
 const char kSwitchIdeValueJson[] = "json";
+const char kSwitchNinjaExecutable[] = "ninja-executable";
 const char kSwitchNinjaExtraArgs[] = "ninja-extra-args";
 const char kSwitchNoDeps[] = "no-deps";
 const char kSwitchRootTarget[] = "root-target";
@@ -237,6 +238,7 @@
     bool res = XcodeWriter::RunAndWriteFiles(
         command_line->GetSwitchValueASCII(kSwitchWorkspace),
         command_line->GetSwitchValueASCII(kSwitchRootTarget),
+        command_line->GetSwitchValueASCII(kSwitchNinjaExecutable),
         command_line->GetSwitchValueASCII(kSwitchNinjaExtraArgs),
         command_line->GetSwitchValueASCII(kSwitchFilters), build_settings,
         builder, err);
@@ -375,6 +377,9 @@
       Override defaut workspace file name ("all"). The workspace file is
       written to the root build directory.
 
+  --ninja-executable=<string>
+      Can be used to specify the ninja executable to use when building.
+
   --ninja-extra-args=<string>
       This string is passed without any quoting to the ninja invocation
       command-line. Can be used to configure ninja flags, like "-j".
diff --git a/src/gn/xcode_writer.cc b/src/gn/xcode_writer.cc
index 8281a2c..6ffcc58 100644
--- a/src/gn/xcode_writer.cc
+++ b/src/gn/xcode_writer.cc
@@ -71,7 +71,12 @@
   return XcodeWriter::WRITER_TARGET_OS_MACOS;
 }
 
+std::string GetNinjaExecutable(const std::string& ninja_executable) {
+  return ninja_executable.empty() ? "ninja" : ninja_executable;
+}
+
 std::string GetBuildScript(const std::string& target_name,
+                           const std::string& ninja_executable,
                            const std::string& ninja_extra_args,
                            base::Environment* environment) {
   std::stringstream script;
@@ -96,7 +101,7 @@
     script << "\" ";
   }
 
-  script << "ninja -C .";
+  script << GetNinjaExecutable(ninja_executable) << " -C .";
   if (!ninja_extra_args.empty())
     script << " " << ninja_extra_args;
   if (!target_name.empty())
@@ -358,6 +363,7 @@
 // static
 bool XcodeWriter::RunAndWriteFiles(const std::string& workspace_name,
                                    const std::string& root_target_name,
+                                   const std::string& ninja_executable,
                                    const std::string& ninja_extra_args,
                                    const std::string& dir_filters_string,
                                    const BuildSettings* build_settings,
@@ -401,7 +407,8 @@
   XcodeWriter workspace(workspace_name);
   workspace.CreateProductsProject(targets, all_targets, attributes, source_path,
                                   config_name, root_target_name,
-                                  ninja_extra_args, build_settings, target_os);
+                                  ninja_executable, ninja_extra_args,
+                                  build_settings, target_os);
 
   return workspace.WriteFiles(build_settings, err);
 }
@@ -474,6 +481,7 @@
     const std::string& source_path,
     const std::string& config_name,
     const std::string& root_target,
+    const std::string& ninja_executable,
     const std::string& ninja_extra_args,
     const BuildSettings* build_settings,
     TargetOsType target_os) {
@@ -489,7 +497,8 @@
   AddSourceFilesToProjectForIndexing(all_targets, main_project.get(),
                                      source_dir, build_settings);
   main_project->AddAggregateTarget(
-      "All", GetBuildScript(root_target, ninja_extra_args, env.get()));
+      "All", GetBuildScript(root_target, ninja_executable, ninja_extra_args,
+                            env.get()));
 
   // Needs to search for xctest files under the application targets, and this
   // variable is used to store the results of visited targets, thus making the
@@ -507,8 +516,8 @@
             target->output_name().empty() ? target->label().name()
                                           : target->output_name(),
             "com.apple.product-type.tool",
-            GetBuildScript(target->label().name(), ninja_extra_args,
-                           env.get()));
+            GetBuildScript(target->label().name(), ninja_executable,
+                           ninja_extra_args, env.get()));
         break;
 
       case Target::CREATE_BUNDLE: {
@@ -538,7 +547,8 @@
         PBXNativeTarget* native_target = main_project->AddNativeTarget(
             pbxtarget_name, std::string(), target_output_name,
             target->bundle_data().product_type(),
-            GetBuildScript(pbxtarget_name, ninja_extra_args, env.get()),
+            GetBuildScript(pbxtarget_name, ninja_executable, ninja_extra_args,
+              env.get()),
             xcode_extra_attributes);
 
         bundle_targets.push_back(target);
diff --git a/src/gn/xcode_writer.h b/src/gn/xcode_writer.h
index 24953dc..e391c56 100644
--- a/src/gn/xcode_writer.h
+++ b/src/gn/xcode_writer.h
@@ -33,6 +33,8 @@
   // |workspace_name| is the optional name of the workspace file name ("all"
   // is used if not specified). |root_target_name| is the name of the main
   // target corresponding to building "All" (for example "gn_all" in Chromium).
+  // |ninja_executable| can be used to control which ninja executable will be
+  // run. When empty, regular ninja will be used.
   // |ninja_extra_args| are additional arguments to pass to ninja invocation
   // (can be used to increase limit of concurrent processes when using goma).
   // |dir_filters_string| is optional semicolon-separated list of label patterns
@@ -40,6 +42,7 @@
   // included to the workspace. On failure will populate |err| and return false.
   static bool RunAndWriteFiles(const std::string& workspace_name,
                                const std::string& root_target_name,
+                               const std::string& ninja_executable,
                                const std::string& ninja_extra_args,
                                const std::string& dir_filters_string,
                                const BuildSettings* build_settings,
@@ -68,6 +71,7 @@
                              const std::string& source_path,
                              const std::string& config_name,
                              const std::string& root_target,
+                             const std::string& ninja_executable,
                              const std::string& ninja_extra_args,
                              const BuildSettings* build_settings,
                              TargetOsType target_os);
