# Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. source $(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/utils.sh init if [ "${WITH_ROCM}" != "ON" ]; then export PATH=/usr/local/bin:${PATH} ln -sf $(which python${PY_VERSION}) /usr/local/bin/python ln -sf $(which pip${PY_VERSION}) /usr/local/bin/pip fi echo "::group::Installing zstd" apt install zstd -y echo "::endgroup::" if [ `uname -s` == "Darwin" ]; then # install deps for libuv echo "::group::Installing autoconf automake libtool" brew install autoconf automake libtool echo "::endgroup::" fi if [ "$CI_name" == "cpu" ] || [ "$CI_name" == "coverage" ] || [ "$CI_name" == "xpu" ] || [ "$CI_name" == "distribute" ] || [ "$CI_name" == "build" ]; then if [ "$CI_name" == "xpu" ]; then echo "::group::Installing ninja-build" apt install ninja-build -y echo "::endgroup::" fi if [ "$CI_name" == "build" ]; then export LD_LIBRARY_PATH=/usr/local/cuda/compat:/usr/local/cuda/lib:/usr/local/cuda/lib64:/usr/local/nvidia/lib:/usr/local/nvidia/lib64:/usr/lib/x86_64-linux-gnu:${LD_LIBRARY_PATH} echo "export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}" >> ~/.bashrc fi pip config set global.cache-dir "/root/.cache/pip" pip install --upgrade pip echo "::group::Installing python dependencies" if [ "$CI_name" != "distribute" ]; then pip install -r "${work_dir}/python/unittest_py/requirements.txt" fi echo "::endgroup::" fi function run_setup(){ startTime_s=`date +%s` mkdir -p ${PADDLE_ROOT}/build cd ${PADDLE_ROOT}/build # Build script will not fail if *.deb does not exist rm *.deb 2>/dev/null || true # Delete previous built egg packages rm -rf ${PADDLE_ROOT}/dist 2>/dev/null || true # Delete previous built paddle cache rm -rf ${PADDLE_ROOT}/build/python/paddle 2>/dev/null || true SYSTEM=`uname -s` if [ "$SYSTEM" == "Darwin" ]; then echo "Using python abi: $PYTHON_ABI" if [ "$PYTHON_ABI" == "cp310-cp310" ]; then if [ -d "/Library/Frameworks/Python.framework/Versions/3.10" ]; then export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.10/lib/ export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.10/lib/ export PATH=/Library/Frameworks/Python.framework/Versions/3.10/bin/:${PATH} #after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export export PYTHON_EXECUTABLE=/Library/Frameworks/Python.framework/Versions/3.10/bin/python3 export PYTHON_INCLUDE_DIR=/Library/Frameworks/Python.framework/Versions/3.10/include/python3.10/ export PYTHON_LIBRARY=/Library/Frameworks/Python.framework/Versions/3.10/lib/libpython3.10.dylib pip3.10 install --user -r ${PADDLE_ROOT}/python/requirements.txt else exit 1 fi elif [ "$PYTHON_ABI" == "cp311-cp311" ]; then if [ -d "/Library/Frameworks/Python.framework/Versions/3.11" ]; then export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.11/lib/ export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.11/lib/ export PATH=/Library/Frameworks/Python.framework/Versions/3.11/bin/:${PATH} #after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export export PYTHON_EXECUTABLE=/Library/Frameworks/Python.framework/Versions/3.11/bin/python3 export PYTHON_INCLUDE_DIR=/Library/Frameworks/Python.framework/Versions/3.11/include/python3.11/ export PYTHON_LIBRARY=/Library/Frameworks/Python.framework/Versions/3.11/lib/libpython3.11.dylib pip3.11 install --user -r ${PADDLE_ROOT}/python/requirements.txt else exit 1 fi elif [ "$PYTHON_ABI" == "cp312-cp312" ]; then if [ -d "/Library/Frameworks/Python.framework/Versions/3.12" ]; then export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.12/lib/ export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.12/lib/ export PATH=/Library/Frameworks/Python.framework/Versions/3.12/bin/:${PATH} #after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export export PYTHON_EXECUTABLE=/Library/Frameworks/Python.framework/Versions/3.12/bin/python3 export PYTHON_INCLUDE_DIR=/Library/Frameworks/Python.framework/Versions/3.12/include/python3.12/ export PYTHON_LIBRARY=/Library/Frameworks/Python.framework/Versions/3.12/lib/libpython3.12.dylib pip3.12 install --user -r ${PADDLE_ROOT}/python/requirements.txt else exit 1 fi elif [ "$PYTHON_ABI" == "cp313-cp313" ]; then if [ -d "/Library/Frameworks/Python.framework/Versions/3.13" ]; then export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.13/lib/ export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.13/lib/ export PATH=/Library/Frameworks/Python.framework/Versions/3.13/bin/:${PATH} #after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export export PYTHON_EXECUTABLE=/Library/Frameworks/Python.framework/Versions/3.13/bin/python3 export PYTHON_INCLUDE_DIR=/Library/Frameworks/Python.framework/Versions/3.13/include/python3.13/ export PYTHON_LIBRARY=/Library/Frameworks/Python.framework/Versions/3.13/lib/libpython3.13.dylib pip3.13 install --user -r ${PADDLE_ROOT}/python/requirements.txt else exit 1 fi elif [ "$PYTHON_ABI" == "cp314-cp314" ]; then if [ -d "/Library/Frameworks/Python.framework/Versions/3.14" ]; then export LD_LIBRARY_PATH=/Library/Frameworks/Python.framework/Versions/3.14/lib/ export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/Library/Frameworks/Python.framework/Versions/3.14/lib/ export PATH=/Library/Frameworks/Python.framework/Versions/3.14/bin/:${PATH} #after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export export PYTHON_EXECUTABLE=/Library/Frameworks/Python.framework/Versions/3.14/bin/python3 export PYTHON_INCLUDE_DIR=/Library/Frameworks/Python.framework/Versions/3.14/include/python3.14/ export PYTHON_LIBRARY=/Library/Frameworks/Python.framework/Versions/3.14/lib/libpython3.14.dylib pip3.14 install --user -r ${PADDLE_ROOT}/python/requirements.txt else exit 1 fi fi else if [ "$PYTHON_ABI" != "" ]; then echo "using python abi: $PYTHON_ABI" if [ "$PYTHON_ABI" == "cp310-cp310" ]; then export LD_LIBRARY_PATH=/opt/_internal/cpython-3.10.0/lib/:${LD_LIBRARY_PATH} export PATH=/opt/_internal/cpython-3.10.0/bin/:${PATH} #after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export export PYTHON_EXECUTABLE=/opt/_internal/cpython-3.10.0/bin/python3.10 export PYTHON_INCLUDE_DIR=/opt/_internal/cpython-3.10.0/include/python3.10 export PYTHON_LIBRARIES=/opt/_internal/cpython-3.10.0/lib/libpython3.so pip3.10 install -r ${PADDLE_ROOT}/python/requirements.txt pip3.10 install -r ${PADDLE_ROOT}/paddle/scripts/compile_requirements.txt elif [ "$PYTHON_ABI" == "cp311-cp311" ]; then export LD_LIBRARY_PATH=/opt/_internal/cpython-3.11.0/lib/:${LD_LIBRARY_PATH} export PATH=/opt/_internal/cpython-3.11.0/bin/:${PATH} #after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export export PYTHON_EXECUTABLE=/opt/_internal/cpython-3.11.0/bin/python3.11 export PYTHON_INCLUDE_DIR=/opt/_internal/cpython-3.11.0/include/python3.11 export PYTHON_LIBRARIES=/opt/_internal/cpython-3.11.0/lib/libpython3.so pip3.11 install -r ${PADDLE_ROOT}/python/requirements.txt pip3.11 install -r ${PADDLE_ROOT}/paddle/scripts/compile_requirements.txt elif [ "$PYTHON_ABI" == "cp312-cp312" ]; then export LD_LIBRARY_PATH=/opt/_internal/cpython-3.12.0/lib/:${LD_LIBRARY_PATH} export PATH=/opt/_internal/cpython-3.12.0/bin/:${PATH} #after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export export PYTHON_EXECUTABLE=/opt/_internal/cpython-3.12.0/bin/python3.12 export PYTHON_INCLUDE_DIR=/opt/_internal/cpython-3.12.0/include/python3.12 export PYTHON_LIBRARIES=/opt/_internal/cpython-3.12.0/lib/libpython3.so pip3.12 install -r ${PADDLE_ROOT}/python/requirements.txt pip3.12 install -r ${PADDLE_ROOT}/paddle/scripts/compile_requirements.txt elif [ "$PYTHON_ABI" == "cp313-cp313" ]; then export LD_LIBRARY_PATH=/opt/_internal/cpython-3.13.0/lib/:${LD_LIBRARY_PATH} export PATH=/opt/_internal/cpython-3.13.0/bin/:${PATH} #after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export export PYTHON_EXECUTABLE=/opt/_internal/cpython-3.13.0/bin/python3.13 export PYTHON_INCLUDE_DIR=/opt/_internal/cpython-3.13.0/include/python3.13 export PYTHON_LIBRARIES=/opt/_internal/cpython-3.13.0/lib/libpython3.so pip3.13 install -r ${PADDLE_ROOT}/python/requirements.txt pip3.13 install -r ${PADDLE_ROOT}/paddle/scripts/compile_requirements.txt elif [ "$PYTHON_ABI" == "cp314-cp314" ]; then export LD_LIBRARY_PATH=/opt/_internal/cpython-3.14.0/lib/:${LD_LIBRARY_PATH} export PATH=/opt/_internal/cpython-3.14.0/bin/:${PATH} #after changing "PYTHON_LIBRARY:FILEPATH" to "PYTHON_LIBRARY" ,we can use export export PYTHON_EXECUTABLE=/opt/_internal/cpython-3.14.0/bin/python3.14 export PYTHON_INCLUDE_DIR=/opt/_internal/cpython-3.14.0/include/python3.14 export PYTHON_LIBRARIES=/opt/_internal/cpython-3.14.0/lib/libpython3.so pip3.14 install -r ${PADDLE_ROOT}/python/requirements.txt pip3.14 install -r ${PADDLE_ROOT}/paddle/scripts/compile_requirements.txt fi else echo "::group::Installing python dependencies" pip install -r ${PADDLE_ROOT}/python/requirements.txt echo "end" echo "::endgroup::" fi fi if [ "$SYSTEM" == "Darwin" ]; then WITH_DISTRIBUTE="OFF" WITH_AVX=${WITH_AVX:-ON} WITH_ARM=${WITH_ARM:-OFF} INFERENCE_DEMO_INSTALL_DIR=${INFERENCE_DEMO_INSTALL_DIR:-~/.cache/inference_demo} else INFERENCE_DEMO_INSTALL_DIR=${INFERENCE_DEMO_INSTALL_DIR:-/root/.cache/inference_demo} fi if [ -z "${WITH_CPP_TEST}" ] && [ "${WITH_TESTING}" == "ON" ];then echo "::group::Installing PyGithub" pip install PyGithub echo "::endgroup::" if [ "$SYSTEM" != "Darwin" ]; then python ${PADDLE_ROOT}/tools/check_only_change_python_files.py fi if [ -f "${PADDLE_ROOT}/build/only_change_python_file.txt" ];then export WITH_CPP_TEST=OFF else export WITH_CPP_TEST=ON fi fi distributed_flag=${WITH_DISTRIBUTE:-OFF} gloo_flag=${distributed_flag} pscore_flag=${distributed_flag} if [ "$CMD" != "assert_file_approvals" ];then which python python -V python -m pip install distro python ${PADDLE_ROOT}/tools/summary_env.py bash ${PADDLE_ROOT}/tools/get_cpu_info.sh fi echo "if you use cmake to compile,please Configuring cmake in /paddle/build ..." cat <> ${PADDLE_ROOT}/build/build_summary.txt } run_setup "$@" cp ${PADDLE_ROOT}/dist/*.whl ${PADDLE_ROOT} if [[ "$CI_name" == "build" && "$is_pr" == "true" ]]; then if [ ! -d "${PADDLE_ROOT}/build/python/dist/" ]; then mkdir ${PADDLE_ROOT}/build/python/dist/ fi mv ${PADDLE_ROOT}/dist/*.whl ${PADDLE_ROOT}/build/python/dist/ cmake_change=`git diff --name-only upstream/$BRANCH | grep "cmake/external" || true` # Temporarily save some scripts from PR branch mkdir -p /tmp cp ${PADDLE_ROOT}/python/requirements.txt /tmp cp ${PADDLE_ROOT}/tools/print_signatures.py /tmp generate_api_spec "" "PR" mkdir ${PADDLE_ROOT}/build/pr_whl && cp ${PADDLE_ROOT}/build/python/dist/*.whl ${PADDLE_ROOT}/build/pr_whl rm -f ${PADDLE_ROOT}/build/python/dist/*.whl && rm -f ${PADDLE_ROOT}/build/python/build/.timestamp git checkout $BRANCH dev_commit=`git log -2|grep -w 'commit'|awk '{print $2}'` for commit_id in $dev_commit do dev_url="https://xly-devops.bj.bcebos.com/PR/build_whl/0/${commit_id}/paddlepaddle_gpu-0.0.0-cp310-cp310-linux_x86_64.whl" url_return=`curl -s -m 5 -IL ${dev_url} |awk 'NR==1{print $2}'` if [ "$url_return" == '200' ];then break fi done if [ "$url_return" == '200' ];then mkdir ${PADDLE_ROOT}/build/dev_whl && wget -q -P ${PADDLE_ROOT}/build/dev_whl ${dev_url} cp ${PADDLE_ROOT}/build/dev_whl/paddlepaddle_gpu-0.0.0-cp310-cp310-linux_x86_64.whl ${PADDLE_ROOT}/build/python/dist else cp -r ${PADDLE_ROOT}/build /tmp/ if [[ ${cmake_change} ]];then rm -rf ${PADDLE_ROOT}/build/Makefile ${PADDLE_ROOT}/build/CMakeCache.txt ${PADDLE_ROOT}/build/build.ninja rm -rf ${PADDLE_ROOT}/build/third_party fi git checkout $BRANCH git submodule update --init run_setup "rerun-cmake bdist_wheel" rm -rf ${PADDLE_ROOT}/build mv /tmp/build ${PADDLE_ROOT} if [ ! -d "${PADDLE_ROOT}/build/python/dist/" ]; then mkdir ${PADDLE_ROOT}/build/python/dist/ fi mv ${PADDLE_ROOT}/dist/*.whl ${PADDLE_ROOT}/build/python/dist/ mkdir ${PADDLE_ROOT}/build/dev_whl && cp ${PADDLE_ROOT}/build/python/dist/*.whl ${PADDLE_ROOT}/build/dev_whl git checkout test fi generate_api_spec "" "DEV" fi if [[ -f ${PADDLE_ROOT}/build/build_summary.txt ]];then echo "=====================build summary======================" cat ${PADDLE_ROOT}/build/build_summary.txt echo "========================================================" fi