Skip to content

Commit 94924b9

Browse files
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 4111a7f commit 94924b9

File tree

19 files changed

+205
-116
lines changed

19 files changed

+205
-116
lines changed

MODULE.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ use_repo(
2222
"com_github_jetbrains_kotlin",
2323
"com_github_jetbrains_kotlin_git",
2424
"com_github_pinterest_ktlint",
25+
"kotlin_build_tools_impl",
2526
"kotlinx_serialization_core_jvm",
2627
"kotlinx_serialization_json",
2728
"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: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -514,9 +514,9 @@ define_kt_toolchain(<a href="#define_kt_toolchain-name">name</a>, <a href="#defi
514514
<a href="#define_kt_toolchain-experimental_treat_internal_as_private_in_abi_jars">experimental_treat_internal_as_private_in_abi_jars</a>,
515515
<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>,
516516
<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>,
517-
<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>,
518-
<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>,
519-
<a href="#define_kt_toolchain-target_settings">target_settings</a>)
517+
<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>,
518+
<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>,
519+
<a href="#define_kt_toolchain-target_compatible_with">target_compatible_with</a>, <a href="#define_kt_toolchain-target_settings">target_settings</a>)
520520
</pre>
521521

522522
Define the Kotlin toolchain.
@@ -537,6 +537,7 @@ Define the Kotlin toolchain.
537537
| <a id="define_kt_toolchain-experimental_report_unused_deps"></a>experimental_report_unused_deps | <p align="center"> - </p> | `None` |
538538
| <a id="define_kt_toolchain-experimental_reduce_classpath_mode"></a>experimental_reduce_classpath_mode | <p align="center"> - </p> | `None` |
539539
| <a id="define_kt_toolchain-experimental_multiplex_workers"></a>experimental_multiplex_workers | <p align="center"> - </p> | `None` |
540+
| <a id="define_kt_toolchain-experimental_build_tools_api"></a>experimental_build_tools_api | <p align="center"> - </p> | `None` |
540541
| <a id="define_kt_toolchain-javac_options"></a>javac_options | <p align="center"> - </p> | `Label("@rules_kotlin//kotlin/internal:default_javac_options")` |
541542
| <a id="define_kt_toolchain-kotlinc_options"></a>kotlinc_options | <p align="center"> - </p> | `Label("@rules_kotlin//kotlin/internal:default_kotlinc_options")` |
542543
| <a id="define_kt_toolchain-jvm_stdlibs"></a>jvm_stdlibs | <p align="center"> - </p> | `None` |

kotlin/internal/jvm/compile.bzl

Lines changed: 3 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@ load(
2424
load("@rules_java//java:defs.bzl", "JavaInfo", "java_common")
2525
load(
2626
"//kotlin/internal:defs.bzl",
27-
_JAVA_RUNTIME_TOOLCHAIN_TYPE = "JAVA_RUNTIME_TOOLCHAIN_TYPE",
28-
_JAVA_TOOLCHAIN_TYPE = "JAVA_TOOLCHAIN_TYPE",
2927
_KtCompilerPluginInfo = "KtCompilerPluginInfo",
3028
_KtJvmInfo = "KtJvmInfo",
3129
_KtPluginConfiguration = "KtPluginConfiguration",
@@ -436,52 +434,6 @@ def _run_merge_jdeps_action(ctx, toolchains, jdeps, outputs, deps):
436434
toolchain = _TOOLCHAIN_TYPE,
437435
)
438436

439-
def _run_kapt_builder_actions(
440-
ctx,
441-
rule_kind,
442-
toolchains,
443-
srcs,
444-
associates,
445-
compile_deps,
446-
deps_artifacts,
447-
annotation_processors,
448-
transitive_runtime_jars,
449-
plugins):
450-
"""Runs KAPT using the KotlinBuilder tool
451-
Returns:
452-
A struct containing KAPT outputs
453-
"""
454-
ap_generated_src_jar = ctx.actions.declare_file(ctx.label.name + "-kapt-gensrc.jar")
455-
kapt_generated_stub_jar = ctx.actions.declare_file(ctx.label.name + "-kapt-generated-stub.jar")
456-
kapt_generated_class_jar = ctx.actions.declare_file(ctx.label.name + "-kapt-generated-class.jar")
457-
458-
_run_kt_builder_action(
459-
ctx = ctx,
460-
rule_kind = rule_kind,
461-
toolchains = toolchains,
462-
srcs = srcs,
463-
generated_src_jars = [],
464-
associates = associates,
465-
compile_deps = compile_deps,
466-
deps_artifacts = deps_artifacts,
467-
annotation_processors = annotation_processors,
468-
transitive_runtime_jars = transitive_runtime_jars,
469-
plugins = plugins,
470-
outputs = {
471-
"generated_java_srcjar": ap_generated_src_jar,
472-
"kapt_generated_stub_jar": kapt_generated_stub_jar,
473-
"kapt_generated_class_jar": kapt_generated_class_jar,
474-
},
475-
build_kotlin = False,
476-
mnemonic = "KotlinKapt",
477-
)
478-
479-
return struct(
480-
ap_generated_src_jar = ap_generated_src_jar,
481-
kapt_generated_stub_jar = kapt_generated_stub_jar,
482-
kapt_generated_class_jar = kapt_generated_class_jar,
483-
)
484-
485437
def _run_ksp_builder_actions(
486438
ctx,
487439
rule_kind,
@@ -546,10 +498,10 @@ def _run_kt_builder_action(
546498
args.add("--" + f, path)
547499

548500
experimental_preserve_declaration_order = toolchains.kt.experimental_preserve_declaration_order
549-
if 'kt_experimental_preserve_declaration_order_in_abi_plugin_incompatible' in ctx.attr.tags:
501+
if "kt_experimental_preserve_declaration_order_in_abi_plugin_incompatible" in ctx.attr.tags:
550502
experimental_preserve_declaration_order = False
551503
experimental_remove_data_class_copy_if_constructor_is_private = toolchains.kt.experimental_remove_data_class_copy_if_constructor_is_private
552-
if 'kt_experimental_preserve_declaration_order_in_abi_plugin_incompatible' in ctx.attr.tags:
504+
if "kt_experimental_preserve_declaration_order_in_abi_plugin_incompatible" in ctx.attr.tags:
553505
experimental_remove_data_class_copy_if_constructor_is_private = False
554506

555507
# Unwrap kotlinc_options/javac_options options or default to the ones being provided by the toolchain
@@ -560,6 +512,7 @@ def _run_kt_builder_action(
560512
args.add_all("--classpath", compile_deps.compile_jars)
561513
args.add("--reduced_classpath_mode", toolchains.kt.experimental_reduce_classpath_mode)
562514
args.add("--treat_internal_as_private_in_abi_jar", toolchains.kt.experimental_treat_internal_as_private_in_abi_jars)
515+
args.add("--build_tools_api", toolchains.kt.experimental_build_tools_api)
563516
args.add("--remove_private_classes_in_abi_jar", toolchains.kt.experimental_remove_private_classes_in_abi_jars)
564517
args.add("--preserve_declaration_order", experimental_preserve_declaration_order)
565518
args.add("--remove_data_class_copy_if_constructor_is_private", experimental_remove_data_class_copy_if_constructor_is_private)

kotlin/internal/toolchains.bzl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ def _kotlin_toolchain_impl(ctx):
9393
experimental_strict_kotlin_deps = ctx.attr.experimental_strict_kotlin_deps,
9494
experimental_report_unused_deps = ctx.attr.experimental_report_unused_deps,
9595
experimental_reduce_classpath_mode = ctx.attr.experimental_reduce_classpath_mode,
96+
experimental_build_tools_api = ctx.attr.experimental_build_tools_api,
9697
javac_options = ctx.attr.javac_options[JavacOptions] if ctx.attr.javac_options else None,
9798
kotlinc_options = ctx.attr.kotlinc_options[KotlincOptions] if ctx.attr.kotlinc_options else None,
9899
empty_jar = ctx.file._empty_jar,
@@ -262,6 +263,10 @@ _kt_toolchain = rule(
262263
"KOTLINBUILDER_REDUCED",
263264
],
264265
),
266+
"experimental_build_tools_api": attr.bool(
267+
doc = "Enables experimental support for Build Tools API integration",
268+
default = False,
269+
),
265270
"javac_options": attr.label(
266271
doc = "Compiler options for javac",
267272
providers = [JavacOptions],
@@ -330,6 +335,7 @@ def define_kt_toolchain(
330335
experimental_report_unused_deps = None,
331336
experimental_reduce_classpath_mode = None,
332337
experimental_multiplex_workers = None,
338+
experimental_build_tools_api = None,
333339
javac_options = Label("//kotlin/internal:default_javac_options"),
334340
kotlinc_options = Label("//kotlin/internal:default_kotlinc_options"),
335341
jvm_stdlibs = None,
@@ -360,6 +366,7 @@ def define_kt_toolchain(
360366
experimental_strict_kotlin_deps = experimental_strict_kotlin_deps,
361367
experimental_report_unused_deps = experimental_report_unused_deps,
362368
experimental_reduce_classpath_mode = experimental_reduce_classpath_mode,
369+
experimental_build_tools_api = experimental_build_tools_api,
363370
javac_options = javac_options,
364371
kotlinc_options = kotlinc_options,
365372
visibility = ["//visibility:public"],

kotlin/settings/BUILD.bazel

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,9 @@ bool_flag(
5151
build_setting_default = False,
5252
visibility = ["//visibility:public"],
5353
)
54+
55+
bool_flag(
56+
name = "experimental_build_tools_api",
57+
build_setting_default = False,
58+
visibility = ["//visibility:public"],
59+
)

kotlin/settings/BUILD.release.bazel

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,10 @@ bool_flag(
4343
build_setting_default = False,
4444
visibility = ["//visibility:public"],
4545
)
46+
47+
# --@rules_kotlin//kotlin/settings:experimental_build_tools_api=True
48+
bool_flag(
49+
name = "experimental_build_tools_api",
50+
build_setting_default = False,
51+
visibility = ["//visibility:public"],
52+
)

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
@@ -90,6 +90,7 @@ internal constructor(
9090
INSTRUMENT_COVERAGE("--instrument_coverage"),
9191
KSP_GENERATED_JAVA_SRCJAR("--ksp_generated_java_srcjar"),
9292
KSP_OPTS("--ksp_opts"),
93+
BUILD_TOOLS_API("--build_tools_api"),
9394
}
9495
}
9596

@@ -179,6 +180,9 @@ internal constructor(
179180
argMap.optionalSingle(KotlinBuilderFlags.ABI_JAR_REMOVE_DATA_CLASS_COPY_IF_CONSTRUCTOR_IS_PRIVATE)?.let {
180181
removeDataClassCopyIfConstructorIsPrivate = it == "true"
181182
}
183+
argMap.optionalSingle(KotlinBuilderFlags.BUILD_TOOLS_API)?.let {
184+
buildToolsApi = it == "true"
185+
}
182186
this
183187
}
184188

0 commit comments

Comments
 (0)