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__",
     ],
 )