I would like to use Bazel to build a Linux kernel module. I have sources that contain the logic of the module: logic.c The process I used so far:
Before I start making this work with Skylark, I was wondering if there is a well known recipe that I don't know of and if it can be shared.
I also noticed that the cpp fragment does not expose the 'ld' tool, I was wondering why is that? I know I can use the 'gcc' with -Xlinker or -Wl, to achieve almost the same, but it would have been nice to get access to the ld.
-- John
AFAIK, there's no existing recipe. However, if you can link everything with g++ (instead of ld directly), you could do this as a macro like:
def mod(name, srcs, deps):
cc_library(
name = "%s-1" % name,
srcs = srcs,
deps = deps,
)
genrule(
name = "%s-modpost" % name,
srcs = ["%s-1.so" % name],
tools = ["//path/to:modpost"],
cmd = "$(location //path/to:modpost) $(location :%s-1.so) $@" % name,
outs = ["%s-modpost.c"],
)
cc_library(
name = "%s-2" % name,
srcs = [":%s-modpost.c" % name],
deps = deps,
)
genrule(
name = "%s" % name,
srcs = ["%s-2.a" % name],
cmd = "$(CC) $(CCFLAGS) -Wlr $(location :%s-2.a) -o $@" % name,
outs = ["%s.so" % name],
)
If you want/need to use Skylark, I don't think there's any reason we can't expose ld, it just hasn't happened yet. You could file a bug or make a pull request adding a @SkylarkCallable annotation to getLdExecutable().
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With