Skip to content

Commit 13f43bf

Browse files
ThomasCJYjchen-sc
andauthored
Add support for experimental removeDebugInfo flag (#1342)
* add flag * nit --------- Co-authored-by: Thomas Chen <[email protected]>
1 parent 55f8585 commit 13f43bf

File tree

7 files changed

+43
-2
lines changed

7 files changed

+43
-2
lines changed

CompileAvoidance.md

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,30 @@ define_kt_toolchain(
5454
)
5555
```
5656

57+
In order to completely remove debug information from the ABI jar, the `experimental_remove_debug_info_in_abi_jars` flag can be used along with `experimental_use_abi_jars`
58+
59+
```python
60+
load("//kotlin:core.bzl", "define_kt_toolchain")
61+
62+
63+
define_kt_toolchain(
64+
name = "kotlin_toolchain",
65+
experimental_use_abi_jars = True,
66+
experimental_remove_debug_info_in_abi_jars = True,
67+
)
68+
```
69+
5770
If you encounter bugs in older compiler versions such as [KT-71525](https://youtrack.jetbrains.com/issue/KT-71525) then ABI generation with only public symbols can be disabled on a per target basis by setting the following tags
5871

5972
```python
6073
load("//kotlin:jvm.bzl", "kt_jvm_library")
6174

6275
kt_jvm_library(
6376
name = "framework",
64-
tags = ["kt_treat_internal_as_private_in_abi_plugin_incompatible", "kt_remove_private_classes_in_abi_plugin_incompatible"],
77+
tags = [
78+
"kt_treat_internal_as_private_in_abi_plugin_incompatible",
79+
"kt_remove_private_classes_in_abi_plugin_incompatible",
80+
"kt_remove_debug_info_in_abi_plugin_incompatible"
81+
],
6582
)
6683
```

docs/kotlin.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,8 @@ load("@rules_kotlin//kotlin:core.bzl", "define_kt_toolchain")
513513

514514
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>,
515515
<a href="#define_kt_toolchain-experimental_treat_internal_as_private_in_abi_jars">experimental_treat_internal_as_private_in_abi_jars</a>,
516-
<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>,
516+
<a href="#define_kt_toolchain-experimental_remove_private_classes_in_abi_jars">experimental_remove_private_classes_in_abi_jars</a>,
517+
<a href="#define_kt_toolchain-experimental_remove_debug_info_in_abi_jars">experimental_remove_debug_info_in_abi_jars</a>, <a href="#define_kt_toolchain-experimental_strict_kotlin_deps">experimental_strict_kotlin_deps</a>,
517518
<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>,
518519
<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>,
519520
<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>,
@@ -534,6 +535,7 @@ Define the Kotlin toolchain.
534535
| <a id="define_kt_toolchain-experimental_use_abi_jars"></a>experimental_use_abi_jars | <p align="center"> - </p> | `False` |
535536
| <a id="define_kt_toolchain-experimental_treat_internal_as_private_in_abi_jars"></a>experimental_treat_internal_as_private_in_abi_jars | <p align="center"> - </p> | `False` |
536537
| <a id="define_kt_toolchain-experimental_remove_private_classes_in_abi_jars"></a>experimental_remove_private_classes_in_abi_jars | <p align="center"> - </p> | `False` |
538+
| <a id="define_kt_toolchain-experimental_remove_debug_info_in_abi_jars"></a>experimental_remove_debug_info_in_abi_jars | <p align="center"> - </p> | `False` |
537539
| <a id="define_kt_toolchain-experimental_strict_kotlin_deps"></a>experimental_strict_kotlin_deps | <p align="center"> - </p> | `None` |
538540
| <a id="define_kt_toolchain-experimental_report_unused_deps"></a>experimental_report_unused_deps | <p align="center"> - </p> | `None` |
539541
| <a id="define_kt_toolchain-experimental_reduce_classpath_mode"></a>experimental_reduce_classpath_mode | <p align="center"> - </p> | `None` |

kotlin/internal/jvm/compile.bzl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,9 @@ def _run_kt_builder_action(
537537
"\nAdditionally ensure the target does not contain the kt_remove_private_classes_in_abi_plugin_incompatible tag.",
538538
)
539539

540+
if not "kt_remove_debug_info_in_abi_plugin_incompatible" in ctx.attr.tags and toolchains.kt.experimental_remove_debug_info_in_abi_jars == True:
541+
args.add("--remove_debug_info_in_abi_jar", "true")
542+
540543
args.add("--build_kotlin", build_kotlin)
541544

542545
progress_message = "%s %%{label} { kt: %d, java: %d, srcjars: %d } for %s" % (

kotlin/internal/toolchains.bzl

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ def _kotlin_toolchain_impl(ctx):
8888
experimental_use_abi_jars = ctx.attr.experimental_use_abi_jars,
8989
experimental_treat_internal_as_private_in_abi_jars = ctx.attr.experimental_treat_internal_as_private_in_abi_jars,
9090
experimental_remove_private_classes_in_abi_jars = ctx.attr.experimental_remove_private_classes_in_abi_jars,
91+
experimental_remove_debug_info_in_abi_jars = ctx.attr.experimental_remove_debug_info_in_abi_jars,
9192
experimental_strict_kotlin_deps = ctx.attr.experimental_strict_kotlin_deps,
9293
experimental_report_unused_deps = ctx.attr.experimental_report_unused_deps,
9394
experimental_reduce_classpath_mode = ctx.attr.experimental_reduce_classpath_mode,
@@ -222,6 +223,13 @@ _kt_toolchain = rule(
222223
`kt_remove_private_classes_in_abi_plugin_incompatible`""",
223224
default = False,
224225
),
226+
"experimental_remove_debug_info_in_abi_jars": attr.bool(
227+
doc = """This applies the following compiler plugin option:
228+
plugin:org.jetbrains.kotlin.jvm.abi:removeDebugInfo=true
229+
Can be disabled for an individual target using the tag.
230+
`kt_remove_debug_info_in_abi_plugin_incompatible`""",
231+
default = False,
232+
),
225233
"experimental_strict_kotlin_deps": attr.string(
226234
doc = "Report strict deps violations",
227235
default = "off",
@@ -322,6 +330,7 @@ def define_kt_toolchain(
322330
experimental_use_abi_jars = False,
323331
experimental_treat_internal_as_private_in_abi_jars = False,
324332
experimental_remove_private_classes_in_abi_jars = False,
333+
experimental_remove_debug_info_in_abi_jars = False,
325334
experimental_strict_kotlin_deps = None,
326335
experimental_report_unused_deps = None,
327336
experimental_reduce_classpath_mode = None,
@@ -351,6 +360,7 @@ def define_kt_toolchain(
351360
}),
352361
experimental_treat_internal_as_private_in_abi_jars = experimental_treat_internal_as_private_in_abi_jars,
353362
experimental_remove_private_classes_in_abi_jars = experimental_remove_private_classes_in_abi_jars,
363+
experimental_remove_debug_info_in_abi_jars = experimental_remove_debug_info_in_abi_jars,
354364
experimental_multiplex_workers = experimental_multiplex_workers,
355365
experimental_strict_kotlin_deps = experimental_strict_kotlin_deps,
356366
experimental_report_unused_deps = experimental_report_unused_deps,

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ class KotlinBuilder
7979
ABI_JAR("--abi_jar"),
8080
ABI_JAR_INTERNAL_AS_PRIVATE("--treat_internal_as_private_in_abi_jar"),
8181
ABI_JAR_REMOVE_PRIVATE_CLASSES("--remove_private_classes_in_abi_jar"),
82+
ABI_JAR_REMOVE_DEBUG_INFO("--remove_debug_info_in_abi_jar"),
8283
GENERATED_JAVA_SRC_JAR("--generated_java_srcjar"),
8384
GENERATED_JAVA_STUB_JAR("--kapt_generated_stub_jar"),
8485
GENERATED_CLASS_JAR("--kapt_generated_class_jar"),
@@ -167,6 +168,9 @@ class KotlinBuilder
167168
argMap.optionalSingle(KotlinBuilderFlags.ABI_JAR_REMOVE_PRIVATE_CLASSES)?.let {
168169
removePrivateClassesInAbiJar = it == "true"
169170
}
171+
argMap.optionalSingle(KotlinBuilderFlags.ABI_JAR_REMOVE_DEBUG_INFO)?.let {
172+
removeDebugInfo = it == "true"
173+
}
170174
argMap.optionalSingle(KotlinBuilderFlags.BUILD_TOOLS_API)?.let {
171175
buildToolsApi = it == "true"
172176
}

src/main/kotlin/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,9 @@ class KotlinJvmTaskExecutor
9595
if (info.removePrivateClassesInAbiJar) {
9696
flag("removePrivateClasses", "true")
9797
}
98+
if (info.removeDebugInfo) {
99+
flag("removeDebugInfo", "true")
100+
}
98101
}
99102
given(outputs.jar).empty {
100103
plugin(plugins.skipCodeGen)

src/main/protobuf/kotlin_model.proto

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ message CompilationTaskInfo {
8888
bool remove_private_classes_in_abi_jar = 13;
8989
// New Build Tools API. Required for incremental compilation.
9090
bool build_tools_api = 14;
91+
// Debug info is stripped in abi.jar generation
92+
bool remove_debug_info = 15;
9193
}
9294

9395
// Nested messages not marked with stable could be refactored.

0 commit comments

Comments
 (0)