## Dockerfile to cross compile aarh64 wheel in x86_64 environment FROM ubuntu:18.04 ## ensure locale is set during build ENV LANG C.UTF-8 # It will put cross compiled aarch64 pandas wheel at $HOME. #wget https://developer.arm.com/-/media/Files/downloads/gnu-a/8.3-2019.03/binrel/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz && COPY gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz /tmp RUN apt-get update && apt-get install -y cmake python3-dev libffi-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev gcc g++ build-essential zlib1g-dev bash git wget sudo automake libtool texinfo && apt-get update && \ export CROSS_COMPILE=aarch64-linux-gnu- && \ export ARCH=arm64 && \ mkdir -p /tmp/toolchain && \ cd /tmp/toolchain && \ cp /tmp/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz /tmp/toolchain/ && \ tar -xf gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz && \ export PATH=$PATH:/tmp/toolchain/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin && \ cd /tmp/ && \ git clone https://github.com/libffi/libffi && \ cd libffi && \ ./autogen.sh && \ ./configure --host=aarch64-linux-gnu --target=aarch64-linux-gnu CC=aarch64-linux-gnu-gcc --prefix=/tmp/libffi/build && \ make install && \ cd .. && \ git clone https://github.com/openssl/openssl && \ cd openssl && \ ./Configure linux-aarch64 --cross-compile-prefix=${CROSS_COMPILE} --prefix=/tmp/openssl/build shared && \ make depend && \ make -j5 && \ make install && \ cp /tmp/libffi/build/include/* /tmp/toolchain/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/aarch64-linux-gnu/libc/usr/include/ && \ cp /tmp/libffi/build/lib64/libffi* /tmp/toolchain/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/lib/gcc/aarch64-linux-gnu/8.3.0/ && \ cp -r /tmp/openssl/build/include/* /tmp/toolchain/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/aarch64-linux-gnu/libc/usr/include/ && \ cp -r /tmp/openssl/build/lib/* /tmp/toolchain/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/lib/gcc/aarch64-linux-gnu/8.3.0/ && \ mkdir -p /tmp/builds && \ cd /tmp/builds && \ wget https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz && \ tar xzf Python-3.6.10.tgz && \ mv Python-3.6.10 Python-3.6.10-build && \ cd Python-3.6.10-build && \ ./configure && \ make -j32 python Parser/pgen && \ sudo make -j32 install && \ mkdir -p /tmp/builds/python-build && \ cp python /tmp/builds/python-build && \ cp Parser/pgen /tmp/builds/python-build && \ cd .. && \ tar xzf Python-3.6.10.tgz && \ mv Python-3.6.10 Python-3.6.10-host && \ cd Python-3.6.10-host && \ CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ AR=aarch64-linux-gnu-ar RANLIB=aarch64-linux-gnu-ranlib ./configure \ --host=aarch64-linux-gnu --target=aarch64-linux-gnu --build=x86_64-linux-gnu --prefix=/tmp/builds/python-host \ --disable-ipv6 ac_cv_file__dev_ptmx=no ac_cv_file__dev_ptc=no ac_cv_have_long_long_format=yes --enable-shared && \ make -j32 HOSTPYTHON=/tmp/builds/python-build/python HOSTPGEN=/tmp/builds/python-build/pgen \ BLDSHARED="aarch64-linux-gnu-gcc -shared" CROSS-COMPILE=aarch64-linux-gnu- CROSS_COMPILE_TARGET=yes HOSTARCH=aarch64-linux-gnu \ BUILDARCH=aarch64-linux-gnu && \ make -j32 install && \ ln -s /tmp/builds/python-host/bin/python3 /tmp/builds/python-host/bin/python && \ cd .. && \ pip3 install crossenv && \ /tmp/builds/python-build/python -m crossenv /tmp/builds/python-host/bin/python venv && \ . venv/bin/activate && \ build-pip install cython && \ build-pip install wheel && \ wget http://archive.ubuntu.com/ubuntu/pool/main/g/glibc/libc6_2.29-0ubuntu2_amd64.deb && \ dpkg -i libc6_2.29-0ubuntu2_amd64.deb && \ git clone https://github.com/scikit-build/cmake-python-distributions && \ cd cmake-python-distributions/ && \ build-pip install -r requirements-dev.txt && \ python setup.py bdist_wheel && \ mv /tmp/builds/cmake-python-distributions/dist/* $HOME; ## Run bash by default unless a command is specified CMD ["/bin/bash"]