Protocol Buffers - Google's data interchange format (grpc依赖)
https://developers.google.com/protocol-buffers/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.9 KiB
48 lines
1.9 KiB
#!/bin/bash |
|
# |
|
# Builds protobuf python including the C++ extension with aarch64 crosscompiler. |
|
# The outputs of this script are laid out so that we can later test them under an aarch64 emulator. |
|
# NOTE: This script is expected to run under the dockcross/manylinux2014-aarch64 docker image. |
|
|
|
set -ex |
|
|
|
PYTHON="/opt/python/cp38-cp38/bin/python" |
|
|
|
# Initialize any submodules. |
|
git submodule update --init --recursive |
|
|
|
# Build protoc and libprotobuf |
|
cmake -DCMAKE_POSITION_INDEPENDENT_CODE=ON -Dprotobuf_WITH_ZLIB=0 . |
|
make -j8 |
|
|
|
# Copy lib files to the expected location. |
|
mkdir -p src/.libs |
|
ln -f *.a src/.libs/ |
|
|
|
# create a simple shell wrapper that runs crosscompiled protoc under qemu |
|
echo '#!/bin/bash' >protoc_qemu_wrapper.sh |
|
echo 'exec qemu-aarch64 "../protoc" "$@"' >>protoc_qemu_wrapper.sh |
|
chmod ugo+x protoc_qemu_wrapper.sh |
|
|
|
# PROTOC variable is by build_py step that runs under ./python directory |
|
export PROTOC=../protoc_qemu_wrapper.sh |
|
|
|
pushd python |
|
|
|
# NOTE: this step will use protoc_qemu_wrapper.sh to generate protobuf files. |
|
${PYTHON} setup.py build_py |
|
|
|
# when crosscompiling for aarch64, --plat-name needs to be set explicitly |
|
# to end up with correctly named wheel file |
|
# the value should be manylinuxABC_ARCH and dockcross docker image |
|
# conveniently provides the value in the AUDITWHEEL_PLAT env |
|
plat_name_flag="--plat-name=$AUDITWHEEL_PLAT" |
|
|
|
# override the value of EXT_SUFFIX to make sure the crosscompiled .so files in the wheel have the correct filename suffix |
|
export PROTOCOL_BUFFERS_OVERRIDE_EXT_SUFFIX="$(${PYTHON} -c 'import sysconfig; print(sysconfig.get_config_var("EXT_SUFFIX").replace("-x86_64-linux-gnu.so", "-aarch64-linux-gnu.so"))')" |
|
|
|
# Build the python extension inplace to be able to python unittests later |
|
${PYTHON} setup.py build_ext --cpp_implementation --compile_static_extension --inplace |
|
|
|
# Build the binary wheel (to check it with auditwheel) |
|
${PYTHON} setup.py bdist_wheel --cpp_implementation --compile_static_extension $plat_name_flag
|
|
|