diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
index 9f592fa..2c340bf 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BaseRuleClasses.java
@@ -164,7 +164,7 @@
           .add(attr("args", STRING_LIST)
               .nonconfigurable("policy decision: should be consistent across configurations"))
           .add(attr("$test_runtime", LABEL_LIST).cfg(HOST).value(ImmutableList.of(
-              env.getLabel(env.getToolsRepository() + "//tools/test:runtime"))))
+              env.getToolsLabel("//tools/test:runtime"))))
 
           // TODO(bazel-team): TestActions may need to be run with coverage, so all tests
           // implicitly depend on crosstool, which provides gcov.  We could add gcov to
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
index 746eb9e..62ab8a6 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/ConfiguredRuleClassProvider.java
@@ -130,7 +130,7 @@
       this.runfilesPrefix = runfilesPrefix;
       return this;
     }
-    
+
     public Builder setToolsRepository(String toolsRepository) {
       this.toolsRepository = toolsRepository;
       return this;
@@ -271,10 +271,10 @@
     public Label getLabel(String labelValue) {
       return LABELS.getUnchecked(labelValue);
     }
-    
+
     @Override
-    public String getToolsRepository() {
-      return toolsRepository;
+    public Label getToolsLabel(String labelValue) {
+      return getLabel(toolsRepository + labelValue);
     }
   }
 
@@ -309,7 +309,7 @@
    * The default runfiles prefix.
    */
   private final String runfilesPrefix;
-  
+
   /**
    * The path to the tools repository.
    */
@@ -405,7 +405,7 @@
   public String getRunfilesPrefix() {
     return runfilesPrefix;
   }
-  
+
   @Override
   public String getToolsRepository() {
     return toolsRepository;
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinitionEnvironment.java b/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinitionEnvironment.java
index 2eab411..45200fb 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinitionEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/RuleDefinitionEnvironment.java
@@ -28,7 +28,8 @@
   Label getLabel(String labelValue);
 
   /**
-   * Returns the path to the tools repository. It is different for blaze and bazel.
+   * Prepends the tools repository path to the given string and parses the result
+   * using {@link RuleDefinitionEnvironment#getLabel}
    */
-  String getToolsRepository();
+  Label getToolsLabel(String labelValue);
 }
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java
index dc35d690..820e3d2 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/android/BazelAndroidBinaryRule.java
@@ -42,8 +42,7 @@
         .add(attr("$debug_keystore", BuildType.LABEL)
             .cfg(HOST)
             .singleArtifact()
-            .value(environment.getLabel(
-                environment.getToolsRepository() + "//tools/android:debug_keystore")))
+            .value(environment.getToolsLabel("//tools/android:debug_keystore")))
         .add(attr(":cc_toolchain_split", BuildType.LABEL)
             .cfg(AndroidRuleClasses.ANDROID_SPLIT_TRANSITION)
             .value(BazelCppRuleClasses.CC_TOOLCHAIN))
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java
index c94b481..8b5171c 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/cpp/BazelCppRuleClasses.java
@@ -262,7 +262,7 @@
           .add(attr("copts", STRING_LIST))
           .add(
               attr("$stl_default", LABEL)
-                  .value(env.getLabel(env.getToolsRepository() + "//tools/cpp:stl")))
+                  .value(env.getToolsLabel("//tools/cpp:stl")))
           .add(attr(":stl", LABEL).value(STL))
           .build();
     }
@@ -541,7 +541,7 @@
                           // sure that the correct headers are used for inclusion.
                           // The only exception is STL itself,
                           // to avoid cycles in the dependency graph.
-                          Label stl = env.getLabel(env.getToolsRepository() + "//tools/cpp:stl");
+                          Label stl = env.getToolsLabel("//tools/cpp:stl");
                           return rule.getLabel().equals(stl) ? null : stl;
                         }
                       }))
@@ -575,7 +575,7 @@
           </p>
           <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/
           .add(attr("malloc", LABEL)
-              .value(env.getLabel(env.getToolsRepository() + "//tools/cpp:malloc"))
+              .value(env.getToolsLabel("//tools/cpp:malloc"))
               .allowedFileTypes()
               .allowedRuleClasses("cc_library"))
           .add(attr(":default_malloc", LABEL).value(DEFAULT_MALLOC))
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java
index 4667e67..572e3ae 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/genrule/BazelGenRuleRule.java
@@ -81,8 +81,7 @@
         </p>
         <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
         .add(attr("tools", LABEL_LIST).cfg(HOST).legacyAllowAnyFileType())
-        .add(attr("$genrule_setup", LABEL).cfg(HOST).value(
-            env.getLabel(env.getToolsRepository() + GENRULE_SETUP_LABEL)))
+        .add(attr("$genrule_setup", LABEL).cfg(HOST).value(env.getToolsLabel(GENRULE_SETUP_LABEL)))
 
         /* <!-- #BLAZE_RULE(genrule).ATTRIBUTE(outs) -->
         A list of files generated by this rule.
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaRuleClasses.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaRuleClasses.java
index f343844..96cb41c 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/java/BazelJavaRuleClasses.java
@@ -339,7 +339,7 @@
                 @Override
                 public Object getDefault(AttributeMap rule) {
                   return rule.get("use_testrunner", Type.BOOLEAN)
-                    ? env.getLabel(env.getToolsRepository() + JUNIT_TESTRUNNER)
+                    ? env.getToolsLabel(JUNIT_TESTRUNNER)
                     : null;
                 }
               }))
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPyRuleClasses.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPyRuleClasses.java
index c73a22e..36d3a1f 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPyRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/python/BazelPyRuleClasses.java
@@ -83,7 +83,7 @@
           // do not depend on lib2to3:2to3 rule, because it creates circular dependencies
           // 2to3 is itself written in Python and depends on many libraries.
           .add(attr("$python2to3", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/python:2to3")))
+              .value(env.getToolsLabel("//tools/python:2to3")))
           .setPreferredDependencyPredicate(PyRuleClasses.PYTHON_SOURCE)
           .build();
     }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryOnlyRule.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryOnlyRule.java
index 18616cd..fc297e5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryOnlyRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidBinaryOnlyRule.java
@@ -87,8 +87,7 @@
         .add(attr("$android_manifest_merge_tool", LABEL)
             .cfg(HOST)
             .exec()
-            .value(env.getLabel(env.getToolsRepository()
-                + AndroidRuleClasses.MANIFEST_MERGE_TOOL_LABEL)))
+            .value(env.getToolsLabel(AndroidRuleClasses.MANIFEST_MERGE_TOOL_LABEL)))
 
         /* <!-- #BLAZE_RULE(android_binary).ATTRIBUTE(multidex) -->
         Whether to split code into multiple dex files.
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryBaseRule.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryBaseRule.java
index e385c3c..f187716 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryBaseRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLibraryBaseRule.java
@@ -125,8 +125,8 @@
         <!-- #END_BLAZE_RULE.ATTRIBUTE --> */
         .add(attr("idl_parcelables", LABEL_LIST).direct_compile_time_input()
             .allowedFileTypes(AndroidRuleClasses.ANDROID_IDL))
-        .add(attr("$android_manifest_merge_tool", LABEL).cfg(HOST).exec().value(env.getLabel(
-            env.getToolsRepository() + AndroidRuleClasses.MANIFEST_MERGE_TOOL_LABEL)))
+        .add(attr("$android_manifest_merge_tool", LABEL).cfg(HOST).exec().value(
+            env.getToolsLabel(AndroidRuleClasses.MANIFEST_MERGE_TOOL_LABEL)))
         .advertiseProvider(JavaCompilationArgsProvider.class)
         .build();
   }
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
index ef3a4b3..d4ca2ad 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidRuleClasses.java
@@ -317,8 +317,7 @@
                   .allowedFileTypes(ANY_FILE)
                   // TODO(bazel-team): Remove defaults and make mandatory when android_sdk targets
                   // have been updated to include manually specified Jack attributes.
-                  .value(environment.getLabel(
-                      environment.getToolsRepository() + "//tools/android/jack:android_jack")))
+                  .value(environment.getToolsLabel("//tools/android/jack:android_jack")))
           .add(attr("annotations_jar", LABEL).mandatory().cfg(HOST).allowedFileTypes(ANY_FILE))
           .add(attr("main_dex_classes", LABEL).mandatory().cfg(HOST).allowedFileTypes(ANY_FILE))
           .add(attr("apkbuilder", LABEL).mandatory().cfg(HOST).allowedFileTypes(ANY_FILE).exec())
@@ -328,22 +327,19 @@
                   .cfg(HOST)
                   .allowedFileTypes(ANY_FILE)
                   .exec()
-                  .value(environment.getLabel(
-                      environment.getToolsRepository() + "//tools/android/jack:jack")))
+                  .value(environment.getToolsLabel("//tools/android/jack:jack")))
           .add(
               attr("jill", LABEL)
                   .cfg(HOST)
                   .allowedFileTypes(ANY_FILE)
                   .exec()
-                  .value(environment.getLabel(
-                      environment.getToolsRepository() + "//tools/android/jack:jill")))
+                  .value(environment.getToolsLabel("//tools/android/jack:jill")))
           .add(
               attr("resource_extractor", LABEL)
                   .cfg(HOST)
                   .allowedFileTypes(ANY_FILE)
                   .exec()
-                  .value(environment.getLabel(environment.getToolsRepository()
-                      + "//tools/android/jack:resource_extractor")))
+                  .value(environment.getToolsLabel("//tools/android/jack:resource_extractor")))
           .build();
     }
 
@@ -365,9 +361,9 @@
     public RuleClass build(RuleClass.Builder builder, RuleDefinitionEnvironment env) {
       return builder
           .add(attr("$android_resources_processor", LABEL).cfg(HOST).exec().value(
-              env.getLabel(env.getToolsRepository() + DEFAULT_RESOURCES_PROCESSOR)))
+              env.getToolsLabel(DEFAULT_RESOURCES_PROCESSOR)))
           .add(attr("$android_aar_generator", LABEL).cfg(HOST).exec().value(
-              env.getLabel(env.getToolsRepository() + DEFAULT_AAR_GENERATOR)))
+              env.getToolsLabel(DEFAULT_AAR_GENERATOR)))
           .build();
     }
 
@@ -488,10 +484,9 @@
           // TODO(ahumesky): It would be better to put this dependency in //tools/android somehow
           // like all the rest of android tools.
           .add(attr("$jarjar_bin", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(
-                  env.getToolsRepository() + "//third_party/java/jarjar:jarjar_bin")))
+              .value(env.getToolsLabel("//third_party/java/jarjar:jarjar_bin")))
           .add(attr("$idlclass", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/android:IdlClass")))
+              .value(env.getToolsLabel("//tools/android:IdlClass")))
           .build();
     }
 
@@ -545,25 +540,23 @@
               .aspect(JackAspect.class))
           // Proguard rule specifying master list of classes to keep during legacy multidexing.
           .add(attr("$build_incremental_dexmanifest", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + BUILD_INCREMENTAL_DEXMANIFEST_LABEL)))
+              .value(env.getToolsLabel(BUILD_INCREMENTAL_DEXMANIFEST_LABEL)))
           .add(attr("$stubify_manifest", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + STUBIFY_MANIFEST_LABEL)))
+              .value(env.getToolsLabel(STUBIFY_MANIFEST_LABEL)))
           .add(attr("$shuffle_jars", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/android:shuffle_jars")))
+              .value(env.getToolsLabel("//tools/android:shuffle_jars")))
           .add(attr("$merge_dexzips", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/android:merge_dexzips")))
+              .value(env.getToolsLabel("//tools/android:merge_dexzips")))
           .add(attr("$incremental_install", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + INCREMENTAL_INSTALL_LABEL)))
+              .value(env.getToolsLabel(INCREMENTAL_INSTALL_LABEL)))
           .add(attr("$build_split_manifest", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + BUILD_SPLIT_MANIFEST_LABEL)))
+              .value(env.getToolsLabel(BUILD_SPLIT_MANIFEST_LABEL)))
           .add(attr("$strip_resources", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + STRIP_RESOURCES_LABEL)))
+              .value(env.getToolsLabel(STRIP_RESOURCES_LABEL)))
           .add(attr("$incremental_stub_application", LABEL)
-              .value(env.getLabel(env.getToolsRepository()
-                  + DEFAULT_INCREMENTAL_STUB_APPLICATION)))
+              .value(env.getToolsLabel(DEFAULT_INCREMENTAL_STUB_APPLICATION)))
           .add(attr("$incremental_split_stub_application", LABEL)
-              .value(env.getLabel(env.getToolsRepository()
-                  + DEFAULT_INCREMENTAL_SPLIT_STUB_APPLICATION)))
+              .value(env.getToolsLabel(DEFAULT_INCREMENTAL_SPLIT_STUB_APPLICATION)))
           /* <!-- #BLAZE_RULE($android_binary_base).ATTRIBUTE(dexopts) -->
           Additional command-line flags for the dx tool when generating classes.dex.
           Subject to <a href="make-variables.html">"Make variable"</a> substitution and
diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibraryRule.java b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibraryRule.java
index 5a7958b..8147cb8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibraryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/java/ProguardLibraryRule.java
@@ -50,8 +50,7 @@
               @Override
               public Object getDefault(AttributeMap rule) {
                 return rule.isAttributeValueExplicitlySpecified("proguard_specs")
-                    ? environment.getLabel(
-                        environment.getToolsRepository() + "//tools/jdk:proguard_whitelister")
+                    ? environment.getToolsLabel("//tools/jdk:proguard_whitelister")
                     : null;
               }
             }))
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplicationRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplicationRule.java
index bc0183d..9438dd5 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplicationRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosApplicationRule.java
@@ -64,8 +64,7 @@
             .allowedFileTypes()
             .direct_compile_time_input())
         .add(attr("$runner_script_template", LABEL).cfg(HOST)
-            .value(env.getLabel(
-                env.getToolsRepository() + "//tools/objc:ios_runner.sh.mac_template")))
+            .value(env.getToolsLabel("//tools/objc:ios_runner.sh.mac_template")))
         .add(attr("$is_executable", BOOLEAN).value(true)
             .nonconfigurable("Called from RunCommand.isExecutable, which takes a Target"))
         .build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java
index d7b29f4..84a9d43 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/IosTestRule.java
@@ -48,7 +48,7 @@
   @Override
   public RuleClass build(RuleClass.Builder builder, final RuleDefinitionEnvironment env) {
     final ImmutableList<Label> gcov =
-        ImmutableList.of(env.getLabel(env.getToolsRepository() + "//tools/objc:gcov"));
+        ImmutableList.of(env.getToolsLabel("//tools/objc:gcov"));
     return builder
         .requiresConfigurationFragments(
             ObjcConfiguration.class, J2ObjcConfiguration.class, AppleConfiguration.class)
@@ -70,7 +70,7 @@
                 .allowedFileTypes()
                 .allowedRuleClasses("ios_device")
                 .value(
-                    env.getLabel(env.getToolsRepository() + "//tools/objc/sim_devices:default")))
+                    env.getToolsLabel("//tools/objc/sim_devices:default")))
         /* <!-- #BLAZE_RULE(ios_test ).ATTRIBUTE(xctest) -->
         Whether this target contains tests using the XCTest testing framework.
         <!-- #END_BLAZE_RULE.ATTRIBUTE -->*/
@@ -132,18 +132,16 @@
         .add(attr("plugins", LABEL_LIST).allowedFileTypes(FileType.of("_deploy.jar")))
         .add(
             attr("$test_template", LABEL)
-                .value(
-                    env.getLabel(
-                        env.getToolsRepository() + "//tools/objc:ios_test.sh.bazel_template")))
+                .value(env.getToolsLabel("//tools/objc:ios_test.sh.bazel_template")))
         .add(
             attr("$test_runner", LABEL)
-                .value(env.getLabel(env.getToolsRepository() + "//tools/objc:testrunner")))
+                .value(env.getToolsLabel("//tools/objc:testrunner")))
         .add(
             attr(IosTest.MEMLEAKS_DEP, LABEL)
-                .value(env.getLabel(env.getToolsRepository() + "//tools/objc/memleaks:memleaks")))
+                .value(env.getToolsLabel("//tools/objc/memleaks:memleaks")))
         .add(
             attr(IosTest.MEMLEAKS_PLUGIN, LABEL)
-                .value(env.getLabel(env.getToolsRepository() + "//tools/objc:memleaks_plugin")))
+                .value(env.getToolsLabel("//tools/objc:memleaks_plugin")))
         .override(
             attr(":gcov", LABEL_LIST)
                 .cfg(HOST)
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryRule.java
index 34b5b8e..9549ad1 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcBinaryRule.java
@@ -50,8 +50,7 @@
             ImplicitOutputsFunction.fromFunctions(ReleaseBundlingSupport.IPA, XcodeSupport.PBXPROJ))
         // TODO(bazel-team): Remove these when this rule no longer produces a bundle.
         .add(attr("$runner_script_template", LABEL).cfg(HOST)
-            .value(env.getLabel(
-                env.getToolsRepository() + "//tools/objc:ios_runner.sh.mac_template")))
+            .value(env.getToolsLabel("//tools/objc:ios_runner.sh.mac_template")))
         .add(attr("$is_executable", BOOLEAN).value(true)
             .nonconfigurable("Called from RunCommand.isExecutable, which takes a Target"))
         .build();
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java
index 598edcf..fc5a9e6 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcProtoLibraryRule.java
@@ -76,11 +76,11 @@
             .allowedFileTypes(FileType.of(".py"))
             .cfg(HOST)
             .singleArtifact()
-            .value(env.getLabel(env.getToolsRepository() + "//tools/objc:compile_protos")))
+            .value(env.getToolsLabel("//tools/objc:compile_protos")))
         .add(attr(PROTO_SUPPORT_ATTR, LABEL)
             .legacyAllowAnyFileType()
             .cfg(HOST)
-            .value(env.getLabel(env.getToolsRepository() + "//tools/objc:proto_support")))
+            .value(env.getToolsLabel("//tools/objc:proto_support")))
         .add(attr(USE_OBJC_HEADER_NAMES_ATTR, BOOLEAN).value(false))
         .add(attr(LIBPROTOBUF_ATTR, LABEL).allowedRuleClasses("objc_library")
             .value(new ComputedDefault(OUTPUT_CPP_ATTR) {
@@ -92,7 +92,7 @@
               }
             }))
         .add(attr("$xcodegen", LABEL).cfg(HOST).exec()
-            .value(env.getLabel(env.getToolsRepository() + "//tools/objc:xcodegen")))
+            .value(env.getToolsLabel("//tools/objc:xcodegen")))
         .build();
   }
 
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
index c8bbb65..5dca7d8 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/ObjcRuleClasses.java
@@ -489,11 +489,11 @@
     public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
       return builder
           .add(attr("$plmerge", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/objc:plmerge")))
+              .value(env.getToolsLabel("//tools/objc:plmerge")))
           .add(attr("$actoolwrapper", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/objc:actoolwrapper")))
+              .value(env.getToolsLabel("//tools/objc:actoolwrapper")))
           .add(attr("$ibtoolwrapper", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/objc:ibtoolwrapper")))
+              .value(env.getToolsLabel("//tools/objc:ibtoolwrapper")))
           .build();
     }
     @Override
@@ -513,9 +513,9 @@
     public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
       return builder
           .add(attr("$xcodegen", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/objc:xcodegen")))
+              .value(env.getToolsLabel("//tools/objc:xcodegen")))
           .add(attr("$dummy_source", LABEL)
-              .value(env.getLabel(env.getToolsRepository() + "//tools/objc:dummy.c")))
+              .value(env.getToolsLabel("//tools/objc:dummy.c")))
           .build();
     }
     @Override
@@ -732,16 +732,15 @@
           .add(attr("$dumpsyms", LABEL)
           .cfg(HOST)
           .singleArtifact()
-          .value(env.getLabel(env.getToolsRepository() + "//tools/objc:dump_syms")))
+          .value(env.getToolsLabel("//tools/objc:dump_syms")))
           .add(attr("$j2objc_dead_code_pruner", LABEL)
               .allowedFileTypes(FileType.of(".py"))
               .cfg(HOST)
               .exec()
               .singleArtifact()
-              .value(env.getLabel(
-                  env.getToolsRepository() + "//tools/objc:j2objc_dead_code_pruner")))
+              .value(env.getToolsLabel("//tools/objc:j2objc_dead_code_pruner")))
           .add(attr("$dummy_lib", LABEL)
-              .value(env.getLabel(env.getToolsRepository() + "//tools/objc:dummy_lib")))
+              .value(env.getToolsLabel("//tools/objc:dummy_lib")))
         .build();
     }
     @Override
@@ -807,14 +806,12 @@
               attr("$momcwrapper", LABEL)
                   .cfg(HOST)
                   .exec()
-                  .value(env.getLabel(env.getToolsRepository() + "//tools/objc:momcwrapper")))
+                  .value(env.getToolsLabel("//tools/objc:momcwrapper")))
           .add(
               attr("$swiftstdlibtoolwrapper", LABEL)
                   .cfg(HOST)
                   .exec()
-                  .value(
-                      env.getLabel(
-                          env.getToolsRepository() + "//tools/objc:swiftstdlibtoolwrapper")))
+                  .value(env.getToolsLabel("//tools/objc:swiftstdlibtoolwrapper")))
           .build();
     }
 
@@ -952,13 +949,12 @@
               attr("$bundlemerge", LABEL)
                   .cfg(HOST)
                   .exec()
-                  .value(env.getLabel(env.getToolsRepository() + "//tools/objc:bundlemerge")))
+                  .value(env.getToolsLabel("//tools/objc:bundlemerge")))
           .add(
               attr("$environment_plist", LABEL)
                   .cfg(HOST)
                   .exec()
-                  .value(env.getLabel(
-                      env.getToolsRepository() + "//tools/objc:environment_plist")))
+                  .value(env.getToolsLabel("//tools/objc:environment_plist")))
           .build();
     }
     @Override
@@ -980,9 +976,9 @@
       return builder
           // Needed to run the binary in the simulator.
           .add(attr("$iossim", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//third_party/iossim:iossim")))
+              .value(env.getToolsLabel("//third_party/iossim:iossim")))
           .add(attr("$std_redirect_dylib", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/objc:StdRedirect.dylib")))
+              .value(env.getToolsLabel("//tools/objc:StdRedirect.dylib")))
           .build();
     }
     @Override
@@ -1002,7 +998,7 @@
     public RuleClass build(Builder builder, RuleDefinitionEnvironment env) {
       return builder
           .add(attr("$xcrunwrapper", LABEL).cfg(HOST).exec()
-              .value(env.getLabel(env.getToolsRepository() + "//tools/objc:xcrunwrapper")))
+              .value(env.getToolsLabel("//tools/objc:xcrunwrapper")))
           .build();
     }
     @Override
@@ -1015,3 +1011,4 @@
     }
   }
 }
+
