Rules

kt_compiler_plugin

Define a plugin for the Kotlin compiler to run. The plugin can then be referenced in the plugins attribute of the kt_jvm_* rules.

An example can be found under //examples/plugin:

kt_compiler_plugin(
    name = "open_for_testing_plugin",
    id = "org.jetbrains.kotlin.allopen",
    options = {
        "annotation": "plugin.OpenForTesting",
    },
    deps = [
        "@com_github_jetbrains_kotlin//:allopen-compiler-plugin",
    ],
)

kt_jvm_library(
    name = "open_for_testing",
    srcs = ["OpenForTesting.kt"],
)

kt_jvm_library(
    name = "user",
    srcs = ["User.kt"],
    plugins = [":open_for_testing_plugin"],
    deps = [
        ":open_for_testing",
    ],
)

name

A unique name for this target.

compile_phase

Runs the compiler plugin during kotlin compilation. Known examples: allopen, sam_with_reciever

deps

The list of libraries to be added to the compiler's plugin classpath

id

The ID of the plugin

options

Dictionary of options to be passed to the plugin. Supports the following template values:

  • {generatedClasses}: directory for generated class output
  • {temp}: temporary directory, discarded between invocations
  • {generatedSources}: directory for generated source output

stubs_phase

Runs the compiler plugin in kapt stub generation.

target_embedded_compiler

Plugin was compiled against the embeddable kotlin compiler. These plugins expect shaded kotlinc dependencies, and will fail when running against a non-embeddable compiler.

kt_javac_options

Define java compiler options for kt_jvm_* rules with java sources.

name

A unique name for this target.

warn

Control warning behaviour.

x_ep_disable_all_checks

See javac -XepDisableAllChecks documentation

x_lint

See javac -Xlint: documentation

xd_suppress_notes

See javac -XDsuppressNotes documentation

kt_jvm_binary

Builds a Java archive ("jar file"), plus a wrapper shell script with the same name as the rule. The wrapper shell script uses a classpath that includes, among other things, a jar file for each library on which the binary depends.

Note: This rule does not have all of the features found in java_binary. It is appropriate for building workspace utilities. java_binary should be preferred for release artefacts.

name

A unique name for this target.

data

The list of files needed by this rule at runtime. See general comments about data at Attributes common to all build rules.

deps

A list of dependencies of this rule.See general comments about deps at Attributes common to all build rules.

javac_opts

Javac options to be used when compiling this target. These opts if provided will be used instead of the ones provided to the toolchain.

jvm_flags

A list of flags to embed in the wrapper script generated for running this binary. Note: does not yet support make variable substitution.

kotlinc_opts

Kotlinc options to be used when compiling this target. These opts if provided will be used instead of the ones provided to the toolchain.

main_class

Name of class with main() method to use as entry point.

module_name

The name of the module, if not provided the module name is derived from the label. --e.g., //some/package/path:label_name is translated to some_package_path-label_name.

plugins

resource_jars

Set of archives containing Java resources. If specified, the contents of these jars are merged into the output jar.

resource_strip_prefix

The path prefix to strip from Java resources, files residing under common prefix such as src/main/resources or src/test/resources or kotlin will have stripping applied by convention.

resources

A list of files that should be include in a Java jar.

runtime_deps

Libraries to make available to the final binary or test at runtime only. Like ordinary deps, these will appear on the runtime classpath, but unlike them, not on the compile-time classpath.

srcs

The list of source files that are processed to create the target, this can contain both Java and Kotlin files. Java analysis occurs first so Kotlin classes may depend on Java classes in the same compilation unit.

kt_jvm_import

Import Kotlin jars.

examples

# Old style usage -- reference file groups, do not used this.
kt_jvm_import(
    name = "kodein",
    jars = [
        "@com_github_salomonbrys_kodein_kodein//jar:file",
        "@com_github_salomonbrys_kodein_kodein_core//jar:file"
    ]
)

# This style will pull in the transitive runtime dependencies of the targets as well.
kt_jvm_import(
    name = "kodein",
    jars = [
        "@com_github_salomonbrys_kodein_kodein//jar",
        "@com_github_salomonbrys_kodein_kodein_core//jar"
    ]
)

# Import a single kotlin jar.
kt_jvm_import(
    name = "kotlin-stdlib",
    jars = ["lib/kotlin-stdlib.jar"],
    srcjar = "lib/kotlin-stdlib-sources.jar"
)

name

A unique name for this target.

deps

Compile and runtime dependencies

exported_compiler_plugins

Exported compiler plugins.

Compiler plugins listed here will be treated as if they were added in the plugins attribute of any targets that directly depend on this target. Unlike java_plugins' exported_plugins, this is not transitive

exports

Exported libraries.

Deps listed here will be made available to other rules, as if the parents explicitly depended on these deps. This is not true for regular (non-exported) deps.

jar

The jar listed here is equivalent to an export attribute.

jars

The jars listed here are equavalent to an export attribute. The label should be either to a single class jar, or one or more filegroup labels. The filegroups, when resolved, must contain only one jar containing classes, and (optionally) one peer file containing sources, named <jarname>-sources.jar.

DEPRECATED - please use jar and srcjar attributes.

If true only use this library for compilation and not at runtime.

runtime_deps

Additional runtime deps.

srcjar

The sources for the class jar.

kt_jvm_library

This rule compiles and links Kotlin and Java sources into a .jar file.

name

A unique name for this target.

data

The list of files needed by this rule at runtime. See general comments about data at Attributes common to all build rules.

deps

A list of dependencies of this rule.See general comments about deps at Attributes common to all build rules.

exported_compiler_plugins

Exported compiler plugins.

Compiler plugins listed here will be treated as if they were added in the plugins attribute of any targets that directly depend on this target. Unlike java_plugins exported_plugins, this is not transitive

exports

Exported libraries.

Deps listed here will be made available to other rules, as if the parents explicitly depended on these deps. This is not true for regular (non-exported) deps.

javac_opts

Javac options to be used when compiling this target. These opts if provided will be used instead of the ones provided to the toolchain.

kotlinc_opts

Kotlinc options to be used when compiling this target. These opts if provided will be used instead of the ones provided to the toolchain.

module_name

The name of the module, if not provided the module name is derived from the label. --e.g., //some/package/path:label_name is translated to some_package_path-label_name.

If true only use this library for compilation and not at runtime.

plugins

resource_jars

Set of archives containing Java resources. If specified, the contents of these jars are merged into the output jar.

resource_strip_prefix

The path prefix to strip from Java resources, files residing under common prefix such as src/main/resources or src/test/resources or kotlin will have stripping applied by convention.

resources

A list of files that should be include in a Java jar.

runtime_deps

Libraries to make available to the final binary or test at runtime only. Like ordinary deps, these will appear on the runtime classpath, but unlike them, not on the compile-time classpath.

srcs

The list of source files that are processed to create the target, this can contain both Java and Kotlin files. Java analysis occurs first so Kotlin classes may depend on Java classes in the same compilation unit.

kt_jvm_test

Setup a simple kotlin_test.

Notes:

  • The kotlin test library is not added implicitly, it is available with the label @com_github_jetbrains_kotlin//:kotlin-test.

name

A unique name for this target.

data

The list of files needed by this rule at runtime. See general comments about data at Attributes common to all build rules.

deps

A list of dependencies of this rule.See general comments about deps at Attributes common to all build rules.

friends

A single Kotlin dep which allows the test code access to internal members. Currently uses the output jar of the module -- i.e., exported deps won't be included.

javac_opts

Javac options to be used when compiling this target. These opts if provided will be used instead of the ones provided to the toolchain.

jvm_flags

A list of flags to embed in the wrapper script generated for running this binary. Note: does not yet support make variable substitution.

kotlinc_opts

Kotlinc options to be used when compiling this target. These opts if provided will be used instead of the ones provided to the toolchain.

main_class

module_name

The name of the module, if not provided the module name is derived from the label. --e.g., //some/package/path:label_name is translated to some_package_path-label_name.

plugins

resource_jars

Set of archives containing Java resources. If specified, the contents of these jars are merged into the output jar.

resource_strip_prefix

The path prefix to strip from Java resources, files residing under common prefix such as src/main/resources or src/test/resources or kotlin will have stripping applied by convention.

resources

A list of files that should be include in a Java jar.

runtime_deps

Libraries to make available to the final binary or test at runtime only. Like ordinary deps, these will appear on the runtime classpath, but unlike them, not on the compile-time classpath.

srcs

The list of source files that are processed to create the target, this can contain both Java and Kotlin files. Java analysis occurs first so Kotlin classes may depend on Java classes in the same compilation unit.

test_class

The Java class to be loaded by the test runner.

kt_kotlinc_options

Define kotlin compiler options.

name

A unique name for this target.

include_stdlibs

Don't automatically include the Kotlin standard libraries into the classpath (stdlib and reflect).

warn

Control warning behaviour.

x_allow_jvm_ir_dependencies

Suppress errors thrown when using dependencies not compiled by the IR backend.

x_allow_result_return_type

Enable kotlin.Result as a return type

x_inline_classes

Enable experimental inline classes

x_jvm_default

Specifies that a JVM default method should be generated for non-abstract Kotlin interface member.

x_no_optimized_callable_references

Do not use optimized callable reference superclasses. Available from 1.4.

x_skip_prerelease_check

Suppress errors thrown when using pre-release classes.

x_use_experimental

Allow the experimental language features.

x_use_ir

Enable or disable the experimental IR backend.

Macros and Functions

define_kt_toolchain

Define the Kotlin toolchain.

name

language_version

api_version

jvm_target

experimental_use_abi_jars

javac_options

kotlinc_options

kt_android_library

Creates an Android sandwich library.

srcs, deps, plugins are routed to kt_jvm_library the other android related attributes are handled by the native android_library rule.

name

exports

visibility

kwargs

kt_js_import

name

kwargs

kt_js_library

name

kwargs

kt_register_toolchains

This macro registers the kotlin toolchain.