Skip to content

Commit 08b7628

Browse files
committed
Bug 1947505 - Merge the generate_sdk_bindings and generate_sdk_bindings gradle tasks, r=nalexander,geckoview-reviewers,owlish.
Differential Revision: https://phabricator.services.mozilla.com/D237756
1 parent ac80010 commit 08b7628

File tree

6 files changed

+59
-119
lines changed

6 files changed

+59
-119
lines changed

mobile/android/annotations/src/main/java/org/mozilla/gecko/annotationProcessors/SDKProcessor.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -540,6 +540,8 @@ private static void writeOutputFiles(
540540
StringBuilder aHeaderFile,
541541
StringBuilder aImplementationFile) {
542542
FileOutputStream implStream = null;
543+
File f = new File(aOutputDir);
544+
f.mkdirs(); // Shouldn't throw. If it fails, we'll error out just below.
543545
try {
544546
implStream = new FileOutputStream(new File(aOutputDir, aPrefix + ".cpp"));
545547
implStream.write(aImplementationFile.toString().getBytes());

mobile/android/gradle.py

Lines changed: 18 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -24,43 +24,29 @@ def gradle_lock(topobjdir, max_wait_seconds=600):
2424
yield
2525

2626

27-
def android(verb, *args):
27+
def main(dummy_output_file, *args):
2828
env = dict(os.environ)
29-
should_print_status = env.get("MACH") and not env.get("NO_BUILDSTATUS_MESSAGES")
30-
if should_print_status:
31-
print("BUILDSTATUS " + str(time.time()) + " START_GradleAcquireLock " + verb)
3229
import buildconfig
3330

34-
with gradle_lock(buildconfig.topobjdir):
35-
if should_print_status:
36-
print("BUILDSTATUS " + str(time.time()) + " END_GradleAcquireLock " + verb)
37-
38-
cmd = [
39-
sys.executable,
40-
mozpath.join(buildconfig.topsrcdir, "mach"),
41-
"android",
42-
verb,
43-
]
44-
cmd.extend(args)
45-
# Confusingly, `MACH` is set only within `mach build`.
46-
if env.get("MACH"):
47-
env["GRADLE_INVOKED_WITHIN_MACH_BUILD"] = "1"
48-
if env.get("LD_LIBRARY_PATH"):
49-
del env["LD_LIBRARY_PATH"]
31+
cmd = [
32+
sys.executable,
33+
mozpath.join(buildconfig.topsrcdir, "mach"),
34+
"android",
35+
"export",
36+
]
37+
cmd.extend(args)
38+
# Confusingly, `MACH` is set only within `mach build`.
39+
if env.get("MACH"):
40+
env["GRADLE_INVOKED_WITHIN_MACH_BUILD"] = "1"
41+
if env.get("LD_LIBRARY_PATH"):
42+
del env["LD_LIBRARY_PATH"]
5043

51-
if should_print_status:
52-
print("BUILDSTATUS " + str(time.time()) + " START_Gradle " + verb)
44+
should_print_status = env.get("MACH") and not env.get("NO_BUILDSTATUS_MESSAGES")
45+
if should_print_status:
46+
print("BUILDSTATUS " + str(time.time()) + " START_Gradle export")
5347

54-
subprocess.check_call(cmd, env=env)
48+
subprocess.check_call(cmd, env=env)
5549

5650
if should_print_status:
57-
print("BUILDSTATUS " + str(time.time()) + " END_Gradle " + verb)
51+
print("BUILDSTATUS " + str(time.time()) + " END_Gradle export")
5852
return 0
59-
60-
61-
def generate_sdk_bindings(dummy_output_file, *args):
62-
return android("generate-sdk-bindings", *args)
63-
64-
65-
def generate_generated_jni_wrappers(dummy_output_file, *args):
66-
return android("generate-generated-jni-wrappers", *args)

mobile/android/gradle/with_gecko_binaries.gradle

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,19 +39,23 @@ ext.configureLibraryVariantWithJNIWrappers = { variant, module ->
3939

4040
def annotationProcessorsJarTask = project(':annotations').jar
4141

42+
def classpathFilesProvider = variant.javaCompileProvider.flatMap { javaCompileTask ->
43+
project.provider { javaCompileTask.classpath.files }
44+
}
45+
4246
def wrapperTask
4347
if (System.env.IS_LANGUAGE_REPACK == '1') {
4448
// Single-locale l10n repacks set `IS_LANGUAGE_REPACK=1` and don't
4549
// really have a build environment.
4650
wrapperTask = task("generateJNIWrappersFor${module}${variant.name.capitalize()}")
4751
} else {
48-
wrapperTask = task("generateJNIWrappersFor${module}${variant.name.capitalize()}", type: JavaExec) {
52+
wrapperTask = tasks.register("generateJNIWrappersFor${module}${variant.name.capitalize()}", JavaExec) {
4953
classpath annotationProcessorsJarTask.archiveFile
5054

5155
// Configure the classpath at evaluation-time, not at
5256
// configuration-time: see above comment.
5357
doFirst {
54-
classpath variant.javaCompileProvider.get().classpath.files
58+
classpath classpathFilesProvider.get()
5559
}
5660

5761
mainClass = 'org.mozilla.gecko.annotationProcessors.AnnotationProcessor'
@@ -72,10 +76,4 @@ ext.configureLibraryVariantWithJNIWrappers = { variant, module ->
7276
dependsOn annotationProcessorsJarTask
7377
}
7478
}
75-
76-
if (module == 'Generated') {
77-
tasks["bundle${variant.name.capitalize()}Aar"].dependsOn wrapperTask
78-
} else {
79-
tasks["assemble${variant.name.capitalize()}"].dependsOn wrapperTask
80-
}
8179
}

mobile/android/mach_commands.py

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,16 @@ def android(command_context):
4848

4949
@SubCommand(
5050
"android",
51-
"generate-sdk-bindings",
52-
"""Generate SDK bindings used when building GeckoView.""",
51+
"export",
52+
"""Generate SDK bindings and GeckoView JNI wrappers used when building GeckoView.""",
5353
)
5454
@CommandArgument(
5555
"inputs",
5656
nargs="+",
5757
help="config files, like [/path/to/ClassName-classes.txt]+",
5858
)
5959
@CommandArgument("args", nargs=argparse.REMAINDER)
60-
def android_generate_sdk_bindings(command_context, inputs, args):
60+
def export(command_context, inputs, args):
6161
import itertools
6262

6363
def stem(input):
@@ -67,27 +67,11 @@ def stem(input):
6767
bindings_inputs = list(itertools.chain(*((input, stem(input)) for input in inputs)))
6868
bindings_args = "-Pgenerate_sdk_bindings_args={}".format(";".join(bindings_inputs))
6969

70-
ret = gradle(
71-
command_context,
72-
command_context.substs["GRADLE_ANDROID_GENERATE_SDK_BINDINGS_TASKS"]
73-
+ [bindings_args]
74-
+ args,
75-
verbose=True,
76-
)
77-
78-
return ret
79-
80-
81-
@SubCommand(
82-
"android",
83-
"generate-generated-jni-wrappers",
84-
"""Generate GeckoView JNI wrappers used when building GeckoView.""",
85-
)
86-
@CommandArgument("args", nargs=argparse.REMAINDER)
87-
def android_generate_generated_jni_wrappers(command_context, args):
8870
ret = gradle(
8971
command_context,
9072
command_context.substs["GRADLE_ANDROID_GENERATE_GENERATED_JNI_WRAPPERS_TASKS"]
73+
+ command_context.substs["GRADLE_ANDROID_GENERATE_SDK_BINDINGS_TASKS"]
74+
+ [bindings_args]
9175
+ args,
9276
verbose=True,
9377
)

widget/android/bindings/moz.build

Lines changed: 0 additions & 55 deletions
This file was deleted.

widget/android/moz.build

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ with Files("*CompositorWidget*"):
1212
BUG_COMPONENT = ("Core", "Graphics")
1313

1414
DIRS += [
15-
"bindings",
1615
"jni",
1716
]
1817

@@ -158,22 +157,48 @@ XPCOM_MANIFESTS += [
158157

159158
include("/ipc/chromium/chromium-config.mozbuild")
160159

160+
# List of stems to generate .cpp and .h files for. To add a stem, add it to
161+
# this list and ensure that $(stem)-classes.txt exists in `bindings/`.
162+
generated_bindings = [
163+
"AccessibilityEvent",
164+
"AndroidBuild",
165+
"AndroidDragEvent",
166+
"AndroidGraphics",
167+
"AndroidInputType",
168+
"AndroidProcess",
169+
"AndroidRect",
170+
"InetAddress",
171+
"JavaBuiltins",
172+
"JavaExceptions",
173+
"KeyEvent",
174+
"MediaCodec",
175+
"MotionEvent",
176+
"SurfaceTexture",
177+
"ViewConfiguration",
178+
]
179+
180+
SOURCES += ["!bindings/%s.cpp" % stem for stem in generated_bindings]
181+
182+
EXPORTS += ["!bindings/%s.h" % stem for stem in generated_bindings]
183+
161184
# The recursive make backend treats the first output specially: it's passed as
162185
# an open FileAvoidWrite to the invoked script. That doesn't work well with
163186
# the Gradle task that generates all of the outputs, so we add a dummy first
164187
# output.
165188

166189
t = tuple(
167-
["generated_jni_wrappers"]
190+
["generated_geckoview_files"]
168191
+ natives_from_WrapForJNI
169192
+ sources_from_WrapForJNI
170193
+ wrappers_from_WrapForJNI
194+
+ ["bindings/%s.cpp" % stem for stem in generated_bindings]
195+
+ ["bindings/%s.h" % stem for stem in generated_bindings]
171196
)
172197

173198
GeneratedFile(
174199
*t,
175200
script="/mobile/android/gradle.py",
176-
entry_point="generate_generated_jni_wrappers"
201+
inputs=["bindings/%s-classes.txt" % stem for stem in generated_bindings]
177202
)
178203

179204
FINAL_LIBRARY = "xul"

0 commit comments

Comments
 (0)