79 lines
2.7 KiB
Python
79 lines
2.7 KiB
Python
# Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
#
|
|
# This source code is licensed under both the MIT license found in the
|
|
# LICENSE-MIT file in the root directory of this source tree and the Apache
|
|
# License, Version 2.0 found in the LICENSE-APACHE file in the root directory
|
|
# of this source tree.
|
|
|
|
load("@prelude//android:android_providers.bzl", "merge_android_packageable_info")
|
|
load(
|
|
":java_providers.bzl",
|
|
"JavaClasspathEntry",
|
|
"create_abi",
|
|
"create_java_library_providers",
|
|
)
|
|
load(":java_toolchain.bzl", "PrebuiltJarToolchainInfo")
|
|
|
|
def prebuilt_jar_impl(ctx: "context") -> ["provider"]:
|
|
"""
|
|
prebuilt_jar() rule implementation
|
|
|
|
Args:
|
|
ctx: rule analysis context
|
|
Returns:
|
|
list of created providers
|
|
"""
|
|
|
|
expected_extension = ".jar"
|
|
binary_jar = ctx.attrs.binary_jar
|
|
extension = binary_jar.extension
|
|
if extension != expected_extension:
|
|
fail("Extension of the binary_jar attribute has to be equal to '{}' but '{}' has an extension '{}'".format(
|
|
expected_extension,
|
|
binary_jar,
|
|
extension,
|
|
))
|
|
|
|
output = ctx.actions.declare_output("symlink/{}".format(binary_jar.short_path))
|
|
ctx.actions.symlink_file(output, binary_jar)
|
|
|
|
abi = None
|
|
if ctx.attrs.generate_abi:
|
|
prebuilt_jar_toolchain = ctx.attrs._prebuilt_jar_toolchain[PrebuiltJarToolchainInfo]
|
|
if not prebuilt_jar_toolchain.is_bootstrap_toolchain:
|
|
abi = create_abi(ctx.actions, prebuilt_jar_toolchain.class_abi_generator, output)
|
|
|
|
library_output_classpath_entry = JavaClasspathEntry(
|
|
full_library = output,
|
|
abi = abi or output,
|
|
required_for_source_only_abi = ctx.attrs.required_for_source_only_abi,
|
|
)
|
|
|
|
java_library_info, java_packaging_info, shared_library_info, cxx_resource_info, template_placeholder_info, _ = create_java_library_providers(
|
|
ctx,
|
|
library_output = library_output_classpath_entry,
|
|
declared_deps = ctx.attrs.deps,
|
|
exported_deps = ctx.attrs.deps,
|
|
needs_desugar = True,
|
|
is_prebuilt_jar = True,
|
|
)
|
|
|
|
# TODO(T107163344) this shouldn't be in prebuilt_jar itself, use overlays to remove it.
|
|
android_packageable_info = merge_android_packageable_info(ctx.label, ctx.actions, ctx.attrs.deps)
|
|
|
|
sub_targets = {}
|
|
sub_targets["abi"] = [
|
|
java_library_info,
|
|
template_placeholder_info,
|
|
DefaultInfo(default_outputs = [library_output_classpath_entry.abi]),
|
|
]
|
|
|
|
return [
|
|
java_library_info,
|
|
java_packaging_info,
|
|
shared_library_info,
|
|
cxx_resource_info,
|
|
android_packageable_info,
|
|
template_placeholder_info,
|
|
DefaultInfo(default_outputs = [output], sub_targets = sub_targets),
|
|
]
|