From 34165013a42b0eaab698db8a1aa0e11c660794aa Mon Sep 17 00:00:00 2001 From: Nick Korostelev Date: Fri, 7 Oct 2022 16:36:30 -0700 Subject: [PATCH 01/20] Enables compiling against direct dependencies only - kotlin --- kotlin/internal/jvm/BUILD | 10 +++++++++ kotlin/internal/jvm/BUILD.release.bazel | 10 +++++++++ kotlin/internal/jvm/compile.bzl | 28 ++++++++++++++++++------- kotlin/internal/jvm/jvm.bzl | 9 ++++++++ 4 files changed, 49 insertions(+), 8 deletions(-) diff --git a/kotlin/internal/jvm/BUILD b/kotlin/internal/jvm/BUILD index bbae8718a..8fcd9f982 100644 --- a/kotlin/internal/jvm/BUILD +++ b/kotlin/internal/jvm/BUILD @@ -36,6 +36,8 @@ bzl_library( ], ) +load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") + # Jdeps plugin can be enabled or disabled using the following flag ont the command line # --@io_bazel_rules_kotlin//kotlin/internal/jvm:kotlin_deps=false bool_flag( @@ -43,3 +45,11 @@ bool_flag( build_setting_default = True, # Upstream default behavior visibility = ["//visibility:public"], ) + +# Kotlin strict deps can be enabled by setting the following value on the command line +# --@io_bazel_rules_kotlin//kotlin/internal/jvm:experimental_prune_transitive_deps=True +bool_flag( + name = "experimental_prune_transitive_deps", + build_setting_default = False, + visibility = ["//visibility:public"] +) \ No newline at end of file diff --git a/kotlin/internal/jvm/BUILD.release.bazel b/kotlin/internal/jvm/BUILD.release.bazel index 89cce512d..0f20f100a 100644 --- a/kotlin/internal/jvm/BUILD.release.bazel +++ b/kotlin/internal/jvm/BUILD.release.bazel @@ -11,6 +11,8 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +exports_files(["jetbrains-deshade.jarjar"]) + load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") exports_files(["jetbrains-deshade.jarjar"]) @@ -22,3 +24,11 @@ bool_flag( build_setting_default = True, # Upstream default behavior visibility = ["//visibility:public"], ) + +# Kotlin strict deps can be enabled by setting the following value on the command line +# --@io_bazel_rules_kotlin//kotlin/internal/jvm:experimental_prune_transitive_deps=True +bool_flag( + name = "experimental_prune_transitive_deps", + build_setting_default = False, + visibility = ["//visibility:public"] +) diff --git a/kotlin/internal/jvm/compile.bzl b/kotlin/internal/jvm/compile.bzl index f6b4e0da9..ccbd5c20e 100644 --- a/kotlin/internal/jvm/compile.bzl +++ b/kotlin/internal/jvm/compile.bzl @@ -40,6 +40,7 @@ load( "//kotlin/internal/utils:sets.bzl", _sets = "sets", ) +load("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo") load( "@bazel_tools//tools/jdk:toolchain_utils.bzl", "find_java_runtime_toolchain", @@ -90,7 +91,7 @@ def _compiler_toolchains(ctx): java_runtime = find_java_runtime_toolchain(ctx, ctx.attr._host_javabase), ) -def _jvm_deps(toolchains, associated_targets, deps, runtime_deps = []): +def _jvm_deps(ctx, toolchains, associated_targets, deps, runtime_deps = []): """Encapsulates jvm dependency metadata.""" diff = _sets.intersection( _sets.copy_of([x.label for x in associated_targets]), @@ -102,16 +103,26 @@ def _jvm_deps(toolchains, associated_targets, deps, runtime_deps = []): ",\n ".join([" %s" % x for x in list(diff)]), ) dep_infos = [_java_info(d) for d in associated_targets + deps] + [toolchains.kt.jvm_stdlibs] + + # Reduced classpath, exclude transitive deps from compilation + if (ctx.attr._experimental_prune_transitive_deps[BuildSettingInfo].value): + transitive = [ + d.compile_jars + for d in dep_infos + ] + else: + transitive = [ + d.compile_jars + for d in dep_infos + ] + [ + d.transitive_compile_time_jars + for d in dep_infos + ] + return struct( deps = dep_infos, compile_jars = depset( - transitive = [ - d.compile_jars - for d in dep_infos - ] + [ - d.transitive_compile_time_jars - for d in dep_infos - ], + transitive = transitive, ), runtime_deps = [_java_info(d) for d in runtime_deps], ) @@ -475,6 +486,7 @@ def kt_jvm_produce_jar_actions(ctx, rule_kind): srcs = _partitioned_srcs(ctx.files.srcs) associates = _associate_utils.get_associates(ctx) compile_deps = _jvm_deps( + ctx, toolchains, associates.targets, deps = ctx.attr.deps, diff --git a/kotlin/internal/jvm/jvm.bzl b/kotlin/internal/jvm/jvm.bzl index 93d345558..82d98fa2e 100644 --- a/kotlin/internal/jvm/jvm.bzl +++ b/kotlin/internal/jvm/jvm.bzl @@ -233,6 +233,15 @@ _common_attr = utils.add_dicts( mandatory = False, ), "_kotlin_deps": attr.label(default = ":kotlin_deps"), + doc = """If enabled, compilation is performed against only direct dependencies. + Transitive deps required for compilation must be explicitly added""", + default = ":experimental_prune_transitive_deps", + ), + "_experimental_prune_transitive_deps": attr.label( + doc = """If enabled, compilation is performed against only direct dependencies. + Transitive deps required for compilation must be explicitly added""", + default = ":experimental_prune_transitive_deps", + ), }, ) From 16fecde11a483aa4959ddfe607ffba2982baab69 Mon Sep 17 00:00:00 2001 From: Nick Korostelev Date: Wed, 12 Oct 2022 20:07:01 -0400 Subject: [PATCH 02/20] optimize libktandroid targets --- kotlin/internal/jvm/android.bzl | 40 +++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/kotlin/internal/jvm/android.bzl b/kotlin/internal/jvm/android.bzl index d65f5a84f..d2d40e4a3 100644 --- a/kotlin/internal/jvm/android.bzl +++ b/kotlin/internal/jvm/android.bzl @@ -30,6 +30,7 @@ def _kt_android_artifact( enable_data_binding = False, tags = [], exec_properties = None, + resource_files = None, **kwargs): """Delegates Android related build attributes to the native rules but uses the Kotlin builder to compile Java and Kotlin srcs. Returns a sequence of labels that a wrapping macro should export. @@ -40,18 +41,33 @@ def _kt_android_artifact( # TODO(bazelbuild/rules_kotlin/issues/273): This should be retrieved from a provider. base_deps = [_ANDROID_SDK_JAR] + deps - # TODO(bazelbuild/rules_kotlin/issues/556): replace with starlark - # buildifier: disable=native-android - native.android_library( - name = base_name, - visibility = ["//visibility:private"], - exports = base_deps, - deps = deps if enable_data_binding else [], - enable_data_binding = enable_data_binding, - tags = tags, - exec_properties = exec_properties, - **kwargs - ) + exported_target_labels = [kt_name] + if resource_files: + # TODO(bazelbuild/rules_kotlin/issues/556): replace with starlark + # buildifier: disable=native-android + # Do not export deps to avoid all upstream targets to be invalidated when ABI changes. + native.android_library( + name = base_name, + resource_files = resource_files, + deps = deps, + custom_package = kwargs.get("custom_package", default = None), + manifest = kwargs.get("manifest", default = None), + enable_data_binding = enable_data_binding, + tags = tags, + visibility = ["//visibility:private"], + ) + exported_target_labels.append(base_name) + else: + # No need to export this target, as it's used exclusively internally + native.android_library( + name = base_name, + exports = deps, + enable_data_binding = enable_data_binding, + tags = tags, + visibility = ["//visibility:private"], + **kwargs + ) + _kt_jvm_library( name = kt_name, srcs = srcs, From 32638bf4aee76c4556a21a8d00bcb8557452acf4 Mon Sep 17 00:00:00 2001 From: Nick Korostelev Date: Mon, 17 Oct 2022 14:37:58 -0700 Subject: [PATCH 03/20] add kt_prune_transitive_deps_incompatible tag support --- kotlin/internal/jvm/android.bzl | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/kotlin/internal/jvm/android.bzl b/kotlin/internal/jvm/android.bzl index d2d40e4a3..2b317ac64 100644 --- a/kotlin/internal/jvm/android.bzl +++ b/kotlin/internal/jvm/android.bzl @@ -42,8 +42,22 @@ def _kt_android_artifact( base_deps = [_ANDROID_SDK_JAR] + deps exported_target_labels = [kt_name] - if resource_files: - # TODO(bazelbuild/rules_kotlin/issues/556): replace with starlark + if "kt_prune_transitive_deps_incompatible" in tags: + # TODO(https://github.com/bazelbuild/rules_kotlin/issues/556): replace with starlark + # buildifier: disable=native-android + native.android_library( + name = base_name, + resource_files = resource_files, + exports = base_deps, + deps = deps if enable_data_binding else [], + enable_data_binding = enable_data_binding, + tags = tags, + visibility = ["//visibility:private"], + **kwargs, + ) + exported_target_labels.append(base_name) + elif resource_files: + # TODO(https://github.com/bazelbuild/rules_kotlin/issues/556): replace with starlark # buildifier: disable=native-android # Do not export deps to avoid all upstream targets to be invalidated when ABI changes. native.android_library( @@ -65,7 +79,7 @@ def _kt_android_artifact( enable_data_binding = enable_data_binding, tags = tags, visibility = ["//visibility:private"], - **kwargs + **kwargs, ) _kt_jvm_library( From f11d2383e7697970224a365a6dbaeac0e3dd7c30 Mon Sep 17 00:00:00 2001 From: Nick Korostelev Date: Mon, 17 Oct 2022 14:41:06 -0700 Subject: [PATCH 04/20] fix --- kotlin/internal/jvm/android.bzl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kotlin/internal/jvm/android.bzl b/kotlin/internal/jvm/android.bzl index 2b317ac64..4c9eaa28d 100644 --- a/kotlin/internal/jvm/android.bzl +++ b/kotlin/internal/jvm/android.bzl @@ -53,7 +53,7 @@ def _kt_android_artifact( enable_data_binding = enable_data_binding, tags = tags, visibility = ["//visibility:private"], - **kwargs, + **kwargs ) exported_target_labels.append(base_name) elif resource_files: @@ -79,7 +79,7 @@ def _kt_android_artifact( enable_data_binding = enable_data_binding, tags = tags, visibility = ["//visibility:private"], - **kwargs, + **kwargs ) _kt_jvm_library( From a05fc411aad568e18d809dbdf90a4207d9ce2324 Mon Sep 17 00:00:00 2001 From: Nick Korostelev Date: Tue, 1 Nov 2022 12:59:22 -0700 Subject: [PATCH 05/20] fixes after rebase --- kotlin/internal/jvm/BUILD.release.bazel | 2 -- kotlin/internal/jvm/jvm.bzl | 4 ---- 2 files changed, 6 deletions(-) diff --git a/kotlin/internal/jvm/BUILD.release.bazel b/kotlin/internal/jvm/BUILD.release.bazel index 0f20f100a..5106e436a 100644 --- a/kotlin/internal/jvm/BUILD.release.bazel +++ b/kotlin/internal/jvm/BUILD.release.bazel @@ -11,8 +11,6 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -exports_files(["jetbrains-deshade.jarjar"]) - load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") exports_files(["jetbrains-deshade.jarjar"]) diff --git a/kotlin/internal/jvm/jvm.bzl b/kotlin/internal/jvm/jvm.bzl index 82d98fa2e..b29c28d5e 100644 --- a/kotlin/internal/jvm/jvm.bzl +++ b/kotlin/internal/jvm/jvm.bzl @@ -233,10 +233,6 @@ _common_attr = utils.add_dicts( mandatory = False, ), "_kotlin_deps": attr.label(default = ":kotlin_deps"), - doc = """If enabled, compilation is performed against only direct dependencies. - Transitive deps required for compilation must be explicitly added""", - default = ":experimental_prune_transitive_deps", - ), "_experimental_prune_transitive_deps": attr.label( doc = """If enabled, compilation is performed against only direct dependencies. Transitive deps required for compilation must be explicitly added""", From 2aabe484f3f1af2223166664d5f6a02738a47bd9 Mon Sep 17 00:00:00 2001 From: Nick Korostelev Date: Wed, 14 Dec 2022 11:35:23 -0800 Subject: [PATCH 06/20] Introduce the new flag under kotlin/settings --- kotlin/BUILD | 1 + kotlin/internal/jvm/compile.bzl | 3 +-- kotlin/internal/toolchains.bzl | 7 +++++++ kotlin/settings/BUILD.bazel | 31 +++++++++++++++++++++++++++++ kotlin/settings/BUILD.release.bazel | 22 ++++++++++++++++++++ 5 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 kotlin/settings/BUILD.bazel create mode 100644 kotlin/settings/BUILD.release.bazel diff --git a/kotlin/BUILD b/kotlin/BUILD index 0774f9284..1906cf6b8 100644 --- a/kotlin/BUILD +++ b/kotlin/BUILD @@ -29,6 +29,7 @@ release_archive( }, deps = [ "//kotlin/internal:pkg", + "//kotlin/settings:pkg", ], ) diff --git a/kotlin/internal/jvm/compile.bzl b/kotlin/internal/jvm/compile.bzl index ccbd5c20e..c4d997bb8 100644 --- a/kotlin/internal/jvm/compile.bzl +++ b/kotlin/internal/jvm/compile.bzl @@ -46,7 +46,6 @@ load( "find_java_runtime_toolchain", "find_java_toolchain", ) -load("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo") # UTILITY ############################################################################################################## @@ -105,7 +104,7 @@ def _jvm_deps(ctx, toolchains, associated_targets, deps, runtime_deps = []): dep_infos = [_java_info(d) for d in associated_targets + deps] + [toolchains.kt.jvm_stdlibs] # Reduced classpath, exclude transitive deps from compilation - if (ctx.attr._experimental_prune_transitive_deps[BuildSettingInfo].value): + if (toolchains.kt.experimental_prune_transitive_deps_v2): transitive = [ d.compile_jars for d in dep_infos diff --git a/kotlin/internal/toolchains.bzl b/kotlin/internal/toolchains.bzl index 23aa0681c..a81362cf8 100644 --- a/kotlin/internal/toolchains.bzl +++ b/kotlin/internal/toolchains.bzl @@ -28,6 +28,7 @@ load( "//src/main/starlark/core/repositories:tools.bzl", "absolute_target", ) +load("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo") """Kotlin Toolchains @@ -92,6 +93,7 @@ def _kotlin_toolchain_impl(ctx): empty_jar = ctx.file._empty_jar, empty_jdeps = ctx.file._empty_jdeps, jacocorunner = ctx.attr.jacocorunner, + experimental_prune_transitive_deps_v2 = ctx.attr._experimental_prune_transitive_deps_v2[BuildSettingInfo].value, ) return [ @@ -259,6 +261,11 @@ _kt_toolchain = rule( "jacocorunner": attr.label( default = Label("@bazel_tools//tools/jdk:JacocoCoverage"), ), + "_experimental_prune_transitive_deps_v2": attr.label( + doc = """If enabled, compilation is performed against only direct dependencies. + Transitive deps required for compilation must be explicitly added""", + default = Label("//kotlin/settings:experimental_prune_transitive_deps_v2"), + ), }, implementation = _kotlin_toolchain_impl, provides = [platform_common.ToolchainInfo], diff --git a/kotlin/settings/BUILD.bazel b/kotlin/settings/BUILD.bazel new file mode 100644 index 000000000..14296471f --- /dev/null +++ b/kotlin/settings/BUILD.bazel @@ -0,0 +1,31 @@ +# Copyright 2020 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +load("//src/main/starlark/release:packager.bzl", "release_archive") + +release_archive( + name = "pkg", + src_map = { + "BUILD.release.bazel": "BUILD.bazel", + }, +) + +load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") + +# Kotlin strict deps can be enabled by setting the following value on the command line +# --@io_bazel_rules_kotlin//kotlin/settings:experimental_prune_transitive_deps_v2=True +bool_flag( + name = "experimental_prune_transitive_deps_v2", + build_setting_default = False, + visibility = ["//visibility:public"], +) \ No newline at end of file diff --git a/kotlin/settings/BUILD.release.bazel b/kotlin/settings/BUILD.release.bazel new file mode 100644 index 000000000..8dbc4b8f9 --- /dev/null +++ b/kotlin/settings/BUILD.release.bazel @@ -0,0 +1,22 @@ +# Copyright 2020 The Bazel Authors. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") + +# Kotlin strict deps can be enabled by setting the following value on the command line +# --@io_bazel_rules_kotlin//kotlin/settings:experimental_prune_transitive_deps_v2=True +bool_flag( + name = "experimental_prune_transitive_deps_v2", + build_setting_default = False, + visibility = ["//visibility:public"], +) From 2b4cbe89b0bdcb438cf58591d41289f09d978302 Mon Sep 17 00:00:00 2001 From: Nick Korostelev Date: Wed, 14 Dec 2022 11:43:52 -0800 Subject: [PATCH 07/20] Remove traced of the old flag --- kotlin/internal/jvm/BUILD | 8 -------- kotlin/internal/jvm/BUILD.release.bazel | 8 -------- kotlin/internal/jvm/compile.bzl | 2 +- kotlin/internal/jvm/jvm.bzl | 5 ----- kotlin/internal/toolchains.bzl | 6 +++--- kotlin/settings/BUILD.bazel | 4 ++-- kotlin/settings/BUILD.release.bazel | 4 ++-- 7 files changed, 8 insertions(+), 29 deletions(-) diff --git a/kotlin/internal/jvm/BUILD b/kotlin/internal/jvm/BUILD index 8fcd9f982..d85c50da9 100644 --- a/kotlin/internal/jvm/BUILD +++ b/kotlin/internal/jvm/BUILD @@ -45,11 +45,3 @@ bool_flag( build_setting_default = True, # Upstream default behavior visibility = ["//visibility:public"], ) - -# Kotlin strict deps can be enabled by setting the following value on the command line -# --@io_bazel_rules_kotlin//kotlin/internal/jvm:experimental_prune_transitive_deps=True -bool_flag( - name = "experimental_prune_transitive_deps", - build_setting_default = False, - visibility = ["//visibility:public"] -) \ No newline at end of file diff --git a/kotlin/internal/jvm/BUILD.release.bazel b/kotlin/internal/jvm/BUILD.release.bazel index 5106e436a..89cce512d 100644 --- a/kotlin/internal/jvm/BUILD.release.bazel +++ b/kotlin/internal/jvm/BUILD.release.bazel @@ -22,11 +22,3 @@ bool_flag( build_setting_default = True, # Upstream default behavior visibility = ["//visibility:public"], ) - -# Kotlin strict deps can be enabled by setting the following value on the command line -# --@io_bazel_rules_kotlin//kotlin/internal/jvm:experimental_prune_transitive_deps=True -bool_flag( - name = "experimental_prune_transitive_deps", - build_setting_default = False, - visibility = ["//visibility:public"] -) diff --git a/kotlin/internal/jvm/compile.bzl b/kotlin/internal/jvm/compile.bzl index c4d997bb8..707479002 100644 --- a/kotlin/internal/jvm/compile.bzl +++ b/kotlin/internal/jvm/compile.bzl @@ -104,7 +104,7 @@ def _jvm_deps(ctx, toolchains, associated_targets, deps, runtime_deps = []): dep_infos = [_java_info(d) for d in associated_targets + deps] + [toolchains.kt.jvm_stdlibs] # Reduced classpath, exclude transitive deps from compilation - if (toolchains.kt.experimental_prune_transitive_deps_v2): + if (toolchains.kt.experimental_prune_transitive_deps): transitive = [ d.compile_jars for d in dep_infos diff --git a/kotlin/internal/jvm/jvm.bzl b/kotlin/internal/jvm/jvm.bzl index b29c28d5e..93d345558 100644 --- a/kotlin/internal/jvm/jvm.bzl +++ b/kotlin/internal/jvm/jvm.bzl @@ -233,11 +233,6 @@ _common_attr = utils.add_dicts( mandatory = False, ), "_kotlin_deps": attr.label(default = ":kotlin_deps"), - "_experimental_prune_transitive_deps": attr.label( - doc = """If enabled, compilation is performed against only direct dependencies. - Transitive deps required for compilation must be explicitly added""", - default = ":experimental_prune_transitive_deps", - ), }, ) diff --git a/kotlin/internal/toolchains.bzl b/kotlin/internal/toolchains.bzl index a81362cf8..999967429 100644 --- a/kotlin/internal/toolchains.bzl +++ b/kotlin/internal/toolchains.bzl @@ -93,7 +93,7 @@ def _kotlin_toolchain_impl(ctx): empty_jar = ctx.file._empty_jar, empty_jdeps = ctx.file._empty_jdeps, jacocorunner = ctx.attr.jacocorunner, - experimental_prune_transitive_deps_v2 = ctx.attr._experimental_prune_transitive_deps_v2[BuildSettingInfo].value, + experimental_prune_transitive_deps = ctx.attr._experimental_prune_transitive_deps[BuildSettingInfo].value, ) return [ @@ -261,10 +261,10 @@ _kt_toolchain = rule( "jacocorunner": attr.label( default = Label("@bazel_tools//tools/jdk:JacocoCoverage"), ), - "_experimental_prune_transitive_deps_v2": attr.label( + "_experimental_prune_transitive_deps": attr.label( doc = """If enabled, compilation is performed against only direct dependencies. Transitive deps required for compilation must be explicitly added""", - default = Label("//kotlin/settings:experimental_prune_transitive_deps_v2"), + default = Label("//kotlin/settings:experimental_prune_transitive_deps"), ), }, implementation = _kotlin_toolchain_impl, diff --git a/kotlin/settings/BUILD.bazel b/kotlin/settings/BUILD.bazel index 14296471f..20ffb4228 100644 --- a/kotlin/settings/BUILD.bazel +++ b/kotlin/settings/BUILD.bazel @@ -23,9 +23,9 @@ release_archive( load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") # Kotlin strict deps can be enabled by setting the following value on the command line -# --@io_bazel_rules_kotlin//kotlin/settings:experimental_prune_transitive_deps_v2=True +# --@io_bazel_rules_kotlin//kotlin/settings:experimental_prune_transitive_deps=True bool_flag( - name = "experimental_prune_transitive_deps_v2", + name = "experimental_prune_transitive_deps", build_setting_default = False, visibility = ["//visibility:public"], ) \ No newline at end of file diff --git a/kotlin/settings/BUILD.release.bazel b/kotlin/settings/BUILD.release.bazel index 8dbc4b8f9..6b59c01cd 100644 --- a/kotlin/settings/BUILD.release.bazel +++ b/kotlin/settings/BUILD.release.bazel @@ -14,9 +14,9 @@ load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") # Kotlin strict deps can be enabled by setting the following value on the command line -# --@io_bazel_rules_kotlin//kotlin/settings:experimental_prune_transitive_deps_v2=True +# --@io_bazel_rules_kotlin//kotlin/settings:experimental_prune_transitive_deps=True bool_flag( - name = "experimental_prune_transitive_deps_v2", + name = "experimental_prune_transitive_deps", build_setting_default = False, visibility = ["//visibility:public"], ) From 37af8f2e7dc60c52277d7b1418383d8eaca7e554 Mon Sep 17 00:00:00 2001 From: Nick Korostelev Date: Wed, 14 Dec 2022 12:03:50 -0800 Subject: [PATCH 08/20] buildifier cleanup --- kotlin/internal/jvm/BUILD | 2 -- kotlin/internal/jvm/compile.bzl | 3 +-- kotlin/settings/BUILD.bazel | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/kotlin/internal/jvm/BUILD b/kotlin/internal/jvm/BUILD index d85c50da9..bbae8718a 100644 --- a/kotlin/internal/jvm/BUILD +++ b/kotlin/internal/jvm/BUILD @@ -36,8 +36,6 @@ bzl_library( ], ) -load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") - # Jdeps plugin can be enabled or disabled using the following flag ont the command line # --@io_bazel_rules_kotlin//kotlin/internal/jvm:kotlin_deps=false bool_flag( diff --git a/kotlin/internal/jvm/compile.bzl b/kotlin/internal/jvm/compile.bzl index 707479002..2cab0d595 100644 --- a/kotlin/internal/jvm/compile.bzl +++ b/kotlin/internal/jvm/compile.bzl @@ -90,7 +90,7 @@ def _compiler_toolchains(ctx): java_runtime = find_java_runtime_toolchain(ctx, ctx.attr._host_javabase), ) -def _jvm_deps(ctx, toolchains, associated_targets, deps, runtime_deps = []): +def _jvm_deps(toolchains, associated_targets, deps, runtime_deps = []): """Encapsulates jvm dependency metadata.""" diff = _sets.intersection( _sets.copy_of([x.label for x in associated_targets]), @@ -485,7 +485,6 @@ def kt_jvm_produce_jar_actions(ctx, rule_kind): srcs = _partitioned_srcs(ctx.files.srcs) associates = _associate_utils.get_associates(ctx) compile_deps = _jvm_deps( - ctx, toolchains, associates.targets, deps = ctx.attr.deps, diff --git a/kotlin/settings/BUILD.bazel b/kotlin/settings/BUILD.bazel index 20ffb4228..6fcf12b87 100644 --- a/kotlin/settings/BUILD.bazel +++ b/kotlin/settings/BUILD.bazel @@ -28,4 +28,4 @@ bool_flag( name = "experimental_prune_transitive_deps", build_setting_default = False, visibility = ["//visibility:public"], -) \ No newline at end of file +) From 155863697e203e45f54012563766538a26da498a Mon Sep 17 00:00:00 2001 From: Nick Korostelev Date: Wed, 14 Dec 2022 12:12:32 -0800 Subject: [PATCH 09/20] more buildifier --- kotlin/settings/BUILD.bazel | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/kotlin/settings/BUILD.bazel b/kotlin/settings/BUILD.bazel index 6fcf12b87..5b4cfea31 100644 --- a/kotlin/settings/BUILD.bazel +++ b/kotlin/settings/BUILD.bazel @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. load("//src/main/starlark/release:packager.bzl", "release_archive") +load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") release_archive( name = "pkg", @@ -20,8 +21,6 @@ release_archive( }, ) -load("@bazel_skylib//rules:common_settings.bzl", "bool_flag") - # Kotlin strict deps can be enabled by setting the following value on the command line # --@io_bazel_rules_kotlin//kotlin/settings:experimental_prune_transitive_deps=True bool_flag( From 3186a3851fc078c7821645790a08eda8115c9178 Mon Sep 17 00:00:00 2001 From: Nick Korostelev Date: Wed, 26 Jul 2023 16:11:57 -0700 Subject: [PATCH 10/20] fix after git merge --- kotlin/internal/toolchains.bzl | 4 ---- 1 file changed, 4 deletions(-) diff --git a/kotlin/internal/toolchains.bzl b/kotlin/internal/toolchains.bzl index 7ea0a32bd..7d0945fcb 100644 --- a/kotlin/internal/toolchains.bzl +++ b/kotlin/internal/toolchains.bzl @@ -25,10 +25,6 @@ load( _TOOLCHAIN_TYPE = "TOOLCHAIN_TYPE", ) -load( - "//src/main/starlark/core/repositories:tools.bzl", - "absolute_target", -) load("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo") """Kotlin Toolchains From b2ab463b749a10d06f48576bbaf7a07649e878c0 Mon Sep 17 00:00:00 2001 From: Nick Korostelev Date: Wed, 26 Jul 2023 16:20:34 -0700 Subject: [PATCH 11/20] remove explicit builds tool version to fallback on whatever version is installed --- examples/deps/WORKSPACE | 1 - 1 file changed, 1 deletion(-) diff --git a/examples/deps/WORKSPACE b/examples/deps/WORKSPACE index c84a4edb9..93e896db2 100644 --- a/examples/deps/WORKSPACE +++ b/examples/deps/WORKSPACE @@ -70,7 +70,6 @@ load( android_sdk_repository( name = "androidsdk", - build_tools_version = "30.0.2", ) http_archive( From 81cce1e4b4a10bb2d0a0366db9de15b3f74cc84b Mon Sep 17 00:00:00 2001 From: Nick Korostelev Date: Wed, 26 Jul 2023 16:37:02 -0700 Subject: [PATCH 12/20] All excluding specific target via kt_experimental_prune_transitive_deps_incompatible tag --- kotlin/internal/jvm/compile.bzl | 7 ++++--- kotlin/internal/toolchains.bzl | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/kotlin/internal/jvm/compile.bzl b/kotlin/internal/jvm/compile.bzl index 48ad63a5a..98a32cb1e 100644 --- a/kotlin/internal/jvm/compile.bzl +++ b/kotlin/internal/jvm/compile.bzl @@ -40,7 +40,6 @@ load( "//kotlin/internal/utils:sets.bzl", _sets = "sets", ) -load("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo") load( "@bazel_tools//tools/jdk:toolchain_utils.bzl", "find_java_runtime_toolchain", @@ -90,7 +89,7 @@ def _compiler_toolchains(ctx): java_runtime = find_java_runtime_toolchain(ctx, ctx.attr._host_javabase), ) -def _jvm_deps(toolchains, associated_targets, deps, runtime_deps = []): +def _jvm_deps(ctx, toolchains, associated_targets, deps, runtime_deps = []): """Encapsulates jvm dependency metadata.""" diff = _sets.intersection( _sets.copy_of([x.label for x in associated_targets]), @@ -104,7 +103,8 @@ def _jvm_deps(toolchains, associated_targets, deps, runtime_deps = []): dep_infos = [_java_info(d) for d in associated_targets + deps] + [toolchains.kt.jvm_stdlibs] # Reduced classpath, exclude transitive deps from compilation - if (toolchains.kt.experimental_prune_transitive_deps): + if (toolchains.kt.experimental_prune_transitive_deps and + not "kt_experimental_prune_transitive_deps_incompatible" in ctx.attr.tags): transitive = [ d.compile_jars for d in dep_infos @@ -525,6 +525,7 @@ def kt_jvm_produce_jar_actions(ctx, rule_kind): srcs = _partitioned_srcs(ctx.files.srcs) associates = _associate_utils.get_associates(ctx) compile_deps = _jvm_deps( + ctx, toolchains, associates.targets, deps = ctx.attr.deps, diff --git a/kotlin/internal/toolchains.bzl b/kotlin/internal/toolchains.bzl index 7d0945fcb..6494d33f4 100644 --- a/kotlin/internal/toolchains.bzl +++ b/kotlin/internal/toolchains.bzl @@ -263,7 +263,8 @@ _kt_toolchain = rule( ), "_experimental_prune_transitive_deps": attr.label( doc = """If enabled, compilation is performed against only direct dependencies. - Transitive deps required for compilation must be explicitly added""", + Transitive deps required for compilation must be explicitly added. Using + kt_experimental_prune_transitive_deps_incompatible tag allows to exclude specific targets""", default = Label("//kotlin/settings:experimental_prune_transitive_deps"), ), "_jvm_emit_jdeps": attr.label(default = "//kotlin/settings:jvm_emit_jdeps"), From ce390b2d8bb51c9a31c514bd4898e6cc20509821 Mon Sep 17 00:00:00 2001 From: Nick Korostelev Date: Wed, 26 Jul 2023 16:39:11 -0700 Subject: [PATCH 13/20] buildifier kotlin/internal/toolchains.bzl --- kotlin/internal/toolchains.bzl | 1 - 1 file changed, 1 deletion(-) diff --git a/kotlin/internal/toolchains.bzl b/kotlin/internal/toolchains.bzl index 6494d33f4..b9ab122e4 100644 --- a/kotlin/internal/toolchains.bzl +++ b/kotlin/internal/toolchains.bzl @@ -24,7 +24,6 @@ load( _KtJsInfo = "KtJsInfo", _TOOLCHAIN_TYPE = "TOOLCHAIN_TYPE", ) - load("@bazel_skylib//rules:common_settings.bzl", "BuildSettingInfo") """Kotlin Toolchains From 46d1e319dd00e8c0ebf2931d80a3813d1272e41e Mon Sep 17 00:00:00 2001 From: Corbin McNeely-Smith <58151731+restingbull@users.noreply.github.com> Date: Fri, 28 Jul 2023 16:24:01 -0500 Subject: [PATCH 14/20] list incoming jdeps --- kotlin/internal/jvm/compile.bzl | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/kotlin/internal/jvm/compile.bzl b/kotlin/internal/jvm/compile.bzl index 98a32cb1e..6d887e515 100644 --- a/kotlin/internal/jvm/compile.bzl +++ b/kotlin/internal/jvm/compile.bzl @@ -249,7 +249,7 @@ def _run_merge_jdeps_action(ctx, toolchains, jdeps, outputs, deps): """Creates a Jdeps merger action invocation.""" args = ctx.actions.args() args.set_param_file_format("multiline") - args.use_param_file("--flagfile=%s", use_always = True) + args.use_param_file("--flagfile=%s", use_always = False) args.add("--target_label", ctx.label) @@ -260,9 +260,9 @@ def _run_merge_jdeps_action(ctx, toolchains, jdeps, outputs, deps): args.add("--report_unused_deps", toolchains.kt.experimental_report_unused_deps) mnemonic = "JdepsMerge" - progress_message = "%s %%{label} { jdeps: %d }" % ( + progress_message = "%s %%{label} { jdeps: %s }" % ( mnemonic, - len(jdeps), + jdeps, ) tools, input_manifests = ctx.resolve_tools( From ccca26f7a6c6ec9ea8b38d87d08b336370d5f2a1 Mon Sep 17 00:00:00 2001 From: Corbin McNeely-Smith <58151731+restingbull@users.noreply.github.com> Date: Fri, 28 Jul 2023 16:28:20 -0500 Subject: [PATCH 15/20] list incoming jdeps --- kotlin/internal/jvm/compile.bzl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kotlin/internal/jvm/compile.bzl b/kotlin/internal/jvm/compile.bzl index 6d887e515..531f81df9 100644 --- a/kotlin/internal/jvm/compile.bzl +++ b/kotlin/internal/jvm/compile.bzl @@ -249,7 +249,7 @@ def _run_merge_jdeps_action(ctx, toolchains, jdeps, outputs, deps): """Creates a Jdeps merger action invocation.""" args = ctx.actions.args() args.set_param_file_format("multiline") - args.use_param_file("--flagfile=%s", use_always = False) + args.use_param_file("--flagfile=%s", use_always = True) args.add("--target_label", ctx.label) From bd8f243cf19e87767d252fe16187f31faef9a3ee Mon Sep 17 00:00:00 2001 From: Corbin McNeely-Smith <58151731+restingbull@users.noreply.github.com> Date: Fri, 28 Jul 2023 16:39:36 -0500 Subject: [PATCH 16/20] Show inputs --- src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt b/src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt index 4e81b9fb9..b370c583b 100644 --- a/src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt +++ b/src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt @@ -19,11 +19,19 @@ package io.bazel.kotlin.builder.cmd import io.bazel.kotlin.builder.DaggerJdepsMergerComponent import io.bazel.worker.Worker +import java.nio.file.FileSystems +import kotlin.io.path.walk import kotlin.system.exitProcess object MergeJdeps { @JvmStatic fun main(args: Array) { + println("JDeps inputs files:") + FileSystems.getDefault().getPath(".").walk().forEach { p -> + System.out.println(p) + } + + Worker .from(args.toList()) { start(DaggerJdepsMergerComponent.builder().build().work()) From b07e740fee4931619f4dedd8349720ea6e9f4410 Mon Sep 17 00:00:00 2001 From: Corbin McNeely-Smith <58151731+restingbull@users.noreply.github.com> Date: Fri, 28 Jul 2023 16:42:52 -0500 Subject: [PATCH 17/20] Show inputs --- src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt b/src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt index b370c583b..cb464c4b7 100644 --- a/src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt +++ b/src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt @@ -20,6 +20,7 @@ package io.bazel.kotlin.builder.cmd import io.bazel.kotlin.builder.DaggerJdepsMergerComponent import io.bazel.worker.Worker import java.nio.file.FileSystems +import java.nio.file.Files import kotlin.io.path.walk import kotlin.system.exitProcess @@ -27,8 +28,8 @@ object MergeJdeps { @JvmStatic fun main(args: Array) { println("JDeps inputs files:") - FileSystems.getDefault().getPath(".").walk().forEach { p -> - System.out.println(p) + Files.walk(FileSystems.getDefault().getPath(".")).forEach { p -> + println(p) } From 70305e3e57022180e0e04c4dc13277f1f7a3ec48 Mon Sep 17 00:00:00 2001 From: Corbin McNeely-Smith <58151731+restingbull@users.noreply.github.com> Date: Fri, 28 Jul 2023 16:45:00 -0500 Subject: [PATCH 18/20] Show inputs --- src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt b/src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt index cb464c4b7..dd225f3e4 100644 --- a/src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt +++ b/src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt @@ -27,9 +27,9 @@ import kotlin.system.exitProcess object MergeJdeps { @JvmStatic fun main(args: Array) { - println("JDeps inputs files:") + System.err.println("Inputs:") Files.walk(FileSystems.getDefault().getPath(".")).forEach { p -> - println(p) + System.err.println(p) } From a5a27a0cf0114b1ae096e18465db51ffde474157 Mon Sep 17 00:00:00 2001 From: Corbin McNeely-Smith <58151731+restingbull@users.noreply.github.com> Date: Sun, 30 Jul 2023 21:04:12 -0500 Subject: [PATCH 19/20] Show inputs on trace --- src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt b/src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt index dd225f3e4..75a81f044 100644 --- a/src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt +++ b/src/main/kotlin/io/bazel/kotlin/builder/cmd/MergeJdeps.kt @@ -27,12 +27,6 @@ import kotlin.system.exitProcess object MergeJdeps { @JvmStatic fun main(args: Array) { - System.err.println("Inputs:") - Files.walk(FileSystems.getDefault().getPath(".")).forEach { p -> - System.err.println(p) - } - - Worker .from(args.toList()) { start(DaggerJdepsMergerComponent.builder().build().work()) From eef69ade25cfbac6030a745202d16ca2db65ef06 Mon Sep 17 00:00:00 2001 From: Corbin McNeely-Smith <58151731+restingbull@users.noreply.github.com> Date: Sat, 12 Aug 2023 15:16:00 -0500 Subject: [PATCH 20/20] print inputs on jdeps merge --- kotlin/internal/jvm/compile.bzl | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/kotlin/internal/jvm/compile.bzl b/kotlin/internal/jvm/compile.bzl index 531f81df9..1ef8e8c14 100644 --- a/kotlin/internal/jvm/compile.bzl +++ b/kotlin/internal/jvm/compile.bzl @@ -260,10 +260,6 @@ def _run_merge_jdeps_action(ctx, toolchains, jdeps, outputs, deps): args.add("--report_unused_deps", toolchains.kt.experimental_report_unused_deps) mnemonic = "JdepsMerge" - progress_message = "%s %%{label} { jdeps: %s }" % ( - mnemonic, - jdeps, - ) tools, input_manifests = ctx.resolve_tools( tools = [ @@ -274,6 +270,14 @@ def _run_merge_jdeps_action(ctx, toolchains, jdeps, outputs, deps): # For sandboxing to work, and for this action to be deterministic, the compile jars need to be passed as inputs inputs = depset(jdeps, transitive = [depset([], transitive = [dep.transitive_deps for dep in deps])]) + if "trace" in ctx.args.tags: + print(inputs) + progress_message = "%s %%{label} { jdeps: %s } { inputs: %s }" % ( + mnemonic, + jdeps, + inputs, + ) + ctx.actions.run( mnemonic = mnemonic, inputs = inputs,