diff --git a/src/main/java/com/google/devtools/build/lib/analysis/platform/DeclaredToolchainInfo.java b/src/main/java/com/google/devtools/build/lib/analysis/platform/DeclaredToolchainInfo.java
index 862d56d..8fa0e06 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/platform/DeclaredToolchainInfo.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/platform/DeclaredToolchainInfo.java
@@ -44,17 +44,58 @@
   /** The label of the toolchain to resolve for use in toolchain-aware rules. */
   public abstract Label toolchainLabel();
 
-  /** Returns a new {@link DeclaredToolchainInfo} with the given data. */
-  public static DeclaredToolchainInfo create(
-      ToolchainTypeInfo toolchainType,
-      ImmutableList<ConstraintValueInfo> execConstraints,
-      ImmutableList<ConstraintValueInfo> targetConstraints,
-      Label toolchainLabel) {
-    return create(
-        toolchainType,
-        ConstraintCollection.builder().addConstraints(execConstraints).build(),
-        ConstraintCollection.builder().addConstraints(targetConstraints).build(),
-        toolchainLabel);
+  /** Builder class to assist in creating {@link DeclaredToolchainInfo} instances. */
+  public static class Builder {
+    private ToolchainTypeInfo toolchainType;
+    private ConstraintCollection.Builder execConstraints = ConstraintCollection.builder();
+    private ConstraintCollection.Builder targetConstraints = ConstraintCollection.builder();
+    private Label toolchainLabel;
+
+    /** Sets the type of the toolchain being declared. */
+    public Builder toolchainType(ToolchainTypeInfo toolchainType) {
+      this.toolchainType = toolchainType;
+      return this;
+    }
+
+    /** Adds constraints describing the execution environment. */
+    public Builder addExecConstraints(Iterable<ConstraintValueInfo> constraints) {
+      this.execConstraints.addConstraints(constraints);
+      return this;
+    }
+
+    /** Adds constraints describing the execution environment. */
+    public Builder addExecConstraints(ConstraintValueInfo... constraints) {
+      return addExecConstraints(ImmutableList.copyOf(constraints));
+    }
+
+    /** Adds constraints describing the target environment. */
+    public Builder addTargetConstraints(Iterable<ConstraintValueInfo> constraints) {
+      this.targetConstraints.addConstraints(constraints);
+      return this;
+    }
+
+    /** Adds constraints describing the target environment. */
+    public Builder addTargetConstraints(ConstraintValueInfo... constraints) {
+      return addTargetConstraints(ImmutableList.copyOf(constraints));
+    }
+
+    /** Sets the label of the toolchain to resolve for use in toolchain-aware rules. */
+    public Builder toolchainLabel(Label toolchainLabel) {
+      this.toolchainLabel = toolchainLabel;
+      return this;
+    }
+
+    /** Returns the newly created {@link DeclaredToolchainInfo} instance. */
+    public DeclaredToolchainInfo build() {
+      // TODO(katre): handle constraint duplication in attributes separately.
+      return new AutoValue_DeclaredToolchainInfo(
+          toolchainType, execConstraints.build(), targetConstraints.build(), toolchainLabel);
+    }
+  }
+
+  /** Returns a new {@link Builder} for creating {@link DeclaredToolchainInfo} instances. */
+  public static Builder builder() {
+    return new Builder();
   }
 
   @AutoCodec.Instantiator
diff --git a/src/main/java/com/google/devtools/build/lib/rules/platform/Toolchain.java b/src/main/java/com/google/devtools/build/lib/rules/platform/Toolchain.java
index 35bac2e..22cf191 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/platform/Toolchain.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/platform/Toolchain.java
@@ -14,7 +14,6 @@
 
 package com.google.devtools.build.lib.rules.platform;
 
-import com.google.common.collect.ImmutableList;
 import com.google.devtools.build.lib.actions.MutableActionGraph.ActionConflictException;
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.FileProvider;
@@ -52,11 +51,12 @@
         ruleContext.attributes().get(ToolchainRule.TOOLCHAIN_ATTR, BuildType.NODEP_LABEL);
 
     DeclaredToolchainInfo registeredToolchain =
-        DeclaredToolchainInfo.create(
-            toolchainType,
-            ImmutableList.copyOf(execConstraints),
-            ImmutableList.copyOf(targetConstraints),
-            toolchainLabel);
+        DeclaredToolchainInfo.builder()
+            .toolchainType(toolchainType)
+            .addExecConstraints(execConstraints)
+            .addTargetConstraints(targetConstraints)
+            .toolchainLabel(toolchainLabel)
+            .build();
 
     return new RuleConfiguredTargetBuilder(ruleContext)
         .addProvider(RunfilesProvider.class, RunfilesProvider.EMPTY)
diff --git a/src/test/java/com/google/devtools/build/lib/analysis/platform/DeclaredToolchainInfoTest.java b/src/test/java/com/google/devtools/build/lib/analysis/platform/DeclaredToolchainInfoTest.java
index 94b89d7..6c46871 100644
--- a/src/test/java/com/google/devtools/build/lib/analysis/platform/DeclaredToolchainInfoTest.java
+++ b/src/test/java/com/google/devtools/build/lib/analysis/platform/DeclaredToolchainInfoTest.java
@@ -37,37 +37,42 @@
     new EqualsTester()
         .addEqualityGroup(
             // Base case.
-            DeclaredToolchainInfo.create(
-                ToolchainTypeInfo.create(makeLabel("//toolchain:tc1")),
-                ImmutableList.of(constraint1),
-                ImmutableList.of(constraint2),
-                makeLabel("//toolchain:toolchain1")),
-            DeclaredToolchainInfo.create(
-                ToolchainTypeInfo.create(makeLabel("//toolchain:tc1")),
-                ImmutableList.of(constraint1),
-                ImmutableList.of(constraint2),
-                makeLabel("//toolchain:toolchain1")))
+            DeclaredToolchainInfo.builder()
+                .toolchainType(ToolchainTypeInfo.create(makeLabel("//toolchain:tc1")))
+                .addExecConstraints(ImmutableList.of(constraint1))
+                .addTargetConstraints(ImmutableList.of(constraint2))
+                .toolchainLabel(makeLabel("//toolchain:toolchain1"))
+                .build(),
+            DeclaredToolchainInfo.builder()
+                .toolchainType(ToolchainTypeInfo.create(makeLabel("//toolchain:tc1")))
+                .addExecConstraints(ImmutableList.of(constraint1))
+                .addTargetConstraints(ImmutableList.of(constraint2))
+                .toolchainLabel(makeLabel("//toolchain:toolchain1"))
+                .build())
         .addEqualityGroup(
             // Different type.
-            DeclaredToolchainInfo.create(
-                ToolchainTypeInfo.create(makeLabel("//toolchain:tc2")),
-                ImmutableList.of(constraint1),
-                ImmutableList.of(constraint2),
-                makeLabel("//toolchain:toolchain1")))
+            DeclaredToolchainInfo.builder()
+                .toolchainType(ToolchainTypeInfo.create(makeLabel("//toolchain:tc2")))
+                .addExecConstraints(ImmutableList.of(constraint1))
+                .addTargetConstraints(ImmutableList.of(constraint2))
+                .toolchainLabel(makeLabel("//toolchain:toolchain1"))
+                .build())
         .addEqualityGroup(
             // Different constraints.
-            DeclaredToolchainInfo.create(
-                ToolchainTypeInfo.create(makeLabel("//toolchain:tc1")),
-                ImmutableList.of(constraint2),
-                ImmutableList.of(constraint1),
-                makeLabel("//toolchain:toolchain1")))
+            DeclaredToolchainInfo.builder()
+                .toolchainType(ToolchainTypeInfo.create(makeLabel("//toolchain:tc1")))
+                .addExecConstraints(ImmutableList.of(constraint2))
+                .addTargetConstraints(ImmutableList.of(constraint1))
+                .toolchainLabel(makeLabel("//toolchain:toolchain1"))
+                .build())
         .addEqualityGroup(
             // Different toolchain label.
-            DeclaredToolchainInfo.create(
-                ToolchainTypeInfo.create(makeLabel("//toolchain:tc1")),
-                ImmutableList.of(constraint1),
-                ImmutableList.of(constraint2),
-                makeLabel("//toolchain:toolchain2")))
+            DeclaredToolchainInfo.builder()
+                .toolchainType(ToolchainTypeInfo.create(makeLabel("//toolchain:tc1")))
+                .addExecConstraints(ImmutableList.of(constraint1))
+                .addTargetConstraints(ImmutableList.of(constraint2))
+                .toolchainLabel(makeLabel("//toolchain:toolchain2"))
+                .build())
         .testEquals();
   }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunctionTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunctionTest.java
index 98c40fc..1fd6da1 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunctionTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/RegisteredToolchainsFunctionTest.java
@@ -280,17 +280,19 @@
   @Test
   public void testRegisteredToolchainsValue_equalsAndHashCode() {
     DeclaredToolchainInfo toolchain1 =
-        DeclaredToolchainInfo.create(
-            ToolchainTypeInfo.create(makeLabel("//test:toolchain")),
-            ImmutableList.of(),
-            ImmutableList.of(),
-            makeLabel("//test/toolchain_impl_1"));
+        DeclaredToolchainInfo.builder()
+            .toolchainType(ToolchainTypeInfo.create(makeLabel("//test:toolchain")))
+            .addExecConstraints(ImmutableList.of())
+            .addTargetConstraints(ImmutableList.of())
+            .toolchainLabel(makeLabel("//test/toolchain_impl_1"))
+            .build();
     DeclaredToolchainInfo toolchain2 =
-        DeclaredToolchainInfo.create(
-            ToolchainTypeInfo.create(makeLabel("//test:toolchain")),
-            ImmutableList.of(),
-            ImmutableList.of(),
-            makeLabel("//test/toolchain_impl_2"));
+        DeclaredToolchainInfo.builder()
+            .toolchainType(ToolchainTypeInfo.create(makeLabel("//test:toolchain")))
+            .addExecConstraints(ImmutableList.of())
+            .addTargetConstraints(ImmutableList.of())
+            .toolchainLabel(makeLabel("//test/toolchain_impl_2"))
+            .build();
 
     new EqualsTester()
         .addEqualityGroup(
