Add --system flag to J2ObjcAspect.
RELNOTES: None
PiperOrigin-RevId: 242013414
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 7c097fd..dc08057 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
@@ -184,6 +184,12 @@
Label.parseAbsoluteUnchecked(
toolsRepository + "//third_party/java/j2objc:jre_emul.jar")))
.add(
+ attr("$jre_emul_module", LABEL)
+ .cfg(HostTransition.createFactory())
+ .value(
+ Label.parseAbsoluteUnchecked(
+ toolsRepository + "//third_party/java/j2objc:jre_emul_module")))
+ .add(
attr(":dead_code_report", LABEL)
.cfg(HostTransition.createFactory())
.value(DEAD_CODE_REPORT))
@@ -523,6 +529,16 @@
Artifact bootclasspathJar = ruleContext.getPrerequisiteArtifact("$jre_emul_jar", Mode.HOST);
argBuilder.addFormatted("-Xbootclasspath:%s", bootclasspathJar);
+ // A valid Java system module contains 3 files. The top directory contains a file "release".
+ ImmutableList<Artifact> moduleFiles =
+ ruleContext.getPrerequisiteArtifacts("$jre_emul_module", Mode.HOST).list();
+ for (Artifact a : moduleFiles) {
+ if (a.getFilename().equals("release")) {
+ argBuilder.add("--system", a.getDirname());
+ break;
+ }
+ }
+
Artifact deadCodeReport = ruleContext.getPrerequisiteArtifact(":dead_code_report", Mode.HOST);
if (deadCodeReport != null) {
argBuilder.addExecPath("--dead-code-report", deadCodeReport);
@@ -544,6 +560,7 @@
.addInput(ruleContext.getPrerequisiteArtifact("$j2objc_wrapper", Mode.HOST))
.addInput(j2ObjcDeployJar)
.addInput(bootclasspathJar)
+ .addInputs(moduleFiles)
.addInputs(sources)
.addInputs(sourceJars)
.addTransitiveInputs(compileTimeJars)
diff --git a/src/test/java/com/google/devtools/build/lib/packages/util/MockJ2ObjcSupport.java b/src/test/java/com/google/devtools/build/lib/packages/util/MockJ2ObjcSupport.java
index 54bb248..76370f1 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/util/MockJ2ObjcSupport.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/util/MockJ2ObjcSupport.java
@@ -26,6 +26,8 @@
*/
public static void setup(MockToolsConfig config) throws IOException {
config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "third_party/java/j2objc/jre_emul.jar");
+ config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "third_party/java/j2objc/mod/release");
+ config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "third_party/java/j2objc/mod/lib/mods");
config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "third_party/java/j2objc/jre.h");
config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "third_party/java/j2objc/jre.m");
config.create(TestConstants.TOOLS_REPOSITORY_SCRATCH + "third_party/java/j2objc/runtime.h");
@@ -39,6 +41,10 @@
"",
"exports_files(['jre_emul.jar'])",
"",
+ "filegroup(",
+ " name = 'jre_emul_module',",
+ " srcs = ['mod/release', 'mod/lib/mods'])",
+ "",
"objc_library(",
" name = 'jre_emul_lib',",
" hdrs = ['jre_emul.h'],",