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.
93 lines
3.2 KiB
93 lines
3.2 KiB
# Define custom utilities |
|
# Test for OSX with [ -n "$IS_OSX" ] |
|
|
|
function pre_build { |
|
# Any stuff that you need to do before you start building the wheels |
|
# Runs in the root directory of this repository. |
|
pushd protobuf |
|
|
|
if [ "$PLAT" == "aarch64" ] |
|
then |
|
local configure_host_flag="--host=aarch64" |
|
fi |
|
|
|
# Build protoc and libprotobuf |
|
./autogen.sh |
|
CXXFLAGS="-fPIC -g -O2" ./configure $configure_host_flag |
|
make -j8 |
|
|
|
if [ "$PLAT" == "aarch64" ] |
|
then |
|
# we are crosscompiling for aarch64 while running on x64 |
|
# the simplest way for build_py command to be able to generate |
|
# the protos is by running the protoc process under |
|
# an emulator. That way we don't have to build a x64 version |
|
# of protoc. The qemu-arm emulator is already included |
|
# in the dockcross docker image. |
|
# Running protoc under an emulator is fast as protoc doesn't |
|
# really do much. |
|
|
|
# create a simple shell wrapper that runs crosscompiled protoc under qemu |
|
echo '#!/bin/bash' >protoc_qemu_wrapper.sh |
|
echo 'exec qemu-aarch64 "../src/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 |
|
fi |
|
|
|
# Generate python dependencies. |
|
pushd python |
|
python setup.py build_py |
|
popd |
|
|
|
popd |
|
} |
|
|
|
function bdist_wheel_cmd { |
|
# Builds wheel with bdist_wheel, puts into wheelhouse |
|
# |
|
# It may sometimes be useful to use bdist_wheel for the wheel building |
|
# process. For example, versioneer has problems with versions which are |
|
# fixed with bdist_wheel: |
|
# https://github.com/warner/python-versioneer/issues/121 |
|
local abs_wheelhouse=$1 |
|
|
|
# Modify build version |
|
pwd |
|
ls |
|
|
|
if [ "$PLAT" == "aarch64" ] |
|
then |
|
# 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 |
|
local 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"))')" |
|
fi |
|
|
|
python setup.py bdist_wheel --cpp_implementation --compile_static_extension $plat_name_flag |
|
cp dist/*.whl $abs_wheelhouse |
|
} |
|
|
|
function build_wheel { |
|
build_wheel_cmd "bdist_wheel_cmd" $@ |
|
} |
|
|
|
function run_tests { |
|
# Runs tests on installed distribution from an empty directory |
|
python --version |
|
python -c "from google.protobuf.pyext import _message;" |
|
} |
|
|
|
if [ "$PLAT" == "aarch64" ] |
|
then |
|
# when crosscompiling for aarch64, override the default multibuild's repair_wheelhouse logic |
|
# since "auditwheel repair" doesn't work for crosscompiled wheels |
|
function repair_wheelhouse { |
|
echo "Skipping repair_wheelhouse since auditwheel requires build architecture to match wheel architecture." |
|
} |
|
fi
|
|
|