#!/bin/sh
set -e
sh_log() { echo "[`date +'%Y-%m-%d %H:%M:%S'`] @@@$*"; }
BUILD_ROOT=/root
DEP_PREFIX=${BUILD_ROOT}/install
INS_PREFIX=${BUILD_ROOT}/local
ARM_TOOLS=${BUILD_ROOT}/arm-tools
mkdir -p ${DEP_PREFIX} ${INS_PREFIX} ${ARM_TOOLS}
#sh_log "==========================================================="
#sh_log "now build python-3.10.1[Build]......"
#
#sudo apt-get install -y zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev \
# libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils \
# libexpat1-dev liblzma-dev libffi-dev libc6-dev
#
#rm -rf Python-3.10.1 Python-3.10.1-build
#rm -rf ${DEP_PREFIX}/Python-3.10.1-build
#
#tar -zxvf Python-3.10.1.tgz
#mv Python-3.10.1 Python-3.10.1-build
#
#cd Python-3.10.1-build
#./configure --prefix="${DEP_PREFIX}/Python-3.10.1-build" --enable-optimizations
#make -j8 && make install
#sh_log "build python-3.10.1[Build] finished!"
sh_log "==========================================================="
sh_log "prepare build_tools: arm-linux-gnueabi..."
cd ${ARM_TOOLS}
rm -rf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi
ls gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar
tar -xf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar
cp -rf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi/* ${INS_PREFIX}/
cd ${ARM_TOOLS}
rm -rf sysroot-glibc-linaro-2.25-2019.12-arm-linux-gnueabi
ls sysroot-glibc-linaro-2.25-2019.12-arm-linux-gnueabi.tar
tar -xf sysroot-glibc-linaro-2.25-2019.12-arm-linux-gnueabi.tar
cp -rf sysroot-glibc-linaro-2.25-2019.12-arm-linux-gnueabi/* ${INS_PREFIX}/
sh_log "prepare build_tools finished!"
export PATH=${INS_PREFIX}/bin:$PATH
# Some influential environment variables:
# CC C compiler command
# CFLAGS C compiler flags
# LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
# nonstandard directory <lib dir>
# LIBS libraries to pass to the linker, e.g. -l<library>
# CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
# you have headers in a nonstandard directory <include dir>
# CXX C++ compiler command
# CXXFLAGS C++ compiler flags
# CCAS assembler compiler command (defaults to CC)
# CCASFLAGS assembler compiler flags (defaults to CFLAGS)
# LT_SYS_LIBRARY_PATH
# User-defined run-time library search path.
# CXXCPP C++ preprocessor
# CC为指定C交叉编译器,可查看你的交叉编译器的bin文件夹得知
export CC=arm-linux-gnueabi-gcc
# CXX为指定C++交叉编译器,可查看你的交叉编译器的bin文件夹得知
export CXX=arm-linux-gnueabi-g++
# AR为ar工具,可查看你的交叉编译器的bin文件夹得知
export AR=arm-linux-gnueabi-ar
# RANLIB为ranlib工具,可查看你的交叉编译器的bin文件夹得知
export RANLIB=arm-linux-gnueabi-ranlib
# Host为目标主机,也就是准备安装平台的编译器去掉 -gcc
# Build为编译环境主机,也就是你的编译机器的交叉编译器,可执行 gcc -v 命令查看,我这里看得的是 Target: x86_64-linux-gnu
# Target为目标主机,也就是准备安装平台的编译器去掉 -gcc
# System types:
# --build=BUILD configure for building on BUILD [guessed]
# --host=HOST cross-compile to build programs to run on HOST [BUILD]
# --target=TARGET configure for building compilers for TARGET [HOST]
export STYPE_PARAMS="--host=arm-linux-gnueabi --build=x86_64-linux-gnu --target=arm-linux-gnueabi"
#sh_log "==========================================================="
#cd ${BUILD_ROOT}
#sh_log "now build zlib-1.3.1..."
#ls zlib-1.3.1.tar.gz
#
#rm -rf zlib-1.3.1 zlib-1.3.1-target
#rm -rf ${DEP_PREFIX}/zlib-1.3.1-target
#
#tar -zxf zlib-1.3.1.tar.gz
#mv zlib-1.3.1 zlib-1.3.1-target
#
#cd zlib-1.3.1-target
#./configure --enable-shared --prefix=${DEP_PREFIX}/zlib-1.3.1-target
#
#make -j8 && make install
#
#ls -l ${DEP_PREFIX}/zlib-1.3.1-target
#sh_log "build zlib-1.3.1 target finished!"
#
#
#sh_log "==========================================================="
#sh_log "now build libffi-3.4.5..."
#cd ${BUILD_ROOT}
#ls libffi-3.4.5.tar.gz
#
#rm -rf libffi-3.4.5 libffi-3.4.5-target
#rm -rf ${DEP_PREFIX}/libffi-3.4.5-target
#
#tar -zxf libffi-3.4.5.tar.gz
#mv libffi-3.4.5 libffi-3.4.5-target
#
#cd libffi-3.4.5-target
#./configure ${STYPE_PARAMS} --enable-shared --prefix=${DEP_PREFIX}/libffi-3.4.5-target
#
#make -j8 && make install
#
#ls -l ${DEP_PREFIX}/libffi-3.4.5-target
#sh_log "build libffi-3.4.5 target finished!"
#
#
#sh_log "==========================================================="
#sh_log "now build openssl-1.1.1s..."
#cd ${BUILD_ROOT}
#ls openssl-1.1.1s.tar.gz
#
#rm -rf openssl-1.1.1s openssl-1.1.1s-target
#rm -rf ${DEP_PREFIX}/openssl-1.1.1s-target
#
#tar -zxf openssl-1.1.1s.tar.gz
#mv openssl-1.1.1s openssl-1.1.1s-target
#
#cd openssl-1.1.1s-target
## 这里因为已经导入了CC,因此不用指定前缀了--cross-compile-prefix=arm-linux-gnueabi-
#./config no-asm --shared --prefix=${DEP_PREFIX}/openssl-1.1.1s-target
## 编译32位
#sed -i 's/-m64//' Makefile
#
#make -j8 && make install
#
#ls -l ${DEP_PREFIX}/openssl-1.1.1s-target
#sh_log "build openssl-1.1.1s target finished!"
sh_log "==========================================================="
sh_log "now build Python-3.10.1[Target]..."
cd ${BUILD_ROOT}
ls Python-3.10.1.tgz
cp -rf \
${DEP_PREFIX}/libffi-3.4.5-target/* \
${DEP_PREFIX}/openssl-1.1.1s-target/* \
${DEP_PREFIX}/zlib-1.3.1-target/* \
${INS_PREFIX}/
rm -rf Python-3.10.1 Python-3.10.1-target
rm -rf ${INS_PREFIX}/Python-3.10.1-target
tar -zxf Python-3.10.1.tgz
mv Python-3.10.1 Python-3.10.1-target
cd Python-3.10.1-target
cp -f Modules/Setup Modules/Setup.bak
# 取消OPENSSL的注释,并修改OPENSSL路径
sed -i -e '211,217s/^#//' -e "211s~OPENSSL=.*~OPENSSL=${INS_PREFIX}~" Modules/Setup
# 取消zlib注释,并替换ZLIB路径
sed -i -e '346s/^#//' -e '346s~$(prefix)~'"${INS_PREFIX}"'~' -e '346s~$(exec_prefix)~'"${INS_PREFIX}"'~' Modules/Setup
grep "OPENSSL" Modules/Setup
grep "zlib" Modules/Setup
export PATH=${DEP_PREFIX}/Python-3.10.1-build/bin:$PATH
export LD_LIBRARY_PATH=${DEP_PREFIX}/Python-3.10.1-build/lib:$LD_LIBRARY_PATH
./configure ${STYPE_PARAMS} \
--prefix=${INS_PREFIX}/python3.12 \
--disable-ipv6 \
--enable-shared \
--enable-optimizations \
--with-build-python=python3.10 \
ac_cv_file__dev_ptmx=yes \
ac_cv_file__dev_ptc=no \
LDFLAGS="-L${INS_PREFIX}/lib -I${INS_PREFIX}/include -lffi" \
CFLAGS="-L${INS_PREFIX}/lib -I${INS_PREFIX}/include" \
CPPFLAGS="-L${INS_PREFIX}/lib -I${INS_PREFIX}/include"
make -j8 && make install
sh_log "build Python-3.10.1 target finished!"
Ubuntu24.04交叉编译ARMv7(A9)架构Python
原创
©著作权归作者所有:来自51CTO博客作者glc400的原创作品,请联系作者获取转载授权,否则将追究法律责任
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Ubuntu24.04配置代理的方法及特点
Ubuntu24.04配置代理的方法及特点
root用户 vim 作用域