我想用Bazel构建一个Linux内核模块。 我有包含模块逻辑的源:logic.c 到目前为止我使用的过程:
在我开始与Skylark合作之前,我想知道是否有一个众所周知的食谱我不知道以及是否可以分享。
我还注意到 cpp片段没有公开' ld'工具,我想知道为什么会这样?我知道我可以使用' gcc'使用-Xlinker或-Wl来实现几乎相同,但访问ld会很不错。
- 约翰
答案 0 :(得分:2)
AFAIK,没有现有食谱。但是,如果您可以使用g++
(而不是ld
直接)链接所有内容,则可以将其作为宏执行:
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],
)
如果你想/需要使用Skylark,我认为没有任何理由我们无法公开ld
,它还没有发生。您可以file a bug或发送拉取请求,向getLdExecutable()
添加@SkylarkCallable
注释。