Skip to content
This repository was archived by the owner on Oct 31, 2023. It is now read-only.

Commit 39a87f2

Browse files
committed
Enable shared object merging
1 parent fcef9bd commit 39a87f2

18 files changed

Lines changed: 475 additions & 8 deletions

File tree

apps/BUCK

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,24 @@
1-
android_binary(
1+
include_defs("//bucklets/DEFS")
2+
3+
my_android_binary(
24
name = "mammals",
35
manifest_skeleton = "mammals-app-manifest.xml",
46
keystore = ":debug_keystore",
7+
native_library_merge_map = {
8+
"libeverything.so": [".*"],
9+
},
510
deps = [
611
"//src/com/facebook/example/mammals/activity:activity",
712
],
813
)
914

10-
android_binary(
15+
my_android_binary(
1116
name = "animals",
1217
manifest_skeleton = "animals-app-manifest.xml",
1318
keystore = ":debug_keystore",
19+
native_library_merge_map = {
20+
"libeverything.so": [".*"],
21+
},
1422
deps = [
1523
"//src/com/facebook/example/animals:animals",
1624
],

bucklets/DEFS

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
def my_android_binary(**kwargs):
2+
if "native_library_merge_map" in kwargs:
3+
kwargs["native_library_merge_glue"] = "//src/com/facebook/jnimerge:glue"
4+
kwargs["native_library_merge_code_generator"] = "//src/com/facebook/jnimerge:code-generator"
5+
kwargs["native_library_merge_localized_symbols"] = [
6+
"__start_pre_merge_jni_libraries",
7+
"__stop_pre_merge_jni_libraries",
8+
]
9+
else:
10+
kwargs["deps"] = kwargs["deps"] + ["//src/com/facebook/soloader:mapping-stub"]
11+
android_binary(**kwargs)
12+
13+
14+
def my_cxx_library(**kwargs):
15+
if kwargs.pop("allow_jni_merging", None):
16+
if "soname" not in kwargs:
17+
raise Exception(
18+
"JNI merging currently requires an explicit soname, "
19+
"but %s doesn't have one."
20+
% kwargs["name"])
21+
kwargs["deps"] = kwargs.get("deps", []) + ["//src/com/facebook/jnimerge:jnimerge"]
22+
kwargs["platform_preprocessor_flags"] = \
23+
kwargs.get("platform_preprocessor_flags", []) + [
24+
(r'.*\bandroid\b.*', [
25+
'-DORIGINAL_SONAME="%s"' % kwargs["soname"].replace("$(ext)", "so"),
26+
"-include", "jni_lib_merge.h",
27+
])]
28+
kwargs["platform_linker_flags"] = kwargs.get("platform_linker_flags", []) + [
29+
(r'.*\bandroid\b.*', [
30+
"-Wl,--defsym=JNI_OnLoad=JNI_OnLoad_Weak",
31+
])]
32+
cxx_library(**kwargs)
33+

src/com/facebook/example/animals/BUCK

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ android_library(
66
"//src/com/facebook/example/animals/jni:jni",
77
"//src/com/facebook/example/habitat:habitat",
88
"//src/com/facebook/example/mammals:mammals",
9+
"//src/com/facebook/soloader:soloader",
910
],
1011
visibility = ["PUBLIC"],
1112
)

src/com/facebook/example/animals/Penguin.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,11 @@
1717
package com.facebook.example.animals;
1818

1919
import com.facebook.example.habitat.Ice;
20+
import com.facebook.soloader.SoLoader;
2021

2122
public class Penguin {
2223
static {
23-
System.loadLibrary("animals");
24+
SoLoader.loadLibrary("animals");
2425
}
2526

2627
public static String getDescription() {

src/com/facebook/example/animals/jni/BUCK

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
cxx_library(
1+
include_defs("//bucklets/DEFS")
2+
3+
my_cxx_library(
24
name = "jni",
35
soname = "libanimals.$(ext)",
6+
allow_jni_merging = True,
47
srcs = glob(["*.c"]),
58
visibility = [
69
"//src/com/facebook/example/animals:animals",

src/com/facebook/example/habitat/BUCK

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ java_library(
33
srcs = glob(["*.java"]),
44
deps = [
55
"//src/com/facebook/example/habitat/jni:jni",
6+
"//src/com/facebook/soloader:soloader",
67
],
78
visibility = ["PUBLIC"],
89
)

src/com/facebook/example/habitat/Ice.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616

1717
package com.facebook.example.habitat;
1818

19+
import com.facebook.soloader.SoLoader;
20+
1921
public class Ice {
2022
static {
21-
System.loadLibrary("habitat");
23+
SoLoader.loadLibrary("habitat");
2224
}
2325

2426
private static int dxWorkaround = 0;

src/com/facebook/example/habitat/jni/BUCK

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
cxx_library(
1+
include_defs("//bucklets/DEFS")
2+
3+
my_cxx_library(
24
name = "jni",
35
soname = "libhabitat.$(ext)",
6+
allow_jni_merging = True,
47
srcs = glob(["*.c"]),
58
visibility = [
69
"//src/com/facebook/example/habitat:habitat",

src/com/facebook/example/mammals/BUCK

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ java_library(
33
srcs = glob(["*.java"]),
44
deps = [
55
"//src/com/facebook/example/mammals/jni:jni",
6+
"//src/com/facebook/soloader:soloader",
67
],
78
visibility = ["PUBLIC"],
89
)

src/com/facebook/example/mammals/SeaLion.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@
1616

1717
package com.facebook.example.mammals;
1818

19+
import com.facebook.soloader.SoLoader;
20+
1921
public class SeaLion {
2022
static {
21-
System.loadLibrary("mammals");
23+
SoLoader.loadLibrary("mammals");
2224
}
2325

2426
public static String getDescription() {

0 commit comments

Comments
 (0)