diff options
author | tomlu <tomlu@google.com> | 2018-04-27 16:05:29 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-04-27 16:07:14 -0700 |
commit | e793335d5f36f1728ff8445d59fbb49a2526cf84 (patch) | |
tree | 44d10b8859fccc9b95bbb98c47c2960e4b657878 /src/main/java/com | |
parent | 52356e76a02067e9dc79b469e9b97bd017d077ab (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
Diffstat (limited to 'src/main/java/com')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java | 51 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java | 20 |
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"); |