У меня есть genrule
, который принимает «в» файле конфигурации и выплевывает «большое количество встроенных файлов (*.so*
s и *.h
файлов):
genrule(
name = "ros_auto",
local = True,
srcs = [":package_list"],
outs = ["ros_built.tgz"],
tools = [":build_packages.bash"],
cmd = "$(location :build_packages.bash) $< $@"
)
Далее мне нужно взять все файлы, которые выводятся из вышеупомянутого genrule
, и создать из них cc_library
, как показано ниже (на данный момент единственный управляемый способ, которым я могу найти, - зарегистрировать выходные файлы в * 1009).* архивирует их и объявляет смолу):
cc_library(
name = "ros",
srcs = glob(["lib/*.so*"]),
hdrs = glob([
"include/**/*.h",
"include/**/*.hpp",
]),
strip_include_prefix = "include",
visibility = ["//visibility:public"],
)
Независимо от того, куда я смотрю, я, похоже, продолжаю находить deadend после deadend (http_archive
использует метод download_and_extract
, который предполагает, что *tgz
удаленная реализация cc_library
недоступна / не может быть расширена Java и т. д.).
Я бы подумал, что проблема "У меня есть узел A, который генерирует тонну выходных файлов, от которого зависит узел B" был бы чрезвычайно распространенным и имел бы простое решение.Я что-то упускаю из виду?
Контекст:
Я работаю с правилом локального репозитория, которое принимает локальный каталог и использует правило cc_library
вышев качестве параметра build_file (но это означает, что сборка первого шага этого процесса должна выполняться полностью вне процесса сборки Bazel, а это не так, как это должно быть сделано):
new_local_repository(
name = "ros",
path = "/tmp/ros_debug",
build_file = "//ros:BUILD.bazel",
licenses = ["https://docs.ros.org/diamondback/api/licenses.html"]
)