aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar Googler <noreply@google.com>2017-04-10 18:38:08 +0000
committerGravatar Jakob Buchgraber <buchgr@google.com>2017-04-11 10:50:13 +0200
commita704e0bdea8877ce0c4e65400d14418153507407 (patch)
tree84c56a7113a55b4a46692765d0e6b0d9f5cb2405 /src/main
parent010b1fcf5d3b805d268adc33c9abb5ee2c466bbf (diff)
Added an optional option --j2objc_dead_code_report
--j2objc_dead_cdoe_report accepts a label that can generate a dead code report as argument. If specified, Blaze should pass "--dead-code-report path/to/dead/code/report" to J2ObjC. RELNOTES: None. PiperOrigin-RevId: 152712841
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcAspect.java22
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcCommandLineOptions.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcConfiguration.java12
3 files changed, 44 insertions, 0 deletions
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 7ad3ccdb23..4b22b03fca 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
@@ -108,6 +108,14 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF
protected static final ImmutableList<String> J2OBJC_PLUGIN_PARAMS =
ImmutableList.of("file_dir_mapping", "generate_class_mappings");
+ private static final LateBoundLabel<BuildConfiguration> DEAD_CODE_REPORT =
+ new LateBoundLabel<BuildConfiguration>(J2ObjcConfiguration.class) {
+ @Override
+ public Label resolve(Rule rule, AttributeMap attributes, BuildConfiguration configuration) {
+ return configuration.getFragment(J2ObjcConfiguration.class).deadCodeReport().orNull();
+ }
+ };
+
private static final LateBoundLabel<BuildConfiguration> JRE_LIB =
new LateBoundLabel<BuildConfiguration>(JRE_CORE_LIB, J2ObjcConfiguration.class) {
@Override
@@ -186,6 +194,10 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF
.value(
Label.parseAbsoluteUnchecked(
toolsRepository + "//third_party/java/j2objc:jre_emul.jar")))
+ .add(
+ attr(":dead_code_report", LABEL)
+ .cfg(HOST)
+ .value(DEAD_CODE_REPORT))
.add(attr(":jre_lib", LABEL).value(JRE_LIB))
.add(
attr("$protobuf_lib", LABEL)
@@ -542,6 +554,11 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF
Artifact bootclasspathJar = ruleContext.getPrerequisiteArtifact("$jre_emul_jar", Mode.HOST);
argBuilder.add("-Xbootclasspath:" + bootclasspathJar.getExecPathString());
+ Artifact deadCodeReport = ruleContext.getPrerequisiteArtifact(":dead_code_report", Mode.HOST);
+ if (deadCodeReport != null) {
+ argBuilder.addExecPath("--dead-code-report", deadCodeReport);
+ }
+
argBuilder.add("-d").addPath(j2ObjcSource.getObjcFilePath());
NestedSet<Artifact> compileTimeJars =
@@ -580,6 +597,11 @@ public class J2ObjcAspect extends NativeAspectClass implements ConfiguredAspectF
.addOutputs(j2ObjcSource.getObjcHdrs())
.addOutput(outputDependencyMappingFile)
.addOutput(archiveSourceMappingFile);
+
+ if (deadCodeReport != null) {
+ transpilationAction.addInput(deadCodeReport);
+ }
+
if (!experimentalJ2ObjcHeaderMap) {
transpilationAction.addOutput(outputHeaderMappingFile);
}
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcCommandLineOptions.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcCommandLineOptions.java
index 4c6a42c67a..14d513627b 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcCommandLineOptions.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcCommandLineOptions.java
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.rules.objc;
import com.google.common.collect.Multimap;
+import com.google.devtools.build.lib.analysis.config.BuildConfiguration.LabelConverter;
import com.google.devtools.build.lib.analysis.config.FragmentOptions;
import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.common.options.Converters;
@@ -44,6 +45,15 @@ public class J2ObjcCommandLineOptions extends FragmentOptions {
)
public boolean removeDeadCode;
+ @Option(name = "j2objc_dead_code_report",
+ defaultValue = "null",
+ category = "undocumented",
+ converter = LabelConverter.class,
+ help = "Allows J2ObjC to strip dead code reported by ProGuard. Takes a label that can "
+ + "generate a dead code report as argument."
+ )
+ public Label deadCodeReport;
+
@Option(name = "explicit_jre_deps",
defaultValue = "true",
category = "flags",
diff --git a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcConfiguration.java b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcConfiguration.java
index 0253f6e386..b03de747b3 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcConfiguration.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/objc/J2ObjcConfiguration.java
@@ -15,6 +15,7 @@
package com.google.devtools.build.lib.rules.objc;
import com.google.common.base.Joiner;
+import com.google.common.base.Optional;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration.Fragment;
@@ -22,6 +23,7 @@ import com.google.devtools.build.lib.analysis.config.BuildOptions;
import com.google.devtools.build.lib.analysis.config.ConfigurationEnvironment;
import com.google.devtools.build.lib.analysis.config.ConfigurationFragmentFactory;
import com.google.devtools.build.lib.analysis.config.FragmentOptions;
+import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
@@ -88,11 +90,13 @@ public class J2ObjcConfiguration extends Fragment {
private final boolean removeDeadCode;
private final boolean explicitJreDeps;
private final boolean experimentalJ2ObjcHeaderMap;
+ private final Optional<Label> deadCodeReport;
J2ObjcConfiguration(J2ObjcCommandLineOptions j2ObjcOptions) {
this.removeDeadCode = j2ObjcOptions.removeDeadCode;
this.explicitJreDeps = j2ObjcOptions.explicitJreDeps;
this.experimentalJ2ObjcHeaderMap = j2ObjcOptions.experimentalJ2ObjcHeaderMap;
+ this.deadCodeReport = Optional.fromNullable(j2ObjcOptions.deadCodeReport);
this.translationFlags = ImmutableList.<String>builder()
.addAll(J2OBJC_DEFAULT_TRANSLATION_FLAGS)
.addAll(j2ObjcOptions.translationFlags)
@@ -112,6 +116,14 @@ public class J2ObjcConfiguration extends Fragment {
}
/**
+ * Returns the label of the dead code report generated by ProGuard for J2ObjC to eliminate dead
+ * code. The dead Java code in the report will not be translated to Objective-C code.
+ */
+ public Optional<Label> deadCodeReport() {
+ return deadCodeReport;
+ }
+
+ /**
* Returns whether to perform J2ObjC dead code removal. If true, the list of entry classes will be
* collected transitively throuh "entry_classes" attribute on j2objc_library and used as entry
* points to perform dead code analysis. Unused classes will then be removed from the final ObjC