2021-08-20 14:44:22 +02:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
# AUTHOR: odidev
|
|
|
|
# DATE: 2021-07-20
|
|
|
|
# DESCRIPTION: This file intended to cross compile the python and create necessary
|
|
|
|
# crossenv enrironment
|
|
|
|
|
|
|
|
# The current env is not compatible to build python so resetting it as
|
|
|
|
# in quay.io/pypa/manylinux2014_x86_64 containers
|
|
|
|
unset $(env | awk -F= '{print $1}')
|
|
|
|
export SSL_CERT_FILE=/opt/_internal/certs.pem
|
|
|
|
export TERM=xterm
|
|
|
|
export LC_ALL=en_US.UTF-8
|
|
|
|
export LD_LIBRARY_PATH=/opt/rh/devtoolset-9/root/usr/lib64:/opt/rh/devtoolset-9/root/usr/lib:/opt/rh/devtoolset-9/root/usr/lib64/dyninst:/opt/rh/devtoolset-9/root/usr/lib/dyninst:/usr/local/lib64
|
|
|
|
export PATH=/opt/rh/devtoolset-9/root/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
|
|
|
|
export PWD=/work
|
|
|
|
export LANG=en_US.UTF-8
|
|
|
|
export AUDITWHEEL_ARCH=x86_64
|
|
|
|
export DEVTOOLSET_ROOTPATH=/opt/rh/devtoolset-9/root
|
|
|
|
export HOME=/root
|
|
|
|
export SHLVL=1
|
|
|
|
export LANGUAGE=en_US.UTF-8
|
|
|
|
export AUDITWHEEL_PLAT=manylinux2014_aarch64
|
|
|
|
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
|
|
|
|
export AUDITWHEEL_POLICY=manylinux2014
|
|
|
|
|
|
|
|
# Cross compile Python versions present in manylinux containers
|
|
|
|
declare -A buildpy
|
|
|
|
python_vers=""
|
|
|
|
|
|
|
|
for PY in /opt/python/cp*/bin/python; do
|
|
|
|
ver=`$PY --version | cut -d " " -f 2`
|
|
|
|
python_vers="${python_vers} ${ver}"
|
|
|
|
cpver=cp`echo ${ver} | cut -d "." -f 1-2 | sed 's/\.//'`
|
|
|
|
if [ ${cpver} = "cp36" ] || [ ${cpver} = "cp37" ]; then
|
|
|
|
cpver="${cpver}-${cpver}m"
|
|
|
|
else
|
|
|
|
cpver="${cpver}-${cpver}"
|
|
|
|
fi
|
|
|
|
buildpy[${ver}]=${cpver}
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
# Adding cross compiler path in PATH env variable
|
2023-01-27 13:19:09 +01:00
|
|
|
export PATH=/usr/xcc/aarch64-unknown-linux-gnu/bin:$PATH
|
2021-08-20 14:44:22 +02:00
|
|
|
|
|
|
|
OLD_PATH=$PATH
|
|
|
|
CROSS_PY_BASE=/opt/_internal
|
|
|
|
CROSS_PY_BASE_LN=/opt/python
|
|
|
|
BUILD_DIR=/tmp/builds
|
|
|
|
LN=ln
|
|
|
|
sub_rel=""
|
|
|
|
|
|
|
|
# Loop over each python version and cross compile it
|
|
|
|
for python_ver in $python_vers; do
|
|
|
|
rel=""
|
|
|
|
sub_rel=""
|
|
|
|
found_sub_rel=0
|
|
|
|
for i in ` seq ${#python_ver}`
|
|
|
|
do
|
|
|
|
c=${python_ver:$i-1:1}
|
|
|
|
if [[ ${c} == [a-zA-Z] ]] ; then
|
|
|
|
found_sub_rel=1
|
|
|
|
fi
|
|
|
|
if [[ $found_sub_rel == "0" ]]; then
|
|
|
|
rel=${rel}${c}
|
|
|
|
else
|
|
|
|
sub_rel=${sub_rel}${c}
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
mkdir -p ${BUILD_DIR} && cd ${BUILD_DIR}
|
|
|
|
wget https://www.python.org/ftp/python/${rel}/Python-${rel}${sub_rel}.tgz
|
|
|
|
tar xzf Python-${rel}${sub_rel}.tgz
|
|
|
|
cd Python-${rel}${sub_rel}
|
|
|
|
|
|
|
|
# Setting up build python path required by crassenv
|
|
|
|
BUILD_PYBIN=${CROSS_PY_BASE_LN}/${buildpy[$python_ver]}/bin
|
|
|
|
BUILD_PIP=${BUILD_PYBIN}/pip3
|
|
|
|
BUILD_PYTHON=${BUILD_PYBIN}/python3
|
|
|
|
|
|
|
|
# Setting up target python required by crossenv
|
|
|
|
TARGET_PYPATH=${CROSS_PY_BASE}/xc/xcpython-${python_ver}
|
|
|
|
TARGET_PYTHON=${TARGET_PYPATH}/bin/python3
|
|
|
|
|
|
|
|
# Setting up cross env path
|
|
|
|
CROSS_ENV=${CROSS_PY_BASE}/${buildpy[$python_ver]}-xc
|
|
|
|
CROSS_ENV_LN=${CROSS_PY_BASE_LN}/${buildpy[$python_ver]}-xc
|
|
|
|
CROSS_ENV_PIP=${CROSS_ENV_LN}/cross/bin/pip
|
|
|
|
|
|
|
|
# Adding build python path as it is required to
|
|
|
|
# configure the python for cross compilation
|
|
|
|
PATH=${BUILD_PYBIN}:${OLD_PATH}
|
|
|
|
export PATH
|
|
|
|
|
|
|
|
./configure --prefix=${TARGET_PYPATH} \
|
2023-01-27 13:19:09 +01:00
|
|
|
--host=aarch64-unknown-linux-gnu \
|
2021-08-20 14:44:22 +02:00
|
|
|
--build=x86_64-linux-gnu \
|
2023-01-27 13:19:09 +01:00
|
|
|
--with-build-python=yes \
|
2021-08-20 14:44:22 +02:00
|
|
|
--without-ensurepip \
|
|
|
|
ac_cv_buggy_getaddrinfo=no \
|
|
|
|
ac_cv_file__dev_ptmx=yes \
|
|
|
|
ac_cv_file__dev_ptc=no \
|
|
|
|
--enable-optimizations
|
|
|
|
make -j32 install
|
|
|
|
make install
|
|
|
|
|
|
|
|
# Create the necessary env and its link
|
|
|
|
${BUILD_PIP} install --upgrade pip crossenv
|
|
|
|
${BUILD_PYTHON} -m crossenv ${TARGET_PYTHON} ${CROSS_ENV}
|
|
|
|
${LN} -s ${CROSS_ENV} ${CROSS_ENV_LN}
|
|
|
|
${CROSS_ENV_PIP} install wheel
|
|
|
|
rm -rf ${BUILD_DIR}
|
|
|
|
done
|