xref: /aosp_15_r20/external/dagger2/tools/bazel_compat.bzl (revision f585d8a307d0621d6060bd7e80091fdcbf94fe27)
1*f585d8a3SJacky Wang# Copyright (C) 202 The Dagger Authors.
2*f585d8a3SJacky Wang#
3*f585d8a3SJacky Wang# Licensed under the Apache License, Version 2.0 (the "License");
4*f585d8a3SJacky Wang# you may not use this file except in compliance with the License.
5*f585d8a3SJacky Wang# You may obtain a copy of the License at
6*f585d8a3SJacky Wang#
7*f585d8a3SJacky Wang# http://www.apache.org/licenses/LICENSE-2.0
8*f585d8a3SJacky Wang#
9*f585d8a3SJacky Wang# Unless required by applicable law or agreed to in writing, software
10*f585d8a3SJacky Wang# distributed under the License is distributed on an "AS IS" BASIS,
11*f585d8a3SJacky Wang# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12*f585d8a3SJacky Wang# See the License for the specific language governing permissions and
13*f585d8a3SJacky Wang# limitations under the License.
14*f585d8a3SJacky Wang
15*f585d8a3SJacky Wang"""Macros for building with Bazel.
16*f585d8a3SJacky Wang"""
17*f585d8a3SJacky Wang
18*f585d8a3SJacky Wangload("//third_party/kotlin/build_extensions:rules.bzl", "kt_android_library")
19*f585d8a3SJacky Wang
20*f585d8a3SJacky Wangdef compat_kt_android_library(name, **kwargs):
21*f585d8a3SJacky Wang    bazel_kt_android_library(name, kwargs)
22*f585d8a3SJacky Wang
23*f585d8a3SJacky Wangdef bazel_kt_android_library(name, kwargs):
24*f585d8a3SJacky Wang    """A macro that wraps Bazel's kt_android_library.
25*f585d8a3SJacky Wang
26*f585d8a3SJacky Wang    This macro wraps Bazel's kt_android_library to output the jars files
27*f585d8a3SJacky Wang    in the expected locations (b/203519416). It also adds a dependency on
28*f585d8a3SJacky Wang    kotlin_stdlib if there are kotlin sources.
29*f585d8a3SJacky Wang
30*f585d8a3SJacky Wang    Args:
31*f585d8a3SJacky Wang      name: the name of the library.
32*f585d8a3SJacky Wang      kwargs: Additional arguments of the library.
33*f585d8a3SJacky Wang    """
34*f585d8a3SJacky Wang
35*f585d8a3SJacky Wang    # If there are any kotlin sources, add the kotlin_stdlib, otherwise
36*f585d8a3SJacky Wang    # java-only projects may be missing a required runtime dependency on it.
37*f585d8a3SJacky Wang    if any([src.endswith(".kt") for src in kwargs.get("srcs", [])]):
38*f585d8a3SJacky Wang        # Add the kotlin_stdlib, otherwise it will be missing from java-only projects.
39*f585d8a3SJacky Wang        # We use deps rather than exports because exports isn't picked up by the pom file.
40*f585d8a3SJacky Wang        # See https://github.com/google/dagger/issues/3119
41*f585d8a3SJacky Wang        required_deps = ["@maven//:org_jetbrains_kotlin_kotlin_stdlib"]
42*f585d8a3SJacky Wang        kwargs["deps"] = kwargs.get("deps", []) + required_deps
43*f585d8a3SJacky Wang
44*f585d8a3SJacky Wang    # TODO(b/203519416): Bazel's kt_android_library outputs its jars under a target
45*f585d8a3SJacky Wang    # suffixed with "_kt". Thus, we have to do a bit of name aliasing to ensure that
46*f585d8a3SJacky Wang    # the jars exist at the expected targets.
47*f585d8a3SJacky Wang    kt_android_library(
48*f585d8a3SJacky Wang        name = "{}_internal".format(name),
49*f585d8a3SJacky Wang        **kwargs
50*f585d8a3SJacky Wang    )
51*f585d8a3SJacky Wang
52*f585d8a3SJacky Wang    native.alias(
53*f585d8a3SJacky Wang        name = name,
54*f585d8a3SJacky Wang        actual = ":{}_internal_kt".format(name),
55*f585d8a3SJacky Wang    )
56*f585d8a3SJacky Wang
57*f585d8a3SJacky Wang    native.alias(
58*f585d8a3SJacky Wang        name = "lib{}.jar".format(name),
59*f585d8a3SJacky Wang        actual = ":{}_internal_kt.jar".format(name),
60*f585d8a3SJacky Wang    )
61*f585d8a3SJacky Wang
62*f585d8a3SJacky Wang    native.alias(
63*f585d8a3SJacky Wang        name = "lib{}-src.jar".format(name),
64*f585d8a3SJacky Wang        actual = ":{}_internal_kt-sources.jar".format(name),
65*f585d8a3SJacky Wang    )
66