diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaLiteProtoLibraryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaLiteProtoLibraryRule.java
index ed33564..739de4b 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaLiteProtoLibraryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/proto/BazelJavaLiteProtoLibraryRule.java
@@ -18,20 +18,22 @@
 import static com.google.devtools.build.lib.packages.Attribute.attr;
 import static com.google.devtools.build.lib.packages.BuildType.LABEL;
 import static com.google.devtools.build.lib.packages.BuildType.LABEL_LIST;
-import static com.google.devtools.build.lib.rules.java.proto.JavaLiteProtoAspect.LITE_PROTO_RUNTIME_ATTR;
-import static com.google.devtools.build.lib.rules.java.proto.JavaLiteProtoAspect.LITE_PROTO_RUNTIME_LABEL;
+import static com.google.devtools.build.lib.rules.java.proto.JavaLiteProtoAspect.PROTO_TOOLCHAIN_ATTR;
+import static com.google.devtools.build.lib.rules.java.proto.JavaLiteProtoAspect.PROTO_TOOLCHAIN_LABEL;
 import static com.google.devtools.build.lib.syntax.Type.BOOLEAN;
 
 import com.google.common.base.Function;
+import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.analysis.BaseRuleClasses;
 import com.google.devtools.build.lib.analysis.RuleDefinition;
 import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
-import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
 import com.google.devtools.build.lib.packages.AspectParameters;
 import com.google.devtools.build.lib.packages.Rule;
 import com.google.devtools.build.lib.packages.RuleClass;
 import com.google.devtools.build.lib.rules.java.JavaConfiguration;
 import com.google.devtools.build.lib.rules.java.proto.JavaLiteProtoLibrary;
+import com.google.devtools.build.lib.rules.proto.ProtoLangToolchainProvider;
 import javax.annotation.Nullable;
 
 /** Declaration of the {@code java_lite_proto_library} rule. */
@@ -75,9 +77,11 @@
         <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
         .add(attr("strict_deps", BOOLEAN).value(true))
         .add(
-            attr(LITE_PROTO_RUNTIME_ATTR, LABEL)
-                .legacyAllowAnyFileType()
-                .value(Label.parseAbsoluteUnchecked(LITE_PROTO_RUNTIME_LABEL)))
+            attr(PROTO_TOOLCHAIN_ATTR, LABEL)
+                .mandatoryNativeProviders(
+                    ImmutableList.<Class<? extends TransitiveInfoProvider>>of(
+                        ProtoLangToolchainProvider.class))
+                .value(PROTO_TOOLCHAIN_LABEL))
         .build();
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
index 9d65dec..d3bc185 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoAspect.java
@@ -25,14 +25,14 @@
 import static com.google.devtools.build.lib.rules.java.proto.JavaProtoLibraryTransitiveFilesToBuildProvider.GET_JARS;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Iterables;
 import com.google.devtools.build.lib.actions.Artifact;
 import com.google.devtools.build.lib.analysis.ConfiguredAspect;
 import com.google.devtools.build.lib.analysis.ConfiguredAspectFactory;
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
-import com.google.devtools.build.lib.analysis.FilesToRunProvider;
-import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
 import com.google.devtools.build.lib.analysis.RuleContext;
+import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
 import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
 import com.google.devtools.build.lib.analysis.TransitiveInfoProviderMap;
 import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
@@ -56,6 +56,7 @@
 import com.google.devtools.build.lib.rules.java.JavaToolchainProvider;
 import com.google.devtools.build.lib.rules.proto.ProtoCompileActionBuilder;
 import com.google.devtools.build.lib.rules.proto.ProtoConfiguration;
+import com.google.devtools.build.lib.rules.proto.ProtoLangToolchainProvider;
 import com.google.devtools.build.lib.rules.proto.ProtoSourcesProvider;
 import com.google.devtools.build.lib.rules.proto.ProtoSupportDataProvider;
 import com.google.devtools.build.lib.rules.proto.SupportData;
@@ -64,23 +65,16 @@
 /** An Aspect which JavaLiteProtoLibrary injects to build Java Lite protos. */
 public class JavaLiteProtoAspect extends NativeAspectClass implements ConfiguredAspectFactory {
 
-  public static final String LITE_PROTO_RUNTIME_ATTR = "$aspect_java_lib";
-  public static final String LITE_PROTO_RUNTIME_LABEL = "//external:protobuf/javalite_runtime";
+  public static final String PROTO_TOOLCHAIN_ATTR = ":aspect_proto_toolchain_for_javalite";
 
-  private static final Attribute.LateBoundLabel<BuildConfiguration> JAVA_LITE_PLUGIN =
-      new Attribute.LateBoundLabel<BuildConfiguration>((Label) null, ProtoConfiguration.class) {
+  public static final Attribute.LateBoundLabel<BuildConfiguration> PROTO_TOOLCHAIN_LABEL =
+      new Attribute.LateBoundLabel<BuildConfiguration>(
+          "//tools/proto/toolchains:javalite", ProtoConfiguration.class) {
         @Override
         public Label resolve(Rule rule, AttributeMap attributes, BuildConfiguration configuration) {
-          return configuration.getFragment(ProtoConfiguration.class).protoCompilerJavaLitePlugin();
-        }
-
-        @Override
-        public boolean useHostConfiguration() {
-          return true;
+          return configuration.getFragment(ProtoConfiguration.class).protoToolchainForJavaLite();
         }
       };
-  private static final String PROTO_COMPILER_JAVA_LITE_PLUGIN_ATTR =
-      ":proto_compiler_java_lite_plugin";
 
   private final JavaSemantics javaSemantics;
 
@@ -115,19 +109,16 @@
             .requiresConfigurationFragments(JavaConfiguration.class, ProtoConfiguration.class)
             .requireProvider(ProtoSourcesProvider.class)
             .add(
-                attr(LITE_PROTO_RUNTIME_ATTR, LABEL)
-                    .legacyAllowAnyFileType()
-                    .value(parseAbsoluteUnchecked(LITE_PROTO_RUNTIME_LABEL)))
+                attr(PROTO_TOOLCHAIN_ATTR, LABEL)
+                    .mandatoryNativeProviders(
+                        ImmutableList.<Class<? extends TransitiveInfoProvider>>of(
+                            ProtoLangToolchainProvider.class))
+                    .value(PROTO_TOOLCHAIN_LABEL))
             .add(attr(":host_jdk", LABEL).cfg(HOST).value(JavaSemantics.HOST_JDK))
             .add(
                 attr(":java_toolchain", LABEL)
                     .allowedRuleClasses("java_toolchain")
-                    .value(JavaSemantics.JAVA_TOOLCHAIN))
-            .add(
-                attr(PROTO_COMPILER_JAVA_LITE_PLUGIN_ATTR, LABEL)
-                    .cfg(HOST)
-                    .exec()
-                    .value(JAVA_LITE_PLUGIN));
+                    .value(JavaSemantics.JAVA_TOOLCHAIN));
 
     Attribute.Builder<Label> jacocoAttr = attr("$jacoco_instrumentation", LABEL).cfg(HOST);
 
@@ -207,24 +198,16 @@
     }
 
     private void createProtoCompileAction(Artifact sourceJar) {
-      ProtoCompileActionBuilder actionBuilder =
-          new ProtoCompileActionBuilder(
-                  ruleContext, supportData, "Java", "java", ImmutableList.of(sourceJar))
-              .allowServices(true)
-              .setLangParameter(
-                  String.format(
-                      ruleContext
-                          .getFragment(ProtoConfiguration.class, HOST)
-                          .protoCompilerJavaLiteFlags(),
-                      sourceJar.getExecPathString()));
-
-      FilesToRunProvider plugin =
-          ruleContext.getExecutablePrerequisite(PROTO_COMPILER_JAVA_LITE_PLUGIN_ATTR, Mode.HOST);
-      if (plugin != null) {
-        actionBuilder.setAdditionalTools(ImmutableList.of(plugin));
-      }
-
-      ruleContext.registerAction(actionBuilder.build());
+      ProtoCompileActionBuilder.registerActions(
+          ruleContext,
+          ImmutableMap.of(
+              "javalite",
+              new ProtoCompileActionBuilder.ToolchainInvocation(
+                  getProtoToolchainProvider(), sourceJar.getExecPathString())),
+          supportData,
+          ImmutableList.of(sourceJar),
+          "JavaLite",
+          true /* allowServices */);
     }
 
     private JavaCompilationArgsProvider createJavaCompileAction(
@@ -235,15 +218,21 @@
               .addSourceJars(sourceJar)
               .setJavacOpts(getAndroidCompatibleJavacOpts());
       helper.addDep(dependencyCompilationArgs);
-      helper
-          .addDep(
-              ruleContext.getPrerequisite(
-                  LITE_PROTO_RUNTIME_ATTR, Mode.TARGET, JavaCompilationArgsProvider.class))
-          .setCompilationStrictDepsMode(StrictDepsMode.OFF);
+      TransitiveInfoCollection runtime = getProtoToolchainProvider().runtime();
+      if (runtime != null) {
+        helper.addDep(runtime.getProvider(JavaCompilationArgsProvider.class));
+      }
+      helper.setCompilationStrictDepsMode(StrictDepsMode.OFF);
       JavaCompilationArgs artifacts = helper.build(javaSemantics);
       return helper.buildCompilationArgsProvider(artifacts, true /* isReportedAsStrict */);
     }
 
+    private ProtoLangToolchainProvider getProtoToolchainProvider() {
+      return checkNotNull(
+          ruleContext.getPrerequisite(
+              PROTO_TOOLCHAIN_ATTR, TARGET, ProtoLangToolchainProvider.class));
+    }
+
     private Artifact getSourceJarArtifact() {
       return ruleContext.getGenfilesArtifact(ruleContext.getLabel().getName() + "-lite-src.jar");
     }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoLibrary.java b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoLibrary.java
index 21d3e6f..5e32d8c 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoLibrary.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/proto/JavaLiteProtoLibrary.java
@@ -14,9 +14,10 @@
 
 package com.google.devtools.build.lib.rules.java.proto;
 
+import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode.TARGET;
 import static com.google.devtools.build.lib.collect.nestedset.Order.STABLE_ORDER;
-import static com.google.devtools.build.lib.rules.java.proto.JavaLiteProtoAspect.LITE_PROTO_RUNTIME_ATTR;
+import static com.google.devtools.build.lib.rules.java.proto.JavaLiteProtoAspect.PROTO_TOOLCHAIN_ATTR;
 
 import com.google.common.collect.ImmutableMultimap;
 import com.google.common.collect.Iterables;
@@ -28,7 +29,9 @@
 import com.google.devtools.build.lib.analysis.RuleContext;
 import com.google.devtools.build.lib.analysis.Runfiles;
 import com.google.devtools.build.lib.analysis.RunfilesProvider;
+import com.google.devtools.build.lib.analysis.TransitiveInfoCollection;
 import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.rules.RuleConfiguredTargetFactory;
 import com.google.devtools.build.lib.rules.java.JavaCompilationArgsProvider;
@@ -38,6 +41,7 @@
 import com.google.devtools.build.lib.rules.java.JavaSourceJarsProvider;
 import com.google.devtools.build.lib.rules.java.ProguardLibrary;
 import com.google.devtools.build.lib.rules.java.ProguardSpecProvider;
+import com.google.devtools.build.lib.rules.proto.ProtoLangToolchainProvider;
 
 /** Implementation of the java_lite_proto_library rule. */
 public class JavaLiteProtoLibrary implements RuleConfiguredTargetFactory {
@@ -82,12 +86,7 @@
         .add(JavaCompilationArgsProvider.class, dependencyArgsProviders)
         .add(JavaSourceJarsProvider.class, sourceJarsProvider)
         .add(JavaRunfilesProvider.class, new JavaRunfilesProvider(runfiles))
-        .add(
-            ProguardSpecProvider.class,
-            new ProguardSpecProvider(
-                new ProguardLibrary(ruleContext)
-                    .collectProguardSpecs(
-                        ImmutableMultimap.of(Mode.TARGET, LITE_PROTO_RUNTIME_ATTR))))
+        .add(ProguardSpecProvider.class, getJavaLiteRuntimeSpec(ruleContext))
         .add(JavaRuleOutputJarsProvider.class, JavaRuleOutputJarsProvider.builder().build())
         .addSkylarkTransitiveInfo(JavaSkylarkApiProvider.NAME, new JavaSkylarkApiProvider())
         .build();
@@ -97,4 +96,30 @@
       RuleContext ruleContext, Class<C> clazz) {
     return ruleContext.getPrerequisites("deps", TARGET, clazz);
   }
+
+  private ProguardSpecProvider getJavaLiteRuntimeSpec(RuleContext ruleContext) {
+    NestedSet<Artifact> specs =
+        new ProguardLibrary(ruleContext).collectProguardSpecs(ImmutableMultimap.<Mode, String>of());
+
+    TransitiveInfoCollection runtime = getProtoToolchainProvider(ruleContext).runtime();
+    if (runtime == null) {
+      return new ProguardSpecProvider(specs);
+    }
+
+    ProguardSpecProvider specProvider = runtime.getProvider(ProguardSpecProvider.class);
+    if (specProvider == null) {
+      return new ProguardSpecProvider(specs);
+    }
+
+    return new ProguardSpecProvider(
+        NestedSetBuilder.fromNestedSet(specs)
+            .addTransitive(specProvider.getTransitiveProguardSpecs())
+            .build());
+  }
+
+  private ProtoLangToolchainProvider getProtoToolchainProvider(RuleContext ruleContext) {
+    return checkNotNull(
+        ruleContext.getPrerequisite(
+            PROTO_TOOLCHAIN_ATTR, TARGET, ProtoLangToolchainProvider.class));
+  }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java
index 293c828..29b2c4f 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoCompileActionBuilder.java
@@ -415,19 +415,6 @@
       ImmutableList<String> protocOpts) {
     CustomCommandLine.Builder cmdLine = CustomCommandLine.builder();
 
-    cmdLine.add(protocOpts);
-
-    // Add include maps
-    cmdLine.add(new ProtoCommandLineArgv(supportData.getTransitiveImports()));
-
-    for (Artifact src : supportData.getDirectProtoSources()) {
-      cmdLine.addPath(src.getRootRelativePath());
-    }
-
-    if (!allowServices) {
-      cmdLine.add("--disallow_services");
-    }
-
     for (Map.Entry<String, ToolchainInvocation> entry : toolchainInvocations.entrySet()) {
       String pluginSuffix = entry.getKey();
       ToolchainInvocation invocation = entry.getValue();
@@ -450,6 +437,20 @@
                 toolchain.pluginExecutable().getExecutable().getExecPathString()));
       }
     }
+
+    cmdLine.add(protocOpts);
+
+    // Add include maps
+    cmdLine.add(new ProtoCommandLineArgv(supportData.getTransitiveImports()));
+
+    for (Artifact src : supportData.getDirectProtoSources()) {
+      cmdLine.addPath(src.getRootRelativePath());
+    }
+
+    if (!allowServices) {
+      cmdLine.add("--disallow_services");
+    }
+
     return cmdLine.build();
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java
index 75ed40d..48be258 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/proto/ProtoConfiguration.java
@@ -104,6 +104,15 @@
     )
     public Label protoCompilerJavaLitePlugin;
 
+    @Option(
+      name = "proto_toolchain_for_javalite",
+      defaultValue = "//tools/proto/toolchains:javalite",
+      category = "flags",
+      converter = BuildConfiguration.EmptyToNullLabelConverter.class,
+      help = "Label of proto_lang_toolchain() which describes how to compile JavaLite protos"
+    )
+    public Label protoToolchainForJavaLite;
+
     @Override
     public FragmentOptions getHost(boolean fallback) {
       Options host = (Options) super.getHost(fallback);
@@ -115,6 +124,7 @@
       host.protoCompilerJavaBlacklistedProtos = protoCompilerJavaBlacklistedProtos;
       host.protoCompilerJavaLiteFlags = protoCompilerJavaLiteFlags;
       host.protoCompilerJavaLitePlugin = protoCompilerJavaLitePlugin;
+      host.protoToolchainForJavaLite = protoToolchainForJavaLite;
       return host;
     }
   }
@@ -147,6 +157,7 @@
   private final List<Label> protoCompilerJavaBlacklistedProtos;
   private final String protoCompilerJavaLiteFlags;
   private final Label protoCompilerJavaLitePlugin;
+  private final Label protoToolchainForJavaLite;
 
   public ProtoConfiguration(Options options) {
     this.experimentalProtoExtraActions = options.experimentalProtoExtraActions;
@@ -156,6 +167,7 @@
     this.protoCompilerJavaLiteFlags = options.protoCompilerJavaLiteFlags;
     this.protoCompilerJavaLitePlugin = options.protoCompilerJavaLitePlugin;
     this.protoCompilerJavaBlacklistedProtos = options.protoCompilerJavaBlacklistedProtos;
+    this.protoToolchainForJavaLite = options.protoToolchainForJavaLite;
   }
 
   public ImmutableList<String> protocOpts() {
@@ -190,4 +202,8 @@
   public List<Label> protoCompilerJavaBlacklistedProtos() {
     return protoCompilerJavaBlacklistedProtos;
   }
+
+  public Label protoToolchainForJavaLite() {
+    return protoToolchainForJavaLite;
+  }
 }
diff --git a/tools/BUILD b/tools/BUILD
index c1a69c5..19d04c5 100644
--- a/tools/BUILD
+++ b/tools/BUILD
@@ -16,6 +16,7 @@
         "//tools/build_defs/pkg:srcs",
         "//tools/build_defs/repo:srcs",
         "//tools/build_rules:srcs",
+        "//tools/proto/toolchains:srcs",
         "//tools/jdk:srcs",
         "//tools/genrule:srcs",
         "//tools/cpp:srcs",
@@ -40,6 +41,7 @@
         "//tools/build_defs/repo:srcs",
         "//tools/build_rules:embedded_tools_srcs",
         "//tools/buildstamp:srcs",
+        "//tools/proto/toolchains:srcs",
         "//tools/cpp:srcs",
         "//tools/genrule:srcs",
         "//tools/j2objc:srcs",
diff --git a/tools/proto/toolchains/BUILD b/tools/proto/toolchains/BUILD
new file mode 100644
index 0000000..f5f4a5e
--- /dev/null
+++ b/tools/proto/toolchains/BUILD
@@ -0,0 +1,14 @@
+package(default_visibility = ["//visibility:public"])
+
+alias(
+    name = "javalite",
+    actual = "//external:proto/toolchains/javalite",
+)
+
+filegroup(
+    name = "srcs",
+    srcs = [
+        "BUILD",
+    ],
+    visibility = ["//tools:__pkg__"],
+)
