diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/CompilationSupport.java | 32 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java | 19 |
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"); |