From 356cf6b3e2e4989faec00dadf6826ed68318d8e5 Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Wed, 27 Nov 2024 13:30:53 +0000 Subject: [PATCH 01/19] Enable AArch64 Ubuntu CI jobs for OpenSSL and JIT Enable OpenSSL builds on AArch64 Move AArch64 JIT builds from emulated to native. --- .github/workflows/build.yml | 4 ++-- .github/workflows/jit.yml | 29 ++++------------------------- 2 files changed, 6 insertions(+), 27 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b3c4f179b513a4..3f7f60d7a0af59 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -249,7 +249,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-24.04] + os: [ubuntu-24.04, ubuntu-24.04-aarch64] openssl_ver: [3.0.15, 3.1.7, 3.2.3, 3.3.2] env: OPENSSL_VER: ${{ matrix.openssl_ver }} @@ -429,7 +429,7 @@ jobs: if: needs.check_source.outputs.run_tests == 'true' strategy: matrix: - os: [ubuntu-24.04] + os: [ubuntu-24.04, ubuntu-24.04-aarch64] env: OPENSSL_VER: 3.0.15 PYTHONSTRICTEXTENSIONBUILD: 1 diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index 35d5d59b762660..a6f10feca67f5b 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -93,11 +93,11 @@ jobs: compiler: clang - target: aarch64-unknown-linux-gnu/gcc architecture: aarch64 - runner: ubuntu-22.04 + runner: ubuntu-24.04-aarch64 compiler: gcc - target: aarch64-unknown-linux-gnu/clang architecture: aarch64 - runner: ubuntu-22.04 + runner: ubuntu-24.04-aarch64 compiler: clang env: CC: ${{ matrix.compiler }} @@ -123,7 +123,7 @@ jobs: # The `find` line is required as a result of https://github.com/actions/runner-images/issues/9966. # This is a bug in the macOS runner image where the pre-installed Python is installed in the same - # directory as the Homebrew Python, which causes the build to fail for macos-13. This line removes + # directory as the Homebrew Python, which causes the build to fail for macos-13. This line removes # the symlink to the pre-installed Python so that the Homebrew Python is used instead. - name: Native macOS if: runner.os == 'macOS' @@ -137,7 +137,7 @@ jobs: ./python.exe -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 - name: Native Linux - if: runner.os == 'Linux' && matrix.architecture == 'x86_64' + if: runner.os == 'Linux' run: | sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ matrix.llvm }} export PATH="$(llvm-config-${{ matrix.llvm }} --bindir):$PATH" @@ -145,27 +145,6 @@ jobs: make all --jobs 4 ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 - - name: Emulated Linux - if: runner.os == 'Linux' && matrix.architecture != 'x86_64' - # The --ignorefile on ./python -m test is used to exclude tests known to fail when running on an emulated Linux. - run: | - sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ matrix.llvm }} - export PATH="$(llvm-config-${{ matrix.llvm }} --bindir):$PATH" - ./configure --prefix="$(pwd)/../build" - make install --jobs 4 - make clean --jobs 4 - export HOST=${{ matrix.architecture }}-linux-gnu - sudo apt install --yes "gcc-$HOST" qemu-user - ${{ !matrix.debug && matrix.compiler == 'clang' && './configure --enable-optimizations' || '' }} - ${{ !matrix.debug && matrix.compiler == 'clang' && 'make profile-run-stamp --jobs 4' || '' }} - export QEMU_LD_PREFIX="/usr/$HOST" - CC="${{ matrix.compiler == 'clang' && 'clang --target=$HOST' || '$HOST-gcc' }}" \ - CPP="$CC --preprocess" \ - HOSTRUNNER=qemu-${{ matrix.architecture }} \ - ./configure --enable-experimental-jit ${{ matrix.debug && '--with-pydebug' || '--with-lto' }} --build=x86_64-linux-gnu --host="$HOST" --with-build-python=../build/bin/python3 --with-pkg-config=no ac_cv_buggy_getaddrinfo=no ac_cv_file__dev_ptc=no ac_cv_file__dev_ptmx=yes - make all --jobs 4 - ./python -m test --ignorefile=Tools/jit/ignore-tests-emulated-linux.txt --multiprocess 0 --timeout 4500 --verbose2 --verbose3 - jit-with-disabled-gil: name: Free-Threaded (Debug) needs: interpreter From 4be422ec66686fc5d4623c09c2c212bff6edf824 Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Wed, 27 Nov 2024 14:34:47 +0000 Subject: [PATCH 02/19] Don't use Arm runners on forks --- .github/workflows/build.yml | 10 ++++++++-- .github/workflows/jit.yml | 2 ++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3f7f60d7a0af59..0459a1dbf33364 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -249,7 +249,10 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-24.04, ubuntu-24.04-aarch64] + os: [ubuntu-24.04] + include: + - os: ubuntu-24.04-aarch64 + if: ${{ github.repository_owner != 'python' }} openssl_ver: [3.0.15, 3.1.7, 3.2.3, 3.3.2] env: OPENSSL_VER: ${{ matrix.openssl_ver }} @@ -429,7 +432,10 @@ jobs: if: needs.check_source.outputs.run_tests == 'true' strategy: matrix: - os: [ubuntu-24.04, ubuntu-24.04-aarch64] + os: [ubuntu-24.04] + include: + - os: ubuntu-24.04-aarch64 + if: ${{ github.repository_owner != 'python' }} env: OPENSSL_VER: 3.0.15 PYTHONSTRICTEXTENSIONBUILD: 1 diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index a6f10feca67f5b..cf5b69c995378f 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -95,10 +95,12 @@ jobs: architecture: aarch64 runner: ubuntu-24.04-aarch64 compiler: gcc + if: ${{ github.repository_owner != 'python' }} - target: aarch64-unknown-linux-gnu/clang architecture: aarch64 runner: ubuntu-24.04-aarch64 compiler: clang + if: ${{ github.repository_owner != 'python' }} env: CC: ${{ matrix.compiler }} steps: From 51fa3b52654fa08bc5b1e986b07dfa9f66f9bc92 Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Wed, 27 Nov 2024 14:48:36 +0000 Subject: [PATCH 03/19] Fix exclusion logic to be the same of macOS. --- .github/workflows/build.yml | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0459a1dbf33364..279001d36303cf 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -249,10 +249,14 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-24.04] - include: - - os: ubuntu-24.04-aarch64 - if: ${{ github.repository_owner != 'python' }} + os: + - ubuntu-24.04 + - ubuntu-24.04-aarch64 + is-fork: # only used for the exclusion trick + - ${{ github.repository_owner != 'python' }} + exclude: + - os: ubuntu-24.04-aarch64 + is-fork: true openssl_ver: [3.0.15, 3.1.7, 3.2.3, 3.3.2] env: OPENSSL_VER: ${{ matrix.openssl_ver }} @@ -432,10 +436,14 @@ jobs: if: needs.check_source.outputs.run_tests == 'true' strategy: matrix: - os: [ubuntu-24.04] - include: - - os: ubuntu-24.04-aarch64 - if: ${{ github.repository_owner != 'python' }} + os: + - ubuntu-24.04 + - ubuntu-24.04-aarch64 + is-fork: # only used for the exclusion trick + - ${{ github.repository_owner != 'python' }} + exclude: + - os: ubuntu-24.04-aarch64 + is-fork: true env: OPENSSL_VER: 3.0.15 PYTHONSTRICTEXTENSIONBUILD: 1 From fc2b11acd9779a5a868ec56841b8f598b2fdf75b Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Wed, 27 Nov 2024 16:28:24 +0000 Subject: [PATCH 04/19] Pass the os to reusable-ubuntu Remove openssl and asan jobs on AArch64 --- .github/workflows/build.yml | 27 +++++++++++---------------- .github/workflows/reusable-ubuntu.yml | 18 +++++++++--------- 2 files changed, 20 insertions(+), 25 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 279001d36303cf..618917befb7942 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -235,10 +235,19 @@ jobs: free-threading: - false - true + os: + - ubuntu-24.04 + - ubuntu-24.04-aarch64 + is-fork: # only used for the exclusion trick + - ${{ github.repository_owner != 'python' }} + exclude: + - os: ubuntu-24.04-aarch64 + is-fork: true uses: ./.github/workflows/reusable-ubuntu.yml with: config_hash: ${{ needs.check_source.outputs.config_hash }} free-threading: ${{ matrix.free-threading }} + os: ${{ matrix.os }} build_ubuntu_ssltests: name: 'Ubuntu SSL tests with OpenSSL' @@ -249,14 +258,7 @@ jobs: strategy: fail-fast: false matrix: - os: - - ubuntu-24.04 - - ubuntu-24.04-aarch64 - is-fork: # only used for the exclusion trick - - ${{ github.repository_owner != 'python' }} - exclude: - - os: ubuntu-24.04-aarch64 - is-fork: true + os: [ubuntu-24.04] openssl_ver: [3.0.15, 3.1.7, 3.2.3, 3.3.2] env: OPENSSL_VER: ${{ matrix.openssl_ver }} @@ -436,14 +438,7 @@ jobs: if: needs.check_source.outputs.run_tests == 'true' strategy: matrix: - os: - - ubuntu-24.04 - - ubuntu-24.04-aarch64 - is-fork: # only used for the exclusion trick - - ${{ github.repository_owner != 'python' }} - exclude: - - os: ubuntu-24.04-aarch64 - is-fork: true + os: [ubuntu-24.04] env: OPENSSL_VER: 3.0.15 PYTHONSTRICTEXTENSIONBUILD: 1 diff --git a/.github/workflows/reusable-ubuntu.yml b/.github/workflows/reusable-ubuntu.yml index 642354f8b4f61b..1b8d46b0467893 100644 --- a/.github/workflows/reusable-ubuntu.yml +++ b/.github/workflows/reusable-ubuntu.yml @@ -11,16 +11,16 @@ on: required: false type: boolean default: false + os: + description: OS to run the job + required: true + type: string jobs: build_ubuntu_reusable: - name: 'build and test' + name: build and test (${{ inputs.os }}) timeout-minutes: 60 - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - os: [ubuntu-24.04, ubuntu-24.04-aarch64] + runs-on: ${{ inputs.os }} env: FORCE_COLOR: 1 OPENSSL_VER: 3.0.15 @@ -80,18 +80,18 @@ jobs: --with-openssl="$OPENSSL_DIR" ${{ fromJSON(inputs.free-threading) && '--disable-gil' || '' }} - name: Build CPython out-of-tree - if: ${{ inputs.free-threading }} + if: ${{ inputs.free-threading || inputs.os != 'ubuntu-24.04-aarch64' }} working-directory: ${{ env.CPYTHON_BUILDDIR }} run: make -j - name: Build CPython out-of-tree (for compiler warning check) - if: ${{ !inputs.free-threading}} + if: ${{ !inputs.free-threading && inputs.os == 'ubuntu-24.04-aarch64' }} working-directory: ${{ env.CPYTHON_BUILDDIR }} run: set -o pipefail; make -j --output-sync 2>&1 | tee compiler_output_ubuntu.txt - name: Display build info working-directory: ${{ env.CPYTHON_BUILDDIR }} run: make pythoninfo - name: Check compiler warnings - if: ${{ !inputs.free-threading }} + if: ${{ !inputs.free-threading && inputs.os == 'ubuntu-24.04-aarch64' }} run: >- python Tools/build/check_warnings.py --compiler-output-file-path=${{ env.CPYTHON_BUILDDIR }}/compiler_output_ubuntu.txt From 46c13923e5aa0100dc0affa73235072aa98d7e6d Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Wed, 27 Nov 2024 16:33:29 +0000 Subject: [PATCH 05/19] Address feedback --- .github/workflows/jit.yml | 12 ++-- .github/workflows/reusable-ubuntu.yml | 2 +- Tools/jit/ignore-tests-emulated-linux.txt | 85 ----------------------- 3 files changed, 7 insertions(+), 92 deletions(-) delete mode 100644 Tools/jit/ignore-tests-emulated-linux.txt diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index cf5b69c995378f..510eafe1580a61 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -28,7 +28,7 @@ concurrency: jobs: interpreter: name: Interpreter (Debug) - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 timeout-minutes: 90 steps: - uses: actions/checkout@v4 @@ -85,22 +85,22 @@ jobs: compiler: clang - target: x86_64-unknown-linux-gnu/gcc architecture: x86_64 - runner: ubuntu-22.04 + runner: ubuntu-24.04 compiler: gcc - target: x86_64-unknown-linux-gnu/clang architecture: x86_64 - runner: ubuntu-22.04 + runner: ubuntu-24.04 compiler: clang - target: aarch64-unknown-linux-gnu/gcc architecture: aarch64 runner: ubuntu-24.04-aarch64 compiler: gcc - if: ${{ github.repository_owner != 'python' }} + if: ${{ github.repository_owner == 'python' }} - target: aarch64-unknown-linux-gnu/clang architecture: aarch64 runner: ubuntu-24.04-aarch64 compiler: clang - if: ${{ github.repository_owner != 'python' }} + if: ${{ github.repository_owner == 'python' }} env: CC: ${{ matrix.compiler }} steps: @@ -150,7 +150,7 @@ jobs: jit-with-disabled-gil: name: Free-Threaded (Debug) needs: interpreter - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 strategy: matrix: llvm: diff --git a/.github/workflows/reusable-ubuntu.yml b/.github/workflows/reusable-ubuntu.yml index 1b8d46b0467893..8df4bb24c6ad76 100644 --- a/.github/workflows/reusable-ubuntu.yml +++ b/.github/workflows/reusable-ubuntu.yml @@ -42,7 +42,7 @@ jobs: uses: actions/cache@v4 with: path: ./multissl/openssl/${{ env.OPENSSL_VER }} - key: ${{ matrix.os }}-multissl-openssl-${{ env.OPENSSL_VER }} + key: ${{ input.os }}-multissl-openssl-${{ env.OPENSSL_VER }} - name: Install OpenSSL if: steps.cache-openssl.outputs.cache-hit != 'true' run: python3 Tools/ssl/multissltests.py --steps=library --base-directory "$MULTISSL_DIR" --openssl "$OPENSSL_VER" --system Linux diff --git a/Tools/jit/ignore-tests-emulated-linux.txt b/Tools/jit/ignore-tests-emulated-linux.txt deleted file mode 100644 index 080a569574470c..00000000000000 --- a/Tools/jit/ignore-tests-emulated-linux.txt +++ /dev/null @@ -1,85 +0,0 @@ -test_multiprocessing_fork -test_strftime_y2k -test.test_asyncio.test_unix_events.TestFork.test_fork_asyncio_run -test.test_asyncio.test_unix_events.TestFork.test_fork_asyncio_subprocess -test.test_asyncio.test_unix_events.TestFork.test_fork_signal_handling -test.test_cmd_line.CmdLineTest.test_no_std_streams -test.test_cmd_line.CmdLineTest.test_no_stdin -test.test_concurrent_futures.test_init.ProcessPoolForkFailingInitializerTest.test_initializer -test.test_concurrent_futures.test_process_pool.ProcessPoolForkProcessPoolExecutorTest.test_ressources_gced_in_workers -test.test_external_inspection.TestGetStackTrace.test_remote_stack_trace -test.test_external_inspection.TestGetStackTrace.test_self_trace -test.test_faulthandler.FaultHandlerTests.test_enable_fd -test.test_faulthandler.FaultHandlerTests.test_enable_file -test.test_init.ProcessPoolForkFailingInitializerTest.test_initializer -test.test_logging.ConfigDictTest.test_111615 -test.test_logging.ConfigDictTest.test_config_queue_handler -test.test_logging.ConfigDictTest.test_multiprocessing_queues -test.test_logging.ConfigDictTest.test_config_queue_handler_multiprocessing_context -test.test_os.ForkTests.test_fork_warns_when_non_python_thread_exists -test.test_os.TimerfdTests.test_timerfd_initval -test.test_os.TimerfdTests.test_timerfd_interval -test.test_os.TimerfdTests.test_timerfd_TFD_TIMER_ABSTIME -test.test_pathlib.PathSubclassTest.test_is_mount_root -test.test_pathlib.PathTest.test_is_mount_root -test.test_pathlib.PosixPathTest.test_is_mount_root -test.test_pathlib.test_pathlib.PathSubclassTest.test_is_mount_root -test.test_pathlib.test_pathlib.PathTest.test_is_mount_root -test.test_pathlib.test_pathlib.PosixPathTest.test_is_mount_root -test.test_posix.TestPosixSpawn.test_close_file -test.test_posix.TestPosixSpawnP.test_close_file -test.test_posixpath.PosixPathTest.test_ismount -test.test_signal.StressTest.test_stress_modifying_handlers -test.test_socket.BasicCANTest.testFilter -test.test_socket.BasicCANTest.testLoopback -test.test_socket.LinuxKernelCryptoAPI.test_aead_aes_gcm -test.test_socket.LinuxKernelCryptoAPI.test_aes_cbc -test.test_socket.RecvmsgIntoRFC3542AncillaryUDP6Test.testSecondCmsgTrunc1 -test.test_socket.RecvmsgIntoRFC3542AncillaryUDP6Test.testSecondCmsgTrunc2Int -test.test_socket.RecvmsgIntoRFC3542AncillaryUDP6Test.testSecondCmsgTruncInData -test.test_socket.RecvmsgIntoRFC3542AncillaryUDP6Test.testSecondCmsgTruncLen0Minus1 -test.test_socket.RecvmsgIntoRFC3542AncillaryUDP6Test.testSingleCmsgTruncInData -test.test_socket.RecvmsgIntoRFC3542AncillaryUDP6Test.testSingleCmsgTruncLen0Minus1 -test.test_socket.RecvmsgIntoRFC3542AncillaryUDPLITE6Test.testSecondCmsgTrunc1 -test.test_socket.RecvmsgIntoRFC3542AncillaryUDPLITE6Test.testSecondCmsgTrunc2Int -test.test_socket.RecvmsgIntoRFC3542AncillaryUDPLITE6Test.testSecondCmsgTruncInData -test.test_socket.RecvmsgIntoRFC3542AncillaryUDPLITE6Test.testSecondCmsgTruncLen0Minus1 -test.test_socket.RecvmsgIntoRFC3542AncillaryUDPLITE6Test.testSingleCmsgTruncInData -test.test_socket.RecvmsgIntoRFC3542AncillaryUDPLITE6Test.testSingleCmsgTruncLen0Minus1 -test.test_socket.RecvmsgIntoSCMRightsStreamTest.testCmsgTruncLen0 -test.test_socket.RecvmsgIntoSCMRightsStreamTest.testCmsgTruncLen0Minus1 -test.test_socket.RecvmsgIntoSCMRightsStreamTest.testCmsgTruncLen0Plus1 -test.test_socket.RecvmsgIntoSCMRightsStreamTest.testCmsgTruncLen1 -test.test_socket.RecvmsgIntoSCMRightsStreamTest.testCmsgTruncLen2Minus1 -test.test_socket.RecvmsgRFC3542AncillaryUDP6Test.testSecondCmsgTrunc1 -test.test_socket.RecvmsgRFC3542AncillaryUDP6Test.testSecondCmsgTrunc2Int -test.test_socket.RecvmsgRFC3542AncillaryUDP6Test.testSecondCmsgTruncInData -test.test_socket.RecvmsgRFC3542AncillaryUDP6Test.testSecondCmsgTruncLen0Minus1 -test.test_socket.RecvmsgRFC3542AncillaryUDP6Test.testSingleCmsgTruncInData -test.test_socket.RecvmsgRFC3542AncillaryUDP6Test.testSingleCmsgTruncLen0Minus1 -test.test_socket.RecvmsgRFC3542AncillaryUDPLITE6Test.testSecondCmsgTrunc1 -test.test_socket.RecvmsgRFC3542AncillaryUDPLITE6Test.testSecondCmsgTrunc2Int -test.test_socket.RecvmsgRFC3542AncillaryUDPLITE6Test.testSecondCmsgTruncInData -test.test_socket.RecvmsgRFC3542AncillaryUDPLITE6Test.testSecondCmsgTruncLen0Minus1 -test.test_socket.RecvmsgRFC3542AncillaryUDPLITE6Test.testSingleCmsgTruncInData -test.test_socket.RecvmsgRFC3542AncillaryUDPLITE6Test.testSingleCmsgTruncLen0Minus1 -test.test_socket.RecvmsgRFC3542AncillaryUDPLITE6Test.testSingleCmsgTruncLen0Minus1 -test.test_socket.RecvmsgSCMRightsStreamTest.testCmsgTruncLen0 -test.test_socket.RecvmsgSCMRightsStreamTest.testCmsgTruncLen0Minus1 -test.test_socket.RecvmsgSCMRightsStreamTest.testCmsgTruncLen0Plus1 -test.test_socket.RecvmsgSCMRightsStreamTest.testCmsgTruncLen1 -test.test_socket.RecvmsgSCMRightsStreamTest.testCmsgTruncLen2Minus1 -test.test_subprocess.POSIXProcessTestCase.test_exception_bad_args_0 -test.test_subprocess.POSIXProcessTestCase.test_exception_bad_executable -test.test_subprocess.POSIXProcessTestCase.test_vfork_used_when_expected -test.test_subprocess.ProcessTestCase.test_cwd_with_relative_arg -test.test_subprocess.ProcessTestCase.test_cwd_with_relative_executable -test.test_subprocess.ProcessTestCase.test_empty_env -test.test_subprocess.ProcessTestCase.test_file_not_found_includes_filename -test.test_subprocess.ProcessTestCase.test_one_environment_variable -test.test_subprocess.ProcessTestCaseNoPoll.test_cwd_with_relative_arg -test.test_subprocess.ProcessTestCaseNoPoll.test_cwd_with_relative_executable -test.test_subprocess.ProcessTestCaseNoPoll.test_empty_env -test.test_subprocess.ProcessTestCaseNoPoll.test_file_not_found_includes_filename -test.test_subprocess.ProcessTestCaseNoPoll.test_one_environment_variable -test.test_venv.BasicTest.test_zippath_from_non_installed_posix From ff79272a9a1516527e259816c38ee547382b5b2b Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Wed, 27 Nov 2024 16:36:23 +0000 Subject: [PATCH 06/19] s/input/inputs --- .github/workflows/reusable-ubuntu.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reusable-ubuntu.yml b/.github/workflows/reusable-ubuntu.yml index 8df4bb24c6ad76..527c767db98cee 100644 --- a/.github/workflows/reusable-ubuntu.yml +++ b/.github/workflows/reusable-ubuntu.yml @@ -42,7 +42,7 @@ jobs: uses: actions/cache@v4 with: path: ./multissl/openssl/${{ env.OPENSSL_VER }} - key: ${{ input.os }}-multissl-openssl-${{ env.OPENSSL_VER }} + key: ${{ inputs.os }}-multissl-openssl-${{ env.OPENSSL_VER }} - name: Install OpenSSL if: steps.cache-openssl.outputs.cache-hit != 'true' run: python3 Tools/ssl/multissltests.py --steps=library --base-directory "$MULTISSL_DIR" --openssl "$OPENSSL_VER" --system Linux From 3b0f67e8ba6cde22a4be7d2d83785fc1d2f9a6f4 Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Wed, 27 Nov 2024 17:48:03 +0000 Subject: [PATCH 07/19] Don't need this checks. --- .github/workflows/reusable-ubuntu.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/reusable-ubuntu.yml b/.github/workflows/reusable-ubuntu.yml index 527c767db98cee..d8705787fe9588 100644 --- a/.github/workflows/reusable-ubuntu.yml +++ b/.github/workflows/reusable-ubuntu.yml @@ -80,18 +80,18 @@ jobs: --with-openssl="$OPENSSL_DIR" ${{ fromJSON(inputs.free-threading) && '--disable-gil' || '' }} - name: Build CPython out-of-tree - if: ${{ inputs.free-threading || inputs.os != 'ubuntu-24.04-aarch64' }} + if: ${{ inputs.free-threading }} working-directory: ${{ env.CPYTHON_BUILDDIR }} run: make -j - name: Build CPython out-of-tree (for compiler warning check) - if: ${{ !inputs.free-threading && inputs.os == 'ubuntu-24.04-aarch64' }} + if: ${{ !inputs.free-threading }} working-directory: ${{ env.CPYTHON_BUILDDIR }} run: set -o pipefail; make -j --output-sync 2>&1 | tee compiler_output_ubuntu.txt - name: Display build info working-directory: ${{ env.CPYTHON_BUILDDIR }} run: make pythoninfo - name: Check compiler warnings - if: ${{ !inputs.free-threading && inputs.os == 'ubuntu-24.04-aarch64' }} + if: ${{ !inputs.free-threading }} run: >- python Tools/build/check_warnings.py --compiler-output-file-path=${{ env.CPYTHON_BUILDDIR }}/compiler_output_ubuntu.txt From b8770f4aadffcc7252c3d50c22df87c12fa047c9 Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Thu, 28 Nov 2024 11:09:02 +0000 Subject: [PATCH 08/19] Don't use AArch64 runners for forks --- .github/workflows/jit.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index 510eafe1580a61..8d5ab6868bc4de 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -62,6 +62,13 @@ jobs: - false llvm: - 19 + is-fork: # only used for the exclusion trick + - ${{ github.repository_owner != 'python' }} + exclude: + - target: aarch64-unknown-linux-gnu/gcc + is-fork: true + - target: aarch64-unknown-linux-gnu/clang + is-fork: true include: - target: i686-pc-windows-msvc/msvc architecture: Win32 @@ -95,12 +102,10 @@ jobs: architecture: aarch64 runner: ubuntu-24.04-aarch64 compiler: gcc - if: ${{ github.repository_owner == 'python' }} - target: aarch64-unknown-linux-gnu/clang architecture: aarch64 runner: ubuntu-24.04-aarch64 compiler: clang - if: ${{ github.repository_owner == 'python' }} env: CC: ${{ matrix.compiler }} steps: From c5dc6b0b1ea5374f2ef254fbb0c0920a31ac6a11 Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Thu, 28 Nov 2024 11:19:06 +0000 Subject: [PATCH 09/19] Exclude after include --- .github/workflows/jit.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index 8d5ab6868bc4de..b894fa3b23cd6b 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -64,11 +64,6 @@ jobs: - 19 is-fork: # only used for the exclusion trick - ${{ github.repository_owner != 'python' }} - exclude: - - target: aarch64-unknown-linux-gnu/gcc - is-fork: true - - target: aarch64-unknown-linux-gnu/clang - is-fork: true include: - target: i686-pc-windows-msvc/msvc architecture: Win32 @@ -106,6 +101,11 @@ jobs: architecture: aarch64 runner: ubuntu-24.04-aarch64 compiler: clang + exclude: + - target: aarch64-unknown-linux-gnu/gcc + is-fork: true + - target: aarch64-unknown-linux-gnu/clang + is-fork: true env: CC: ${{ matrix.compiler }} steps: From 6de3f07afd76296ac35529b08f97df9bdbd3d805 Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Thu, 28 Nov 2024 12:01:13 +0000 Subject: [PATCH 10/19] Exclude by runner --- .github/workflows/jit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index e21fc7ac365b61..e73b9765117b6b 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -85,7 +85,7 @@ jobs: architecture: aarch64 runner: ubuntu-24.04-aarch64 exclude: - - target: aarch64-unknown-linux-gnu/gcc + - runner: ubuntu-24.04-aarch64 is-fork: true steps: - uses: actions/checkout@v4 From 8d567edf98281aadd3214a07fa877598f5032e78 Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Thu, 28 Nov 2024 13:05:55 +0000 Subject: [PATCH 11/19] Exclude by target --- .github/workflows/jit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index e73b9765117b6b..e21fc7ac365b61 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -85,7 +85,7 @@ jobs: architecture: aarch64 runner: ubuntu-24.04-aarch64 exclude: - - runner: ubuntu-24.04-aarch64 + - target: aarch64-unknown-linux-gnu/gcc is-fork: true steps: - uses: actions/checkout@v4 From 07540bf55c19d19f35eb9dd3130f75d0ac79aedb Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Thu, 28 Nov 2024 13:27:00 +0000 Subject: [PATCH 12/19] Let's be more precise about the exclude --- .github/workflows/jit.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index e21fc7ac365b61..996e85a7d83d55 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -86,6 +86,8 @@ jobs: runner: ubuntu-24.04-aarch64 exclude: - target: aarch64-unknown-linux-gnu/gcc + architecture: aarch64 + runner: ubuntu-24.04-aarch64 is-fork: true steps: - uses: actions/checkout@v4 From e9aa1208f13484f217019389c092e95244eba21d Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Thu, 28 Nov 2024 13:34:28 +0000 Subject: [PATCH 13/19] Run jit only if branch is main or 3.* (like build.yml) --- .github/workflows/jit.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index 996e85a7d83d55..358bc102cb7829 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -1,6 +1,9 @@ name: JIT on: pull_request: + branches: + - 'main' + - '3.*' paths: - '**jit**' - 'Python/bytecodes.c' @@ -9,6 +12,9 @@ on: - '!**/*.md' - '!**/*.ini' push: + branches: + - 'main' + - '3.*' paths: - '**jit**' - 'Python/bytecodes.c' From 958973779b02d6d19b3bf193be4f1f0f2f0a3764 Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Thu, 28 Nov 2024 13:39:05 +0000 Subject: [PATCH 14/19] TO BE REVERTED: Commenting to speed up the GHA debugging cycle --- .github/workflows/jit.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index 358bc102cb7829..cd532e7c9904ae 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -47,7 +47,8 @@ jobs: ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 jit: name: ${{ matrix.target }} (${{ matrix.debug && 'Debug' || 'Release' }}) - needs: interpreter + # Commenting for debugging. + # needs: interpreter runs-on: ${{ matrix.runner }} timeout-minutes: 90 strategy: From 9024da1e1721bbb59350683585b6c0a640c59f70 Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Thu, 28 Nov 2024 13:49:58 +0000 Subject: [PATCH 15/19] Revert "TO BE REVERTED: Commenting to speed up the GHA debugging cycle" This reverts commit 958973779b02d6d19b3bf193be4f1f0f2f0a3764. --- .github/workflows/jit.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index cd532e7c9904ae..358bc102cb7829 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -47,8 +47,7 @@ jobs: ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 jit: name: ${{ matrix.target }} (${{ matrix.debug && 'Debug' || 'Release' }}) - # Commenting for debugging. - # needs: interpreter + needs: interpreter runs-on: ${{ matrix.runner }} timeout-minutes: 90 strategy: From 3fdda92b89dc8f3db04b0b0ce43617072a91e1fb Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Thu, 28 Nov 2024 13:59:09 +0000 Subject: [PATCH 16/19] Let's exclude the exclude! --- .github/workflows/jit.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index 358bc102cb7829..e5daa420fbdd5a 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -90,11 +90,7 @@ jobs: - target: aarch64-unknown-linux-gnu/gcc architecture: aarch64 runner: ubuntu-24.04-aarch64 - exclude: - - target: aarch64-unknown-linux-gnu/gcc - architecture: aarch64 - runner: ubuntu-24.04-aarch64 - is-fork: true + is-fork: false steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 From 359926caa448ff650724c23969f0de13ae206267 Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Thu, 28 Nov 2024 14:34:29 +0000 Subject: [PATCH 17/19] Remove is-fork --- .github/workflows/jit.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index e5daa420fbdd5a..cb60debe79cb7e 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -66,8 +66,6 @@ jobs: - false llvm: - 19 - is-fork: # only used for the exclusion trick - - ${{ github.repository_owner != 'python' }} include: - target: i686-pc-windows-msvc/msvc architecture: Win32 @@ -90,7 +88,6 @@ jobs: - target: aarch64-unknown-linux-gnu/gcc architecture: aarch64 runner: ubuntu-24.04-aarch64 - is-fork: false steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 From 564824544639bde0145ed13350a7437ecc7024c5 Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Fri, 29 Nov 2024 11:35:48 +0000 Subject: [PATCH 18/19] Refactor jit pipeline --- .github/workflows/jit.yml | 125 +++++++++++++++++++++----------------- 1 file changed, 70 insertions(+), 55 deletions(-) diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index cb60debe79cb7e..9fa8934166c3ec 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -31,6 +31,9 @@ concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true +env: + LLVM: 19 + jobs: interpreter: name: Interpreter (Debug) @@ -45,49 +48,22 @@ jobs: - name: Test tier two interpreter run: | ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 - jit: - name: ${{ matrix.target }} (${{ matrix.debug && 'Debug' || 'Release' }}) + + jit-windows: + name: Windows (${{ matrix.arch }}, ${{ matrix.debug && 'Debug' || 'Release' }}) needs: interpreter - runs-on: ${{ matrix.runner }} + runs-on: windows-latest timeout-minutes: 90 strategy: fail-fast: false matrix: - target: - - i686-pc-windows-msvc/msvc - - x86_64-pc-windows-msvc/msvc - - aarch64-pc-windows-msvc/msvc - - x86_64-apple-darwin/clang - - aarch64-apple-darwin/clang - - x86_64-unknown-linux-gnu/gcc - - aarch64-unknown-linux-gnu/gcc + arch: + - x64 + - Win32 + - ARM64 debug: - true - false - llvm: - - 19 - include: - - target: i686-pc-windows-msvc/msvc - architecture: Win32 - runner: windows-latest - - target: x86_64-pc-windows-msvc/msvc - architecture: x64 - runner: windows-latest - - target: aarch64-pc-windows-msvc/msvc - architecture: ARM64 - runner: windows-latest - - target: x86_64-apple-darwin/clang - architecture: x86_64 - runner: macos-13 - - target: aarch64-apple-darwin/clang - architecture: aarch64 - runner: macos-14 - - target: x86_64-unknown-linux-gnu/gcc - architecture: x86_64 - runner: ubuntu-24.04 - - target: aarch64-unknown-linux-gnu/gcc - architecture: aarch64 - runner: ubuntu-24.04-aarch64 steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 @@ -95,39 +71,82 @@ jobs: python-version: '3.11' - name: Native Windows - if: runner.os == 'Windows' && matrix.architecture != 'ARM64' + if: matrix.arch != 'ARM64' run: | - choco install llvm --allow-downgrade --no-progress --version ${{ matrix.llvm }}.1.0 - ./PCbuild/build.bat --experimental-jit ${{ matrix.debug && '-d' || '' }} -p ${{ matrix.architecture }} - ./PCbuild/rt.bat ${{ matrix.debug && '-d' || '' }} -p ${{ matrix.architecture }} -q --multiprocess 0 --timeout 4500 --verbose2 --verbose3 + choco install llvm --allow-downgrade --no-progress --version ${{ env.LLVM }}.1.0 + ./PCbuild/build.bat --experimental-jit ${{ matrix.debug && '-d' || '' }} -p ${{ matrix.arch }} + ./PCbuild/rt.bat ${{ matrix.debug && '-d' || '' }} -p ${{ matrix.arch }} -q --multiprocess 0 --timeout 4500 --verbose2 --verbose3 # No tests (yet): - name: Emulated Windows - if: runner.os == 'Windows' && matrix.architecture == 'ARM64' + if: matrix.arch == 'ARM64' run: | - choco install llvm --allow-downgrade --no-progress --version ${{ matrix.llvm }}.1.0 - ./PCbuild/build.bat --experimental-jit ${{ matrix.debug && '-d' || '' }} -p ${{ matrix.architecture }} + choco install llvm --allow-downgrade --no-progress --version ${{ env.LLVM }}.1.0 + ./PCbuild/build.bat --experimental-jit ${{ matrix.debug && '-d' || '' }} -p ${{ matrix.arch }} + jit-mac: + name: macOS (${{ matrix.os }}, ${{ matrix.debug && 'Debug' || 'Release' }}) + needs: interpreter + runs-on: ${{ matrix.os }} + timeout-minutes: 90 + strategy: + fail-fast: false + matrix: + # macos-14 are M1, macos-13 are default GHA Intel. + os: + - macos-14 + - macos-13 + debug: + - true + - false + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.11' # The `find` line is required as a result of https://github.com/actions/runner-images/issues/9966. # This is a bug in the macOS runner image where the pre-installed Python is installed in the same # directory as the Homebrew Python, which causes the build to fail for macos-13. This line removes # the symlink to the pre-installed Python so that the Homebrew Python is used instead. - - name: Native macOS - if: runner.os == 'macOS' + - name: ${{ runner.os }} (${{ runner.arch }}) run: | brew update find /usr/local/bin -lname '*/Library/Frameworks/Python.framework/*' -delete - brew install llvm@${{ matrix.llvm }} + brew install llvm@${{ env.LLVM }} export SDKROOT="$(xcrun --show-sdk-path)" ./configure --enable-experimental-jit ${{ matrix.debug && '--with-pydebug' || '' }} make all --jobs 4 ./python.exe -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 - - name: Native Linux - if: runner.os == 'Linux' + jit-ubuntu: + name: Ubuntu (${{ matrix.os }}, ${{ matrix.debug && 'Debug' || 'Release' }}) + needs: interpreter + runs-on: ${{ matrix.os }} + timeout-minutes: 90 + strategy: + fail-fast: false + matrix: + os: + - ubuntu-24.04 + - ubuntu-24.04-aarch64 + debug: + - true + - false + is-fork: # only used for the exclusion trick + - ${{ github.repository_owner != 'python' }} + exclude: + - os: ubuntu-24.04-aarch64 + is-fork: true + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.11' + + - name: ${{ runner.os }} (${{ runner.arch }}) run: | - sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ matrix.llvm }} - export PATH="$(llvm-config-${{ matrix.llvm }} --bindir):$PATH" + sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ env.LLVM }} + export PATH="$(llvm-config-${{ env.llvm }} --bindir):$PATH" ./configure --enable-experimental-jit ${{ matrix.debug && '--with-pydebug' || '' }} make all --jobs 4 ./python -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 @@ -136,10 +155,6 @@ jobs: name: Free-Threaded (Debug) needs: interpreter runs-on: ubuntu-24.04 - strategy: - matrix: - llvm: - - 19 steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 @@ -147,8 +162,8 @@ jobs: python-version: '3.11' - name: Build with JIT enabled and GIL disabled run: | - sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ matrix.llvm }} - export PATH="$(llvm-config-${{ matrix.llvm }} --bindir):$PATH" + sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ env.LLVM }} + export PATH="$(llvm-config-${{ env.llvm }} --bindir):$PATH" ./configure --enable-experimental-jit --with-pydebug --disable-gil make all --jobs 4 - name: Run tests From 765fc2a3b1082d44838bd1b50328ae9e76eef4cb Mon Sep 17 00:00:00 2001 From: Diego Russo Date: Mon, 2 Dec 2024 15:46:42 +0000 Subject: [PATCH 19/19] Address feddback --- .github/workflows/jit.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/jit.yml b/.github/workflows/jit.yml index 9fa8934166c3ec..64eae84847c32b 100644 --- a/.github/workflows/jit.yml +++ b/.github/workflows/jit.yml @@ -32,7 +32,7 @@ concurrency: cancel-in-progress: true env: - LLVM: 19 + llvm: 19 jobs: interpreter: @@ -73,7 +73,7 @@ jobs: - name: Native Windows if: matrix.arch != 'ARM64' run: | - choco install llvm --allow-downgrade --no-progress --version ${{ env.LLVM }}.1.0 + choco install llvm --allow-downgrade --no-progress --version ${{ env.llvm }}.1.0 ./PCbuild/build.bat --experimental-jit ${{ matrix.debug && '-d' || '' }} -p ${{ matrix.arch }} ./PCbuild/rt.bat ${{ matrix.debug && '-d' || '' }} -p ${{ matrix.arch }} -q --multiprocess 0 --timeout 4500 --verbose2 --verbose3 @@ -81,11 +81,11 @@ jobs: - name: Emulated Windows if: matrix.arch == 'ARM64' run: | - choco install llvm --allow-downgrade --no-progress --version ${{ env.LLVM }}.1.0 + choco install llvm --allow-downgrade --no-progress --version ${{ env.llvm }}.1.0 ./PCbuild/build.bat --experimental-jit ${{ matrix.debug && '-d' || '' }} -p ${{ matrix.arch }} jit-mac: - name: macOS (${{ matrix.os }}, ${{ matrix.debug && 'Debug' || 'Release' }}) + name: macOS (${{ matrix.os == 'macos-14' && 'aarch64' || 'x86_64' }}, ${{ matrix.debug && 'Debug' || 'Release' }}) needs: interpreter runs-on: ${{ matrix.os }} timeout-minutes: 90 @@ -112,14 +112,14 @@ jobs: run: | brew update find /usr/local/bin -lname '*/Library/Frameworks/Python.framework/*' -delete - brew install llvm@${{ env.LLVM }} + brew install llvm@${{ env.llvm }} export SDKROOT="$(xcrun --show-sdk-path)" ./configure --enable-experimental-jit ${{ matrix.debug && '--with-pydebug' || '' }} make all --jobs 4 ./python.exe -m test --multiprocess 0 --timeout 4500 --verbose2 --verbose3 jit-ubuntu: - name: Ubuntu (${{ matrix.os }}, ${{ matrix.debug && 'Debug' || 'Release' }}) + name: Ubuntu (${{ matrix.os == 'ubuntu-24.04-aarch64' && 'aarch64' || 'x86_64' }}, ${{ matrix.debug && 'Debug' || 'Release' }}) needs: interpreter runs-on: ${{ matrix.os }} timeout-minutes: 90 @@ -145,7 +145,7 @@ jobs: - name: ${{ runner.os }} (${{ runner.arch }}) run: | - sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ env.LLVM }} + sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ env.llvm }} export PATH="$(llvm-config-${{ env.llvm }} --bindir):$PATH" ./configure --enable-experimental-jit ${{ matrix.debug && '--with-pydebug' || '' }} make all --jobs 4 @@ -162,7 +162,7 @@ jobs: python-version: '3.11' - name: Build with JIT enabled and GIL disabled run: | - sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ env.LLVM }} + sudo bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)" ./llvm.sh ${{ env.llvm }} export PATH="$(llvm-config-${{ env.llvm }} --bindir):$PATH" ./configure --enable-experimental-jit --with-pydebug --disable-gil make all --jobs 4 pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy