Как получить доступ к компилятору протокола в собственном пакете Yocto и ссылку на библиотеки gRPC

У меня есть проблемы со сборкой собственного пакета grpcSandbox, который зависит от gRPC и protobuf. Уже существуют рецепты для gRPC и protobuf, которые хорошо собираются.

Проблема в следующем: для проекта cmake grpcSandbox требуется каталог gRPC header / libs и protobuf header / libs + protobuf-compiler (protoc).

Я действительно не понимаю, как связать из моего пакета grpcSandbox с общими библиотеками из gRPC и как выполнить мета-компилятор «protoc», который предоставляется protobuf.

Все, что я сделал, это добавил зависимости к двум пакетам в моем рецепте.

# Recipe created by recipetool
# This is the basis of a recipe and may need further editing in order to be fully functional.
# (Feel free to remove these comments when editing.)

# WARNING: the following LICENSE and LIC_FILES_CHKSUM values are best guesses - it is
# your responsibility to verify that the values are complete and correct.
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=79bfc140d04e521d1032e65eef60cfa8"

SRC_URI = "***"

# Modify these as desired
PV = "1.1+git${SRCPV}"
SRCREV = "***"

S = "${WORKDIR}/git"

# This depends on gRPC and protobuf (gRPC depends on protobuf)
RDEPENDS_${PN} += " grpc protobuf nativesdk-protobuf"

#protobuf-native makes the protoc (protobuf compiler) at build time accessible (host version)
#Need to check if this works, since it will convert proto-files to cpp/hpp files
DEPENDS_${PN} += " protobuf protobuf-native grpc"

# NOTE: unable to map the following CMake package dependencies: Protobuf GRPC
inherit cmake

# Specify any options you want to pass to cmake using EXTRA_OECMAKE:
# Pass the path of sysroot to the cmake compiler script. Required to find headers of protobuf/protoc
EXTRA_OECMAKE = "-DOE_SYSROOT:STRING=${STAGING_DIR_HOST}"

Когда я запускаю devshell с помощью «bitbake -c devshell grpcsandbox», команда «protoc» недоступна, и я не могу найти библиотеки / заголовки gRPC в системном корне пакета grpcsandbox (который, как я думал, они должны быть там, поскольку я их перечислил) как зависимость для grpcSandbox).

Что я делаю неправильно?


person ThomasD13    schedule 24.07.2019    source источник


Ответы (1)


Я не использовал protobuf в Yocto, поэтому не могу точно сказать, как он разработан для использования, но могу указать на некоторые проблемы в рецепте:

# This depends on gRPC and protobuf (gRPC depends on protobuf)
RDEPENDS_${PN} += " grpc protobuf nativesdk-protobuf"

RDEPENDS касается зависимостей времени выполнения. Маловероятно, что вы захотите зависеть от пакета nativesdk- здесь, и я сомневаюсь и в самом protobuf - нужен ли protobuf во время выполнения на целевой машине?

#protobuf-native makes the protoc (protobuf compiler) at build time accessible (host version)
#Need to check if this works, since it will convert proto-files to cpp/hpp files
DEPENDS_${PN} += " protobuf protobuf-native grpc"

DEPENDS касается зависимостей времени сборки и не зависит от пакета: вы должны просто сказать DEPENDS = .... Исправление этого должно поместить двоичный файл протокола в собственный системный корневой каталог, чтобы он был доступен во время сборки.

person Jussi Kukkonen    schedule 24.07.2019
comment
Большое тебе спасибо! Изменение DEPENDS _ $ {PN} на DEPENDS действительно помещает двоичный файл протокола в собственный системный корневой каталог. И nativesdk-protobuf не требовался как RDEPENDS, как вы указали. Теперь это работает! - person ThomasD13; 24.07.2019