#!/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!"