@@ -32,18 +32,19 @@ def _kotlin_compile_impl(ctx):
3232 # preloader
3333 inputs += ctx .files ._kotlin_home
3434
35+ args += ctx .attr .args
36+
3537 # Make classpath if needed. Include those from this and dependent rules.
36- jars = []
38+ jars = depset ()
3739
38- # Populate from (transitive) java dependencies
40+ # Populate from (transitive) java dependencies.
3941 for dep in ctx .attr .java_deps :
4042 # Add-in all source and generated jar files
41- for file in dep .files :
42- jars .append (file )
43- # Add-in transitive dependencies
44- for file in dep .java .transitive_deps :
45- jars .append (file )
46-
43+ if java_common .provider in dep :
44+ info = dep [java_common .provider ]
45+ # Don't use the ABI jars!
46+ jars += info .full_compile_jars
47+
4748 # Populate from (transitive) kotlin dependencies
4849 for dep in ctx .attr .deps :
4950 jars += [file for file in dep .kt .transitive_jars ]
@@ -53,11 +54,9 @@ def _kotlin_compile_impl(ctx):
5354 # The fileset object is either a ConfiguredTarget OR a depset.
5455 files = getattr (fileset , 'files' , None )
5556 if files :
56- for file in files :
57- jars += [file ]
57+ jars = jars .union (files )
5858 else :
59- for file in fileset :
60- jars += [file ]
59+ jars = jars .union (fileset )
6160
6261 # Populate from android dependencies
6362 for dep in ctx .attr .android_deps :
@@ -66,15 +65,21 @@ def _kotlin_compile_impl(ctx):
6665
6766 if jars :
6867 # De-duplicate
69- jarsetlist = depset (jars ).to_list ()
70- args += ["-cp" , ":" .join ([file .path for file in jarsetlist ])]
71- inputs += jarsetlist
72-
68+ jarlist = depset (jars ).to_list ()
69+ args += ["-cp" , ":" .join ([f .path for f in jarlist ])]
70+ inputs += jarlist
71+ if ctx .attr .verbose :
72+ print ("kotlin compile classpath: \n " + "\n " .join ([file .path for file in jarlist ]))
73+
7374 # Add in filepaths
7475 for file in ctx .files .srcs :
7576 inputs += [file ]
7677 args += [file .path ]
7778
79+
80+ if ctx .attr .verbose > 1 :
81+ print ("kotlin compile arguments: \n %s" % "\n " .join (args ))
82+
7883 # Run the compiler
7984 ctx .action (
8085 mnemonic = "KotlinCompile" ,
@@ -92,7 +97,7 @@ def _kotlin_compile_impl(ctx):
9297 kt = struct (
9398 srcs = ctx .attr .srcs ,
9499 jar = kt_jar ,
95- transitive_jars = [kt_jar ] + jars ,
100+ transitive_jars = [kt_jar ] + jars . to_list () ,
96101 ),
97102 )
98103
@@ -121,6 +126,11 @@ _kotlin_compile_attrs = {
121126 providers = ["java" ],
122127 ),
123128
129+ # Add debugging info for the rule
130+ "verbose" : attr .int (
131+ default = 0 ,
132+ ),
133+
124134 # Dependent android rules.
125135 "android_deps" : attr .label_list (
126136 providers = ["android" ],
@@ -140,6 +150,9 @@ _kotlin_compile_attrs = {
140150 # Advanced options
141151 "x_opts" : attr .string_list (),
142152
153+ # Other args
154+ "args" : attr .string_list (),
155+
143156 # Plugin options
144157 "plugin_opts" : attr .string_dict (),
145158
@@ -281,6 +294,8 @@ def kotlin_binary(name,
281294 x_opts = [],
282295 plugin_opts = {},
283296 java_deps = [],
297+ compile_args = [],
298+ verbose = None ,
284299 visibility = None ,
285300 ** kwargs ):
286301
@@ -291,16 +306,27 @@ def kotlin_binary(name,
291306 srcs = srcs ,
292307 deps = deps ,
293308 x_opts = x_opts ,
309+ args = compile_args ,
294310 plugin_opts = plugin_opts ,
295311 visibility = visibility ,
312+ verbose = verbose ,
296313 )
297314
315+ runtime_deps = [name + "_kt.jar" ] + java_deps + [
316+ dep + "_kt"
317+ for dep in deps
318+ ] + ["@com_github_jetbrains_kotlin//:runtime" ]
319+
320+ if len (jars ):
321+ native .java_import (
322+ name = name + "_jars" ,
323+ jars = jars ,
324+ )
325+ runtime_deps += [name + "_jars" ]
326+
298327 native .java_binary (
299328 name = name ,
300- runtime_deps = [name + "_kt.jar" ] + java_deps + [
301- dep + "_kt"
302- for dep in deps
303- ] + ["@com_github_jetbrains_kotlin//:runtime" ],
329+ runtime_deps = runtime_deps ,
304330 visibility = visibility ,
305331 ** kwargs
306332 )
0 commit comments