176 lines
7.2 KiB
Python
176 lines
7.2 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:configuration.bzl", "is_building_android_binary_attr")
|
|
load("@prelude//android:min_sdk_version.bzl", "get_min_sdk_version_constraint_value_name", "get_min_sdk_version_range")
|
|
load("@prelude//java:dex_toolchain.bzl", "DexToolchainInfo")
|
|
load(
|
|
"@prelude//java:java_toolchain.bzl",
|
|
"JavaPlatformInfo",
|
|
"JavaTestToolchainInfo",
|
|
"JavaToolchainInfo",
|
|
"PrebuiltJarToolchainInfo",
|
|
)
|
|
load("@prelude//java/plugins:java_annotation_processor.bzl", "java_annotation_processor_impl")
|
|
load("@prelude//java/plugins:java_plugin.bzl", "java_plugin_impl")
|
|
load("@prelude//genrule.bzl", "genrule_attributes")
|
|
load(":jar_genrule.bzl", "jar_genrule_impl")
|
|
load(":java_binary.bzl", "java_binary_impl")
|
|
load(":java_library.bzl", "java_library_impl")
|
|
load(":java_test.bzl", "java_test_impl")
|
|
load(":keystore.bzl", "keystore_impl")
|
|
load(":prebuilt_jar.bzl", "prebuilt_jar_impl")
|
|
|
|
def _select_java_toolchain():
|
|
# FIXME: prelude// should be standalone (not refer to fbcode//, buck// or ovr_config//)
|
|
return select(
|
|
{
|
|
# By default use the fbsource toolchain
|
|
"DEFAULT": "fbsource//xplat/buck2/platform/java:java",
|
|
# if target is meant to run on host but with an android environment then use .buckconfig from fbsource cell
|
|
"ovr_config//runtime/constraints:android-host-test": "fbsource//xplat/buck2/platform/java:java-for-host-tests",
|
|
# if target is with fbcode constraint then use .buckconfig from fbcode cell
|
|
"ovr_config//runtime:fbcode": "fbcode//buck2/platform:java_fbcode",
|
|
# if target is for android (fbsource repo) then use .buckconfig from fbsource cell
|
|
"ovr_config//toolchain/fb:android-ndk": "fbsource//xplat/buck2/platform/java:java",
|
|
},
|
|
)
|
|
|
|
def select_dex_toolchain():
|
|
# FIXME: prelude// should be standalone (not refer to fbsource//, ovr_config//)
|
|
return select(
|
|
{
|
|
# Only need a Dex toolchain for Android builds.
|
|
"DEFAULT": None,
|
|
"ovr_config//os/constraints:android": "fbsource//xplat/buck2/platform/java:dex",
|
|
},
|
|
)
|
|
|
|
def dex_min_sdk_version():
|
|
min_sdk_version_dict = {"DEFAULT": None}
|
|
for min_sdk in get_min_sdk_version_range():
|
|
constraint = "fbsource//xplat/buck2/platform/android:{}".format(get_min_sdk_version_constraint_value_name(min_sdk))
|
|
min_sdk_version_dict[constraint] = min_sdk
|
|
|
|
return select(min_sdk_version_dict)
|
|
|
|
def select_java_test_toolchain():
|
|
# FIXME: prelude// should be standalone (not refer to fbsource//)
|
|
return "fbsource//xplat/buck2/platform/java:java_test"
|
|
|
|
def select_prebuilt_jar_toolchain():
|
|
# FIXME: prelude// should be standalone (not refer to fbcode//)
|
|
return "fbcode//buck2/platform:prebuilt_jar"
|
|
|
|
def is_build_only_native_code():
|
|
return select(
|
|
{
|
|
"DEFAULT": False,
|
|
"fbsource//xplat/buck2/platform/android:build_only_native_code": True,
|
|
},
|
|
)
|
|
|
|
implemented_rules = {
|
|
"jar_genrule": jar_genrule_impl,
|
|
"java_annotation_processor": java_annotation_processor_impl,
|
|
"java_binary": java_binary_impl,
|
|
"java_library": java_library_impl,
|
|
"java_plugin": java_plugin_impl,
|
|
"java_test": java_test_impl,
|
|
"keystore": keystore_impl,
|
|
"prebuilt_jar": prebuilt_jar_impl,
|
|
}
|
|
|
|
extra_attributes = {
|
|
"jar_genrule": genrule_attributes() | {
|
|
# FIXME: prelude// should be standalone (not refer to fbsource//)
|
|
"_java_toolchain": attrs.exec_dep(
|
|
default = _select_java_toolchain(),
|
|
providers = [
|
|
JavaToolchainInfo,
|
|
],
|
|
),
|
|
},
|
|
"java_annotation_processor": {
|
|
"_build_only_native_code": attrs.default_only(attrs.bool(default = is_build_only_native_code())),
|
|
},
|
|
"java_binary": {
|
|
"java_args_for_run_info": attrs.list(attrs.string(), default = []),
|
|
"meta_inf_directory": attrs.option(attrs.source(allow_directory = True), default = None),
|
|
"_build_only_native_code": attrs.default_only(attrs.bool(default = is_build_only_native_code())),
|
|
"_java_toolchain": attrs.exec_dep(
|
|
default = _select_java_toolchain(),
|
|
providers = [
|
|
JavaPlatformInfo,
|
|
JavaToolchainInfo,
|
|
],
|
|
),
|
|
},
|
|
"java_library": {
|
|
"javac": attrs.option(attrs.one_of(attrs.dep(), attrs.source()), default = None),
|
|
"resources_root": attrs.option(attrs.string(), default = None),
|
|
"_build_only_native_code": attrs.default_only(attrs.bool(default = is_build_only_native_code())),
|
|
"_dex_min_sdk_version": attrs.option(attrs.int(), default = dex_min_sdk_version()),
|
|
"_dex_toolchain": attrs.option(attrs.exec_dep(
|
|
providers = [
|
|
DexToolchainInfo,
|
|
],
|
|
), default = select_dex_toolchain()),
|
|
"_is_building_android_binary": is_building_android_binary_attr(),
|
|
"_java_toolchain": attrs.exec_dep(
|
|
default = _select_java_toolchain(),
|
|
providers = [
|
|
JavaPlatformInfo,
|
|
JavaToolchainInfo,
|
|
],
|
|
),
|
|
},
|
|
"java_plugin": {
|
|
"_build_only_native_code": attrs.default_only(attrs.bool(default = is_build_only_native_code())),
|
|
},
|
|
"java_test": {
|
|
"javac": attrs.option(attrs.one_of(attrs.dep(), attrs.source()), default = None),
|
|
"resources_root": attrs.option(attrs.string(), default = None),
|
|
"_is_building_android_binary": attrs.default_only(attrs.bool(default = False)),
|
|
"_java_test_toolchain": attrs.exec_dep(
|
|
default = select_java_test_toolchain(),
|
|
providers = [
|
|
JavaTestToolchainInfo,
|
|
],
|
|
),
|
|
"_java_toolchain": attrs.exec_dep(
|
|
default = _select_java_toolchain(),
|
|
providers = [
|
|
JavaPlatformInfo,
|
|
JavaToolchainInfo,
|
|
],
|
|
),
|
|
},
|
|
"java_test_runner": {
|
|
"resources_root": attrs.option(attrs.string(), default = None),
|
|
},
|
|
"prebuilt_jar": {
|
|
"generate_abi": attrs.bool(default = True),
|
|
# Prebuilt jars are quick to build, and often contain third-party code, which in turn is
|
|
# often a source of annotations and constants. To ease migration to ABI generation from
|
|
# source without deps, we have them present during ABI gen by default.
|
|
"required_for_source_only_abi": attrs.bool(default = True),
|
|
"_build_only_native_code": attrs.default_only(attrs.bool(default = is_build_only_native_code())),
|
|
"_dex_min_sdk_version": attrs.option(attrs.int(), default = dex_min_sdk_version()),
|
|
"_dex_toolchain": attrs.option(attrs.exec_dep(
|
|
providers = [
|
|
DexToolchainInfo,
|
|
],
|
|
), default = select_dex_toolchain()),
|
|
"_prebuilt_jar_toolchain": attrs.exec_dep(
|
|
default = select_prebuilt_jar_toolchain(),
|
|
providers = [
|
|
PrebuiltJarToolchainInfo,
|
|
],
|
|
),
|
|
},
|
|
}
|