aboutsummaryrefslogtreecommitdiff
path: root/rules/sandboxed_sdk_toolbox.bzl
diff options
context:
space:
mode:
Diffstat (limited to 'rules/sandboxed_sdk_toolbox.bzl')
-rw-r--r--rules/sandboxed_sdk_toolbox.bzl172
1 files changed, 172 insertions, 0 deletions
diff --git a/rules/sandboxed_sdk_toolbox.bzl b/rules/sandboxed_sdk_toolbox.bzl
new file mode 100644
index 0000000..1c1a5dd
--- /dev/null
+++ b/rules/sandboxed_sdk_toolbox.bzl
@@ -0,0 +1,172 @@
+# Copyright 2023 The Bazel Authors. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""Bazel SandboxedSdkToolbox commands."""
+
+load(":java.bzl", _java = "java")
+
+def _extract_api_descriptors(
+ ctx,
+ output = None,
+ sdk_deploy_jar = None,
+ sandboxed_sdk_toolbox = None,
+ host_javabase = None):
+ """Extracts API descriptors from a sandboxed SDK classpath.
+
+ The API descriptors can later be used to generate sources for communicating with this SDK.
+
+ Args:
+ ctx: The context.
+ output: Output API descriptors jar file.
+ sdk_deploy_jar: The SDK classpath, with transitive dependencies.
+ sandboxed_sdk_toolbox: Toolbox executable files.
+ host_javabase: Javabase used to run the toolbox.
+ """
+ args = ctx.actions.args()
+ args.add("extract-api-descriptors")
+ args.add("--sdk-deploy-jar", sdk_deploy_jar)
+ args.add("--output-sdk-api-descriptors", output)
+ _java.run(
+ ctx = ctx,
+ host_javabase = host_javabase,
+ executable = sandboxed_sdk_toolbox,
+ arguments = [args],
+ inputs = [sdk_deploy_jar],
+ outputs = [output],
+ mnemonic = "ExtractApiDescriptors",
+ progress_message = "Extract SDK API descriptors %s" % output.short_path,
+ )
+
+def _extract_api_descriptors_from_asar(
+ ctx,
+ output = None,
+ asar = None,
+ sandboxed_sdk_toolbox = None,
+ host_javabase = None):
+ """Extracts API descriptors from a sandboxed SDK archive.
+
+ The API descriptors can later be used to generate sources for communicating with this SDK.
+
+ Args:
+ ctx: The context.
+ output: Output API descriptors jar file.
+ asar: The sandboxed sdk archive.
+ sandboxed_sdk_toolbox: Toolbox executable files.
+ host_javabase: Javabase used to run the toolbox.
+ """
+ args = ctx.actions.args()
+ args.add("extract-api-descriptors-from-asar")
+ args.add("--asar", asar)
+ args.add("--output-sdk-api-descriptors", output)
+ _java.run(
+ ctx = ctx,
+ host_javabase = host_javabase,
+ executable = sandboxed_sdk_toolbox,
+ arguments = [args],
+ inputs = [asar],
+ outputs = [output],
+ mnemonic = "ExtractApiDescriptorsFromAsar",
+ progress_message = "Extract SDK API descriptors from ASAR %s" % output.short_path,
+ )
+
+def _generate_client_sources(
+ ctx,
+ output_kotlin_dir = None,
+ output_java_dir = None,
+ sdk_api_descriptors = None,
+ aidl_compiler = None,
+ framework_aidl = None,
+ sandboxed_sdk_toolbox = None,
+ host_javabase = None):
+ """Generate Kotlin and Java sources for SDK communication.
+
+ Args:
+ ctx: The context.
+ output_kotlin_dir: Directory for Kotlin source tree. It depends on the Java sources.
+ output_java_dir: Directory for Java source tree. Doesn't depend on Kotlin sources.
+ sdk_api_descriptors: SDK API descriptor jar.
+ aidl_compiler: Executable files for the AOSP AIDL compiler.
+ framework_aidl: Framework.aidl file used to compile AIDL sources.
+ sandboxed_sdk_toolbox: Toolbox executable files.
+ host_javabase: Javabase used to run the toolbox.
+ """
+ args = ctx.actions.args()
+ args.add("generate-client-sources")
+ args.add("--sdk-api-descriptors", sdk_api_descriptors)
+ args.add("--aidl-compiler", aidl_compiler)
+ args.add("--framework-aidl", framework_aidl)
+ args.add("--output-kotlin-dir", output_kotlin_dir.path)
+ args.add("--output-java-dir", output_java_dir.path)
+ _java.run(
+ ctx = ctx,
+ host_javabase = host_javabase,
+ executable = sandboxed_sdk_toolbox,
+ arguments = [args],
+ inputs = [
+ sdk_api_descriptors,
+ aidl_compiler,
+ framework_aidl,
+ ],
+ outputs = [output_kotlin_dir, output_java_dir],
+ mnemonic = "GenClientSources",
+ progress_message = "Generate client sources for %s" % output_kotlin_dir.short_path,
+ )
+
+def _generate_sdk_dependencies_manifest(
+ ctx,
+ output = None,
+ manifest_package = None,
+ sdk_module_configs = None,
+ debug_key = None,
+ sandboxed_sdk_toolbox = None,
+ host_javabase = None):
+ """Generates a manifest that lists all sandboxed SDK dependencies.
+
+ The generated manifest will contain <uses-sdk-library> tags for each SDK. This is required for
+ loading the SDK in the Privacy Sandbox.
+
+ Args:
+ ctx: The context.
+ output: File where the final manifest will be written.
+ manifest_package: The package used in the manifest.
+ sdk_module_configs: List of SDK Module config JSON files with SDK packages and versions.
+ debug_key: Keystore that will later be used to sign the SDK APKs. It's expected to be a
+ sandboxed_sdk_toolbox: Toolbox executable files.
+ host_javabase: Javabase used to run the toolbox.
+ """
+ args = ctx.actions.args()
+ args.add("generate-sdk-dependencies-manifest")
+ args.add("--manifest-package", manifest_package)
+ args.add("--sdk-module-configs", ",".join([config.path for config in sdk_module_configs]))
+ args.add("--debug-keystore", debug_key)
+ args.add("--debug-keystore-pass", "android")
+ args.add("--debug-keystore-alias", "androiddebugkey")
+ args.add("--output-manifest", output)
+ _java.run(
+ ctx = ctx,
+ host_javabase = host_javabase,
+ executable = sandboxed_sdk_toolbox,
+ arguments = [args],
+ inputs = sdk_module_configs + [debug_key],
+ outputs = [output],
+ mnemonic = "GenSdkDepManifest",
+ progress_message = "Generate SDK dependencies manifest %s" % output.short_path,
+ )
+
+sandboxed_sdk_toolbox = struct(
+ extract_api_descriptors = _extract_api_descriptors,
+ extract_api_descriptors_from_asar = _extract_api_descriptors_from_asar,
+ generate_client_sources = _generate_client_sources,
+ generate_sdk_dependencies_manifest = _generate_sdk_dependencies_manifest,
+)