I'm trying to port gRPC example cpp helloworld in yocto 2.2 (morty) for armv5e .Host system is ubuntu 18.04. I have written a recipe hello_1.4.3.bb.
DESCRIPTION = "Working example for grpc"
AUTHOR = "self"
LICENSE = "Apache-2.0"
HOMEPAGE = "www.com"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
inherit autotools-brokensep pkgconfig cmake perlnative
DEPENDS = "grpc golang protobuf3 c-ares zlib openssl"
RDEPENDS_${PN} = "protobuf3"
#DEPENDS_append_class-target = " gtest grpc-native "
#DEPENDS_append_class-nativesdk = " grpc-native "
SRCREV = "29a2a533c98aa21f05c8f598ef2b47321508d5da"
BRANCH = "v1.4.x"
SRC_URI = "gitsm://github.com/grpc/grpc.git;protocol=https;name=grpc;branch=${BRANCH}"
CXXFLAGS_append_class-native ="-march=armv5e"
#CXXFLAGS_append_class-native = " -Wl,--no-as-needed"
PR = "r0"
S = "${WORKDIR}/git"
BBCLASSEXTEND = "native nativesdk"
TARGET_CXX_ARCH += "${LDFLAGS}"
EXTRA_OECMAKE = "-DgRPC_INSTALL=ON \
-DgRPC_BUILD_TESTS=OFF \
-DRUN_HAVE_STD_REGEX=1 \
-DRUN_HAVE_POSIX_REGEX=0 \
-DRUN_HAVE_STEADY_CLOCK=0 \
-DTHREADS_PTHREAD_ARG=2 \
-DCMAKE_CROSSCOMPILING=ON \
-DCMAKE_FIND_DEBUG_MODE=ON \
-DBUILD_DEPS=ON \
-DHAVE_STD_REGEX=ON \
-DRUN_HAVE_STD_REGEX=1 \
"
do_configure_prepend() {
cd ${WORKDIR}/git
git submodule update --init --recursive
}
do_compile() {
cd ${S}/examples/cpp/helloworld
make
}
do_install() {
install -d ${D}${bindir}
install -m 0755 ${S}/build/greeter_client ${D}${bindir}
install -m 0755 ${S}/build/greeter_server ${D}${bindir}
}
FILES_${PN} += "${bindir}/*"
RDEPENDS_${PN} += "libstdc++"
INSANE_SKIP_${PN} = "already-stripped rpaths"
I keep getting error
g++: error: unrecognized command line option ‘-marm’; did you mean ‘-mabm’? | : recipe for target 'helloworld.pb.o' failed make: *** [helloworld.pb.o] Error 1 WARNING: exit code 2 from a shell command.
Every layer i have imported from morty branch since the poky is on morty and i cant upgrade to master due to dependencies. Im really new to yocto.
I have tried to build grpc from grpc git but it gave too many errors so i went ahead with the grpc recipe from meta-iot-cloud (morty) and built the grpc. Im using the Makefile from the gRPC example folder grpc/examples/cpp/helloworld/ to compile the example code. This is the Makefile
I notice that many configurations could be improved in your recipe. I think the offending line is:
TARGET_CXX_ARCH += "${LDFLAGS}"
LDFLAGS will then be used for all compilation steps which is incorrect. You can remove this line.
I also suggest the following modifications:
gitsm://
fetcher instead of do_configure_prepend
to fetch submodulescmake
, autotools
). You don't need them to call make
alone.INSANE_SKIP
Here's a suggestion but I don't expect it to work without some fixing:
DESCRIPTION = "Working example for grpc"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10"
DEPENDS = "grpc golang protobuf3 c-ares zlib openssl"
RDEPENDS_${PN} += "libstdc++"
SRCREV = "29a2a533c98aa21f05c8f598ef2b47321508d5da"
BRANCH = "v1.4.x"
SRC_URI = "gitsm://github.com/grpc/grpc.git;protocol=https;branch=${BRANCH}"
S = "${WORKDIR}/git/cpp/helloworld"
EXTRA_OEMAKE = "-DRUN_HAVE_STD_REGEX=1 \
-DRUN_HAVE_POSIX_REGEX=0 \
-DRUN_HAVE_STEADY_CLOCK=0 \
-DTHREADS_PTHREAD_ARG=2 \
-DBUILD_DEPS=ON \
-DHAVE_STD_REGEX=ON \
-DRUN_HAVE_STD_REGEX=1 \
"
FILES_${PN} += "${bindir}/*"
do_compile() {
oe_runmake
}
do_install() {
install -d ${D}${bindir}
install -m 0755 ${S}/build/greeter_client ${D}${bindir}
install -m 0755 ${S}/build/greeter_server ${D}${bindir}
}