diff --git a/BUCK b/BUCK index efac474f..79a9bfc8 100644 --- a/BUCK +++ b/BUCK @@ -32,6 +32,20 @@ cxx_library( ], ) +cxx_library( + name = "yogafastmath", + srcs = glob(["yoga/*.cpp"]), + header_namespace = "", + exported_headers = subdir_glob([("", "yoga/*.h")]), + compiler_flags = COMPILER_FLAGS + ["-ffast-math"], + soname = "libyogafastmathcore.$(ext)", + tests = [":YogaTests"], + visibility = ["PUBLIC"], + deps = [ + yoga_dep("lib/fb:ndklog"), + ], +) + cxx_test( name = "YogaTests", srcs = glob(["tests/*.cpp"]), diff --git a/java/BUCK b/java/BUCK index 45ce1959..568c1fc9 100644 --- a/java/BUCK +++ b/java/BUCK @@ -28,6 +28,29 @@ cxx_library( ], ) +cxx_library( + name = "jniFastMath", + srcs = glob(["jni/*.cpp"]), + header_namespace = "", + compiler_flags = [ + "-fno-omit-frame-pointer", + "-fexceptions", + "-fPIC", + "-Wall", + "-Werror", + "-O3", + "-std=c++11", + ], + platforms = ANDROID, + soname = "libyogafastmath.$(ext)", + visibility = ["PUBLIC"], + deps = [ + FBJNI_TARGET, + JNI_TARGET, + yoga_dep(":yogafastmath"), + ], +) + java_library( name = "java", srcs = glob(["com/facebook/yoga/*.java"]), @@ -40,6 +63,7 @@ java_library( visibility = ["PUBLIC"], deps = [ ":jni", + ":jniFastMath", INFER_ANNOTATIONS_TARGET, JSR_305_TARGET, PROGRUARD_ANNOTATIONS_TARGET, diff --git a/java/com/facebook/yoga/YogaConfig.java b/java/com/facebook/yoga/YogaConfig.java index 3741583b..e68c5121 100644 --- a/java/com/facebook/yoga/YogaConfig.java +++ b/java/com/facebook/yoga/YogaConfig.java @@ -16,7 +16,11 @@ public class YogaConfig { public static int SPACING_TYPE = 1; static { - SoLoader.loadLibrary("yoga"); + if (YogaConstants.shouldUseFastMath) { + SoLoader.loadLibrary("yogafastmath"); + } else { + SoLoader.loadLibrary("yoga"); + } } long mNativePointer; diff --git a/java/com/facebook/yoga/YogaConstants.java b/java/com/facebook/yoga/YogaConstants.java index e11c1044..cb9bc8ca 100644 --- a/java/com/facebook/yoga/YogaConstants.java +++ b/java/com/facebook/yoga/YogaConstants.java @@ -11,6 +11,8 @@ public class YogaConstants { public static final float UNDEFINED = Float.NaN; + public static boolean shouldUseFastMath = false; + public static boolean isUndefined(float value) { return Float.compare(value, UNDEFINED) == 0; } diff --git a/java/com/facebook/yoga/YogaNode.java b/java/com/facebook/yoga/YogaNode.java index 1ba81249..c1c65933 100644 --- a/java/com/facebook/yoga/YogaNode.java +++ b/java/com/facebook/yoga/YogaNode.java @@ -17,7 +17,11 @@ import javax.annotation.Nullable; public class YogaNode implements Cloneable { static { - SoLoader.loadLibrary("yoga"); + if (YogaConstants.shouldUseFastMath) { + SoLoader.loadLibrary("yogafastmath"); + } else { + SoLoader.loadLibrary("yoga"); + } } /**