Как я могу сказать bazel связать предварительно скомпилированную (статическую) библиотеку?
Я сослался на существующий проект статической библиотеки (xy.BUILD):
cc_library(
name="xy",
srcs=["lib/x86_64/libxy.a"],
hdrs=["include/xy.h"],
includes=["include"],
#linkstatic=True, <---- *1
#alwayslink=True,
visibility=["//visibility:public"],
)
Внутри другого проекта (СТРОЙКА):
cc_library(
name="myxylib",
hdrs=["myxylib.h"],
srcs=["myxylib.c"],
visibility=["//visibility:public"],
deps=["@xy//:xy"],
linkopts = ["-pthread",
#"-Lexternal/xy/lib/x86_64/", <---- *2
#"-lxy",
#"-z defs"
],
)
... как внешняя зависимость (new_local_repository в WORKSPACE). Я могу использовать файлы заголовков и скомпилировать код как библиотеку .so, но символы из статической библиотеки отсутствуют внутри общего объекта, потому что bazel не устанавливает флаги -L и -l (см. комментарии *2) автоматически для зависимость. Есть ли способ заставить базель сделать это автоматически? Я уже пробовал параметры в комментарии *1, но это не помогает.
Мне очень неудобно устанавливать флаги -L и -l вручную, потому что мне придется поддерживать разные архитектуры, и я предпочел бы устанавливать пути для зависимых от архитектуры разных библиотек только один, а не повторять его в каждом унаследованном артефакте.