aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build
diff options
context:
space:
mode:
authorGravatar Rumou Duan <rduan@google.com>2015-08-31 21:36:49 +0000
committerGravatar Kristina Chodorow <kchodorow@google.com>2015-09-01 00:20:08 +0000
commit747472cffc108b3e03cdf3c1cc8b7158b02fbbdf (patch)
tree7e5dfbf568c816b5b3ad79c225a3eb32d16d30ab /src/main/java/com/google/devtools/build
parentd23b7fbd47850ee7e8c9c5987eff328c0721d206 (diff)
Switch J2ObjC transpilation and dead code removal actions to use parameter files.
-- MOS_MIGRATED_REVID=101975830
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java32
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java19
2 files changed, 44 insertions, 7 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
index b26a702fa5..017519b28e 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java
@@ -38,6 +38,7 @@ import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.NON_ARC_S
import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.SRCS_TYPE;
import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.STRIP;
import static com.google.devtools.build.lib.rules.objc.ObjcRuleClasses.SWIFT;
+import static java.nio.charset.StandardCharsets.ISO_8859_1;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Joiner;
@@ -49,6 +50,7 @@ import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.actions.ParameterFile;
import com.google.devtools.build.lib.analysis.PrerequisiteArtifacts;
import com.google.devtools.build.lib.analysis.RuleConfiguredTarget.Mode;
import com.google.devtools.build.lib.analysis.RuleContext;
@@ -56,6 +58,7 @@ import com.google.devtools.build.lib.analysis.actions.ActionConstructionContext;
import com.google.devtools.build.lib.analysis.actions.CommandLine;
import com.google.devtools.build.lib.analysis.actions.CustomCommandLine;
import com.google.devtools.build.lib.analysis.actions.FileWriteAction;
+import com.google.devtools.build.lib.analysis.actions.ParameterFileWriteAction;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.packages.TargetUtils;
@@ -65,6 +68,7 @@ import com.google.devtools.build.lib.rules.java.J2ObjcConfiguration;
import com.google.devtools.build.lib.rules.objc.ObjcCommon.CompilationAttributes;
import com.google.devtools.build.lib.rules.objc.XcodeProvider.Builder;
import com.google.devtools.build.lib.shell.ShellUtils;
+import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
@@ -688,21 +692,37 @@ public final class CompilationSupport {
Iterable<Artifact> sourceArtifacts = j2ObjcSource.getObjcSrcs();
Iterable<Artifact> prunedSourceArtifacts =
j2ObjcSource.toPrunedSource(ruleContext).getObjcSrcs();
+ PathFragment paramFilePath = FileSystemUtils.replaceExtension(
+ j2ObjcSource.getTargetLabel().toPathFragment(), ".param.j2objc");
+ Artifact paramFile = ruleContext.getUniqueDirectoryArtifact(
+ "_j2objc_pruned",
+ paramFilePath,
+ ruleContext.getBinOrGenfilesDirectory());
PathFragment objcFilePath = j2ObjcSource.getObjcFilePath();
+ CustomCommandLine commandLine = CustomCommandLine.builder()
+ .addJoinExecPaths("--input_files", ",", sourceArtifacts)
+ .addJoinExecPaths("--output_files", ",", prunedSourceArtifacts)
+ .addJoinExecPaths("--dependency_mapping_files", ",", j2ObjcDependencyMappingFiles)
+ .addJoinExecPaths("--header_mapping_files", ",", j2ObjcHeaderMappingFiles)
+ .add("--entry_classes").add(Joiner.on(",").join(entryClasses))
+ .add("--objc_file_path").add(objcFilePath.getPathString())
+ .build();
+
+ ruleContext.registerAction(new ParameterFileWriteAction(
+ ruleContext.getActionOwner(),
+ paramFile,
+ commandLine,
+ ParameterFile.ParameterFileType.UNQUOTED, ISO_8859_1));
ruleContext.registerAction(new SpawnAction.Builder()
.setMnemonic("DummyPruner")
.setExecutable(pruner)
.addInput(pruner)
+ .addInput(paramFile)
.addInputs(sourceArtifacts)
.addTransitiveInputs(j2ObjcDependencyMappingFiles)
.addTransitiveInputs(j2ObjcHeaderMappingFiles)
.setCommandLine(CustomCommandLine.builder()
- .addJoinExecPaths("--input_files", ",", sourceArtifacts)
- .addJoinExecPaths("--output_files", ",", prunedSourceArtifacts)
- .addJoinExecPaths("--dependency_mapping_files", ",", j2ObjcDependencyMappingFiles)
- .addJoinExecPaths("--header_mapping_files", ",", j2ObjcHeaderMappingFiles)
- .add("--entry_classes").add(Joiner.on(",").join(entryClasses))
- .add("--objc_file_path").add(objcFilePath.getPathString())
+ .addPaths("@%s", paramFile.getExecPath())
.build())
.addOutputs(prunedSourceArtifacts)
.build(ruleContext));
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
index 669dc4eb4a..2a922eacde 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java
@@ -17,10 +17,12 @@ package com.google.devtools.build.lib.rules.objc;
import static com.google.devtools.build.lib.packages.Attribute.ConfigurationTransition.HOST;
import static com.google.devtools.build.lib.packages.Attribute.attr;
import static com.google.devtools.build.lib.packages.Type.LABEL;
+import static java.nio.charset.StandardCharsets.ISO_8859_1;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.actions.Artifact;
+import com.google.devtools.build.lib.actions.ParameterFile;
import com.google.devtools.build.lib.analysis.Aspect;
import com.google.devtools.build.lib.analysis.ConfiguredAspectFactory;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
@@ -28,6 +30,7 @@ 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.actions.CustomCommandLine;
+import com.google.devtools.build.lib.analysis.actions.ParameterFileWriteAction;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
@@ -203,6 +206,13 @@ public class J2ObjcAspect implements ConfiguredAspectFactory {
argBuilder.addExecPaths(sources);
+ Artifact paramFile = j2ObjcOutputParamFile(ruleContext);
+ ruleContext.registerAction(new ParameterFileWriteAction(
+ ruleContext.getActionOwner(),
+ paramFile,
+ argBuilder.build(),
+ ParameterFile.ParameterFileType.UNQUOTED, ISO_8859_1));
+
SpawnAction.Builder builder = new SpawnAction.Builder()
.setMnemonic("TranspilingJ2objc")
.setExecutable(ruleContext.getPrerequisiteArtifact("$j2objc_wrapper", Mode.HOST))
@@ -213,7 +223,10 @@ public class J2ObjcAspect implements ConfiguredAspectFactory {
.addInputs(JavaCompilationHelper.getHostJavabaseInputs(ruleContext))
.addTransitiveInputs(depsHeaderMappingFiles)
.addTransitiveInputs(depsClassMappingFiles)
- .setCommandLine(argBuilder.build())
+ .addInput(paramFile)
+ .setCommandLine(CustomCommandLine.builder()
+ .addPaths("@%s", paramFile.getExecPath())
+ .build())
.addOutputs(j2ObjcSource.getObjcSrcs())
.addOutputs(j2ObjcSource.getObjcHdrs())
.addOutput(outputHeaderMappingFile)
@@ -254,6 +267,10 @@ public class J2ObjcAspect implements ConfiguredAspectFactory {
return ObjcRuleClasses.artifactByAppendingToBaseName(ruleContext, ".dependency_mapping.j2objc");
}
+ private static Artifact j2ObjcOutputParamFile(RuleContext ruleContext) {
+ return ObjcRuleClasses.artifactByAppendingToBaseName(ruleContext, ".param.j2objc");
+ }
+
private J2ObjcSource buildJ2ObjcSource(RuleContext ruleContext,
Iterable<Artifact> javaInputSourceFiles) {
PathFragment objcFileRootRelativePath = ruleContext.getUniqueDirectory("_j2objc");