diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/rules')
15 files changed, 162 insertions, 126 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java index a77e25094c..3f8e47fc48 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidLocalTestBase.java @@ -240,12 +240,14 @@ public abstract class AndroidLocalTestBase implements RuleConfiguredTargetFactor CustomCommandLine.Builder cmdLineArgs = CustomCommandLine.builder(); if (!transitiveAars.isEmpty()) { - cmdLineArgs.addJoinValues( - "--android_libraries", ",", transitiveAars, AndroidLocalTestBase::aarCmdLineArg); + cmdLineArgs + .add("--android_libraries") + .addJoinValues(",", transitiveAars, AndroidLocalTestBase::aarCmdLineArg); } if (!strictAars.isEmpty()) { - cmdLineArgs.addJoinValues( - "--strict_libraries", ",", strictAars, AndroidLocalTestBase::aarCmdLineArg); + cmdLineArgs + .add("--strict_libraries") + .addJoinValues(",", strictAars, AndroidLocalTestBase::aarCmdLineArg); } RunfilesSupport runfilesSupport = RunfilesSupport.withExecutable( diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java index fd827b6962..4589c93dd1 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidResourcesProcessorBuilder.java @@ -427,16 +427,16 @@ public class AndroidResourcesProcessorBuilder { } ImmutableList<String> filteredResources = resourceFilter.getFilteredResources(); if (!filteredResources.isEmpty()) { - builder.addJoinStrings("--prefilteredResources", ",", filteredResources); + builder.add("--prefilteredResources").addJoinStrings(",", filteredResources); } if (!uncompressedExtensions.isEmpty()) { - builder.addJoinStrings("--uncompressedExtensions", ",", uncompressedExtensions); + builder.add("--uncompressedExtensions").addJoinStrings(",", uncompressedExtensions); } if (!crunchPng) { builder.add("--useAaptCruncher=no"); } if (!assetsToIgnore.isEmpty()) { - builder.addJoinStrings("--assetsToIgnore", ",", assetsToIgnore); + builder.add("--assetsToIgnore").addJoinStrings(",", assetsToIgnore); } if (debug) { builder.add("--debug"); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java index e4baef192a..52cab02505 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/LibraryRGeneratorActionBuilder.java @@ -13,7 +13,6 @@ // limitations under the License. package com.google.devtools.build.lib.rules.android; -import com.google.common.base.Function; import com.google.common.base.Strings; import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableList; @@ -29,10 +28,6 @@ import com.google.devtools.build.lib.collect.nestedset.Order; /** Builder for the action that generates the R class for libraries. */ public class LibraryRGeneratorActionBuilder { - static final Function<ResourceContainer, Artifact> TO_SYMBOL_ARTIFACT = - ResourceContainer::getSymbols; - static final Function<ResourceContainer, String> TO_SYMBOL_PATH = - (ResourceContainer container) -> container.getSymbols().getExecPathString(); private String javaPackage; private Iterable<ResourceContainer> deps = ImmutableList.<ResourceContainer>of(); @@ -74,20 +69,26 @@ public class LibraryRGeneratorActionBuilder { builder.add("--packageForR").add(javaPackage); } - FluentIterable<ResourceContainer> symbolProviders = - FluentIterable.from(deps).append(resourceContainer); - - builder.addJoinStrings( - "--symbols", - ruleContext.getConfiguration().getHostPathSeparator(), - symbolProviders.transform(TO_SYMBOL_PATH)); - inputs.addTransitive( - NestedSetBuilder.wrap( - Order.NAIVE_LINK_ORDER, symbolProviders.transform(TO_SYMBOL_ARTIFACT))); - - builder.addExecPath("--classJarOutput", rJavaClassJar); + // Memory consumption consideration: normally we'd not convert this FluentIterable to a list, to + // keep a potentially quadratic memory usage linear. However, since `symbolProviders` is wrapped + // in a NestedSet a few lines below, and NestedSetBuilder.wrap calls ImmutableList.copyOf on its + // argument, we're not using extra memory. + ImmutableList<Artifact> symbolProviders = + FluentIterable.from(deps) + .append(resourceContainer) + .transform(ResourceContainer::getSymbols) + .toList(); + + if (!symbolProviders.isEmpty()) { + builder + .add("--symbols") + .addJoinExecPaths(ruleContext.getConfiguration().getHostPathSeparator(), symbolProviders); + } + inputs.addTransitive(NestedSetBuilder.wrap(Order.NAIVE_LINK_ORDER, symbolProviders)); - builder.addExecPath("--androidJar", sdk.getAndroidJar()); + builder + .addExecPath("--classJarOutput", rJavaClassJar) + .addExecPath("--androidJar", sdk.getAndroidJar()); inputs.add(sdk.getAndroidJar()); // Create the spawn action. diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java index 12215da639..3cbb11b841 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/RClassGeneratorActionBuilder.java @@ -101,8 +101,9 @@ public class RClassGeneratorActionBuilder { // TODO(corysmith): Remove NestedSet as we are already flattening it. Iterable<ResourceContainer> depResources = dependencies.getResources(); if (depResources.iterator().hasNext()) { - builder.addJoinStrings( - "--libraries", ",", Iterables.transform(depResources, chooseDepsToArg(version))); + builder + .add("--libraries") + .addJoinStrings(",", Iterables.transform(depResources, chooseDepsToArg(version))); inputs.addTransitive( NestedSetBuilder.wrap( Order.NAIVE_LINK_ORDER, diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java index 98393b2045..e980b9995f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceContainerConverter.java @@ -240,12 +240,14 @@ public class ResourceContainerConverter { if (dependencies != null) { if (!dependencies.getTransitiveResources().isEmpty()) { - cmdBuilder.addJoinValues( - "--data", toArg.listSeparator(), dependencies.getTransitiveResources(), toArg); + cmdBuilder + .add("--data") + .addJoinValues(toArg.listSeparator(), dependencies.getTransitiveResources(), toArg); } if (!dependencies.getDirectResources().isEmpty()) { - cmdBuilder.addJoinValues( - "--directData", toArg.listSeparator(), dependencies.getDirectResources(), toArg); + cmdBuilder + .add("--directData") + .addJoinValues(toArg.listSeparator(), dependencies.getDirectResources(), toArg); } // This flattens the nested set. Since each ResourceContainer needs to be transformed into // Artifacts, and the NestedSetBuilder.wrap doesn't support lazy Iterator evaluation diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java index 60d414ddc4..ef077eb5dc 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/ResourceShrinkerActionBuilder.java @@ -165,10 +165,10 @@ public class ResourceShrinkerActionBuilder { inputs.add(sdk.getAndroidJar()); if (!uncompressedExtensions.isEmpty()) { - commandLine.addJoinStrings("--uncompressedExtensions", ",", uncompressedExtensions); + commandLine.add("--uncompressedExtensions").addJoinStrings(",", uncompressedExtensions); } if (!assetsToIgnore.isEmpty()) { - commandLine.addJoinStrings("--assetsToIgnore", ",", assetsToIgnore); + commandLine.add("--assetsToIgnore").addJoinStrings(",", assetsToIgnore); } if (ruleContext.getConfiguration().getCompilationMode() != CompilationMode.OPT) { commandLine.add("--debug"); @@ -201,14 +201,18 @@ public class ResourceShrinkerActionBuilder { inputs.add(primaryResources.getManifest()); List<Artifact> dependencyManifests = getManifests(dependencyResources); - commandLine.addJoinExecPaths( - "--dependencyManifests", - ruleContext.getConfiguration().getHostPathSeparator(), - dependencyManifests); + if (!dependencyManifests.isEmpty()) { + commandLine + .add("--dependencyManifests") + .addJoinExecPaths( + ruleContext.getConfiguration().getHostPathSeparator(), dependencyManifests); + } inputs.addAll(dependencyManifests); List<String> resourcePackages = getResourcePackages(primaryResources, dependencyResources); - commandLine.addJoinStrings("--resourcePackages", ",", resourcePackages); + if (!resourcePackages.isEmpty()) { + commandLine.add("--resourcePackages").addJoinStrings(",", resourcePackages); + } commandLine.addExecPath("--shrunkResourceApk", resourceApkOut); outputs.add(resourceApkOut); diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/RobolectricResourceSymbolsActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/android/RobolectricResourceSymbolsActionBuilder.java index 20fe4104fd..23b52fd94a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/android/RobolectricResourceSymbolsActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/android/RobolectricResourceSymbolsActionBuilder.java @@ -84,11 +84,12 @@ public class RobolectricResourceSymbolsActionBuilder { inputs.add(sdk.getAndroidJar()); if (!Iterables.isEmpty(dependencies.getResources())) { - builder.addJoinValues( - "--data", - RESOURCE_CONTAINER_TO_ARG.listSeparator(), - dependencies.getResources(), - RESOURCE_CONTAINER_TO_ARG); + builder + .add("--data") + .addJoinValues( + RESOURCE_CONTAINER_TO_ARG.listSeparator(), + dependencies.getResources(), + RESOURCE_CONTAINER_TO_ARG); } // This flattens the nested set. diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java index 5aa4340af5..b87666a527 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/DeployArchiveBuilder.java @@ -176,13 +176,11 @@ public class DeployArchiveBuilder { } args.add("--normalize"); if (javaMainClass != null) { - args.add("--main_class"); - args.add(javaMainClass); + args.add("--main_class").add(javaMainClass); } if (!deployManifestLines.isEmpty()) { - args.add("--deploy_manifest_lines"); - args.add(deployManifestLines); + args.add("--deploy_manifest_lines").add(deployManifestLines); } if (buildInfoFiles != null) { @@ -194,12 +192,15 @@ public class DeployArchiveBuilder { args.add("--exclude_build_data"); } if (launcher != null) { - args.add("--java_launcher"); - args.add(launcher.getExecPathString()); + args.add("--java_launcher").add(launcher.getExecPathString()); } - args.addExecPaths("--classpath_resources", classpathResources); - args.addExecPaths("--sources", runtimeClasspath); + if (!classpathResources.isEmpty()) { + args.add("--classpath_resources").addExecPaths(classpathResources); + } + if (!Iterables.isEmpty(runtimeClasspath)) { + args.add("--sources").addExecPaths(runtimeClasspath); + } return args; } diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java index b45cb28a0e..0fbe097fcf 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaCompileAction.java @@ -429,8 +429,8 @@ public final class JavaCompileAction extends SpawnAction { CustomCommandLine.builder().addPath(javaExecutable).add(javaBuilderJvmFlags); if (!instrumentationJars.isEmpty()) { builder + .add("-cp") .addJoinExecPaths( - "-cp", pathDelimiter, Iterables.concat(instrumentationJars, ImmutableList.of(javaBuilderJar))) .add(javaBuilderMainClass); @@ -679,35 +679,34 @@ public final class JavaCompileAction extends SpawnAction { result.addExecPath("--output_deps_proto", outputDepsProto); } if (!extdirInputs.isEmpty()) { - result.addExecPaths("--extclasspath", extdirInputs); + result.add("--extclasspath").addExecPaths(extdirInputs); } if (!bootclasspathEntries.isEmpty()) { - result.addExecPaths("--bootclasspath", bootclasspathEntries); + result.add("--bootclasspath").addExecPaths(bootclasspathEntries); } if (!sourcePathEntries.isEmpty()) { - result.addExecPaths("--sourcepath", sourcePathEntries); + result.add("--sourcepath").addExecPaths(sourcePathEntries); } if (!processorPath.isEmpty()) { - result.addExecPaths("--processorpath", processorPath); + result.add("--processorpath").addExecPaths(processorPath); } if (!processorNames.isEmpty()) { - result.add("--processors", processorNames); + result.add("--processors").add(processorNames); } if (!processorFlags.isEmpty()) { - result.add("--javacopts", processorFlags); + result.add("--javacopts").add(processorFlags); } if (!sourceJars.isEmpty()) { - result.addExecPaths("--source_jars", sourceJars); + result.add("--source_jars").addExecPaths(sourceJars); } if (!sourceFiles.isEmpty()) { - result.addExecPaths("--sources", sourceFiles); + result.add("--sources").addExecPaths(sourceFiles); } if (!javacOpts.isEmpty()) { - result.add("--javacopts", javacOpts); + result.add("--javacopts").add(javacOpts); } if (ruleKind != null) { - result.add("--rule_kind"); - result.add(ruleKind); + result.add("--rule_kind").add(ruleKind); } if (targetLabel != null) { result.add("--target_label"); @@ -725,34 +724,37 @@ public final class JavaCompileAction extends SpawnAction { } if (!classpathEntries.isEmpty()) { - result.addExecPaths("--classpath", classpathEntries); + result.add("--classpath").addExecPaths(classpathEntries); } // strict_java_deps controls whether the mapping from jars to targets is // written out and whether we try to minimize the compile-time classpath. if (strictJavaDeps != BuildConfiguration.StrictDepsMode.OFF) { - result.add("--strict_java_deps"); - result.add(strictJavaDeps.toString()); - result.add(new JarsToTargetsArgv(classpathEntries, directJars)); + result + .add("--strict_java_deps") + .add(strictJavaDeps.toString()) + .add(new JarsToTargetsArgv(classpathEntries, directJars)); if (configuration.getFragment(JavaConfiguration.class).getReduceJavaClasspath() == JavaClasspathMode.JAVABUILDER) { result.add("--reduce_classpath"); if (!compileTimeDependencyArtifacts.isEmpty()) { - result.addExecPaths("--deps_artifacts", compileTimeDependencyArtifacts); + result.add("--deps_artifacts").addExecPaths(compileTimeDependencyArtifacts); } } } if (metadata != null) { - result.add("--post_processor"); - result.addExecPath(JACOCO_INSTRUMENTATION_PROCESSOR, metadata); - result.addPath( - configuration - .getCoverageMetadataDirectory(targetLabel.getPackageIdentifier().getRepository()) - .getExecPath()); - result.add("-*Test"); - result.add("-*TestCase"); + result + .add("--post_processor") + .addExecPath(JACOCO_INSTRUMENTATION_PROCESSOR, metadata) + .addPath( + configuration + .getCoverageMetadataDirectory( + targetLabel.getPackageIdentifier().getRepository()) + .getExecPath()) + .add("-*Test") + .add("-*TestCase"); } return result.build(); } @@ -960,7 +962,7 @@ public final class JavaCompileAction extends SpawnAction { this.targetLabel = targetLabel; return this; } - + public Builder setTestOnly(boolean testOnly) { this.testOnly = testOnly; return this; diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java index 1bd31013bc..046149453f 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/JavaHeaderCompileAction.java @@ -23,6 +23,7 @@ import com.google.common.base.Joiner; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Action; import com.google.devtools.build.lib.actions.ActionExecutionContext; import com.google.devtools.build.lib.actions.ActionInput; @@ -502,19 +503,24 @@ public class JavaHeaderCompileAction extends SpawnAction { result.add("--temp_dir").addPath(tempDirectory); - result.addExecPaths("--bootclasspath", bootclasspathEntries); + if (!Iterables.isEmpty(bootclasspathEntries)) { + result.add("--bootclasspath").addExecPaths(bootclasspathEntries); + } - result.addExecPaths("--sources", sourceFiles); + if (!sourceFiles.isEmpty()) { + result.add("--sources").addExecPaths(sourceFiles); + } if (!sourceJars.isEmpty()) { - result.addExecPaths("--source_jars", sourceJars); + result.add("--source_jars").addExecPaths(sourceJars); } - result.add("--javacopts", javacOpts); + if (!javacOpts.isEmpty()) { + result.add("--javacopts").add(javacOpts); + } if (ruleKind != null) { - result.add("--rule_kind"); - result.add(ruleKind); + result.add("--rule_kind").add(ruleKind); } if (targetLabel != null) { result.add("--target_label"); @@ -527,7 +533,9 @@ public class JavaHeaderCompileAction extends SpawnAction { result.add("@" + targetLabel); } } - result.addExecPaths("--classpath", classpathEntries); + if (!classpathEntries.isEmpty()) { + result.add("--classpath").addExecPaths(classpathEntries); + } return result; } @@ -536,18 +544,18 @@ public class JavaHeaderCompileAction extends SpawnAction { CustomCommandLine.Builder result = CustomCommandLine.builder(); baseCommandLine(result, classpathEntries); if (!processorNames.isEmpty()) { - result.add("--processors", processorNames); + result.add("--processors").add(processorNames); } if (!processorFlags.isEmpty()) { - result.add("--javacopts", processorFlags); + result.add("--javacopts").add(processorFlags); } if (!processorPath.isEmpty()) { - result.addExecPaths("--processorpath", processorPath); + result.add("--processorpath").addExecPaths(processorPath); } if (strictJavaDeps != BuildConfiguration.StrictDepsMode.OFF) { result.add(new JavaCompileAction.JarsToTargetsArgv(classpathEntries, directJars)); if (!compileTimeDependencyArtifacts.isEmpty()) { - result.addExecPaths("--deps_artifacts", compileTimeDependencyArtifacts); + result.add("--deps_artifacts").addExecPaths(compileTimeDependencyArtifacts); } } return result.build(); diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java index eaa06555fb..dbac08d772 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/ResourceJarActionBuilder.java @@ -106,7 +106,7 @@ public class ResourceJarActionBuilder { .add("--exclude_build_data") .addExecPath("--output", outputJar); if (!resourceJars.isEmpty()) { - command.addExecPaths("--sources", resourceJars); + command.add("--sources").addExecPaths(resourceJars); } if (!resources.isEmpty() || !messages.isEmpty()) { command.add("--resources"); @@ -119,7 +119,7 @@ public class ResourceJarActionBuilder { } } if (!classpathResources.isEmpty()) { - command.addExecPaths("--classpath_resources", classpathResources); + command.add("--classpath_resources").addExecPaths(classpathResources); } // TODO(b/37444705): remove this logic and always call useParameterFile once the bug is fixed // Most resource jar actions are very small and expanding the argument list for diff --git a/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java b/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java index 578f94b6e4..8d5b5caee7 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java +++ b/src/main/java/com/google/devtools/build/lib/rules/java/SingleJarActionBuilder.java @@ -14,6 +14,7 @@ package com.google.devtools.build.lib.rules.java; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; import com.google.devtools.build.lib.actions.Artifact; import com.google.devtools.build.lib.actions.ExecutionRequirements; import com.google.devtools.build.lib.actions.ParameterFile.ParameterFileType; @@ -94,7 +95,9 @@ public final class SingleJarActionBuilder { CustomCommandLine.Builder args = CustomCommandLine.builder(); args.addExecPath("--output", outputJar); args.add(SOURCE_JAR_COMMAND_LINE_ARGS); - args.addExecPaths("--sources", resourceJars); + if (!Iterables.isEmpty(resourceJars)) { + args.add("--sources").addExecPaths(resourceJars); + } if (!resources.isEmpty()) { args.add("--resources"); for (Map.Entry<PathFragment, Artifact> resource : resources.entrySet()) { 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 39ed3e564c..81126eab69 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 @@ -34,7 +34,6 @@ import static java.nio.charset.StandardCharsets.ISO_8859_1; import static java.util.stream.Collectors.toCollection; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Joiner; import com.google.common.base.Optional; import com.google.common.base.Preconditions; import com.google.common.base.Predicate; @@ -1099,25 +1098,34 @@ public abstract class CompilationSupport { .getPrerequisite("$dummy_lib", Mode.TARGET, ObjcProvider.class) .get(LIBRARY)); - CustomCommandLine commandLine = + CustomCommandLine.Builder commandLineBuilder = CustomCommandLine.builder() .addExecPath("--input_archive", j2objcArchive) .addExecPath("--output_archive", prunedJ2ObjcArchive) .addExecPath("--dummy_archive", dummyArchive) - .addExecPath("--xcrunwrapper", xcrunwrapper(ruleContext).getExecutable()) - .addJoinExecPaths("--dependency_mapping_files", ",", j2ObjcDependencyMappingFiles) - .addJoinExecPaths("--header_mapping_files", ",", j2ObjcHeaderMappingFiles) - .addJoinExecPaths( - "--archive_source_mapping_files", ",", j2ObjcArchiveSourceMappingFiles) - .add("--entry_classes") - .add(Joiner.on(",").join(entryClasses)) - .build(); + .addExecPath("--xcrunwrapper", xcrunwrapper(ruleContext).getExecutable()); + if (!j2ObjcDependencyMappingFiles.isEmpty()) { + commandLineBuilder + .add("--dependency_mapping_files") + .addJoinExecPaths(",", j2ObjcDependencyMappingFiles); + } + if (!j2ObjcHeaderMappingFiles.isEmpty()) { + commandLineBuilder + .add("--header_mapping_files") + .addJoinExecPaths(",", j2ObjcHeaderMappingFiles); + } + if (!j2ObjcArchiveSourceMappingFiles.isEmpty()) { + commandLineBuilder + .add("--archive_source_mapping_files") + .addJoinExecPaths(",", j2ObjcArchiveSourceMappingFiles); + } + commandLineBuilder.add("--entry_classes").addJoinStrings(",", entryClasses); ruleContext.registerAction( new ParameterFileWriteAction( ruleContext.getActionOwner(), paramFile, - commandLine, + commandLineBuilder.build(), ParameterFile.ParameterFileType.UNQUOTED, ISO_8859_1)); ruleContext.registerAction( @@ -1139,7 +1147,7 @@ public abstract class CompilationSupport { .build(ruleContext)); } } - + /** Returns archives arising from j2objc transpilation after dead code removal. */ protected Iterable<Artifact> computeAndStripPrunedJ2ObjcArchives( J2ObjcEntryClassProvider j2ObjcEntryClassProvider, @@ -1421,9 +1429,7 @@ public abstract class CompilationSupport { .add(appleConfiguration.getXcodeVersion().toStringWithMinimumComponents(2)) .add("--"); for (ObjcHeaderThinningInfo info : infos) { - cmdLine.addJoinPaths( - ":", - Lists.newArrayList(info.sourceFile.getExecPath(), info.headersListFile.getExecPath())); + cmdLine.addJoinExecPaths(":", ImmutableList.of(info.sourceFile, info.headersListFile)); builder.addInput(info.sourceFile).addOutput(info.headersListFile); } ruleContext.registerAction( 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 60a24514e0..f2cf27fe0b 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 @@ -492,8 +492,10 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF ImmutableList.Builder<Artifact> sourceJarOutputFiles = ImmutableList.builder(); if (!Iterables.isEmpty(sourceJars)) { sourceJarOutputFiles.addAll(sourceJarOutputs(ruleContext)); - argBuilder.addJoinExecPaths("--src_jars", ",", sourceJars); - argBuilder.add(sourceJarFlags(ruleContext)); + argBuilder + .add("--src_jars") + .addJoinExecPaths(",", sourceJars) + .add(sourceJarFlags(ruleContext)); } Iterable<String> translationFlags = ruleContext @@ -504,7 +506,7 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF NestedSet<Artifact> depsHeaderMappingFiles = depJ2ObjcMappingFileProvider.getHeaderMappingFiles(); if (!depsHeaderMappingFiles.isEmpty()) { - argBuilder.addJoinExecPaths("--header-mapping", ",", depsHeaderMappingFiles); + argBuilder.add("--header-mapping").addJoinExecPaths(",", depsHeaderMappingFiles); } boolean experimentalJ2ObjcHeaderMap = @@ -516,7 +518,7 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF NestedSet<Artifact> depsClassMappingFiles = depJ2ObjcMappingFileProvider.getClassMappingFiles(); if (!depsClassMappingFiles.isEmpty()) { - argBuilder.addJoinExecPaths("--mapping", ",", depsClassMappingFiles); + argBuilder.add("--mapping").addJoinExecPaths(",", depsClassMappingFiles); } Artifact archiveSourceMappingFile = j2ObjcOutputArchiveSourceMappingFile(ruleContext); @@ -538,7 +540,7 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF NestedSet<Artifact> compileTimeJars = compArgsProvider.getRecursiveJavaCompilationArgs().getCompileTimeJars(); if (!compileTimeJars.isEmpty()) { - argBuilder.addJoinExecPaths("-classpath", ":", compileTimeJars); + argBuilder.add("-classpath").addJoinExecPaths(":", compileTimeJars); } argBuilder.addExecPaths(sources); @@ -584,10 +586,10 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF if (experimentalJ2ObjcHeaderMap) { CustomCommandLine.Builder headerMapCommandLine = CustomCommandLine.builder(); if (!Iterables.isEmpty(sources)) { - headerMapCommandLine.addJoinExecPaths("--source_files", ",", sources); + headerMapCommandLine.add("--source_files").addJoinExecPaths(",", sources); } if (!Iterables.isEmpty(sourceJars)) { - headerMapCommandLine.addJoinExecPaths("--source_jars", ",", sourceJars); + headerMapCommandLine.add("--source_jars").addJoinExecPaths(",", sourceJars); } headerMapCommandLine.addExecPath("--output_mapping_file", outputHeaderMappingFile); ruleContext.registerAction(new SpawnAction.Builder() diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java b/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java index 41487ecc43..bad646175a 100644 --- a/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java +++ b/src/main/java/com/google/devtools/build/lib/rules/objc/LipoSupport.java @@ -29,7 +29,7 @@ import com.google.devtools.build.lib.rules.apple.ApplePlatform; */ public class LipoSupport { private final RuleContext ruleContext; - + public LipoSupport(RuleContext ruleContext) { this.ruleContext = ruleContext; } @@ -46,18 +46,21 @@ public class LipoSupport { public LipoSupport registerCombineArchitecturesAction( NestedSet<Artifact> inputBinaries, Artifact outputBinary, ApplePlatform platform) { if (inputBinaries.toList().size() > 1) { - ruleContext.registerAction(ObjcRuleClasses.spawnAppleEnvActionBuilder( - ruleContext.getFragment(AppleConfiguration.class), platform) - .setMnemonic("ObjcCombiningArchitectures") - .addTransitiveInputs(inputBinaries) - .addOutput(outputBinary) - .setExecutable(CompilationSupport.xcrunwrapper(ruleContext)) - .setCommandLine(CustomCommandLine.builder() - .add(ObjcRuleClasses.LIPO) - .addExecPaths("-create", inputBinaries) - .addExecPath("-o", outputBinary) - .build()) - .build(ruleContext)); + ruleContext.registerAction( + ObjcRuleClasses.spawnAppleEnvActionBuilder( + ruleContext.getFragment(AppleConfiguration.class), platform) + .setMnemonic("ObjcCombiningArchitectures") + .addTransitiveInputs(inputBinaries) + .addOutput(outputBinary) + .setExecutable(CompilationSupport.xcrunwrapper(ruleContext)) + .setCommandLine( + CustomCommandLine.builder() + .add(ObjcRuleClasses.LIPO) + .add("-create") + .addExecPaths(inputBinaries) + .addExecPath("-o", outputBinary) + .build()) + .build(ruleContext)); } else { ruleContext.registerAction(new SymlinkAction( ruleContext.getActionOwner(), |