There's genrule() which basically runs a shell script. With that, you can build anything for which you can write a command-line. And you can go as far as invoke a binary that is built by another bazel rule.
You can also define your own rules in a subset of Python (by wrapping other rules including genrule()), so adding new languages should be simple enough.
You can also define your own rules in a subset of Python (by wrapping other rules including genrule()), so adding new languages should be simple enough.