diff --git a/java/BUCK b/java/BUCK index 14210ed1..87a44ad6 100644 --- a/java/BUCK +++ b/java/BUCK @@ -10,6 +10,7 @@ yoga_cxx_library( srcs = glob(["jni/*.cpp"]), headers = glob(["jni/*.h"]), header_namespace = "", + allow_jni_merging = True, compiler_flags = [ "-fno-omit-frame-pointer", "-fexceptions", diff --git a/java/com/facebook/yoga/YogaJNI.java b/java/com/facebook/yoga/YogaJNI.java index deccbcf5..fb013804 100644 --- a/java/com/facebook/yoga/YogaJNI.java +++ b/java/com/facebook/yoga/YogaJNI.java @@ -10,6 +10,7 @@ package com.facebook.yoga; import com.facebook.soloader.SoLoader; public class YogaJNI { + private static boolean isInitialized = false; // Known constants. 1-3 used in previous experiments. Do not reuse. public static int JNI_FAST_CALLS = 4; @@ -19,12 +20,13 @@ public class YogaJNI { private static native void jni_bindNativeMethods(boolean useFastCall); - static boolean init() { - if (SoLoader.loadLibrary("yoga")) { + static synchronized boolean init() { + if (!isInitialized) { + isInitialized = true; + SoLoader.loadLibrary("yoga"); jni_bindNativeMethods(useFastCall); return true; } - return false; } } diff --git a/tools/build_defs/oss/yoga_defs.bzl b/tools/build_defs/oss/yoga_defs.bzl index 6b3ac1d5..7eca7b9b 100644 --- a/tools/build_defs/oss/yoga_defs.bzl +++ b/tools/build_defs/oss/yoga_defs.bzl @@ -174,6 +174,8 @@ def yoga_cxx_binary(*args, **kwargs): def yoga_cxx_library(*args, **kwargs): # Currently unused kwargs.pop("platforms", None) + kwargs.pop("allow_jni_merging", None) + native.cxx_library(*args, **kwargs) def yoga_cxx_test(*args, **kwargs):