Skip to content

Commit 9734aa6

Browse files
Add experimental Build Tools API (BTAPI) for compilation (#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 c227a1e commit 9734aa6

File tree

19 files changed

+203
-69
lines changed

19 files changed

+203
-69
lines changed

MODULE.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ use_repo(
2929
"com_github_jetbrains_kotlin",
3030
"com_github_jetbrains_kotlin_git",
3131
"com_github_pinterest_ktlint",
32+
"kotlin_build_tools_impl",
3233
"kotlinx_serialization_core_jvm",
3334
"kotlinx_serialization_json",
3435
"kotlinx_serialization_json_jvm",

MODULE.release.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ use_repo(
3030
"kotlinx_serialization_core_jvm",
3131
"kotlinx_serialization_json",
3232
"kotlinx_serialization_json_jvm",
33+
"kotlin_build_tools_impl",
3334
)
3435

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

docs/kotlin.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -515,9 +515,9 @@ define_kt_toolchain(<a href="#define_kt_toolchain-name">name</a>, <a href="#defi
515515
<a href="#define_kt_toolchain-experimental_treat_internal_as_private_in_abi_jars">experimental_treat_internal_as_private_in_abi_jars</a>,
516516
<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>,
517517
<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>,
518-
<a href="#define_kt_toolchain-experimental_multiplex_workers">experimental_multiplex_workers</a>, <a href="#define_kt_toolchain-javac_options">javac_options</a>, <a href="#define_kt_toolchain-kotlinc_options">kotlinc_options</a>, <a href="#define_kt_toolchain-jvm_stdlibs">jvm_stdlibs</a>,
519-
<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>, <a href="#define_kt_toolchain-target_compatible_with">target_compatible_with</a>,
520-
<a href="#define_kt_toolchain-target_settings">target_settings</a>)
518+
<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>,
519+
<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>,
520+
<a href="#define_kt_toolchain-target_compatible_with">target_compatible_with</a>, <a href="#define_kt_toolchain-target_settings">target_settings</a>)
521521
</pre>
522522

523523
Define the Kotlin toolchain.
@@ -538,6 +538,7 @@ Define the Kotlin toolchain.
538538
| <a id="define_kt_toolchain-experimental_report_unused_deps"></a>experimental_report_unused_deps | <p align="center"> - </p> | `None` |
539539
| <a id="define_kt_toolchain-experimental_reduce_classpath_mode"></a>experimental_reduce_classpath_mode | <p align="center"> - </p> | `None` |
540540
| <a id="define_kt_toolchain-experimental_multiplex_workers"></a>experimental_multiplex_workers | <p align="center"> - </p> | `None` |
541+
| <a id="define_kt_toolchain-experimental_build_tools_api"></a>experimental_build_tools_api | <p align="center"> - </p> | `None` |
541542
| <a id="define_kt_toolchain-javac_options"></a>javac_options | <p align="center"> - </p> | `Label("@rules_kotlin//kotlin/internal:default_javac_options")` |
542543
| <a id="define_kt_toolchain-kotlinc_options"></a>kotlinc_options | <p align="center"> - </p> | `Label("@rules_kotlin//kotlin/internal:default_kotlinc_options")` |
543544
| <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
@@ -462,6 +462,7 @@ def _run_kt_builder_action(
462462
args.add("--strict_kotlin_deps", toolchains.kt.experimental_strict_kotlin_deps)
463463
args.add_all("--classpath", compile_deps.compile_jars)
464464
args.add("--reduced_classpath_mode", toolchains.kt.experimental_reduce_classpath_mode)
465+
args.add("--build_tools_api", toolchains.kt.experimental_build_tools_api)
465466
args.add_all("--sources", srcs.all_srcs, omit_if_empty = True)
466467
args.add_all("--source_jars", srcs.src_jars + generated_src_jars, omit_if_empty = True)
467468
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
@@ -91,6 +91,7 @@ def _kotlin_toolchain_impl(ctx):
9191
experimental_strict_kotlin_deps = ctx.attr.experimental_strict_kotlin_deps,
9292
experimental_report_unused_deps = ctx.attr.experimental_report_unused_deps,
9393
experimental_reduce_classpath_mode = ctx.attr.experimental_reduce_classpath_mode,
94+
experimental_build_tools_api = ctx.attr.experimental_build_tools_api,
9495
javac_options = ctx.attr.javac_options[JavacOptions] if ctx.attr.javac_options else None,
9596
kotlinc_options = ctx.attr.kotlinc_options[KotlincOptions] if ctx.attr.kotlinc_options else None,
9697
empty_jar = ctx.file._empty_jar,
@@ -247,6 +248,10 @@ _kt_toolchain = rule(
247248
"KOTLINBUILDER_REDUCED",
248249
],
249250
),
251+
"experimental_build_tools_api": attr.bool(
252+
doc = "Enables experimental support for Build Tools API integration",
253+
default = False,
254+
),
250255
"javac_options": attr.label(
251256
doc = "Compiler options for javac",
252257
providers = [JavacOptions],
@@ -321,6 +326,7 @@ def define_kt_toolchain(
321326
experimental_report_unused_deps = None,
322327
experimental_reduce_classpath_mode = None,
323328
experimental_multiplex_workers = None,
329+
experimental_build_tools_api = None,
324330
javac_options = Label("//kotlin/internal:default_javac_options"),
325331
kotlinc_options = Label("//kotlin/internal:default_kotlinc_options"),
326332
jvm_stdlibs = None,
@@ -349,6 +355,7 @@ def define_kt_toolchain(
349355
experimental_strict_kotlin_deps = experimental_strict_kotlin_deps,
350356
experimental_report_unused_deps = experimental_report_unused_deps,
351357
experimental_reduce_classpath_mode = experimental_reduce_classpath_mode,
358+
experimental_build_tools_api = experimental_build_tools_api,
352359
javac_options = javac_options,
353360
kotlinc_options = kotlinc_options,
354361
visibility = ["//visibility:public"],

kotlin/settings/BUILD.bazel

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,3 +42,9 @@ bool_flag(
4242
build_setting_default = False,
4343
visibility = ["//visibility:public"],
4444
)
45+
46+
bool_flag(
47+
name = "experimental_build_tools_api",
48+
build_setting_default = False,
49+
visibility = ["//visibility:public"],
50+
)

kotlin/settings/BUILD.release.bazel

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,3 +33,10 @@ bool_flag(
3333
build_setting_default = False,
3434
visibility = ["//visibility:public"],
3535
)
36+
37+
# --@rules_kotlin//kotlin/settings:experimental_build_tools_api=True
38+
bool_flag(
39+
name = "experimental_build_tools_api",
40+
build_setting_default = False,
41+
visibility = ["//visibility:public"],
42+
)

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
@@ -26,6 +26,7 @@ kt_bootstrap_binary(
2626
"//src/main/kotlin:skip-code-gen",
2727
"//src/main/kotlin/io/bazel/kotlin/compiler:compiler.jar",
2828
"@com_github_jetbrains_kotlin//:home",
29+
"@kotlin_build_tools_impl//jar",
2930
"@kotlinx_serialization_core_jvm//jar",
3031
"@kotlinx_serialization_json//jar",
3132
"@kotlinx_serialization_json_jvm//jar",
@@ -34,6 +35,7 @@ kt_bootstrap_binary(
3435
"-D@com_github_jetbrains_kotlinx...serialization-core-jvm=$(rlocationpath @kotlinx_serialization_core_jvm//jar)",
3536
"-D@com_github_jetbrains_kotlinx...serialization-json=$(rlocationpath @kotlinx_serialization_json//jar)",
3637
"-D@com_github_jetbrains_kotlinx...serialization-json-jvm=$(rlocationpath @kotlinx_serialization_json_jvm//jar)",
38+
"-D@com_github_jetbrains_kotlin...build-tools-impl=$(rlocationpath @kotlin_build_tools_impl//jar)",
3739
"-D@com_github_jetbrains_kotlin...jvm-abi-gen=$(rlocationpath //kotlin/compiler:jvm-abi-gen)",
3840
"-D@com_github_jetbrains_kotlin...kotlin-compiler=$(rlocationpath //kotlin/compiler:kotlin-compiler)",
3941
"-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
@@ -87,6 +87,7 @@ class KotlinBuilder
8787
REDUCED_CLASSPATH_MODE("--reduced_classpath_mode"),
8888
INSTRUMENT_COVERAGE("--instrument_coverage"),
8989
KSP_GENERATED_JAVA_SRCJAR("--ksp_generated_java_srcjar"),
90+
BUILD_TOOLS_API("--build_tools_api"),
9091
}
9192
}
9293

@@ -169,6 +170,9 @@ class KotlinBuilder
169170
argMap.optionalSingle(KotlinBuilderFlags.ABI_JAR_REMOVE_PRIVATE_CLASSES)?.let {
170171
removePrivateClassesInAbiJar = it == "true"
171172
}
173+
argMap.optionalSingle(KotlinBuilderFlags.BUILD_TOOLS_API)?.let {
174+
buildToolsApi = it == "true"
175+
}
172176
this
173177
}
174178

0 commit comments

Comments
 (0)