Skip to content

Commit 270a3b0

Browse files
Step up gRPC version
1 parent 511e616 commit 270a3b0

File tree

3 files changed

+76
-41
lines changed

3 files changed

+76
-41
lines changed

Dockerfile

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ ARG ARCH=armv7hf
44
ARG REPO=axisecp
55
ARG VERSION=1.14
66
ARG UBUNTU_VERSION=22.04
7+
ARG GRPC_VERSION=v1.65.5
78

89
FROM arm64v8/ubuntu:${UBUNTU_VERSION} AS containerized_aarch64
910
FROM arm32v7/ubuntu:${UBUNTU_VERSION} AS containerized_armv7hf
@@ -46,6 +47,7 @@ FROM build_base AS testdata
4647

4748
# Install Edge TPU compiler
4849
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
50+
# hadolint ignore=DL3009
4951
RUN <<EOF
5052
echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" \
5153
| tee /etc/apt/sources.list.d/coral-edgetpu.list
@@ -95,6 +97,7 @@ FROM build_base AS build_grpc
9597

9698
ARG ARCH
9799
ARG TARGETSYSROOT=/opt/axis/acapsdk/sysroots/${ARCH}
100+
ARG GRPC_VERSION
98101

99102
# Switch to build directory
100103
WORKDIR /opt
@@ -103,7 +106,7 @@ WORKDIR /opt
103106
# We do this because we need to be able to run protoc and grpc_cpp_plugin
104107
# while cross-compiling.
105108
RUN <<EOF
106-
git clone -b v1.46.3 https://github.com/grpc/grpc
109+
git clone -b ${GRPC_VERSION} https://github.com/grpc/grpc
107110
cd grpc
108111
git submodule update --init
109112
EOF
@@ -134,24 +137,6 @@ ARG TARGETSYSROOT=/opt/axis/acapsdk/sysroots/${ARCH}
134137

135138
# return to build dir
136139
WORKDIR /opt
137-
# Build for ARM
138-
139-
# Clone openssl and extract source code
140-
RUN <<EOF
141-
if [ "$ARCH" = "armv7hf" ]; then
142-
export CC_SETTING="arm-linux-gnueabihf-gcc";
143-
elif [ "$ARCH" = "aarch64" ]; then
144-
export CC_SETTING="aarch64-linux-gnu-gcc";
145-
fi;
146-
curl -O https://www.openssl.org/source/openssl-1.1.1l.tar.gz
147-
tar xzvf openssl-1.1.1l.tar.gz
148-
mkdir -p openssl-1.1.1l/build
149-
cd openssl-1.1.1l/build
150-
rm -rf ../doc
151-
../Configure linux-armv4 no-asm --prefix=$TARGETSYSROOT/usr
152-
make CC="$CC_SETTING"
153-
make install
154-
EOF
155140

156141
# Build and install gRPC for ARM.
157142
# This build will use the host architecture copies of protoc and
@@ -164,10 +149,12 @@ RUN <<EOF
164149
CXXFLAGS="$CXXFLAGS -g0" cmake \
165150
-DCMAKE_SYSTEM_NAME=Linux \
166151
-DCMAKE_SYSTEM_PROCESSOR="$SYSTEM_PROCESSOR_ARCH" \
152+
-DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM=NEVER \
153+
-DCMAKE_FIND_ROOT_PATH_MODE_LIBRARY=ONLY \
154+
-DCMAKE_FIND_ROOT_PATH_MODE_INCLUDE=ONLY \
155+
-DCMAKE_FIND_ROOT_PATH_MODE_PACKAGE=ONLY \
167156
-DCMAKE_INSTALL_PREFIX="$SDKTARGETSYSROOT"/usr \
168157
-DCMAKE_FIND_ROOT_PATH="$SDKTARGETSYSROOT"/usr \
169-
-DgRPC_INSTALL=ON \
170-
-DgRPC_SSL_PROVIDER=package \
171158
-DCMAKE_BUILD_TYPE=Release \
172159
../..
173160
make -j4 install/strip
@@ -177,6 +164,8 @@ EOF
177164

178165
FROM build_grpc_arm AS build
179166

167+
ARG ARCH
168+
ARG TARGETSYSROOT=/opt/axis/acapsdk/sysroots/${ARCH}
180169
ARG TEST
181170
ARG DEBUG
182171

@@ -198,7 +187,6 @@ EOF
198187
RUN patch /opt/app/apis/tensorflow_serving/apis/predict.proto /opt/app/apis/predict_additions.patch
199188

200189
# Building the ACAP application
201-
202190
# hadolint ignore=SC2046,SC2155
203191
RUN <<EOF
204192
export MANIFEST="manifest-$ARCH.json";

Makefile

Lines changed: 50 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,55 @@ SRC_FILES := $(wildcard $(SRC_PATH)/*.cpp $(SRC_PATH)/*.cc)
2525
TEST_FILES := $(wildcard $(TEST_PATH)/*.cpp $(TEST_PATH)/*.cc)
2626

2727
# Compiler flags
28-
# gRPC and protobuf packages don't play well with pkg-config for include so we do a little workaround
29-
30-
PKGS = protobuf grpc grpc++
31-
PKG_CONFIG_CFLAGS_I := $(shell PKG_CONFIG_SYSROOT_DIR="" PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --cflags-only-I $(PKGS))
32-
PKG_CONFIG_CFLAGS_OTHER := $(shell PKG_CONFIG_SYSROOT_DIR="" PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --cflags-only-other $(PKGS))
33-
PKG_CONFIG_LDFLAGS := $(shell PKG_CONFIG_SYSROOT_DIR="" PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --libs-only-L $(PKGS))
34-
PKG_CONFIG_LDLIBS := $(shell PKG_CONFIG_SYSROOT_DIR="" PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --libs-only-l $(PKGS))
28+
# grpc and protobuf (and deps) don't play nice with pkg-config so we tediously list (in order) everything needed
29+
PROTO_PKG_CONFIG_CFLAGS_I := -I$(TARGETSYSROOT)/usr/include
30+
PROTO_PKG_CONFIG_CFLAGS_OTHER := -DCARES_STATICLIB -pthread -DNOMINMAX
31+
# Derived from grpc cross-compile example
32+
PROTO_PKG_CONFIG_LDLIBS := -lgrpc++ -lprotobuf -lgrpc -lupb_json_lib -lupb_textformat_lib \
33+
-lutf8_range -lupb_message_lib -lupb_base_lib -lupb_mem_lib -lre2 \
34+
-lz -lcares -lgpr -labsl_random_distributions -labsl_random_seed_sequences \
35+
-labsl_random_internal_pool_urbg -labsl_random_internal_randen \
36+
-labsl_random_internal_randen_hwaes -labsl_random_internal_randen_hwaes_impl \
37+
-labsl_random_internal_randen_slow -labsl_random_internal_platform \
38+
-labsl_random_internal_seed_material -labsl_random_seed_gen_exception \
39+
-lrt -laddress_sorting -labsl_log_internal_check_op -labsl_leak_check \
40+
-labsl_die_if_null -labsl_log_internal_conditions -labsl_log_internal_message \
41+
-labsl_log_internal_nullguard -labsl_examine_stack -labsl_log_internal_format \
42+
-labsl_log_internal_proto -labsl_log_internal_log_sink_set -labsl_log_sink \
43+
-labsl_log_entry -labsl_log_initialize -labsl_log_internal_globals \
44+
-labsl_log_globals -labsl_vlog_config_internal -labsl_log_internal_fnmatch \
45+
-labsl_statusor -labsl_status -labsl_strerror -lutf8_validity \
46+
-labsl_flags_internal -labsl_flags_marshalling -labsl_flags_reflection \
47+
-labsl_flags_config -labsl_cord -labsl_cordz_info -labsl_cord_internal \
48+
-labsl_cordz_functions -labsl_cordz_handle -labsl_crc_cord_state -labsl_crc32c \
49+
-labsl_str_format_internal -labsl_crc_internal -labsl_crc_cpu_detect \
50+
-labsl_raw_hash_set -labsl_hash -labsl_bad_variant_access -labsl_city \
51+
-labsl_low_level_hash -labsl_hashtablez_sampler -labsl_exponential_biased \
52+
-labsl_flags_private_handle_accessor -labsl_flags_commandlineflag \
53+
-labsl_bad_optional_access -labsl_flags_commandlineflag_internal \
54+
-labsl_flags_program_name -labsl_synchronization -labsl_graphcycles_internal \
55+
-labsl_kernel_timeout_internal -labsl_time -labsl_civil_time -labsl_time_zone \
56+
-labsl_stacktrace -labsl_symbolize -labsl_strings -labsl_strings_internal \
57+
-labsl_string_view -labsl_int128 -labsl_throw_delegate -labsl_malloc_internal \
58+
-labsl_debugging_internal -labsl_demangle_internal -labsl_base \
59+
-labsl_raw_logging_internal -labsl_log_severity -labsl_spinlock_wait
60+
PROTO_PKG_CONFIG_LDLIBS += $(TARGETSYSROOT)/usr/lib/libabsl_flags_parse.a \
61+
$(TARGETSYSROOT)/usr/lib/libssl.a \
62+
$(TARGETSYSROOT)/usr/lib/libcrypto.a \
63+
-ldl -lm -lsystemd $(TARGETSYSROOT)/usr/lib/libsystemd.so \
64+
$(TARGETSYSROOT)/usr/lib/libabsl_flags_usage.a \
65+
$(TARGETSYSROOT)/usr/lib/libabsl_flags_usage_internal.a
66+
67+
PROTO_CXXFLAGS := $(CXXFLAGS) -std=c++17 $(PROTO_PKG_CONFIG_CFLAGS_OTHER)
3568

3669
PKGS = gio-2.0 glib-2.0 vdostream axparameter
37-
PKG_CONFIG_CFLAGS_I += $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --cflags-only-I $(PKGS))
38-
PKG_CONFIG_CFLAGS_OTHER += $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --cflags-only-other $(PKGS))
39-
PKG_CONFIG_LDFLAGS += $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --libs-only-L $(PKGS))
40-
PKG_CONFIG_LDLIBS += $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --libs-only-l $(PKGS))
41-
CXXFLAGS += -DLAROD_API_VERSION_2 -std=c++17 -I$(OUT_PATH) $(PKG_CONFIG_CFLAGS_OTHER) $(PKG_CONFIG_CFLAGS_I)
42-
LDLIBS += -llarod -lrt $(PKG_CONFIG_LDLIBS)
70+
PKG_CONFIG_CFLAGS_I := $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --cflags-only-I $(PKGS))
71+
PKG_CONFIG_CFLAGS_OTHER := $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --cflags-only-other $(PKGS))
72+
PKG_CONFIG_LDFLAGS := $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --libs-only-L $(PKGS))
73+
PKG_CONFIG_LDLIBS := $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --libs-only-l $(PKGS))
74+
75+
CXXFLAGS += -DLAROD_API_VERSION_2 -std=c++17 -I$(OUT_PATH) $(PKG_CONFIG_CFLAGS_OTHER) $(PKG_CONFIG_CFLAGS_I) $(PROTO_PKG_CONFIG_CFLAGS_OTHER) $(PROTO_PKG_CONFIG_CFLAGS_I)
76+
LDLIBS += -llarod $(PKG_CONFIG_LDLIBS) $(PROTO_PKG_CONFIG_LDLIBS)
4377
LDFLAGS += $(PKG_CONFIG_LDFLAGS)
4478

4579
.PHONY: clean install install/strip
@@ -70,18 +104,18 @@ $(OUT_PATH) $(INSTALL_PATH):
70104

71105
# Protobuf object files
72106
%.pb.o: %.pb.cc
73-
$(CXX) -c $(CXXFLAGS) -I$(OUT_PATH) $^ -o $@
107+
$(CXX) -c $(PROTO_CXXFLAGS) -I$(OUT_PATH) $^ -o $@
74108

75109
# Generate protobuf gRPC source files
76110
$(OUT_PATH)/%.grpc.pb.cc $(OUT_PATH)/%grpc.pb.h: $(API_PATH)/%.proto | $(OUT_PATH)
77-
protoc $(PKG_CONFIG_CFLAGS_I) \
111+
protoc $(PROTO_PKG_CONFIG_CFLAGS_I) \
78112
-I$(API_PATH) \
79113
--grpc_out=$(OUT_PATH) \
80114
--plugin=protoc-gen-grpc=$(GRPC_CPP_PLUGIN_PATH) $<
81115

82116
# Generate protobuf source files
83117
$(OUT_PATH)/%.pb.cc $(OUT_PATH)/%.pb.h: $(API_PATH)/%.proto | $(OUT_PATH)
84-
protoc $(PKG_CONFIG_CFLAGS_I) -I$(API_PATH) --cpp_out=$(OUT_PATH) $<
118+
protoc $(PROTO_PKG_CONFIG_CFLAGS_I) -I$(API_PATH) --cpp_out=$(OUT_PATH) $<
85119

86120
$(BINARY): $(OUT_PATH)/$(BINARY)
87121
cp $(OUT_PATH)/$(BINARY) $(CURDIR)

test/inference_test.cc

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,12 @@ TEST(InferenceTest, ServerAuthentication) {
419419
string root_cert = read_text(serverCertificatePath);
420420
SslCredentialsOptions ssl_opts = {root_cert.c_str(), "", ""};
421421
shared_ptr<ChannelCredentials> creds = grpc::SslCredentials(ssl_opts);
422-
shared_ptr<Channel> channel = CreateChannel(target, creds);
422+
grpc::ChannelArguments args;
423+
// gRPC/ssl doesn't support skipping server common-name verification so we force target name to
424+
// localhost as used in the cert creation.
425+
args.SetSslTargetNameOverride("localhost");
426+
shared_ptr<Channel> channel = grpc::CreateCustomChannel(target, creds, args);
427+
423428
ASSERT_TRUE(channel->WaitForConnected(
424429
gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), gpr_time_from_seconds(5, GPR_TIMESPAN))));
425430
unique_ptr<PredictionService::Stub> stub = PredictionService::NewStub(channel);
@@ -566,7 +571,11 @@ TEST(InferenceTest, ServerAuthenticationDlpu) {
566571
string root_cert = read_text(serverCertificatePath);
567572
SslCredentialsOptions ssl_opts = {root_cert.c_str(), "", ""};
568573
shared_ptr<ChannelCredentials> creds = grpc::SslCredentials(ssl_opts);
569-
shared_ptr<Channel> channel = CreateChannel(target, creds);
574+
grpc::ChannelArguments args;
575+
// gRPC/ssl doesn't support skipping server common-name verification so we force target name to
576+
// localhost as used in the cert creation.
577+
args.SetSslTargetNameOverride("localhost");
578+
shared_ptr<Channel> channel = grpc::CreateCustomChannel(target, creds, args);
570579
ASSERT_TRUE(channel->WaitForConnected(
571580
gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), gpr_time_from_seconds(5, GPR_TIMESPAN))));
572581
unique_ptr<PredictionService::Stub> stub = PredictionService::NewStub(channel);
@@ -657,7 +666,11 @@ TEST(InferenceTest, ServerAuthenticationTpu) {
657666
string root_cert = read_text(serverCertificatePath);
658667
SslCredentialsOptions ssl_opts = {root_cert.c_str(), "", ""};
659668
shared_ptr<ChannelCredentials> creds = grpc::SslCredentials(ssl_opts);
660-
shared_ptr<Channel> channel = CreateChannel(target, creds);
669+
grpc::ChannelArguments args;
670+
// gRPC/ssl doesn't support skipping server common-name verification so we force target name to
671+
// localhost as used in the cert creation.
672+
args.SetSslTargetNameOverride("localhost");
673+
shared_ptr<Channel> channel = grpc::CreateCustomChannel(target, creds, args);
661674
ASSERT_TRUE(channel->WaitForConnected(
662675
gpr_time_add(gpr_now(GPR_CLOCK_REALTIME), gpr_time_from_seconds(5, GPR_TIMESPAN))));
663676
unique_ptr<PredictionService::Stub> stub = PredictionService::NewStub(channel);

0 commit comments

Comments
 (0)