def genjni_impl(ctx):
cmd = (
'%s ' % ctx.executable._javah.path +
'-cp %s ' % ':'.join([jar.class_jar.path for jar in ctx.attr.lib.java.outputs.jars]) +
'-d %s ' % ctx.outputs.header.dirname +
'%s' % ctx.attr.classname
)
ctx.action(
inputs = [ ctx.file.lib, ctx.executable._javah ],
outputs = [ ctx.outputs.header ],
mnemonic = 'Javah',
command = cmd,
use_default_shell_env = True)
return struct()
genjni_internal = rule(genjni_impl,
attrs = {
"lib": attr.label(mandatory=True, single_file=True),
"classname": attr.string(mandatory=True),
"_javah": attr.label(
default=Label("@local_jdk//:javah"),
executable=True),
},
outputs = {"header": "%{name}.h"},
output_to_genfiles = True,
)
def jni_library(name, lib, classes):
hdrs = []
for c in classes:
header = c.replace('.', '_')
genjni_internal(
name=header,
lib=lib,
classname=c)
hdrs = hdrs + [ ':' + header + '.h' ]
native.cc_library(
name=name,
hdrs=hdrs,
includes=["."])