aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar tomlu <tomlu@google.com>2018-04-27 16:05:29 -0700
committerGravatar Copybara-Service <copybara-piper@google.com>2018-04-27 16:07:14 -0700
commite793335d5f36f1728ff8445d59fbb49a2526cf84 (patch)
tree44d10b8859fccc9b95bbb98c47c2960e4b657878
parent52356e76a02067e9dc79b469e9b97bd017d077ab (diff)
Change action construction to use built-in param file support.
We want to be able to control how and when param files are used, and manual construction of param files prevents this. It should also be less code overall. For this CL, when param files are used is unchanged, their format and encoding is unchanged. The flag name is also unchanged, except in some cases it was changed from (eg.) "--flagfile foo" to "--flagfile=foo". However, the name of the param file is now derived from the primary output of the action (instead of manually controlled). RELNOTES: None PiperOrigin-RevId: 194607698
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java51
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java20
2 files changed, 25 insertions, 46 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 6faaa1958a..e79c118830 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
@@ -59,6 +59,7 @@ import com.google.common.collect.Streams;
import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.CommandLine;
+import com.google.devtools.build.lib.actions.ParamFileInfo;
import com.google.devtools.build.lib.actions.ParameterFile;
import com.google.devtools.build.lib.analysis.AnalysisEnvironment;
import com.google.devtools.build.lib.analysis.FilesToRunProvider;
@@ -121,7 +122,6 @@ import com.google.devtools.build.lib.rules.objc.ObjcProvider.Flag;
import com.google.devtools.build.lib.rules.objc.ObjcVariablesExtension.VariableCategory;
import com.google.devtools.build.lib.util.FileTypeSet;
import com.google.devtools.build.lib.util.Pair;
-import com.google.devtools.build.lib.vfs.FileSystemUtils;
import com.google.devtools.build.lib.vfs.PathFragment;
import java.util.ArrayList;
import java.util.Arrays;
@@ -1152,13 +1152,13 @@ public class CompilationSupport {
CppHelper.getFdoSupportUsingDefaultCcToolchainAttribute(ruleContext);
CppLinkActionBuilder executableLinkAction =
new CppLinkActionBuilder(
- ruleContext,
- binaryToLink,
- toolchain,
- fdoSupport,
- getFeatureConfiguration(ruleContext, toolchain, buildConfiguration, objcProvider),
- createObjcCppSemantics(
- objcProvider, /* privateHdrs= */ ImmutableList.of(), /* pchHdr= */ null))
+ ruleContext,
+ binaryToLink,
+ toolchain,
+ fdoSupport,
+ getFeatureConfiguration(ruleContext, toolchain, buildConfiguration, objcProvider),
+ createObjcCppSemantics(
+ objcProvider, /* privateHdrs= */ ImmutableList.of(), /* pchHdr= */ null))
.setMnemonic("ObjcLink")
.addActionInputs(bazelBuiltLibraries)
.addActionInputs(objcProvider.getCcLibraries())
@@ -1319,13 +1319,13 @@ public class CompilationSupport {
.build();
CppLinkAction fullyLinkAction =
new CppLinkActionBuilder(
- ruleContext,
- outputArchive,
- ccToolchain,
- fdoSupport,
- getFeatureConfiguration(ruleContext, ccToolchain, buildConfiguration, objcProvider),
- createObjcCppSemantics(
- objcProvider, /* privateHdrs= */ ImmutableList.of(), /* pchHdr= */ null))
+ ruleContext,
+ outputArchive,
+ ccToolchain,
+ fdoSupport,
+ getFeatureConfiguration(ruleContext, ccToolchain, buildConfiguration, objcProvider),
+ createObjcCppSemantics(
+ objcProvider, /* privateHdrs= */ ImmutableList.of(), /* pchHdr= */ null))
.addActionInputs(objcProvider.getObjcLibraries())
.addActionInputs(objcProvider.getCcLibraries())
.addActionInputs(objcProvider.get(IMPORTED_LIBRARY).toSet())
@@ -1478,13 +1478,6 @@ public class CompilationSupport {
j2ObjcMappingFileProvider.getArchiveSourceMappingFiles();
for (Artifact j2objcArchive : objcProvider.get(ObjcProvider.J2OBJC_LIBRARY)) {
- PathFragment paramFilePath =
- FileSystemUtils.replaceExtension(
- j2objcArchive.getOwner().toPathFragment(), ".param.j2objc");
- Artifact paramFile =
- ruleContext.getUniqueDirectoryArtifact(
- "_j2objc_pruned", paramFilePath,
- buildConfiguration.getBinDirectory(ruleContext.getRule().getRepository()));
Artifact prunedJ2ObjcArchive = intermediateArtifacts.j2objcPrunedArchive(j2objcArchive);
Artifact dummyArchive =
Iterables.getOnlyElement(
@@ -1511,13 +1504,6 @@ public class CompilationSupport {
.build();
ruleContext.registerAction(
- new ParameterFileWriteAction(
- ruleContext.getActionOwner(),
- paramFile,
- commandLine,
- ParameterFile.ParameterFileType.UNQUOTED,
- ISO_8859_1));
- ruleContext.registerAction(
ObjcRuleClasses.spawnAppleEnvActionBuilder(
XcodeConfigProvider.fromRuleContext(ruleContext),
appleConfiguration.getSingleArchPlatform())
@@ -1525,14 +1511,17 @@ public class CompilationSupport {
.setExecutable(pruner)
.addInput(dummyArchive)
.addInput(pruner)
- .addInput(paramFile)
.addInput(j2objcArchive)
.addInput(xcrunwrapper(ruleContext).getExecutable())
.addTransitiveInputs(j2ObjcDependencyMappingFiles)
.addTransitiveInputs(j2ObjcHeaderMappingFiles)
.addTransitiveInputs(j2ObjcArchiveSourceMappingFiles)
.addCommandLine(
- CustomCommandLine.builder().addFormatted("@%s", paramFile.getExecPath()).build())
+ commandLine,
+ ParamFileInfo.builder(ParameterFile.ParameterFileType.UNQUOTED)
+ .setCharset(ISO_8859_1)
+ .setUseAlways(true)
+ .build())
.addOutput(prunedJ2ObjcArchive)
.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 4c4b926af5..c5d974cdb1 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
@@ -36,7 +36,6 @@ import com.google.devtools.build.lib.analysis.RuleDefinitionEnvironment;
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.CustomCommandLine.VectorArg;
-import com.google.devtools.build.lib.analysis.actions.ParameterFileWriteAction;
import com.google.devtools.build.lib.analysis.actions.SpawnAction;
import com.google.devtools.build.lib.analysis.config.ConfigAwareAspectBuilder;
import com.google.devtools.build.lib.analysis.config.HostTransition;
@@ -540,14 +539,6 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF
argBuilder.addExecPaths(ImmutableList.copyOf(sources));
- Artifact paramFile = j2ObjcOutputParamFile(ruleContext);
- ruleContext.registerAction(new ParameterFileWriteAction(
- ruleContext.getActionOwner(),
- paramFile,
- argBuilder.build(),
- ParameterFile.ParameterFileType.UNQUOTED,
- ISO_8859_1));
-
SpawnAction.Builder transpilationAction =
new SpawnAction.Builder()
.setMnemonic("TranspilingJ2objc")
@@ -561,9 +552,12 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF
.addTransitiveInputs(JavaRuntimeInfo.forHost(ruleContext).javaBaseInputsMiddleman())
.addTransitiveInputs(depsHeaderMappingFiles)
.addTransitiveInputs(depsClassMappingFiles)
- .addInput(paramFile)
.addCommandLine(
- CustomCommandLine.builder().addFormatted("@%s", paramFile.getExecPath()).build())
+ argBuilder.build(),
+ ParamFileInfo.builder(ParameterFile.ParameterFileType.UNQUOTED)
+ .setCharset(ISO_8859_1)
+ .setUseAlways(true)
+ .build())
.addOutputs(j2ObjcSource.getObjcSrcs())
.addOutputs(j2ObjcSource.getObjcHdrs())
.addOutput(outputDependencyMappingFile)
@@ -690,10 +684,6 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF
return ObjcRuleClasses.artifactByAppendingToBaseName(ruleContext, ".dependency_mapping.j2objc");
}
- private static Artifact j2ObjcOutputParamFile(RuleContext ruleContext) {
- return ObjcRuleClasses.artifactByAppendingToBaseName(ruleContext, ".param.j2objc");
- }
-
private static Artifact j2ObjcOutputArchiveSourceMappingFile(RuleContext ruleContext) {
return ObjcRuleClasses.artifactByAppendingToBaseName(
ruleContext, ".archive_source_mapping.j2objc");