Creating ABI Jars for bazel / buck and other next gen build systems


I’m working on bazel rules for Kotlin. Bazel (and buck) creates interface jars for Java code representing the ABI of a Jar. This doesn’t work for Kotlin Jars with inline functions as they get pruned out.

bazel ijar implementation and design doc

I need some advice on the simplest way of creating an IJAR for Kotlin.

I don’t know how the inline function code is represented in a JAR. Is the source retained in some manifest file, is it encoded in byte code ? If it’s the first case PerhapsI could find a way of including it in the IJAR.

I think it would be best if the compiler could produce an ijar for a compile operation – this would be a future proof solution for use-cases where Kotlin needs to do other advanced stuff that might affect the ABI of a jar (macros like Scala). Could JB implement a plugin or compiler switch to produce an ijar ?