Fold {Unix,Windows}JniLoader into JniLoader.
Now that we have routed all JNI load requests via a single JniLoader entry
point, we can simplify dependencies and project structure by merging the two
separate UnixJniLoader and WindowsJniLoader into JniLoader.
PiperOrigin-RevId: 335069961
diff --git a/src/main/java/com/google/devtools/build/lib/jni/BUILD b/src/main/java/com/google/devtools/build/lib/jni/BUILD
index 00e0bc6..898c598 100644
--- a/src/main/java/com/google/devtools/build/lib/jni/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/jni/BUILD
@@ -15,10 +15,13 @@
java_library(
name = "jni",
srcs = ["JniLoader.java"],
+ data = [
+ "//src/main/native:target-os-unix-native-lib",
+ "//src/main/native/windows:target-os-native-lib",
+ ],
deps = [
- "//src/main/java/com/google/devtools/build/lib/unix/jni",
"//src/main/java/com/google/devtools/build/lib/util:os",
- "//src/main/java/com/google/devtools/build/lib/windows/jni:jni-loader",
"//third_party:flogger",
+ "@bazel_tools//tools/java/runfiles",
],
)
diff --git a/src/main/java/com/google/devtools/build/lib/jni/JniLoader.java b/src/main/java/com/google/devtools/build/lib/jni/JniLoader.java
index dfc8f38..f806116 100644
--- a/src/main/java/com/google/devtools/build/lib/jni/JniLoader.java
+++ b/src/main/java/com/google/devtools/build/lib/jni/JniLoader.java
@@ -15,9 +15,9 @@
package com.google.devtools.build.lib.jni;
import com.google.common.flogger.GoogleLogger;
-import com.google.devtools.build.lib.unix.jni.UnixJniLoader;
import com.google.devtools.build.lib.util.OS;
-import com.google.devtools.build.lib.windows.jni.WindowsJniLoader;
+import com.google.devtools.build.runfiles.Runfiles;
+import java.io.IOException;
/** Generic code to interact with the platform-specific JNI code bundle. */
public final class JniLoader {
@@ -35,10 +35,10 @@
case OPENBSD:
case UNKNOWN:
case DARWIN:
- UnixJniLoader.loadJni();
+ System.loadLibrary("unix_jni");
break;
case WINDOWS:
- WindowsJniLoader.loadJni();
+ loadWindowsJni();
break;
default:
throw new AssertionError("switch statement out of sync with OS values");
@@ -51,6 +51,28 @@
JNI_AVAILABLE = jniAvailable;
}
+ private static void loadWindowsJni() {
+ try {
+ System.loadLibrary("windows_jni");
+ } catch (UnsatisfiedLinkError ex) {
+ Runfiles runfiles;
+ try {
+ runfiles = Runfiles.create();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+
+ String rloc = runfiles.rlocation("io_bazel/src/main/native/windows/windows_jni.dll");
+ if (rloc == null) {
+ rloc = runfiles.rlocation("bazel_tools/src/main/native/windows/windows_jni.dll");
+ if (rloc == null) {
+ throw ex;
+ }
+ }
+ System.load(rloc);
+ }
+ }
+
protected JniLoader() {}
/**
diff --git a/src/main/java/com/google/devtools/build/lib/unix/BUILD b/src/main/java/com/google/devtools/build/lib/unix/BUILD
index 7b1aac6..11a1b71 100644
--- a/src/main/java/com/google/devtools/build/lib/unix/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/unix/BUILD
@@ -6,9 +6,7 @@
filegroup(
name = "srcs",
- srcs = glob(["*"]) + [
- "//src/main/java/com/google/devtools/build/lib/unix/jni:srcs",
- ],
+ srcs = glob(["*"]),
visibility = ["//src:__subpackages__"],
)
diff --git a/src/main/java/com/google/devtools/build/lib/unix/jni/BUILD b/src/main/java/com/google/devtools/build/lib/unix/jni/BUILD
deleted file mode 100644
index 1b9cda8..0000000
--- a/src/main/java/com/google/devtools/build/lib/unix/jni/BUILD
+++ /dev/null
@@ -1,23 +0,0 @@
-load("@rules_java//java:defs.bzl", "java_library")
-
-package(default_visibility = ["//src:__subpackages__"])
-
-filegroup(
- name = "srcs",
- srcs = glob(["*"]),
- visibility = ["//src/main/java/com/google/devtools/build/lib/unix:__pkg__"],
-)
-
-# Java interfaces to various native UNIX system services.
-#
-# All programs that depend on libraries in this package will have
-# JNI (native code) dependencies.
-java_library(
- name = "jni",
- srcs = [
- "UnixJniLoader.java",
- ],
- data = [
- "//src/main/native:target-os-unix-native-lib",
- ],
-)
diff --git a/src/main/java/com/google/devtools/build/lib/unix/jni/UnixJniLoader.java b/src/main/java/com/google/devtools/build/lib/unix/jni/UnixJniLoader.java
deleted file mode 100644
index 9d84464..0000000
--- a/src/main/java/com/google/devtools/build/lib/unix/jni/UnixJniLoader.java
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2014 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.unix.jni;
-
-/**
- * A class to load JNI dependencies for Bazel.
- */
-public class UnixJniLoader {
- public static void loadJni() {
- System.loadLibrary("unix");
- }
-}
diff --git a/src/main/java/com/google/devtools/build/lib/windows/jni/BUILD b/src/main/java/com/google/devtools/build/lib/windows/jni/BUILD
index 584ac85..ec0dd43 100644
--- a/src/main/java/com/google/devtools/build/lib/windows/jni/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/windows/jni/BUILD
@@ -4,8 +4,9 @@
filegroup(
name = "srcs",
+ testonly = 0,
srcs = glob(["**"]),
- visibility = ["//src/main/java/com/google/devtools/build/lib:__pkg__"],
+ visibility = ["//src:__subpackages__"],
)
package_group(
@@ -31,10 +32,6 @@
java_library(
name = "jni",
- visibility = [
- ":bazel-prod",
- ":bazel-tests",
- ],
exports = [
":file",
":processes",
@@ -44,24 +41,11 @@
java_library(
name = "file",
srcs = ["WindowsFileOperations.java"],
- visibility = [":android-junctions-prod"],
deps = ["//src/main/java/com/google/devtools/build/lib/jni"],
)
java_library(
name = "processes",
srcs = ["WindowsProcesses.java"],
- visibility = [":bazel-prod"],
deps = ["//src/main/java/com/google/devtools/build/lib/jni"],
)
-
-# Java interfaces to various native Windows system services.
-#
-# All programs that depend on libraries in this package will have
-# JNI (native code) dependencies.
-java_library(
- name = "jni-loader",
- srcs = ["WindowsJniLoader.java"],
- data = ["//src/main/native/windows:target-os-native-lib"],
- deps = ["@bazel_tools//tools/java/runfiles"],
-)
diff --git a/src/main/java/com/google/devtools/build/lib/windows/jni/WindowsJniLoader.java b/src/main/java/com/google/devtools/build/lib/windows/jni/WindowsJniLoader.java
deleted file mode 100644
index 839fbd0..0000000
--- a/src/main/java/com/google/devtools/build/lib/windows/jni/WindowsJniLoader.java
+++ /dev/null
@@ -1,50 +0,0 @@
-// Copyright 2016 The Bazel Authors. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.devtools.build.lib.windows.jni;
-
-import com.google.devtools.build.runfiles.Runfiles;
-import java.io.IOException;
-
-/** Loads native code under Windows. */
-public class WindowsJniLoader {
- private static boolean jniLoaded = false;
-
- public static synchronized void loadJni() {
- if (jniLoaded) {
- return;
- }
-
- try {
- System.loadLibrary("windows_jni");
- } catch (UnsatisfiedLinkError ex) {
- Runfiles runfiles = null;
- try {
- runfiles = Runfiles.create();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
-
- String rloc = runfiles.rlocation("io_bazel/src/main/native/windows/windows_jni.dll");
- if (rloc == null) {
- rloc = runfiles.rlocation("bazel_tools/src/main/native/windows/windows_jni.dll");
- if (rloc == null) {
- throw ex;
- }
- }
- System.load(rloc);
- }
- jniLoaded = true;
- }
-}
diff --git a/src/main/native/BUILD b/src/main/native/BUILD
index fbde175..7b26ae5 100644
--- a/src/main/native/BUILD
+++ b/src/main/native/BUILD
@@ -52,7 +52,7 @@
)
cc_binary(
- name = "libunix.so",
+ name = "libunix_jni.so",
srcs = [
"macros.h",
"process.cc",
@@ -86,8 +86,8 @@
# library extensions. This is issue #914.
genrule(
name = "mac-compat",
- srcs = ["libunix.so"],
- outs = ["libunix.dylib"],
+ srcs = ["libunix_jni.so"],
+ outs = ["libunix_jni.dylib"],
cmd = "cp $< $@",
output_to_bindir = 1,
# :target-os-unix-native-lib should be used outside of this package
@@ -99,14 +99,14 @@
filegroup(
name = "target-os-unix-native-lib",
srcs = select({
- "//src/conditions:darwin": ["//src/main/native:libunix.dylib"],
- "//src/conditions:darwin_x86_64": ["//src/main/native:libunix.dylib"],
+ "//src/conditions:darwin": [":libunix_jni.dylib"],
+ "//src/conditions:darwin_x86_64": [":libunix_jni.dylib"],
"//src/conditions:windows": [],
- "//conditions:default": ["//src/main/native:libunix.so"],
+ "//conditions:default": [":libunix_jni.so"],
}),
visibility = [
"//src:__pkg__",
- "//src/main/java/com/google/devtools/build/lib/unix/jni:__pkg__",
+ "//src/main/java/com/google/devtools/build/lib/jni:__pkg__",
],
)
diff --git a/src/main/native/windows/BUILD b/src/main/native/windows/BUILD
index 410792b..bffb0a0 100644
--- a/src/main/native/windows/BUILD
+++ b/src/main/native/windows/BUILD
@@ -82,7 +82,7 @@
}),
visibility = [
"//src:__pkg__",
- "//src/main/java/com/google/devtools/build/lib/windows/jni:__pkg__",
+ "//src/main/java/com/google/devtools/build/lib/jni:__pkg__",
],
)