Skip to content

Commit 24e529d

Browse files
erikkerberrestingbull
authored andcommitted
Add experimental Build Tools API (BTAPI) for compilation (bazelbuild#1325)
* Add experimental Build Tools API (BTAPI) for compilation * Provision build tools API with http_archive over Maven * Fixup maven_install * Add build tools api to the integration tests --------- Co-authored-by: Corbin McNeely-Smith <[email protected]>
1 parent 40e07a4 commit 24e529d

File tree

19 files changed

+204
-65
lines changed

19 files changed

+204
-65
lines changed

MODULE.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ use_repo(
1919
"com_github_jetbrains_kotlin",
2020
"com_github_jetbrains_kotlin_git",
2121
"com_github_pinterest_ktlint",
22+
"kotlin_build_tools_impl",
2223
"kotlinx_serialization_core_jvm",
2324
"kotlinx_serialization_json",
2425
"kotlinx_serialization_json_jvm",

MODULE.release.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ use_repo(
2424
"kotlinx_serialization_core_jvm",
2525
"kotlinx_serialization_json",
2626
"kotlinx_serialization_json_jvm",
27+
"kotlin_build_tools_impl",
2728
)
2829

2930
register_toolchains("//kotlin/internal:default_toolchain")

docs/kotlin.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -505,8 +505,10 @@ This allows setting options and dependencies independently from the initial plug
505505
load("@rules_kotlin//kotlin:core.bzl", "define_kt_toolchain")
506506

507507
define_kt_toolchain(<a href="#define_kt_toolchain-name">name</a>, <a href="#define_kt_toolchain-language_version">language_version</a>, <a href="#define_kt_toolchain-api_version">api_version</a>, <a href="#define_kt_toolchain-jvm_target">jvm_target</a>, <a href="#define_kt_toolchain-experimental_use_abi_jars">experimental_use_abi_jars</a>,
508-
<a href="#define_kt_toolchain-experimental_strict_kotlin_deps">experimental_strict_kotlin_deps</a>, <a href="#define_kt_toolchain-experimental_report_unused_deps">experimental_report_unused_deps</a>,
509-
<a href="#define_kt_toolchain-experimental_reduce_classpath_mode">experimental_reduce_classpath_mode</a>, <a href="#define_kt_toolchain-experimental_multiplex_workers">experimental_multiplex_workers</a>, <a href="#define_kt_toolchain-javac_options">javac_options</a>,
508+
<a href="#define_kt_toolchain-experimental_treat_internal_as_private_in_abi_jars">experimental_treat_internal_as_private_in_abi_jars</a>,
509+
<a href="#define_kt_toolchain-experimental_remove_private_classes_in_abi_jars">experimental_remove_private_classes_in_abi_jars</a>, <a href="#define_kt_toolchain-experimental_strict_kotlin_deps">experimental_strict_kotlin_deps</a>,
510+
<a href="#define_kt_toolchain-experimental_report_unused_deps">experimental_report_unused_deps</a>, <a href="#define_kt_toolchain-experimental_reduce_classpath_mode">experimental_reduce_classpath_mode</a>,
511+
<a href="#define_kt_toolchain-experimental_multiplex_workers">experimental_multiplex_workers</a>, <a href="#define_kt_toolchain-experimental_build_tools_api">experimental_build_tools_api</a>, <a href="#define_kt_toolchain-javac_options">javac_options</a>,
510512
<a href="#define_kt_toolchain-kotlinc_options">kotlinc_options</a>, <a href="#define_kt_toolchain-jvm_stdlibs">jvm_stdlibs</a>, <a href="#define_kt_toolchain-jvm_runtime">jvm_runtime</a>, <a href="#define_kt_toolchain-jacocorunner">jacocorunner</a>, <a href="#define_kt_toolchain-exec_compatible_with">exec_compatible_with</a>,
511513
<a href="#define_kt_toolchain-target_compatible_with">target_compatible_with</a>, <a href="#define_kt_toolchain-target_settings">target_settings</a>)
512514
</pre>
@@ -527,6 +529,7 @@ Define the Kotlin toolchain.
527529
| <a id="define_kt_toolchain-experimental_report_unused_deps"></a>experimental_report_unused_deps | <p align="center"> - </p> | `None` |
528530
| <a id="define_kt_toolchain-experimental_reduce_classpath_mode"></a>experimental_reduce_classpath_mode | <p align="center"> - </p> | `None` |
529531
| <a id="define_kt_toolchain-experimental_multiplex_workers"></a>experimental_multiplex_workers | <p align="center"> - </p> | `None` |
532+
| <a id="define_kt_toolchain-experimental_build_tools_api"></a>experimental_build_tools_api | <p align="center"> - </p> | `None` |
530533
| <a id="define_kt_toolchain-javac_options"></a>javac_options | <p align="center"> - </p> | `Label("@rules_kotlin//kotlin/internal:default_javac_options")` |
531534
| <a id="define_kt_toolchain-kotlinc_options"></a>kotlinc_options | <p align="center"> - </p> | `Label("@rules_kotlin//kotlin/internal:default_kotlinc_options")` |
532535
| <a id="define_kt_toolchain-jvm_stdlibs"></a>jvm_stdlibs | <p align="center"> - </p> | `None` |

kotlin/internal/jvm/compile.bzl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,7 @@ def _run_kt_builder_action(
539539
args.add("--strict_kotlin_deps", toolchains.kt.experimental_strict_kotlin_deps)
540540
args.add_all("--classpath", compile_deps.compile_jars)
541541
args.add("--reduced_classpath_mode", toolchains.kt.experimental_reduce_classpath_mode)
542+
args.add("--build_tools_api", toolchains.kt.experimental_build_tools_api)
542543
args.add_all("--sources", srcs.all_srcs, omit_if_empty = True)
543544
args.add_all("--source_jars", srcs.src_jars + generated_src_jars, omit_if_empty = True)
544545
args.add_all("--deps_artifacts", deps_artifacts, omit_if_empty = True)

kotlin/internal/toolchains.bzl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ def _kotlin_toolchain_impl(ctx):
9292
experimental_compile_with_transitive_deps = ctx.attr.experimental_compile_with_transitive_deps,
9393
experimental_track_class_usage = ctx.attr.experimental_track_class_usage,
9494
experimental_track_resource_usage = ctx.attr.experimental_track_resource_usage,
95+
experimental_build_tools_api = ctx.attr.experimental_build_tools_api,
9596
javac_options = ctx.attr.javac_options[JavacOptions] if ctx.attr.javac_options else None,
9697
kotlinc_options = ctx.attr.kotlinc_options[KotlincOptions] if ctx.attr.kotlinc_options else None,
9798
empty_jar = ctx.file._empty_jar,
@@ -258,6 +259,10 @@ _kt_toolchain = rule(
258259
doc = "Compile with or without transitive dependencies from the classpath",
259260
default = True,
260261
),
262+
"experimental_build_tools_api": attr.bool(
263+
doc = "Enables experimental support for Build Tools API integration",
264+
default = False,
265+
),
261266
"javac_options": attr.label(
262267
doc = "Compiler options for javac",
263268
providers = [JavacOptions],
@@ -347,6 +352,7 @@ def define_kt_toolchain(
347352
experimental_kover_exclude = [],
348353
experimental_kover_exclude_annotation = [],
349354
experimental_kover_exclude_inherited_from = [],
355+
experimental_build_tools_api = None,
350356
javac_options = Label("//kotlin/internal:default_javac_options"),
351357
kotlinc_options = Label("//kotlin/internal:default_kotlinc_options"),
352358
jvm_stdlibs = None,
@@ -381,6 +387,7 @@ def define_kt_toolchain(
381387
experimental_kover_exclude = experimental_kover_exclude,
382388
experimental_kover_exclude_annotation = experimental_kover_exclude_annotation,
383389
experimental_kover_exclude_inherited_from = experimental_kover_exclude_inherited_from,
390+
experimental_build_tools_api = experimental_build_tools_api,
384391
javac_options = javac_options,
385392
kotlinc_options = kotlinc_options,
386393
visibility = ["//visibility:public"],

kotlin/settings/BUILD.bazel

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,9 @@ bool_flag(
3636
build_setting_default = False,
3737
visibility = ["//visibility:public"],
3838
)
39+
40+
bool_flag(
41+
name = "experimental_build_tools_api",
42+
build_setting_default = False,
43+
visibility = ["//visibility:public"],
44+
)

kotlin/settings/BUILD.release.bazel

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,10 @@ bool_flag(
2727
build_setting_default = False,
2828
visibility = ["//visibility:public"],
2929
)
30+
31+
# --@rules_kotlin//kotlin/settings:experimental_build_tools_api=True
32+
bool_flag(
33+
name = "experimental_build_tools_api",
34+
build_setting_default = False,
35+
visibility = ["//visibility:public"],
36+
)

src/main/kotlin/BUILD.release.bazel

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ java_binary(
4747
"//kotlin/compiler:symbol-processing-cmdline",
4848
"//src/main/kotlin/io/bazel/kotlin/compiler",
4949
"@com_github_jetbrains_kotlin//:home",
50+
"@kotlin_build_tools_impl//jar",
5051
"@kotlinx_serialization_core_jvm//jar",
5152
"@kotlinx_serialization_json//jar",
5253
"@kotlinx_serialization_json_jvm//jar",
@@ -55,6 +56,7 @@ java_binary(
5556
"-D@com_github_jetbrains_kotlinx...serialization-core-jvm=$(rlocationpath @kotlinx_serialization_core_jvm//jar)",
5657
"-D@com_github_jetbrains_kotlinx...serialization-json=$(rlocationpath @kotlinx_serialization_json//jar)",
5758
"-D@com_github_jetbrains_kotlinx...serialization-json-jvm=$(rlocationpath @kotlinx_serialization_json_jvm//jar)",
59+
"-D@com_github_jetbrains_kotlin...build-tools-impl=$(rlocationpath @kotlin_build_tools_impl//jar)",
5860
"-D@com_github_jetbrains_kotlin...jvm-abi-gen=$(rlocationpath //kotlin/compiler:jvm-abi-gen)",
5961
"-D@com_github_jetbrains_kotlin...kotlin-compiler=$(rlocationpath //kotlin/compiler:kotlin-compiler)",
6062
"-D@com_github_jetbrains_kotlin...kapt=$(rlocationpath //kotlin/compiler:kotlin-annotation-processing)",

src/main/kotlin/io/bazel/kotlin/builder/cmd/BUILD.bazel

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ kt_bootstrap_binary(
2525
"//src/main/kotlin:skip-code-gen",
2626
"//src/main/kotlin/io/bazel/kotlin/compiler:compiler.jar",
2727
"@com_github_jetbrains_kotlin//:home",
28+
"@kotlin_build_tools_impl//jar",
2829
"@kotlinx_serialization_core_jvm//jar",
2930
"@kotlinx_serialization_json//jar",
3031
"@kotlinx_serialization_json_jvm//jar",
@@ -33,6 +34,7 @@ kt_bootstrap_binary(
3334
"-D@com_github_jetbrains_kotlinx...serialization-core-jvm=$(rlocationpath @kotlinx_serialization_core_jvm//jar)",
3435
"-D@com_github_jetbrains_kotlinx...serialization-json=$(rlocationpath @kotlinx_serialization_json//jar)",
3536
"-D@com_github_jetbrains_kotlinx...serialization-json-jvm=$(rlocationpath @kotlinx_serialization_json_jvm//jar)",
37+
"-D@com_github_jetbrains_kotlin...build-tools-impl=$(rlocationpath @kotlin_build_tools_impl//jar)",
3638
"-D@com_github_jetbrains_kotlin...jvm-abi-gen=$(rlocationpath //kotlin/compiler:jvm-abi-gen)",
3739
"-D@com_github_jetbrains_kotlin...kotlin-compiler=$(rlocationpath //kotlin/compiler:kotlin-compiler)",
3840
"-D@com_github_jetbrains_kotlin...kapt=$(rlocationpath //kotlin/compiler:kotlin-annotation-processing)",

src/main/kotlin/io/bazel/kotlin/builder/tasks/KotlinBuilder.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ class KotlinBuilder
8989
KSP_OPTS("--ksp_opts"),
9090
TRACK_CLASS_USAGE("--track_class_usage"),
9191
TRACK_RESOURCE_USAGE("--track_resource_usage"),
92+
BUILD_TOOLS_API("--build_tools_api"),
9293
}
9394
}
9495

@@ -168,6 +169,9 @@ class KotlinBuilder
168169
reducedClasspathMode = argMap.mandatorySingle(KotlinBuilderFlags.REDUCED_CLASSPATH_MODE)
169170
trackClassUsage = argMap.mandatorySingle(KotlinBuilderFlags.TRACK_CLASS_USAGE)
170171
trackResourceUsage = argMap.mandatorySingle(KotlinBuilderFlags.TRACK_RESOURCE_USAGE)
172+
argMap.optionalSingle(KotlinBuilderFlags.BUILD_TOOLS_API)?.let {
173+
buildToolsApi = it == "true"
174+
}
171175
this
172176
}
173177

0 commit comments

Comments
 (0)