diff --git a/build/gen.py b/build/gen.py
index 534cf5d..989eb5a 100755
--- a/build/gen.py
+++ b/build/gen.py
@@ -138,10 +138,11 @@
 #ifndef OUT_LAST_COMMIT_POSITION_H_
 #define OUT_LAST_COMMIT_POSITION_H_
 
+#define LAST_COMMIT_POSITION_NUM %s
 #define LAST_COMMIT_POSITION "%s (%s)"
 
 #endif  // OUT_LAST_COMMIT_POSITION_H_
-''' % (mo.group(1), mo.group(2))
+''' % (mo.group(1), mo.group(1), mo.group(2))
 
   # Only write/touch this file if the commit position has changed.
   old_contents = ''
diff --git a/src/gn/scope_per_file_provider.cc b/src/gn/scope_per_file_provider.cc
index e30162e..3110a8f 100644
--- a/src/gn/scope_per_file_provider.cc
+++ b/src/gn/scope_per_file_provider.cc
@@ -12,6 +12,8 @@
 #include "gn/value.h"
 #include "gn/variables.h"
 
+#include "last_commit_position.h"
+
 ScopePerFileProvider::ScopePerFileProvider(Scope* scope, bool allow_target_vars)
     : ProgrammaticProvider(scope), allow_target_vars_(allow_target_vars) {}
 
@@ -23,6 +25,8 @@
     return GetCurrentToolchain();
   if (ident == variables::kDefaultToolchain)
     return GetDefaultToolchain();
+  if (ident == variables::kGnVersion)
+    return GetGnVersion();
   if (ident == variables::kPythonPath)
     return GetPythonPath();
 
@@ -61,6 +65,14 @@
   return default_toolchain_.get();
 }
 
+const Value* ScopePerFileProvider::GetGnVersion() {
+  if (!gn_version_) {
+    gn_version_ = std::make_unique<Value>(
+        nullptr, static_cast<int64_t>(LAST_COMMIT_POSITION_NUM));
+  }
+  return gn_version_.get();
+}
+
 const Value* ScopePerFileProvider::GetPythonPath() {
   if (!python_path_) {
     python_path_ = std::make_unique<Value>(
diff --git a/src/gn/scope_per_file_provider.h b/src/gn/scope_per_file_provider.h
index 16496e5..228bac3 100644
--- a/src/gn/scope_per_file_provider.h
+++ b/src/gn/scope_per_file_provider.h
@@ -26,6 +26,7 @@
  private:
   const Value* GetCurrentToolchain();
   const Value* GetDefaultToolchain();
+  const Value* GetGnVersion();
   const Value* GetPythonPath();
   const Value* GetRootBuildDir();
   const Value* GetRootGenDir();
@@ -38,6 +39,7 @@
   // All values are lazily created.
   std::unique_ptr<Value> current_toolchain_;
   std::unique_ptr<Value> default_toolchain_;
+  std::unique_ptr<Value> gn_version_;
   std::unique_ptr<Value> python_path_;
   std::unique_ptr<Value> root_build_dir_;
   std::unique_ptr<Value> root_gen_dir_;
diff --git a/src/gn/scope_per_file_provider_unittest.cc b/src/gn/scope_per_file_provider_unittest.cc
index 8c22666..8e38903 100644
--- a/src/gn/scope_per_file_provider_unittest.cc
+++ b/src/gn/scope_per_file_provider_unittest.cc
@@ -31,6 +31,9 @@
     EXPECT_EQ("//out/Debug", GPV(variables::kRootOutDir));
     EXPECT_EQ("//out/Debug/gen/source", GPV(variables::kTargetGenDir));
     EXPECT_EQ("//out/Debug/obj/source", GPV(variables::kTargetOutDir));
+
+    EXPECT_GE(provider.GetProgrammaticValue(variables::kGnVersion)->int_value(),
+              0);
   }
 
   // Test some with an alternate toolchain.
diff --git a/src/gn/variables.cc b/src/gn/variables.cc
index b6293b4..0d56301 100644
--- a/src/gn/variables.cc
+++ b/src/gn/variables.cc
@@ -10,6 +10,19 @@
 
 // Built-in variables ----------------------------------------------------------
 
+const char kGnVersion[] = "gn_version";
+const char kGnVersion_HelpShort[] =
+    "gn_version: [number] The version of gn.";
+const char kGnVersion_Help[] =
+  R"(gn_version: [number] The version of gn.
+
+  Corresponds to the number printed by `gn --version`.
+
+Example
+
+  assert(gn_version >= 1700, "need GN version 1700 for the frobulate feature")
+)";
+
 const char kHostCpu[] = "host_cpu";
 const char kHostCpu_HelpShort[] =
     "host_cpu: [string] The processor architecture that GN is running on.";
@@ -2188,6 +2201,7 @@
     INSERT_VARIABLE(CurrentOs)
     INSERT_VARIABLE(CurrentToolchain)
     INSERT_VARIABLE(DefaultToolchain)
+    INSERT_VARIABLE(GnVersion)
     INSERT_VARIABLE(HostCpu)
     INSERT_VARIABLE(HostOs)
     INSERT_VARIABLE(Invoker)
@@ -2196,9 +2210,9 @@
     INSERT_VARIABLE(RootGenDir)
     INSERT_VARIABLE(RootOutDir)
     INSERT_VARIABLE(TargetCpu)
-    INSERT_VARIABLE(TargetOs)
     INSERT_VARIABLE(TargetGenDir)
     INSERT_VARIABLE(TargetName)
+    INSERT_VARIABLE(TargetOs)
     INSERT_VARIABLE(TargetOutDir)
   }
   return info_map;
diff --git a/src/gn/variables.h b/src/gn/variables.h
index c684caf..df30632 100644
--- a/src/gn/variables.h
+++ b/src/gn/variables.h
@@ -36,6 +36,10 @@
 extern const char kDefaultToolchain_HelpShort[];
 extern const char kDefaultToolchain_Help[];
 
+extern const char kGnVersion[];
+extern const char kGnVersion_HelpShort[];
+extern const char kGnVersion_Help[];
+
 extern const char kInvoker[];
 extern const char kInvoker_HelpShort[];
 extern const char kInvoker_Help[];
