I would like to cross-build some of my Bazel targets to Scala 2.12 and 2.13. As a further point of complexity, I need to be able to express cross-target dependencies (eg. some 2.13 target may have a Bazel dependency on a 2.12 target).
Note: this isn't a regular library dependency (eg. with the dependency 2.12-built JAR showing up on the class path when compiling the 2.13 JAR), as that would almost surely result in issues due to having two incompatible versions of the Scala standard library on the class path. Rather, this is just a case where I need the dependency JAR built so I can use it in some integration tests in the 2.13 target.
What I've found online so far...
- This issue from
rules_scala
seems it doesn't support baking the Scala version into the target and instead you have to pick the Scala version globally. - This Databricks post has a cross-building section that is exactly what I think I would like (eg. one target generated per library per supported Scala version), but the snippets in that post don't seem to be backed by any runnable Bazel code.
- This later post by Databricks also hints at a
cross_scala_lib
rule, but also doesn't have any accompanying code.
Wrote a blog post cross build anything with Bazel using Scala cross building as example in both traditional WORKSPACE way and the new MODULE.bazel way.
See https://github.com/eed3si9n/gigahorse/pull/85 for a working example.