Remove stdlib (#97) * ensure jar normalization * fix embed resources hash * make the hashing test local and add ij runconfig * remove kotlin_stdlib, refactor bootstrap macro, reorganize source to start working on a task model for the builder
diff --git a/.bazelproject b/.bazelproject index f0131cf..3c59298 100644 --- a/.bazelproject +++ b/.bazelproject
@@ -18,9 +18,12 @@ targets: -//docs/... - //kotlin/builder:for_ide //:all_local_tests //examples/... + # These targets are built for the ide only. Primary purpose is to ensure the builder can build the targets, but it's a + # also a good way of testing the intellij plugin. + //kotlin/builder/src/io/bazel/kotlin/builder:builder_for_ide + //kotlin/builder:compiler_lib_for_ide test_sources: */unittests/*
diff --git a/BUILD b/BUILD index 886f2de..a0e589f 100644 --- a/BUILD +++ b/BUILD
@@ -16,8 +16,8 @@ test_suite( name = "all_tests", tests = [ - "//kotlin/builder:unittests", - "//kotlin/builder:integrationtests", + "//kotlin/builder/unittests", + "//kotlin/builder/integrationtests", "//tests/integrationtests" ] )
diff --git a/docs/BUILD b/docs/BUILD index dda09b8..8943957 100644 --- a/docs/BUILD +++ b/docs/BUILD
@@ -1,35 +1,35 @@ load("@bazel_skylib//:skylark_library.bzl", "skylark_library") -load("@io_bazel_skydoc//skylark:skylark.bzl", "skylark_doc" ) +load("@io_bazel_skydoc//skylark:skylark.bzl", "skylark_doc") skylark_library( name = "doc_public", srcs = ["//kotlin:kotlin.bzl"], - visibility=["//visibility:private"] + visibility = ["//visibility:private"], ) skylark_library( name = "doc_toolchains", srcs = ["//kotlin:toolchains.bzl"], - visibility=["//visibility:private"] + visibility = ["//visibility:private"], ) skylark_doc( name = "docs", srcs = [ ":doc_public", - ":doc_toolchains" + ":doc_toolchains", ], format = "html", site_root = select({ ":local": "/tmp/rules_kotlin", - "//conditions:default": "https://bazelbuild.github.io/rules_kotlin" + "//conditions:default": "https://bazelbuild.github.io/rules_kotlin", }), - visibility = ["//visibility:public"] + visibility = ["//visibility:public"], ) config_setting( name = "local", values = { "define": "local=1", - } -) \ No newline at end of file + }, +)
diff --git a/examples/BUILD b/examples/BUILD index 95da0c6..dea9df6 100644 --- a/examples/BUILD +++ b/examples/BUILD
@@ -11,4 +11,4 @@ # 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. -package(default_visibility = ["//visibility:private"]) \ No newline at end of file +package(default_visibility = ["//visibility:private"])
diff --git a/examples/dagger/BUILD b/examples/dagger/BUILD index 5f5c2ff..94ccdc9 100644 --- a/examples/dagger/BUILD +++ b/examples/dagger/BUILD
@@ -17,29 +17,29 @@ java_plugin( name = "dagger_plugin", + processor_class = "dagger.internal.codegen.ComponentProcessor", deps = [ - "//third_party/jvm/com/google/dagger:dagger_compiler", - "@//third_party/jvm/com/google/guava", - "//third_party/jvm/com/google/dagger:dagger_producers", "//third_party/jvm/com/google/dagger", - "//third_party/jvm/javax/inject:javax_inject" + "//third_party/jvm/com/google/dagger:dagger_compiler", + "//third_party/jvm/com/google/dagger:dagger_producers", + "//third_party/jvm/javax/inject:javax_inject", + "@//third_party/jvm/com/google/guava", ], - processor_class = "dagger.internal.codegen.ComponentProcessor" ) java_library( name = "dagger_lib", + exported_plugins = ["dagger_plugin"], exports = [ + "//third_party/jvm/com/google/dagger", "//third_party/jvm/javax/inject:javax_inject", - "//third_party/jvm/com/google/dagger" ], - exported_plugins = ["dagger_plugin"] ) # Generate a srcjar to validate intellij plugin correctly attaches it. genrule( name = "tea_lib_src", - tools = ["@local_jdk//:jdk"], + outs = ["test.srcjar"], cmd = """ cat << EOF > TeaPot.kt package tea @@ -51,27 +51,27 @@ external/local_jdk/bin/jar -cf $@ TeaPot.kt rm TeaPot.kt """, - outs = ["test.srcjar"] + tools = ["@local_jdk//:jdk"], ) kt_jvm_library( name = "tea_lib", - srcs = [":tea_lib_src"] + srcs = [":tea_lib_src"], ) kt_jvm_library( name = "coffee_lib", srcs = glob(["src/**"]), deps = [ - ":tea_lib", ":dagger_lib", - "//third_party:kotlinx_coroutines" + ":tea_lib", + "//third_party:kotlinx_coroutines", ], ) java_binary( name = "coffee_app", main_class = "coffee.CoffeeApp", + visibility = ["//visibility:public"], runtime_deps = [":coffee_lib"], - visibility = ["//visibility:public"] )
diff --git a/kotlin/BUILD.com_github_jetbrains_kotlin b/kotlin/BUILD.com_github_jetbrains_kotlin new file mode 100644 index 0000000..e5a5b17 --- /dev/null +++ b/kotlin/BUILD.com_github_jetbrains_kotlin
@@ -0,0 +1,66 @@ +# Copyright 2018 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. +package(default_visibility = ["//visibility:public"]) + +# Kotlin home filegroup containing everything that is needed. +filegroup( + name = "home", + srcs = glob(["**"]), +) + +# Kotlin dependencies that are internal to this repo and are meant to be loaded at runtime. +[ + java_import( + name = "%s" % art, + jars = ["lib/%s.jar" % art], + neverlink = 1, + ) + for art in [ + "kotlin-annotation-processing", + "kotlin-annotation-processing-runtime", + "kotlin-compiler", + ] +] + +# Kotlin dependencies that are internal to this repo and may be linked. +[ + java_import( + name = "%s" % art, + jars = ["lib/%s.jar" % art], + ) + for art in [ + "kotlin-preloader", + ] +] + +load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kt_jvm_import") + +# The Kotlin standard libraries. These should be setup in a Toolchain. +[ + kt_jvm_import( + name = "kotlin-%s" % art, + jars = ["lib/kotlin-%s.jar" % art], + srcjar = "lib/kotlin-%s-sources.jar" % art, + visibility = ["//visibility:public"], + ) + for art in [ + "runtime", + "stdlib", + "stdlib-jdk7", + "stdlib-jdk8", + "reflect", + "test", + "script-runtime", + ] +]
diff --git a/kotlin/builder/BUILD b/kotlin/builder/BUILD index 7a104a5..b11de2a 100644 --- a/kotlin/builder/BUILD +++ b/kotlin/builder/BUILD
@@ -11,83 +11,34 @@ # 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("//kotlin/builder:bootstrap.bzl", "kotlin_worker_lib") -load("//kotlin:kotlin.bzl", "kt_jvm_library") - -# Should not be linked against to allow the compiler workspace to be switched out when toolchains support this. -COMPILER_DEPS = [ - "@com_github_jetbrains_kotlin//:compiler", - "@com_github_jetbrains_kotlin//:kotlin-annotation-processing", - "@com_github_jetbrains_kotlin//:kotlin-script-runtime", -] - -# Common depset for the builder. -COMMON_DEPS = [ - "//kotlin/builder/proto:deps", - "//kotlin/builder/proto:kotlin_model", - "//kotlin/builder/proto:worker", - "@com_github_jetbrains_kotlin//:preloader", - "@io_bazel_rules_kotlin_com_google_protobuf_protobuf_java//jar", - "@io_bazel_rules_kotlin_com_google_protobuf_protobuf_java_util//jar", - "@io_bazel_rules_kotlin_com_google_inject_guice//jar", - "@io_bazel_rules_kotlin_aopalliance_aopalliance//jar", - "@io_bazel_rules_kotlin_javax_inject_javax_inject//jar", - "@io_bazel_rules_kotlin_com_google_guava_guava//jar", - "@io_bazel_rules_kotlin_com_google_code_gson_gson//jar", - "@com_github_jetbrains_kotlin//:kotlin-reflect", - "@com_github_jetbrains_kotlin//:kotlin-stdlib", - "@com_github_jetbrains_kotlin//:kotlin-stdlib-jdk7", - "@com_github_jetbrains_kotlin//:kotlin-stdlib-jdk8", -] +load("//kotlin/builder:bootstrap.bzl", "kt_bootstrap_library") # The compiler library, this is co-located in the kotlin compiler classloader. -kotlin_worker_lib( +kt_bootstrap_library( name = "compiler_lib", srcs = glob(["src/io/bazel/kotlin/compiler/**/*.kt"]), - args = [ - "-jvm-target","1.8", + neverlink_deps = [ + "@com_github_jetbrains_kotlin//:kotlin-compiler", + "@com_github_jetbrains_kotlin//:kotlin-annotation-processing", + "@com_github_jetbrains_kotlin//:kotlin-script-runtime", ], - neverlink_deps = COMPILER_DEPS, -) - -# The builder library. -kotlin_worker_lib( - name = "builder_lib", - srcs = glob(["src/io/bazel/kotlin/builder/**/*.kt"]), - args = [ - "-jvm-target","1.8", - ], - deps = COMMON_DEPS -) - -# This is a hack so that the builder and compiler sources can be picked up by intellij. -kt_jvm_library( - name = "for_ide", - srcs = glob(["src/**/*.kt"]), - visibility = ["//visibility:private"], - deps = COMMON_DEPS + COMPILER_DEPS, ) # The builder artifact. java_binary( name = "builder", + data = [":compiler_lib.jar"], main_class = "io.bazel.kotlin.builder.KotlinBuilder", visibility = ["//visibility:public"], - runtime_deps = [ - ":builder_lib", - ], - data = [ - ":compiler_lib.jar" - ] + runtime_deps = ["//kotlin/builder/src/io/bazel/kotlin/builder"], ) -# This is defined so that tests can wire up a builder. filegroup( - name = "builder_runfiles_for_tests", + name = "data_for_tests", srcs = [ - ":compiler_lib.jar", - "@com_github_jetbrains_kotlin//:compiler", + ":compiler_lib", "@com_github_jetbrains_kotlin//:kotlin-annotation-processing", + "@com_github_jetbrains_kotlin//:kotlin-compiler", "@com_github_jetbrains_kotlin//:kotlin-script-runtime", ], testonly = 1, @@ -95,32 +46,25 @@ ) java_library( - name = "builder_for_tests", - testonly = 1, - exports = COMMON_DEPS + [ - ":builder_lib", - ":compiler_lib", + name = "builder_lib_for_tests", + runtime_deps = [ + "@com_github_jetbrains_kotlin//:kotlin-reflect", + "@io_bazel_rules_kotlin_aopalliance_aopalliance//jar", ], - data = [ - "builder_runfiles_for_tests" - ] -) - -java_test( - name = "integrationtests", - srcs = glob(["integrationtests/*.java"]), - test_class = "io.bazel.kotlin.builder.KotlinBuilderTestSuite", - deps = [ - "//kotlin/builder:builder_for_tests", + testonly = 1, + data = [":data_for_tests"], + exports = [ + "//kotlin/builder/src/io/bazel/kotlin/builder", "//third_party/jvm/com/google/truth", "//third_party/jvm/junit", + "@io_bazel_rules_kotlin//kotlin/builder/proto:deps", + "@io_bazel_rules_kotlin//kotlin/builder/proto:kotlin_model", + "@io_bazel_rules_kotlin_com_google_guava_guava//jar", + "@io_bazel_rules_kotlin_com_google_inject_guice//jar", + "@io_bazel_rules_kotlin_com_google_protobuf_protobuf_java//jar", ], -) - -java_test( - name = "unittests", - size = "small", - srcs = glob(["unittests/**/*.java"]), - test_class = "io.bazel.kotlin.builder.mode.jvm.utils.JdepsParserTest", - deps = [":builder_for_tests"], + visibility = [ + "//kotlin/builder/integrationtests:__subpackages__", + "//kotlin/builder/unittests:__subpackages__" + ] )
diff --git a/kotlin/builder/bootstrap.bzl b/kotlin/builder/bootstrap.bzl index 2dac1df..67f8c21 100644 --- a/kotlin/builder/bootstrap.bzl +++ b/kotlin/builder/bootstrap.bzl
@@ -11,72 +11,86 @@ # 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("//kotlin:kotlin.bzl", _for_ide = "kt_jvm_library", "kt_jvm_import") +load("//kotlin:kotlin.bzl", _for_ide = "kt_jvm_library") -_HEADER = """ -function join_by { local IFS="$$1"; shift; echo "$$*"; } +_BOOTSTRAP_LIB_ARGS=["-jvm-target","1.8"] -CP=$$(join_by : $(locations :%s)) -""" +def _resolve_dep_label(d): + if d.startswith("//kotlin/builder/src/io/bazel/kotlin/builder") and not d.endswith("_for_ide"): + prefix, _, target = d.rpartition(":") + if target == None: + # untested + return d + "_for_ide" + else: + _ , _, target = d.rpartition("/") + return d + ":" + target + "_for_ide" + else: + return d -# We manually call the Kotlin compiler by constructing the correct Java classpath, because the usual -# "kotlinc" wrapper script fails to correctly detect KOTLIN_HOME unless we run with -# --spawn_strategy=standalone -def _gen_cmd(name, args): - return (_HEADER + """ -ARGS="%s" +def kt_bootstrap_library(name, srcs, deps=[], neverlink_deps=[], runtime_deps=[]): + """ + Simple compilation of a kotlin library using a non-persistent worker. The target is a JavaInfo provider. -KOTLIN_HOME=external/com_github_jetbrains_kotlin -java -Xmx256M -Xms32M -noverify \ - -cp $${KOTLIN_HOME}/lib/kotlin-preloader.jar org.jetbrains.kotlin.preloading.Preloader \ - -cp $${KOTLIN_HOME}/lib/kotlin-compiler.jar org.jetbrains.kotlin.cli.jvm.K2JVMCompiler \ - -cp $${CP} -d $(OUTS) $${ARGS} $(SRCS) -""") % (name,args) + The target is tagged `"no-ide"` as intellij can't compile it. A seperate private target is created which is suffixed + with `_for_ide`. If the dep is under the package `//kotlin/builder/src/io/bazel/kotlin/builder/...` then it will be + added to the `_for_ide` target by adding a `_for_ide` prefix. -def kotlin_worker_lib(name, srcs, args = [], deps=[], runtime_deps=[], neverlink_deps=[]): + deps: the dependenices, the are setup as runtime_deps of the library. + neverlink_deps: deps that won't be linked. These deps are added to the `"for_ide"` target. + """ + jar_label = name + "_jar" dep_label = name + "_deps" - jar_file_label = name + "_file" - jar_name = name+".jar" - jar_sources_file_label = jar_file_label + "_sources" - jar_sources_name = name + "-sources.jar" - native.filegroup( name = dep_label, srcs = deps + neverlink_deps, - visibility = ["//visibility:private"] + visibility=["//visibility:private"] ) + command=""" +KOTLIN_HOME=external/com_github_jetbrains_kotlin + +function join_by { local IFS="$$1"; shift; echo "$$*"; } + +NAME=%s +CP="$$(join_by : $(locations :%s))" +ARGS="%s" + +java -Xmx256M -Xms32M -noverify \ + -cp $${KOTLIN_HOME}/lib/kotlin-preloader.jar org.jetbrains.kotlin.preloading.Preloader \ + -cp $${KOTLIN_HOME}/lib/kotlin-compiler.jar org.jetbrains.kotlin.cli.jvm.K2JVMCompiler \ + -cp $${CP} -d $${NAME}_temp.jar $${ARGS} $(SRCS) + +$(location @bazel_tools//tools/jdk:singlejar) \ + --normalize \ + --compression \ + --sources $${NAME}_temp.jar \ + --output $(OUTS) + +rm $${NAME}_temp.jar +""" % (name, dep_label, " ".join(_BOOTSTRAP_LIB_ARGS)) native.genrule( - name = jar_file_label, + name = jar_label, tools = [ "@com_github_jetbrains_kotlin//:home", "@local_jdk//:jdk", + "@bazel_tools//tools/jdk:singlejar", dep_label ], srcs = srcs, - outs = [jar_name], - cmd = _gen_cmd(dep_label, " ".join(args)), - visibility = ["//visibility:private"] - ) - native.genrule( - name = jar_sources_file_label, - tools = [ - "@local_jdk//:jdk", - ], - srcs = srcs, - outs = [jar_sources_name], - cmd = "jar cf $(OUTS) $(SRCS)", - visibility = ["//visibility:private"] - ) - - # Use kt_jvm_import so that ijarification doesn't ruin the worker lib. - kt_jvm_import( - name = name, - jars = [jar_name], - srcjar = jar_sources_name, + outs = [name + ".jar"], tags = ["no-ide"], - runtime_deps = (depset(runtime_deps) + deps).to_list(), - visibility = [ - "//tests:__subpackages__", - "//kotlin:__subpackages__" - ] + visibility = ["//visibility:private"], + cmd = command + ) + native.java_import( + name = name, + jars = [jar_label], + runtime_deps=deps + runtime_deps, + visibility=["//visibility:public"] + ) + # hsyed todo this part of the graph should not be wired up outside of development. + _for_ide( + name = name + "_for_ide", + srcs = srcs, + deps = [_resolve_dep_label(d) for d in deps] + neverlink_deps, + visibility = ["//kotlin/builder:__subpackages__"] )
diff --git a/kotlin/builder/integrationtests/BUILD b/kotlin/builder/integrationtests/BUILD new file mode 100644 index 0000000..ff0448b --- /dev/null +++ b/kotlin/builder/integrationtests/BUILD
@@ -0,0 +1,19 @@ +# Copyright 2018 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. +java_test( + name = "integrationtests", + srcs = glob(["*.java"]), + test_class = "io.bazel.kotlin.builder.KotlinBuilderTestSuite", + deps = ["//kotlin/builder:builder_lib_for_tests"] +) \ No newline at end of file
diff --git a/kotlin/builder/integrationtests/KotlinBuilderActionTests.java b/kotlin/builder/integrationtests/KotlinBuilderActionTests.java index a26c1a1..6e27646 100644 --- a/kotlin/builder/integrationtests/KotlinBuilderActionTests.java +++ b/kotlin/builder/integrationtests/KotlinBuilderActionTests.java
@@ -1,6 +1,6 @@ package io.bazel.kotlin.builder; -import io.bazel.kotlin.builder.mode.jvm.actions.KotlinCompiler; +import io.bazel.kotlin.builder.tasks.jvm.KotlinCompiler; import org.junit.Test; public class KotlinBuilderActionTests extends KotlinBuilderTestCase {
diff --git a/kotlin/builder/integrationtests/KotlinBuilderTestCase.java b/kotlin/builder/integrationtests/KotlinBuilderTestCase.java index f1cc005..cf23da1 100644 --- a/kotlin/builder/integrationtests/KotlinBuilderTestCase.java +++ b/kotlin/builder/integrationtests/KotlinBuilderTestCase.java
@@ -23,8 +23,8 @@ Paths.get(Preconditions.checkNotNull(System.getenv("TEST_TMPDIR"))); private static final AtomicInteger counter = new AtomicInteger(0); - private final KotlinModel.BuilderCommand.Builder builder = - KotlinModel.BuilderCommand.newBuilder(); + private final KotlinModel.CompilationTask.Builder builder = + KotlinModel.CompilationTask.newBuilder(); private final Injector injector = KotlinToolchain.createInjector(() -> System.out, null); private String label = null; private Path inputSourceDir = null; @@ -34,11 +34,11 @@ resetTestContext("a_test_" + counter.incrementAndGet()); } - protected KotlinModel.BuilderCommand.Outputs outputs() { + protected KotlinModel.CompilationTask.Outputs outputs() { return builder.getOutputs(); } - protected KotlinModel.BuilderCommand.Directories directories() { + protected KotlinModel.CompilationTask.Directories directories() { return builder.getDirectories(); } @@ -50,7 +50,7 @@ return Paths.get(directories().getClasses()); } - protected KotlinModel.BuilderCommand builderCommand() { + protected KotlinModel.CompilationTask builderCommand() { return builder.build(); } @@ -132,7 +132,7 @@ TEMP, SOURCE_GEN; - protected static Path select(DirectoryType type, KotlinModel.BuilderCommand command) { + protected static Path select(DirectoryType type, KotlinModel.CompilationTask command) { Path ret; switch (type) { case CLASSES:
diff --git a/kotlin/builder/integrationtests/KotlinBuilderTests.java b/kotlin/builder/integrationtests/KotlinBuilderTests.java index cb5aa62..e046fed 100644 --- a/kotlin/builder/integrationtests/KotlinBuilderTests.java +++ b/kotlin/builder/integrationtests/KotlinBuilderTests.java
@@ -2,7 +2,8 @@ import com.google.common.truth.Truth; import com.google.devtools.build.lib.view.proto.Deps; -import io.bazel.kotlin.builder.mode.jvm.KotlinJvmCompilationExecutor; + +import io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor; import io.bazel.kotlin.model.KotlinModel; import org.junit.Test; @@ -34,7 +35,7 @@ } private void runCompileTask() { - KotlinModel.BuilderCommand command = builderCommand(); + KotlinModel.CompilationTask command = builderCommand(); for (DirectoryType directoryType : DirectoryType.values()) { try { if (directoryType != DirectoryType.ROOT) { @@ -45,7 +46,7 @@ } } int timeoutSeconds = 10; - KotlinJvmCompilationExecutor executor = instance(KotlinJvmCompilationExecutor.class); + KotlinJvmTaskExecutor executor = instance(KotlinJvmTaskExecutor.class); try { CompletableFuture.runAsync(() -> executor.compile(command)) .get(timeoutSeconds, TimeUnit.SECONDS);
diff --git a/kotlin/builder/proto/BUILD b/kotlin/builder/proto/BUILD index 8bc369b..b16e4b6 100644 --- a/kotlin/builder/proto/BUILD +++ b/kotlin/builder/proto/BUILD
@@ -11,8 +11,9 @@ # 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. - +package(default_visibility=["//visibility:public"]) # commented out till 0.16 is released. We aren't prebuilding the libraries at the moment so it's fine. +# TODO constrain the visibility when fixing the comments below as well #proto_library( # name = "kotlin_model_proto", # srcs = [":kotlin_model.proto"], @@ -40,17 +41,14 @@ java_import( name = "deps", jars = ["jars/libdeps_proto-speed.jar"], - visibility = ["//kotlin/builder:__subpackages__"] ) java_import( name = "worker", jars = ["jars/libworker_protocol_proto-speed.jar"], - visibility = ["//kotlin/builder:__subpackages__"] ) java_import( name = "kotlin_model", jars = ["jars/libkotlin_model_proto-speed.jar"], - visibility = ["//kotlin/builder:__subpackages__"] ) \ No newline at end of file
diff --git a/kotlin/builder/proto/jars/libkotlin_model_proto-speed.jar b/kotlin/builder/proto/jars/libkotlin_model_proto-speed.jar index 943c343..1a74d68 100755 --- a/kotlin/builder/proto/jars/libkotlin_model_proto-speed.jar +++ b/kotlin/builder/proto/jars/libkotlin_model_proto-speed.jar Binary files differ
diff --git a/kotlin/builder/proto/kotlin_model.proto b/kotlin/builder/proto/kotlin_model.proto index d1e4ced..a66b7d3 100644 --- a/kotlin/builder/proto/kotlin_model.proto +++ b/kotlin/builder/proto/kotlin_model.proto
@@ -65,7 +65,7 @@ } // Mested messages not marked with stable could be refactored. -message BuilderCommand { +message CompilationTask { message Info { string label = 1; // derived from label
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/BUILD b/kotlin/builder/src/io/bazel/kotlin/builder/BUILD new file mode 100644 index 0000000..e13c047 --- /dev/null +++ b/kotlin/builder/src/io/bazel/kotlin/builder/BUILD
@@ -0,0 +1,38 @@ +# Copyright 2018 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("//kotlin/builder:bootstrap.bzl", "kt_bootstrap_library") + +kt_bootstrap_library( + name = "builder", + srcs = glob(["**/*.kt"]), + runtime_deps = [ + "@com_github_jetbrains_kotlin//:kotlin-reflect", + "@com_github_jetbrains_kotlin//:kotlin-stdlib-jdk7", + "@com_github_jetbrains_kotlin//:kotlin-stdlib-jdk8", + "@io_bazel_rules_kotlin_aopalliance_aopalliance//jar", + "@io_bazel_rules_kotlin_com_google_code_gson_gson//jar", + ], + deps = [ + "@io_bazel_rules_kotlin_com_google_guava_guava//jar", + "@com_github_jetbrains_kotlin//:kotlin-stdlib", + "@com_github_jetbrains_kotlin//:kotlin-preloader", + "@io_bazel_rules_kotlin//kotlin/builder/proto:kotlin_model", + "@io_bazel_rules_kotlin//kotlin/builder/proto:deps", + "@io_bazel_rules_kotlin//kotlin/builder/proto:worker", + "@io_bazel_rules_kotlin_com_google_inject_guice//jar", + "@io_bazel_rules_kotlin_com_google_protobuf_protobuf_java//jar", + "@io_bazel_rules_kotlin_com_google_protobuf_protobuf_java_util//jar", + "@io_bazel_rules_kotlin_javax_inject_javax_inject//jar", + ], +)
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/BazelWorker.kt b/kotlin/builder/src/io/bazel/kotlin/builder/BazelWorker.kt index c2895fd..19c2a7f 100644 --- a/kotlin/builder/src/io/bazel/kotlin/builder/BazelWorker.kt +++ b/kotlin/builder/src/io/bazel/kotlin/builder/BazelWorker.kt
@@ -61,8 +61,6 @@ /** * Bazel worker runner. * - * - * * This class adapts a traditional command line program so it can be spawned by Bazel as a * persistent worker process that handles multiple invocations per JVM. It will also be backwards * compatible with being run as a normal single-invocation command.
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/KotlinBuilder.kt b/kotlin/builder/src/io/bazel/kotlin/builder/KotlinBuilder.kt index 0b0e262..0f20535 100644 --- a/kotlin/builder/src/io/bazel/kotlin/builder/KotlinBuilder.kt +++ b/kotlin/builder/src/io/bazel/kotlin/builder/KotlinBuilder.kt
@@ -18,11 +18,8 @@ import com.google.inject.Inject import com.google.inject.Provider import com.google.inject.Singleton -import io.bazel.kotlin.builder.mode.jvm.KotlinJvmCompilationExecutor -import io.bazel.kotlin.builder.utils.ArgMap -import io.bazel.kotlin.builder.utils.ArgMaps -import io.bazel.kotlin.builder.utils.IS_JVM_SOURCE_FILE -import io.bazel.kotlin.builder.utils.ensureDirectories +import io.bazel.kotlin.builder.tasks.jvm.KotlinJvmTaskExecutor +import io.bazel.kotlin.builder.utils.* import io.bazel.kotlin.builder.utils.jars.SourceJarExtractor import io.bazel.kotlin.model.KotlinModel import java.nio.file.Paths @@ -30,8 +27,8 @@ @Singleton @Suppress("MemberVisibilityCanBePrivate") class KotlinBuilder @Inject internal constructor( - private val commandBuilder: BuildCommandBuilder, - private val compilationExector: KotlinJvmCompilationExecutor + private val commandBuilder: TaskBuilder, + private val jvmTaskExecutor: KotlinJvmTaskExecutor ) : CommandLineProgram { fun execute(args: List<String>): Int = ArgMaps.from(args).let { execute(it) } @@ -39,7 +36,7 @@ fun execute(args: ArgMap): Int = commandBuilder.fromInput(args).let { execute(it) } - fun execute(command: KotlinModel.BuilderCommand): Int { + fun execute(command: KotlinModel.CompilationTask): Int { ensureDirectories( command.directories.classes, command.directories.temp, @@ -48,7 +45,7 @@ ) val updatedCommand = expandWithSourceJarSources(command) return try { - compilationExector.compile(updatedCommand) + jvmTaskExecutor.compile(updatedCommand) 0 } catch (ex: CompilationStatusException) { ex.status @@ -56,10 +53,10 @@ } /** - * If any sourcejars were provided expand the jars sources and create a new [KotlinModel.BuilderCommand] with the + * If any sourcejars were provided expand the jars sources and create a new [KotlinModel.CompilationTask] with the * Java and Kotlin sources merged in. */ - private fun expandWithSourceJarSources(command: KotlinModel.BuilderCommand): KotlinModel.BuilderCommand = + private fun expandWithSourceJarSources(command: KotlinModel.CompilationTask): KotlinModel.CompilationTask = if (command.inputs.sourceJarsList.isEmpty()) { command } else { @@ -70,7 +67,7 @@ it.jarFiles.addAll(command.inputs.sourceJarsList.map { Paths.get(it) }) it.execute() }.let { - commandBuilder.withSources(command, it.sourcesList.iterator()) + command.expandWithSources(command, it.sourcesList.iterator()) } }
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/utils/KotlinCompilerPluginArgsEncoder.kt b/kotlin/builder/src/io/bazel/kotlin/builder/KotlinCompilerPluginArgsEncoder.kt similarity index 83% rename from kotlin/builder/src/io/bazel/kotlin/builder/utils/KotlinCompilerPluginArgsEncoder.kt rename to kotlin/builder/src/io/bazel/kotlin/builder/KotlinCompilerPluginArgsEncoder.kt index 1d29c0a..e67c1ae 100644 --- a/kotlin/builder/src/io/bazel/kotlin/builder/utils/KotlinCompilerPluginArgsEncoder.kt +++ b/kotlin/builder/src/io/bazel/kotlin/builder/KotlinCompilerPluginArgsEncoder.kt
@@ -13,26 +13,22 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.bazel.kotlin.builder.utils +package io.bazel.kotlin.builder -import com.google.common.collect.ImmutableList -import com.google.inject.ImplementedBy -import com.google.inject.Inject + import io.bazel.kotlin.builder.KotlinToolchain.CompilerPlugin import io.bazel.kotlin.model.KotlinModel import java.io.ByteArrayOutputStream import java.io.ObjectOutputStream import java.util.* +import javax.inject.Inject +import javax.inject.Singleton -@ImplementedBy(DefaultKotlinCompilerPluginArgsEncoder::class) -interface KotlinCompilerPluginArgsEncoder { - fun encode(command: KotlinModel.BuilderCommandOrBuilder): List<String> -} - -class DefaultKotlinCompilerPluginArgsEncoder @Inject internal constructor( +@Singleton +internal class KotlinCompilerPluginArgsEncoder @Inject constructor( @CompilerPlugin.Kapt3 private val kapt3: CompilerPlugin -) : KotlinCompilerPluginArgsEncoder { +) { companion object { private fun encodeMap(options: Map<String, String>): String { val os = ByteArrayOutputStream() @@ -66,6 +62,7 @@ return Base64.getEncoder().encodeToString(os.toByteArray()) } } + /** * Plugin using the undocumented encoding format for kapt3 */ @@ -83,15 +80,17 @@ // "configuration" is an undocumented kapt3 argument. preparing the arguments this way is the only way to get more than one annotation processor class // passed to kotlinc. - fun encode(): ImmutableList<String> = - ImmutableList.of( + fun encode(): List<String> = + listOf( "-Xplugin=${kapt3.jarPath}", - "-P", "plugin:${kapt3.id}:configuration=${encodeMultiMap(tally)}" + "-P", "plugin:${kapt3.id}:configuration=${encodeMultiMap( + tally + )}" ) } - override fun encode( - command: KotlinModel.BuilderCommandOrBuilder + fun encode( + command: KotlinModel.CompilationTaskOrBuilder ): List<String> { val javacArgs = mutableMapOf<String, String>( "-target" to command.info.toolchainInfo.jvm.jvmTarget @@ -103,7 +102,7 @@ arg["classes"] = d.generatedClasses.toString() arg["stubs"] = d.temp.toString() arg["incrementalData"] = d.temp.toString() - arg["javacArguments"] = javacArgs.let(::encodeMap) + arg["javacArguments"] = javacArgs.let(Companion::encodeMap) arg["aptMode"] = "stubsAndApt" arg["correctErrorTypes"] = "true" // arg["verbose"] = "true" @@ -114,6 +113,6 @@ .joinToString(",") { it.processorClass } arg.encode() } - }?.let { ImmutableList.copyOf(it) } ?: ImmutableList.of() + } ?: emptyList() } } \ No newline at end of file
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/KotlinToolchain.kt b/kotlin/builder/src/io/bazel/kotlin/builder/KotlinToolchain.kt index 84766d3..22424a1 100644 --- a/kotlin/builder/src/io/bazel/kotlin/builder/KotlinToolchain.kt +++ b/kotlin/builder/src/io/bazel/kotlin/builder/KotlinToolchain.kt
@@ -15,7 +15,6 @@ */ package io.bazel.kotlin.builder -import com.google.common.collect.ImmutableSet import com.google.inject.* import com.google.inject.util.Modules import io.bazel.kotlin.builder.utils.resolveVerified @@ -32,7 +31,7 @@ internal val javaHome: Path, val kotlinHome: Path, internal val classLoader: ClassLoader, - val kotlinStandardLibraries: ImmutableSet<String> = ImmutableSet.of( + val kotlinStandardLibraries: List<String> = listOf( "kotlin-stdlib.jar", "kotlin-stdlib-jdk7.jar", "kotlin-stdlib-jdk8.jar" @@ -47,8 +46,8 @@ private fun createClassLoader(javaHome: Path, kotlinHome: Path): ClassLoader { val preloadJars = mutableListOf<File>().also { it += kotlinHome.resolveVerified("lib", "kotlin-compiler.jar") - it += javaRunfiles.resolveVerified("io_bazel_rules_kotlin", "kotlin", "builder", "compiler_lib.jar") - if(!isJdk9OrNewer) { + it += javaRunfiles.resolveVerified("io_bazel_rules_kotlin", "kotlin", "builder", "compiler_lib.jar") + if (!isJdk9OrNewer) { it += javaHome.resolveVerified("lib", "tools.jar") } } @@ -65,7 +64,11 @@ val javaHome = Paths.get(System.getProperty("java.home")).let { it.takeIf { !it.endsWith(Paths.get("jre")) } ?: it.parent } - return KotlinToolchain(javaHome, kotlinHome, createClassLoader(javaHome, kotlinHome)) + return KotlinToolchain( + javaHome, + kotlinHome, + createClassLoader(javaHome, kotlinHome) + ) } /**
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/BuildCommandBuilder.kt b/kotlin/builder/src/io/bazel/kotlin/builder/TaskBuilder.kt similarity index 73% rename from kotlin/builder/src/io/bazel/kotlin/builder/BuildCommandBuilder.kt rename to kotlin/builder/src/io/bazel/kotlin/builder/TaskBuilder.kt index 54302c1..1746a8e 100644 --- a/kotlin/builder/src/io/bazel/kotlin/builder/BuildCommandBuilder.kt +++ b/kotlin/builder/src/io/bazel/kotlin/builder/TaskBuilder.kt
@@ -15,27 +15,18 @@ */ package io.bazel.kotlin.builder -import com.google.inject.ImplementedBy -import com.google.inject.Inject -import com.google.inject.Singleton import com.google.protobuf.util.JsonFormat import io.bazel.kotlin.builder.utils.ArgMap -import io.bazel.kotlin.builder.utils.DefaultKotlinCompilerPluginArgsEncoder +import io.bazel.kotlin.builder.utils.partitionSources import io.bazel.kotlin.model.KotlinModel -import io.bazel.kotlin.model.KotlinModel.BuilderCommand - - -@ImplementedBy(DefaultBuildCommandBuilder::class) -interface BuildCommandBuilder { - fun fromInput(argMap: ArgMap): BuilderCommand - fun withSources(command: BuilderCommand, sources: Iterator<String>): BuilderCommand - fun withGeneratedSources(command: BuilderCommand, sources: Iterator<String>): BuilderCommand -} +import io.bazel.kotlin.model.KotlinModel.CompilationTask +import javax.inject.Inject +import javax.inject.Singleton @Singleton -private class DefaultBuildCommandBuilder @Inject constructor( - private val pluginEncoder: DefaultKotlinCompilerPluginArgsEncoder -) : BuildCommandBuilder { +class TaskBuilder @Inject internal constructor( + private val pluginEncoder: KotlinCompilerPluginArgsEncoder +) { companion object { @JvmStatic private val jsonTypeRegistry = JsonFormat.TypeRegistry.newBuilder() @@ -84,8 +75,8 @@ TEST_ONLY("--testonly") } - override fun fromInput(argMap: ArgMap): BuilderCommand = - BuilderCommand.newBuilder().let { root -> + fun fromInput(argMap: ArgMap): CompilationTask = + CompilationTask.newBuilder().let { root -> with(root.outputsBuilder) { jar = argMap.mandatorySingle(JavaBuilderFlags.OUTPUT.flag) jdeps = argMap.mandatorySingle("--output_jdeps") @@ -146,37 +137,5 @@ } root.build() } - - override fun withSources(command: BuilderCommand, sources: Iterator<String>): BuilderCommand = - command.updateBuilder { builder -> - sources.partitionSources( - { builder.inputsBuilder.addKotlinSources(it) }, - { builder.inputsBuilder.addJavaSources(it) }) - } - - - override fun withGeneratedSources(command: BuilderCommand, sources: Iterator<String>): BuilderCommand = - command.updateBuilder { builder -> - sources.partitionSources( - { builder.inputsBuilder.addGeneratedKotlinSources(it) }, - { builder.inputsBuilder.addGeneratedJavaSources(it) }) - } - - private fun BuilderCommand.updateBuilder(init: (BuilderCommand.Builder) -> Unit): BuilderCommand = - toBuilder().let { - init(it) - it.build() - } - - - private fun Iterator<String>.partitionSources(kt: (String) -> Unit, java: (String) -> Unit) { - forEach { - when { - it.endsWith(".kt") -> kt(it) - it.endsWith(".java") -> java(it) - else -> throw IllegalStateException("invalid source file type $it") - } - } - } }
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/JDepsGenerator.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JDepsGenerator.kt similarity index 93% rename from kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/JDepsGenerator.kt rename to kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JDepsGenerator.kt index 0bcc45f..e5053f4 100644 --- a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/JDepsGenerator.kt +++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JDepsGenerator.kt
@@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.bazel.kotlin.builder.mode.jvm.actions +package io.bazel.kotlin.builder.tasks.jvm import com.google.devtools.build.lib.view.proto.Deps import com.google.inject.ImplementedBy @@ -21,7 +21,6 @@ import io.bazel.kotlin.builder.CompilationException import io.bazel.kotlin.builder.CompilationStatusException import io.bazel.kotlin.builder.KotlinToolchain -import io.bazel.kotlin.builder.mode.jvm.utils.JdepsParser import io.bazel.kotlin.builder.utils.resolveVerified import io.bazel.kotlin.builder.utils.rootCause import io.bazel.kotlin.model.KotlinModel @@ -33,7 +32,7 @@ @ImplementedBy(DefaultJDepsGenerator::class) interface JDepsGenerator { - fun generateJDeps(command: KotlinModel.BuilderCommand) + fun generateJDeps(command: KotlinModel.CompilationTask) } private class DefaultJDepsGenerator @Inject constructor( @@ -42,7 +41,7 @@ ) : JDepsGenerator { private val isKotlinImplicit = JdepsParser.pathSuffixMatchingPredicate( toolchain.kotlinHome.resolveVerified("lib").toPath(), *toolchain.kotlinStandardLibraries.toTypedArray()) - override fun generateJDeps(command: KotlinModel.BuilderCommand) { + override fun generateJDeps(command: KotlinModel.CompilationTask) { val jdepsContent = if (command.inputs.classpathList.isEmpty()) { Deps.Dependencies.newBuilder().let {
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/JavaCompiler.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JavaCompiler.kt similarity index 88% rename from kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/JavaCompiler.kt rename to kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JavaCompiler.kt index ee5df82..5f29bec 100644 --- a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/JavaCompiler.kt +++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JavaCompiler.kt
@@ -13,24 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.bazel.kotlin.builder.mode.jvm.actions +package io.bazel.kotlin.builder.tasks.jvm import com.google.inject.ImplementedBy import com.google.inject.Inject import io.bazel.kotlin.builder.CompilationStatusException import io.bazel.kotlin.builder.KotlinToolchain import io.bazel.kotlin.builder.utils.addAll -import io.bazel.kotlin.model.KotlinModel.BuilderCommand +import io.bazel.kotlin.model.KotlinModel.CompilationTask @ImplementedBy(DefaultJavaCompiler::class) interface JavaCompiler { - fun compile(command: BuilderCommand) + fun compile(command: CompilationTask) } private class DefaultJavaCompiler @Inject constructor( val javacInvoker: KotlinToolchain.JavacInvoker ) : JavaCompiler { - override fun compile(command: BuilderCommand) { + override fun compile(command: CompilationTask) { val i = command.inputs val d = command.directories if (i.javaSourcesList.isNotEmpty() || i.generatedJavaSourcesList.isNotEmpty()) { @@ -50,7 +50,7 @@ it.addAll(i.generatedJavaSourcesList) it.toTypedArray() } - javacInvoker.compile(args).takeIf { it != 0 }?.also { throw CompilationStatusException("javac failed",it) } + javacInvoker.compile(args).takeIf { it != 0 }?.also { throw CompilationStatusException("javac failed", it) } } } } \ No newline at end of file
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/utils/JdepsParser.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JdepsParser.kt similarity index 98% rename from kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/utils/JdepsParser.kt rename to kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JdepsParser.kt index f3419dc..5614add 100644 --- a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/utils/JdepsParser.kt +++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/JdepsParser.kt
@@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.bazel.kotlin.builder.mode.jvm.utils +package io.bazel.kotlin.builder.tasks.jvm import com.google.devtools.build.lib.view.proto.Deps import java.nio.file.Path
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/KotlinCompiler.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinCompiler.kt similarity index 83% rename from kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/KotlinCompiler.kt rename to kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinCompiler.kt index ffcf837..8721c73 100644 --- a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/KotlinCompiler.kt +++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinCompiler.kt
@@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.bazel.kotlin.builder.mode.jvm.actions +package io.bazel.kotlin.builder.tasks.jvm import com.google.inject.ImplementedBy import com.google.inject.Inject @@ -27,8 +27,8 @@ @ImplementedBy(DefaultKotlinCompiler::class) interface KotlinCompiler { - fun runAnnotationProcessor(command: KotlinModel.BuilderCommand): List<String> - fun compile(command: KotlinModel.BuilderCommand): List<String> + fun runAnnotationProcessor(command: KotlinModel.CompilationTask): List<String> + fun compile(command: KotlinModel.CompilationTask): List<String> } // The Kotlin compiler is not suited for javac compilation as of 1.2.21. The errors are not conveyed directly and would need to be preprocessed, also javac @@ -40,11 +40,11 @@ private class DefaultKotlinCompiler @Inject constructor( val compiler: KotlinToolchain.KotlincInvoker ) : KotlinCompiler { - override fun runAnnotationProcessor(command: KotlinModel.BuilderCommand): List<String> { + override fun runAnnotationProcessor(command: KotlinModel.CompilationTask): List<String> { check(command.info.plugins.annotationProcessorsList.isNotEmpty()) { "method called without annotation processors" } - return setupCompileContext(command).also { + return getCommonArgs(command).also { it.addAll(command.info.encodedPluginDescriptorsList) it.addAll(command.inputs.kotlinSourcesList) it.addAll(command.inputs.javaSourcesList) @@ -52,11 +52,9 @@ } /** - * Evaluate the compilation context and add Metadata to the ctx if needed. - * - * @return The args to pass to the kotlin compile class. + * Return a list with the common arguments. */ - private fun setupCompileContext(command: KotlinModel.BuilderCommand): MutableList<String> { + private fun getCommonArgs(command: KotlinModel.CompilationTask): MutableList<String> { val args = mutableListOf<String>() // use -- for flags not meant for the kotlin compiler @@ -77,8 +75,8 @@ return args } - override fun compile(command: KotlinModel.BuilderCommand): List<String> = - with(setupCompileContext(command)) { + override fun compile(command: KotlinModel.CompilationTask): List<String> = + with(getCommonArgs(command)) { addAll(command.inputs.javaSourcesList) addAll(command.inputs.generatedJavaSourcesList) addAll(command.inputs.kotlinSourcesList)
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/utils/KotlinCompilerOutputSink.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinCompilerOutputSink.kt similarity index 75% rename from kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/utils/KotlinCompilerOutputSink.kt rename to kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinCompilerOutputSink.kt index 42ddf53..c72628c 100644 --- a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/utils/KotlinCompilerOutputSink.kt +++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinCompilerOutputSink.kt
@@ -13,31 +13,26 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.bazel.kotlin.builder.mode.jvm.utils +package io.bazel.kotlin.builder.tasks.jvm -import com.google.inject.ImplementedBy import com.google.inject.Inject import com.google.inject.Provider +import com.google.inject.Singleton import java.io.File import java.io.PrintStream import java.nio.file.Paths -@ImplementedBy(DefaultOutputProcessorFactory::class) -interface KotlinCompilerOutputSink { - fun deliver(line: String) - fun deliver(lines: List<String>) -} - -private class DefaultOutputProcessorFactory @Inject constructor( +@Singleton +class KotlinCompilerOutputSink @Inject constructor( val streamProvider: Provider<PrintStream> -) : KotlinCompilerOutputSink { +) { private val executionRoot: String = Paths.get("").toAbsolutePath().toString() + File.separator - override fun deliver(line: String) { + fun deliver(line: String) { streamProvider.get().println(trimExecutionRootPrefix(line)) } - override fun deliver(lines: List<String>) { + fun deliver(lines: List<String>) { streamProvider.get().also { stream -> lines.map(::trimExecutionRootPrefix).forEach(stream::println) } }
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/KotlinJvmCompilationExecutor.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt similarity index 70% rename from kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/KotlinJvmCompilationExecutor.kt rename to kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt index db1b42d..fbf7655 100644 --- a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/KotlinJvmCompilationExecutor.kt +++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/KotlinJvmTaskExecutor.kt
@@ -13,41 +13,29 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.bazel.kotlin.builder.mode.jvm +package io.bazel.kotlin.builder.tasks.jvm import com.google.common.base.Stopwatch -import com.google.inject.ImplementedBy import com.google.inject.Inject import com.google.inject.Singleton -import io.bazel.kotlin.builder.BuildCommandBuilder import io.bazel.kotlin.builder.CompilationStatusException -import io.bazel.kotlin.builder.mode.jvm.KotlinJvmCompilationExecutor.Result -import io.bazel.kotlin.builder.mode.jvm.actions.JDepsGenerator -import io.bazel.kotlin.builder.mode.jvm.actions.JavaCompiler -import io.bazel.kotlin.builder.mode.jvm.actions.KotlinCompiler -import io.bazel.kotlin.builder.mode.jvm.actions.OutputJarCreator -import io.bazel.kotlin.builder.mode.jvm.utils.KotlinCompilerOutputSink -import io.bazel.kotlin.model.KotlinModel.BuilderCommand +import io.bazel.kotlin.builder.utils.expandWithGeneratedSources +import io.bazel.kotlin.model.KotlinModel.CompilationTask import java.io.File import java.util.concurrent.TimeUnit -@ImplementedBy(DefaultKotlinJvmCompilationExecutor::class) -interface KotlinJvmCompilationExecutor { - class Result(val timings: List<String>, val command: BuilderCommand) - - fun compile(command: BuilderCommand): Result -} @Singleton -private class DefaultKotlinJvmCompilationExecutor @Inject constructor( - private val commandBuilder: BuildCommandBuilder, +class KotlinJvmTaskExecutor @Inject internal constructor( private val kotlinCompiler: KotlinCompiler, private val outputSink: KotlinCompilerOutputSink, private val javaCompiler: JavaCompiler, private val jDepsGenerator: JDepsGenerator, private val outputJarCreator: OutputJarCreator -) : KotlinJvmCompilationExecutor { - override fun compile(command: BuilderCommand): Result { +) { + class Result(val timings: List<String>, val command: CompilationTask) + + fun compile(command: CompilationTask): Result { val context = Context() val commandWithApSources = context.execute("kapt") { runAnnotationProcessors(command) @@ -62,7 +50,7 @@ return Result(context.timings, commandWithApSources) } - private fun runAnnotationProcessors(command: BuilderCommand): BuilderCommand = + private fun runAnnotationProcessors(command: CompilationTask): CompilationTask = try { if (command.info.plugins.annotationProcessorsList.isNotEmpty()) { kotlinCompiler.runAnnotationProcessor(command) @@ -70,16 +58,16 @@ .filter { it.isFile } .map { it.path } .iterator() - .let { commandBuilder.withGeneratedSources(command, it) } + .let { command.expandWithGeneratedSources(command, it) } } else { command } - } catch(ex: CompilationStatusException) { + } catch (ex: CompilationStatusException) { ex.lines.also(outputSink::deliver) throw ex } - private fun compileClasses(context: Context, command: BuilderCommand) { + private fun compileClasses(context: Context, command: CompilationTask) { var kotlinError: CompilationStatusException? = null var result: List<String>? = null context.execute("kotlinc") {
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/OutputJarCreator.kt b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/OutputJarCreator.kt similarity index 87% rename from kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/OutputJarCreator.kt rename to kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/OutputJarCreator.kt index 88c98af..540f673 100644 --- a/kotlin/builder/src/io/bazel/kotlin/builder/mode/jvm/actions/OutputJarCreator.kt +++ b/kotlin/builder/src/io/bazel/kotlin/builder/tasks/jvm/OutputJarCreator.kt
@@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.bazel.kotlin.builder.mode.jvm.actions +package io.bazel.kotlin.builder.tasks.jvm import com.google.inject.ImplementedBy import io.bazel.kotlin.builder.utils.jars.JarCreator @@ -22,11 +22,11 @@ @ImplementedBy(DefaultOutputJarCreator::class) interface OutputJarCreator { - fun createOutputJar(command: KotlinModel.BuilderCommand) + fun createOutputJar(command: KotlinModel.CompilationTask) } private class DefaultOutputJarCreator : OutputJarCreator { - override fun createOutputJar(command: KotlinModel.BuilderCommand) { + override fun createOutputJar(command: KotlinModel.CompilationTask) { JarCreator( path = Paths.get(command.outputs.jar), normalize = true,
diff --git a/kotlin/builder/src/io/bazel/kotlin/builder/utils/TaskUtils.kt b/kotlin/builder/src/io/bazel/kotlin/builder/utils/TaskUtils.kt new file mode 100644 index 0000000..4ec19b4 --- /dev/null +++ b/kotlin/builder/src/io/bazel/kotlin/builder/utils/TaskUtils.kt
@@ -0,0 +1,58 @@ +/* + * Copyright 2018 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. + */ +package io.bazel.kotlin.builder.utils + +import io.bazel.kotlin.model.KotlinModel + + +fun KotlinModel.CompilationTask.expandWithSources( + command: KotlinModel.CompilationTask, + sources: Iterator<String> +): KotlinModel.CompilationTask = + command.updateBuilder { builder -> + sources.partitionSources( + { builder.inputsBuilder.addKotlinSources(it) }, + { builder.inputsBuilder.addJavaSources(it) }) + } + + +fun KotlinModel.CompilationTask.expandWithGeneratedSources( + command: KotlinModel.CompilationTask, + sources: Iterator<String> +): KotlinModel.CompilationTask = + command.updateBuilder { builder -> + sources.partitionSources( + { builder.inputsBuilder.addGeneratedKotlinSources(it) }, + { builder.inputsBuilder.addGeneratedJavaSources(it) }) + } + +private fun KotlinModel.CompilationTask.updateBuilder( + init: (KotlinModel.CompilationTask.Builder) -> Unit +): KotlinModel.CompilationTask = + toBuilder().let { + init(it) + it.build() + } + +fun Iterator<String>.partitionSources(kt: (String) -> Unit, java: (String) -> Unit) { + forEach { + when { + it.endsWith(".kt") -> kt(it) + it.endsWith(".java") -> java(it) + else -> throw IllegalStateException("invalid source file type $it") + } + } +}
diff --git a/kotlin/builder/unittests/BUILD b/kotlin/builder/unittests/BUILD new file mode 100644 index 0000000..2895039 --- /dev/null +++ b/kotlin/builder/unittests/BUILD
@@ -0,0 +1,25 @@ +# Copyright 2018 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. +java_test( + name = "unittests", + size = "small", + srcs = glob(["**/*.java"]), + test_class = "io.bazel.kotlin.builder.mode.jvm.utils.JdepsParserTest", + deps = [ + "//kotlin/builder/src/io/bazel/kotlin/builder", + "@com_github_jetbrains_kotlin//:kotlin-stdlib", + "@io_bazel_rules_kotlin//kotlin/builder/proto:deps", + "@io_bazel_rules_kotlin_com_google_protobuf_protobuf_java//jar", + ] +)
diff --git a/kotlin/builder/unittests/io/bazel/kotlin/workers/mode/jvm/utils/JdepsParserTest.java b/kotlin/builder/unittests/io/bazel/kotlin/workers/mode/jvm/utils/JdepsParserTest.java index 7013b35..8bf24ec 100644 --- a/kotlin/builder/unittests/io/bazel/kotlin/workers/mode/jvm/utils/JdepsParserTest.java +++ b/kotlin/builder/unittests/io/bazel/kotlin/workers/mode/jvm/utils/JdepsParserTest.java
@@ -16,6 +16,7 @@ package io.bazel.kotlin.builder.mode.jvm.utils; import com.google.devtools.build.lib.view.proto.Deps; +import io.bazel.kotlin.builder.tasks.jvm.JdepsParser; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith;
diff --git a/kotlin/internal/bootstrap.bzl b/kotlin/internal/bootstrap.bzl index 4136a90..05cbbaf 100644 --- a/kotlin/internal/bootstrap.bzl +++ b/kotlin/internal/bootstrap.bzl
@@ -17,21 +17,6 @@ load("//kotlin/internal:rules.bzl", _kt_jvm_import_impl="kt_jvm_import_impl") load("@bazel_tools//tools/build_defs/repo:http.bzl", _http_archive="http_archive") -kotlin_stdlib = rule( - attrs = { - "jars": attr.label_list( - allow_files = True, - mandatory = True, - ), - "srcjar": attr.label( - allow_single_file = True, - ), - }, - implementation = _kt_jvm_import_impl, -) - -"""Import Kotlin libraries that are part of the compiler release.""" - def _kt_toolchain_ide_info_impl(ctx): tc=ctx.toolchains[kt.defs.TOOLCHAIN_TYPE] info = struct(
diff --git a/kotlin/kotlin.bzl b/kotlin/kotlin.bzl index 2ecd9a5..73a0ea7 100644 --- a/kotlin/kotlin.bzl +++ b/kotlin/kotlin.bzl
@@ -112,9 +112,9 @@ _kt_jvm_junit_test_impl = "kt_jvm_junit_test_impl", _kt_jvm_library_impl = "kt_jvm_library_impl", ) +load("//kotlin:kotlin_releases.bzl", "KOTLIN_CURRENT_RELEASE") load( "//kotlin:kotlin_compiler_repositories.bzl", - "KOTLIN_CURRENT_RELEASE", _kotlin_compiler_repository = "kotlin_compiler_repositories", ) load("//third_party/jvm:workspace.bzl", _maven_dependencies="maven_dependencies")
diff --git a/kotlin/kotlin_compiler_repositories.bzl b/kotlin/kotlin_compiler_repositories.bzl index d338141..6161285 100644 --- a/kotlin/kotlin_compiler_repositories.bzl +++ b/kotlin/kotlin_compiler_repositories.bzl
@@ -14,186 +14,30 @@ """This file contains the Kotlin compiler repository definitions. It should not be loaded directly by client workspaces. """ load("@bazel_tools//tools/build_defs/repo:http.bzl", _http_file="http_file", _http_archive="http_archive") -load( - "//kotlin/internal:kt.bzl", - _kt = "kt", +load("//kotlin/internal:kt.bzl", _kt = "kt") +load("//kotlin:kotlin_releases.bzl", + _KOTLIN_COMPILER_RELEASES="KOTLIN_COMPILER_RELEASES", + _KOTLIN_CURRENT_RELEASE="KOTLIN_CURRENT_RELEASE" ) -load( - "//third_party/jvm:workspace.bzl", - _maven_dependencies="maven_dependencies" -) - -KOTLIN_RELEASES = { - "1.2.50": { - "version": "1.2.50", - "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.50/kotlin-compiler-1.2.50.zip", - "sha256": "bc062c303b376711097a27bda4c28047eda0744e9acc64b9db640c19c7d171a9" - }, - "1.2.41": { - "version": "1.2.41", - "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.41/kotlin-compiler-1.2.41.zip", - "sha256": "af872772f268da5ca79d263b2943f1d694d475dddb80b6d408e9548805ed265c" - }, - "1.2.40": { - "version": "1.2.40", - "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.40/kotlin-compiler-1.2.40.zip", - "sha256": "3498571126c335be0feec24075c359f1954d46bbabccafc729ec49db1a509658", - }, - "1.2.30": { - "version": "1.2.30", - "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.30/kotlin-compiler-1.2.30.zip", - "sha256": "4d6965877301d44241ca6de36480140992dc8a6b1c1884baeb5239ce2c43e071", - }, - "1.2.21": { - "version": "1.2.21", - "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.21/kotlin-compiler-1.2.21.zip", - "sha256": "c5f2cbd35daa6c5c394e92e6c06b8eb41d85ad8da64762733874166b6807af22", - }, - "1.2.20": { - "version": "1.2.20", - "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.20/kotlin-compiler-1.2.20.zip", - "sha256": "fb63d3d9f37b43f37575e3623c058d42a4b5dc8da08479ab065c4994e421a057", - }, - "1.2.10": { - "version": "1.2.10", - "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.10/kotlin-compiler-1.2.10.zip", - "sha256": "95874568919121acb694bec0d6c92c60bdceea53f4c202e23ab734e94a0c26e3", - }, - "1.2.0": { - "version": "1.2.0", - "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.0/kotlin-compiler-1.2.0.zip", - "sha256": "895d0f8286db3e4f43d67cd5e09b600af6e0a5017cb74072d1b09c78b697775a", - }, -} - -KOTLIN_COMPILER_REPO_BUILD_FILE = """ -load("@io_bazel_rules_kotlin//kotlin/internal:bootstrap.bzl", kotlin_stdlib="kotlin_stdlib") -package(default_visibility = ["//visibility:public"]) - -filegroup( - name = "home", - srcs = glob(["lib/*.jar"], exclude = ["lib/*-sources.jar"]), -) - -kotlin_stdlib( - name = "kotlin-runtime", - jars = ["lib/kotlin-runtime.jar"], - srcjar = "lib/kotlin-runtime-sources.jar" -) - -kotlin_stdlib( - name = "kotlin-stdlib", - jars = ["lib/kotlin-stdlib.jar"], - srcjar = "lib/kotlin-stdlib-sources.jar" -) - -kotlin_stdlib( - name = "kotlin-stdlib-jdk7", - jars = ["lib/kotlin-stdlib-jdk7.jar"], - srcjar = "lib/kotlin-stdlib-jdk7-sources.jar" -) - -kotlin_stdlib( - name = "kotlin-stdlib-jdk8", - jars = ["lib/kotlin-stdlib-jdk8.jar"], - srcjar = "lib/kotlin-stdlib-jdk8-sources.jar" -) - -kotlin_stdlib( - name = "kotlin-reflect", - jars = ["lib/kotlin-reflect.jar"], - srcjar = "lib/kotlin-reflect-sources.jar" -) - -kotlin_stdlib( - name = "kotlin-test", - jars = ["lib/kotlin-test.jar"], - srcjar = "lib/kotlin-test-sources.jar" -) - -kotlin_stdlib( - name = "kotlin-script-runtime", - jars = ["lib/kotlin-script-runtime.jar"], - srcjar = "lib/kotlin-script-runtime-sources.jar" -) - -kotlin_stdlib( - name = "kotlin-annotation-processing", - jars = ["lib/kotlin-annotation-processing.jar"] -) - -kotlin_stdlib( - name = "kotlin-annotation-processing-runtime", - jars = ["lib/kotlin-annotation-processing-runtime.jar"] -) - -kotlin_stdlib( - name = "allopen-compiler-plugin", - jars = ["lib/allopen-compiler-plugin.jar"] -) - -kotlin_stdlib( - name = "noarg-compiler-plugin", - jars = ["lib/noarg-compiler-plugin.jar"] -) - -alias(name="runtime", actual="kotlin-runtime") -alias(name="stdlib", actual="kotlin-stdlib") -alias(name="stdlib-jdk7", actual="kotlin-stdlib-jdk7") -alias(name="stdlib-jdk8", actual="kotlin-stdlib-jdk8") -alias(name="reflect", actual="kotlin-reflect") -alias(name="test", actual="kotlin-test") - -java_import( - name = "compiler", - jars = ["lib/kotlin-compiler.jar"], -) - -java_import( - name = "script-runtime", - jars = ["lib/kotlin-script-runtime.jar"], -) - -java_import( - name = "preloader", - jars = ["lib/kotlin-preloader.jar"], -) - -sh_binary( - name = "kotlin", - srcs = ["bin/kotlin"], -) - -sh_binary( - name = "kotlinc", - srcs = ["bin/kotlinc"], -) - -exports_files(["src"]) -""" - -KOTLIN_CURRENT_RELEASE = "1.2.50" _BAZEL_JAVA_LAUNCHER_VERSION = "0.8.1" -def kotlin_compiler_repositories( - kotlin_release_version=KOTLIN_CURRENT_RELEASE, -): +def kotlin_compiler_repositories(kotlin_release_version): """ Prime the compiler repository. This function should not be called directly instead `kotlin_repositories` from `//kotlin:kotlin.bzl` should be called to ensure common deps are loaded. """ - release=KOTLIN_RELEASES[kotlin_release_version] + release=_KOTLIN_COMPILER_RELEASES[kotlin_release_version] if not release: - fail('"%s" not a valid kotlin release, current release is "%s"' % (kotlin_release_version, KOTLIN_CURRENT_RELEASE)) + fail('"%s" not a valid kotlin release, current release is "%s"' % (kotlin_release_version, _KOTLIN_CURRENT_RELEASE)) _http_archive( name = _kt.defs.KT_COMPILER_REPO, url = release["url"], sha256 = release["sha256"], - build_file_content= KOTLIN_COMPILER_REPO_BUILD_FILE, + build_file= "@io_bazel_rules_kotlin//kotlin:BUILD.com_github_jetbrains_kotlin", strip_prefix = "kotlinc", )
diff --git a/kotlin/kotlin_releases.bzl b/kotlin/kotlin_releases.bzl new file mode 100644 index 0000000..f84f7eb --- /dev/null +++ b/kotlin/kotlin_releases.bzl
@@ -0,0 +1,58 @@ +# Copyright 2018 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. + +KOTLIN_CURRENT_RELEASE = "1.2.50" + +KOTLIN_COMPILER_RELEASES = { + "1.2.50": { + "version": "1.2.50", + "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.50/kotlin-compiler-1.2.50.zip", + "sha256": "bc062c303b376711097a27bda4c28047eda0744e9acc64b9db640c19c7d171a9" + }, + "1.2.41": { + "version": "1.2.41", + "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.41/kotlin-compiler-1.2.41.zip", + "sha256": "af872772f268da5ca79d263b2943f1d694d475dddb80b6d408e9548805ed265c" + }, + "1.2.40": { + "version": "1.2.40", + "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.40/kotlin-compiler-1.2.40.zip", + "sha256": "3498571126c335be0feec24075c359f1954d46bbabccafc729ec49db1a509658", + }, + "1.2.30": { + "version": "1.2.30", + "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.30/kotlin-compiler-1.2.30.zip", + "sha256": "4d6965877301d44241ca6de36480140992dc8a6b1c1884baeb5239ce2c43e071", + }, + "1.2.21": { + "version": "1.2.21", + "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.21/kotlin-compiler-1.2.21.zip", + "sha256": "c5f2cbd35daa6c5c394e92e6c06b8eb41d85ad8da64762733874166b6807af22", + }, + "1.2.20": { + "version": "1.2.20", + "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.20/kotlin-compiler-1.2.20.zip", + "sha256": "fb63d3d9f37b43f37575e3623c058d42a4b5dc8da08479ab065c4994e421a057", + }, + "1.2.10": { + "version": "1.2.10", + "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.10/kotlin-compiler-1.2.10.zip", + "sha256": "95874568919121acb694bec0d6c92c60bdceea53f4c202e23ab734e94a0c26e3", + }, + "1.2.0": { + "version": "1.2.0", + "url": "https://github.com/JetBrains/kotlin/releases/download/v1.2.0/kotlin-compiler-1.2.0.zip", + "sha256": "895d0f8286db3e4f43d67cd5e09b600af6e0a5017cb74072d1b09c78b697775a", + }, +} \ No newline at end of file
diff --git a/kotlin/toolchains.bzl b/kotlin/toolchains.bzl index 64359ab..733bc06 100644 --- a/kotlin/toolchains.bzl +++ b/kotlin/toolchains.bzl
@@ -50,7 +50,6 @@ "kotlin_home": attr.label( default = Label("@" + _KT_COMPILER_REPO + "//:home"), allow_files = True, - cfg = "host" ), "kotlinbuilder": attr.label( default = Label("//kotlin/builder"), @@ -84,14 +83,13 @@ _kt_jvm_attrs = dict(_common_attrs.items() + { "jvm_runtime": attr.label( - single_file = True, - default = Label("@" + _KT_COMPILER_REPO + "//:runtime"), + default = Label("@" + _KT_COMPILER_REPO + "//:kotlin-runtime"), ), "jvm_stdlibs": attr.label_list( default = [ - Label("@" + _KT_COMPILER_REPO + "//:stdlib"), - Label("@" + _KT_COMPILER_REPO + "//:stdlib-jdk7"), - Label("@" + _KT_COMPILER_REPO + "//:stdlib-jdk8"), + Label("@" + _KT_COMPILER_REPO + "//:kotlin-stdlib"), + Label("@" + _KT_COMPILER_REPO + "//:kotlin-stdlib-jdk7"), + Label("@" + _KT_COMPILER_REPO + "//:kotlin-stdlib-jdk8"), ] ), "jvm_target": attr.string(