123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- # 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
|