fune/taskcluster/scripts/misc/build-cpython.sh
serge-sans-paille d99a9ba23b Bug 1805664 - Setup python toolchain tasks and add them to the build system r=glandium
This patch introduces:

1. fetch jobs to fetch python source / installer
2. a) build jobs to build python from source on Linux and OSX
   b) build job to manually extract python tree from Windows installer

Some details, per category:

(1) fetches Python 3.8.10 (source) and 3.8.10 (installer).

(2.a) the builds generate optimized version of Python (LTO + PGO)

(2.a) the builds are patched to honor MOZPYTHONHOME instead of
      PYTHONHOME. This is used to make OSX builds relocatable, and not
      needed on Windows.

(2) zstandard and psutil are added to the default build

Differential Revision: https://phabricator.services.mozilla.com/D164663
2023-02-22 06:24:51 +00:00

67 lines
2.2 KiB
Bash
Executable file

#!/bin/sh
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This script builds the official interpreter for the python language,
# while also packing in a few default extra packages.
set -e
set -x
# Required fetch artifact
clang_bindir=${MOZ_FETCHES_DIR}/clang/bin
clang_libdir=${MOZ_FETCHES_DIR}/clang/lib
python_src=${MOZ_FETCHES_DIR}/cpython-source
# Setup environment
export PATH=${clang_bindir}:${PATH}
export CC=clang
export CXX=clang++
export LDFLAGS=-fuse-ld=lld
# Extra setup for OSX
case `uname -s` in
Darwin)
case `uname -m` in
aarch64)
macosx_version_min=11.0
;;
*)
macosx_version_min=10.12
;;
esac
macosx_sdk=13.0
# NOTE: both CFLAGS and CPPFLAGS need to be set here, otherwise
# configure step fails.
sysroot_flags="-isysroot ${MOZ_FETCHES_DIR}/MacOSX${macosx_sdk}.sdk -mmacosx-version-min=${macosx_version_min}"
export CPPFLAGS=${sysroot_flags}
export CFLAGS=${sysroot_flags}
export LDFLAGS="${LDFLAGS} ${sysroot_flags}"
configure_flags_extra=--with-openssl=/usr/local/opt/openssl
# see https://bugs.python.org/issue44065
sed -i -e 's,$CC --print-multiarch,:,' ${python_src}/configure
;;
esac
# Patch Python to honor MOZPYTHONHOME instead of PYTHONHOME. That way we have a
# relocatable python for free, while not interfering with the system Python that
# already honors PYTHONHOME.
find ${python_src} -type f -print0 | xargs -0 perl -i -pe "s,PYTHONHOME,MOZPYTHONHOME,g"
# Actual build
work_dir=`pwd`
tardir=python
cd `mktemp -d`
${python_src}/configure --prefix=/${tardir} --enable-optimizations ${configure_flags_extra} || { exit_status=$? && cat config.log && exit $exit_status ; }
export MAKEFLAGS=-j`nproc`
make
make DESTDIR=${work_dir} install
cd ${work_dir}
${work_dir}/python/bin/python3 -m pip install --upgrade pip==23.0
${work_dir}/python/bin/python3 -m pip install -r ${GECKO_PATH}/build/psutil_requirements.txt -r ${GECKO_PATH}/build/zstandard_requirements.txt
$(dirname $0)/pack.sh ${tardir}