Skip to content

Commit 102dfa2

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 <restingbull@mcneely-smith.com>
1 parent ddc1e6a commit 102dfa2

File tree

19 files changed

+156
-9
lines changed

19 files changed

+156
-9
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: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -506,7 +506,8 @@ 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>,
508508
<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>,
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>,
510+
<a href="#define_kt_toolchain-experimental_build_tools_api">experimental_build_tools_api</a>, <a href="#define_kt_toolchain-javac_options">javac_options</a>,
510511
<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>,
511512
<a href="#define_kt_toolchain-target_compatible_with">target_compatible_with</a>, <a href="#define_kt_toolchain-target_settings">target_settings</a>)
512513
</pre>
@@ -527,6 +528,7 @@ Define the Kotlin toolchain.
527528
| <a id="define_kt_toolchain-experimental_report_unused_deps"></a>experimental_report_unused_deps | <p align="center"> - </p> | `None` |
528529
| <a id="define_kt_toolchain-experimental_reduce_classpath_mode"></a>experimental_reduce_classpath_mode | <p align="center"> - </p> | `None` |
529530
| <a id="define_kt_toolchain-experimental_multiplex_workers"></a>experimental_multiplex_workers | <p align="center"> - </p> | `None` |
531+
| <a id="define_kt_toolchain-experimental_build_tools_api"></a>experimental_build_tools_api | <p align="center"> - </p> | `None` |
530532
| <a id="define_kt_toolchain-javac_options"></a>javac_options | <p align="center"> - </p> | `Label("@rules_kotlin//kotlin/internal:default_javac_options")` |
531533
| <a id="define_kt_toolchain-kotlinc_options"></a>kotlinc_options | <p align="center"> - </p> | `Label("@rules_kotlin//kotlin/internal:default_kotlinc_options")` |
532534
| <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,
@@ -260,6 +261,10 @@ _kt_toolchain = rule(
260261
doc = "Compile with or without transitive dependencies from the classpath",
261262
default = True,
262263
),
264+
"experimental_build_tools_api": attr.bool(
265+
doc = "Enables experimental support for Build Tools API integration",
266+
default = False,
267+
),
263268
"javac_options": attr.label(
264269
doc = "Compiler options for javac",
265270
providers = [JavacOptions],
@@ -344,6 +349,7 @@ def define_kt_toolchain(
344349
experimental_track_resource_usage = None,
345350
experimental_compile_with_transitive_deps = True,
346351
experimental_multiplex_workers = None,
352+
experimental_build_tools_api = None,
347353
experimental_kover_enabled = False,
348354
experimental_kover_agent = None,
349355
experimental_kover_exclude = [],
@@ -378,6 +384,7 @@ def define_kt_toolchain(
378384
experimental_track_class_usage = experimental_track_class_usage,
379385
experimental_track_resource_usage = experimental_track_resource_usage,
380386
experimental_compile_with_transitive_deps = experimental_compile_with_transitive_deps,
387+
experimental_build_tools_api = experimental_build_tools_api,
381388
experimental_kover_enabled = experimental_kover_enabled,
382389
experimental_kover_agent = experimental_kover_agent,
383390
experimental_kover_exclude = experimental_kover_exclude,

kotlin/settings/BUILD.bazel

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,16 @@ bool_flag(
3636
build_setting_default = False,
3737
visibility = ["//visibility:public"],
3838
)
39+
40+
# --@rules_kotlin//kotlin/settings:experimental_strict_associate_dependencies=True
41+
bool_flag(
42+
name = "experimental_strict_associate_dependencies",
43+
build_setting_default = False,
44+
visibility = ["//visibility:public"],
45+
)
46+
47+
bool_flag(
48+
name = "experimental_build_tools_api",
49+
build_setting_default = False,
50+
visibility = ["//visibility:public"],
51+
)

kotlin/settings/BUILD.release.bazel

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,17 @@ bool_flag(
2727
build_setting_default = False,
2828
visibility = ["//visibility:public"],
2929
)
30+
31+
# --@rules_kotlin//kotlin/settings:experimental_strict_associate_dependencies=True
32+
bool_flag(
33+
name = "experimental_strict_associate_dependencies",
34+
build_setting_default = False,
35+
visibility = ["//visibility:public"],
36+
)
37+
38+
# --@rules_kotlin//kotlin/settings:experimental_build_tools_api=True
39+
bool_flag(
40+
name = "experimental_build_tools_api",
41+
build_setting_default = False,
42+
visibility = ["//visibility:public"],
43+
)

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)