diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfigurationMakeVariableContext.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfigurationMakeVariableContext.java
index 8c98f5f..c0034dc 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfigurationMakeVariableContext.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfigurationMakeVariableContext.java
@@ -14,10 +14,12 @@
 
 package com.google.devtools.build.lib.analysis;
 
+import com.google.common.collect.ImmutableMap;
 import com.google.devtools.build.lib.analysis.MakeVariableExpander.ExpansionException;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
 import com.google.devtools.build.lib.packages.Package;
 
+import java.util.LinkedHashMap;
 import java.util.Map;
 
 /**
@@ -53,4 +55,14 @@
 
     return value;
   }
+
+  public ImmutableMap<String, String> collectMakeVariables() {
+    Map<String, String> map = new LinkedHashMap<>();
+    // Collect variables in the reverse order as in lookupMakeVariable
+    // because each update is overwriting.
+    map.putAll(pkg.getAllMakeVariables(platform));
+    map.putAll(globalEnv);
+    map.putAll(commandLineEnv);
+    return ImmutableMap.copyOf(map);
+  }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/packages/Package.java b/src/main/java/com/google/devtools/build/lib/packages/Package.java
index 900f901..5d2bafd 100644
--- a/src/main/java/com/google/devtools/build/lib/packages/Package.java
+++ b/src/main/java/com/google/devtools/build/lib/packages/Package.java
@@ -452,6 +452,17 @@
   }
 
   /**
+   * Returns all make variables for a given platform.
+   */
+  public Map<String, String> getAllMakeVariables(String platform) {
+    ImmutableMap.Builder<String, String> map = ImmutableMap.builder();
+    for (String var : makeEnv.getBindings().keySet()) {
+      map.put(var, makeEnv.lookup(var, platform));
+    }
+    return map.build();
+  }
+
+  /**
    * Returns the label of this package's BUILD file.
    *
    * Typically <code>getBuildFileLabel().getName().equals("BUILD")</code> --
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java
index 2d5bc07..d8a7fc8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleContext.java
@@ -115,6 +115,8 @@
 
   private final ImmutableMap<Artifact, FilesToRunProvider> executableRunfilesMap;
 
+  private final Map<String, String> makeVariables;
+
   /**
    * In native code, private values start with $.
    * In Skylark, private values start with _, because of the grammar.
@@ -245,6 +247,8 @@
     targetsObject = new SkylarkClassObject(targetsBuilder.build(),
         "No such targets. Make sure there is a '%s' label or label_list type attribute");
     executableRunfilesMap = executableRunfilesbuilder.build();
+
+    makeVariables = ruleContext.getConfigurationMakeVariableContext().collectMakeVariables();
   }
 
   private void addOutput(HashMap<String, Object> outputsBuilder, String key, Object value)
@@ -386,6 +390,12 @@
     return outputsObject;
   }
 
+  @SkylarkCallable(structField = true,
+      doc = "Dictionary (String to String) of configuration variables")
+  public Map<String, String> var() {
+    return makeVariables;
+  }
+
   @Override
   public String toString() {
     return ruleContext.getLabel().toString();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java
index ce21c42..7e11bda 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/SkylarkRuleImplementationFunctions.java
@@ -340,9 +340,12 @@
         }
       };
 
-
+  // Deprecated function.
+  // Use the new ctx.var field, which is a dictionary.
+  // TODO(bazel-team): Remove function when user code has been updated.
   @SkylarkBuiltin(name = "var",
       doc = "get the value bound to a configuration variable in the context",
+      hidden = true,
       objectType = SkylarkRuleContext.class,
       mandatoryParams = {
         @Param(name = "name", type = String.class, doc = "the name of the variable")
