From 3624f95078c7c0ec8349bddd50fdaf4e9ab51e49 Mon Sep 17 00:00:00 2001 From: Patrick Rohr Date: Fri, 4 Nov 2022 14:30:18 -0700 Subject: [PATCH 1/3] gn2bp: be explicit about dropping java_group dependencies This is a no-op that makes the code more readable. Test: //net:net Change-Id: I8c026cd2f7cd3d676223d4c05a49376140791e21 --- tools/gn2bp/gn_utils.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tools/gn2bp/gn_utils.py b/tools/gn2bp/gn_utils.py index d706bd8844..5a84622a21 100644 --- a/tools/gn2bp/gn_utils.py +++ b/tools/gn2bp/gn_utils.py @@ -291,6 +291,11 @@ class GnParser(object): target.deps.add(dep_name) elif dep.type in LINKER_UNIT_TYPES: target.deps.add(dep_name) + elif dep.type == 'java_group': + # Explicitly break dependency chain when a java_group is added. + # Java sources are collected and eventually compiled as one large + # java_library. + pass return target From b27587ec54a1d91e7385cfac66512f289e19f505 Mon Sep 17 00:00:00 2001 From: Patrick Rohr Date: Fri, 4 Nov 2022 14:57:24 -0700 Subject: [PATCH 2/3] gn2bp: collect java sources The current plan is to write a lightweight wrapper around Cronet that serves as the Android API surface. If that holds true, we might get away with putting all .java sources in a single jar. Otherwise, the API will have to be put in a separate source jar. Test: //net:net Change-Id: I2bef893ebdf0a4390dfb634e715c60ccd94dc1fb --- tools/gn2bp/gn_utils.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tools/gn2bp/gn_utils.py b/tools/gn2bp/gn_utils.py index 5a84622a21..1aa352e049 100644 --- a/tools/gn2bp/gn_utils.py +++ b/tools/gn2bp/gn_utils.py @@ -170,6 +170,7 @@ class GnParser(object): self.source_sets = {} self.actions = {} self.proto_libs = {} + self.java_sources = set() def _get_response_file_contents(self, action_desc): # response_file_contents are formatted as: @@ -297,6 +298,18 @@ class GnParser(object): # java_library. pass + # Collect java sources. Java sources are kept inside the __compile_java target. + # This target can be used for both host and target compilation; only add + # the sources if they are destined for the target (i.e. they are a + # dependency of the __dex target) + # Note: this skips prebuilt java dependencies. These will have to be + # added manually when building the jar. + if re.match('.*__dex$', target.name): + if re.match('.*__compile_java$', dep.name): + log.debug('Adding java sources for %s', dep.name) + java_srcs = [src for src in dep.inputs if os.path.splitext(src)[1] == '.java'] + self.java_sources.update(java_srcs) + return target def get_proto_exports(self, proto_desc): From b18aca2f6692665408336abc20f6eedb39370ab4 Mon Sep 17 00:00:00 2001 From: Patrick Rohr Date: Fri, 4 Nov 2022 15:07:32 -0700 Subject: [PATCH 3/3] gn2bp: create single java library from all sources Test: //net:net Change-Id: I545be996692a1d5d7efb3f844c0e5e211ec989aa --- tools/gn2bp/Android.bp.swp | 28 ++++++++++++++++++++++++++++ tools/gn2bp/gen_android_bp | 7 +++++++ 2 files changed, 35 insertions(+) diff --git a/tools/gn2bp/Android.bp.swp b/tools/gn2bp/Android.bp.swp index 4a7cf21ff6..92ae832c5b 100644 --- a/tools/gn2bp/Android.bp.swp +++ b/tools/gn2bp/Android.bp.swp @@ -1861,6 +1861,34 @@ filegroup { name: "cronet_aml_ipc_param_traits", } +// GN: //gn:java +java_library { + name: "cronet_aml_java", + srcs: [ + "//base/android/java/src/org/chromium/base/JniException.java", + "//base/android/java/src/org/chromium/base/JniStaticTestMocker.java", + "//base/android/java/src/org/chromium/base/NativeLibraryLoadedStatus.java", + "//base/android/java/src/org/chromium/base/annotations/AccessedByNative.java", + "//base/android/java/src/org/chromium/base/annotations/CalledByNative.java", + "//base/android/java/src/org/chromium/base/annotations/CalledByNativeForTesting.java", + "//base/android/java/src/org/chromium/base/annotations/CalledByNativeUnchecked.java", + "//base/android/java/src/org/chromium/base/annotations/JNIAdditionalImport.java", + "//base/android/java/src/org/chromium/base/annotations/JNINamespace.java", + "//base/android/java/src/org/chromium/base/annotations/JniIgnoreNatives.java", + "//base/android/java/src/org/chromium/base/annotations/NativeClassQualifiedName.java", + "//base/android/java/src/org/chromium/base/annotations/NativeMethods.java", + "//build/android/java/src/org/chromium/build/annotations/AlwaysInline.java", + "//build/android/java/src/org/chromium/build/annotations/CheckDiscard.java", + "//build/android/java/src/org/chromium/build/annotations/DoNotClassMerge.java", + "//build/android/java/src/org/chromium/build/annotations/DoNotInline.java", + "//build/android/java/src/org/chromium/build/annotations/IdentifierNameString.java", + "//build/android/java/src/org/chromium/build/annotations/MainDex.java", + "//build/android/java/src/org/chromium/build/annotations/MockedInTests.java", + "//build/android/java/src/org/chromium/build/annotations/UsedByReflection.java", + "//url/android/java/src/org/chromium/url/IDNStringUtil.java", + ], +} + // GN: //net/base/registry_controlled_domains:registry_controlled_domains genrule { name: "cronet_aml_net_base_registry_controlled_domains_registry_controlled_domains", diff --git a/tools/gn2bp/gen_android_bp b/tools/gn2bp/gen_android_bp index f157b22afd..be9c3bae79 100755 --- a/tools/gn2bp/gen_android_bp +++ b/tools/gn2bp/gen_android_bp @@ -1131,6 +1131,11 @@ def create_modules_from_target(blueprint, gn, gn_target_name): return module +def create_java_module(blueprint, gn): + bp_module_name = module_prefix + 'java' + module = Module('java_library', bp_module_name, '//gn:java') + module.srcs.update(gn.java_sources) + blueprint.add_module(module) def create_blueprint_for_targets(gn, desc, targets): """Generate a blueprint for a list of GN targets.""" @@ -1153,6 +1158,8 @@ def create_blueprint_for_targets(gn, desc, targets): for target in targets: create_modules_from_target(blueprint, gn, target) + + create_java_module(blueprint, gn) return blueprint