diff --git a/.github/workflows/apple.yml b/.github/workflows/apple.yml deleted file mode 100644 index afe7add3..00000000 --- a/.github/workflows/apple.yml +++ /dev/null @@ -1,250 +0,0 @@ -name: MacOS Python build - -on: - push: - branches: [main] - pull_request: - -concurrency: - group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} - cancel-in-progress: ${{ github.event_name == 'pull_request' }} - -jobs: - pythonbuild: - runs-on: 'macos-13' - steps: - - uses: actions/checkout@v4 - - - name: Emit rustc version - run: | - rustc --version > .rustc-version - - - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-pythonbuild-${{ hashFiles('Cargo.lock', '.rustc-version') }} - - - name: Build - run: | - cargo build --release - - - name: Upload pythonbuild Executable - uses: actions/upload-artifact@v4 - with: - name: pythonbuild - path: target/release/pythonbuild - - build: - strategy: - fail-fast: false - matrix: - build: - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.9' - options: 'pgo' - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.9' - options: 'pgo+lto' - - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.10' - options: 'pgo' - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.10' - options: 'pgo+lto' - - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.11' - options: 'pgo' - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.11' - options: 'pgo+lto' - - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.12' - options: 'pgo' - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.12' - options: 'pgo+lto' - - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.13' - options: 'pgo' - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.13' - options: 'pgo+lto' - - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.13' - options: 'freethreaded+pgo' - - target_triple: 'aarch64-apple-darwin' - runner: macos-14 - py: 'cpython-3.13' - options: 'freethreaded+pgo+lto' - - # macOS on Intel hardware. This is pretty straightforward. We exclude - # noopt because it doesn't provide any compelling advantages over PGO - # or LTO builds. - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.9' - options: 'pgo' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.9' - options: 'pgo+lto' - - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.10' - options: 'pgo' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.10' - options: 'pgo+lto' - - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.11' - options: 'pgo' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.11' - options: 'pgo+lto' - - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.12' - options: 'pgo' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.12' - options: 'pgo+lto' - - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.13' - options: 'pgo' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.13' - options: 'pgo+lto' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.13' - options: 'freethreaded+pgo' - - target_triple: 'x86_64-apple-darwin' - runner: macos-13 - py: 'cpython-3.13' - options: 'freethreaded+pgo+lto' - needs: - - pythonbuild - runs-on: ${{ matrix.build.runner }} - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Install Python - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - - name: Download pythonbuild - uses: actions/download-artifact@v4 - with: - name: pythonbuild - path: build - - - name: Build - run: | - if [ "${{ matrix.build.target_triple }}" = "aarch64-apple-darwin" ]; then - export APPLE_SDK_PATH=/Applications/Xcode_15.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk - elif [ "${{ matrix.build.target_triple }}" = "x86_64-apple-darwin" ]; then - export APPLE_SDK_PATH=/Applications/Xcode_15.2.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk - else - echo "unhandled target triple: ${{ matrix.build.target_triple }}" - exit 1 - fi - - ./build-macos.py --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --options ${{ matrix.build.options }} - - - name: Upload Distributions - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }}-${{ matrix.build.options }} - path: dist/* - - - uses: actions/checkout@v4 - with: - repository: 'phracker/MacOSX-SDKs' - ref: master - path: macosx-sdks - - - name: Validate Distribution - run: | - chmod +x build/pythonbuild - - build/pythonbuild validate-distribution --macos-sdks-path macosx-sdks --run dist/*.tar.zst diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml deleted file mode 100644 index 622f49e8..00000000 --- a/.github/workflows/linux.yml +++ /dev/null @@ -1,1269 +0,0 @@ -name: Linux Python build - -on: - push: - branches: [main] - pull_request: - -concurrency: - group: ${{ github.workflow }}-${{ github.ref_name }}-${{ github.event.pull_request.number || github.sha }} - cancel-in-progress: ${{ github.event_name == 'pull_request' }} - -jobs: - pythonbuild: - runs-on: ubuntu-22.04 - steps: - - name: Install System Dependencies - run: | - sudo apt update - sudo apt install -y --no-install-recommends libssl-dev pkg-config - - - uses: actions/checkout@v4 - - - name: Emit rustc version - run: | - rustc --version > .rustc-version - - - uses: actions/cache@v4 - with: - path: | - ~/.cargo/registry - ~/.cargo/git - target - key: ${{ runner.os }}-pythonbuild-${{ hashFiles('Cargo.lock', '.rustc-version') }} - - - name: Build - run: | - cargo build --release - - - name: Upload pythonbuild Executable - uses: actions/upload-artifact@v4 - with: - name: pythonbuild - path: target/release/pythonbuild - - image: - strategy: - fail-fast: false - matrix: - image: - - build - - build.cross - - gcc - - xcb - - xcb.cross - runs-on: ubuntu-22.04 - permissions: - packages: write - steps: - - uses: actions/checkout@v4 - - - name: Install Python - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Generate Dockerfiles - run: | - ./build-linux.py --make-target empty - repo_name=$(echo "${GITHUB_REPOSITORY,,}" | sed 's|\.|_|g') - git_ref_name=$(echo "${GITHUB_REF_NAME,,}" | sed 's|[^a-z0-9_-]|_|g') - echo "REPO_NAME=${repo_name}" >> "${GITHUB_ENV}" - echo "GIT_REF_NAME=${git_ref_name}" >> "${GITHUB_ENV}" - - - name: Build Image - id: build-image - uses: docker/build-push-action@v5 - with: - context: . - file: build/${{ matrix.image }}.Dockerfile - labels: org.opencontainers.image.source=https://github.com/${{ env.REPO_NAME }} - # Cache from/to the current branch of the current repo as the primary cache key. - # Cache from the default branch of the current repo so branches can have cache hits. - # Cache from the default branch of the canonical repo so forks can have cache hits. - # Ignore errors on cache writes so CI of forks works without a valid GHCR config. - cache-from: | - type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.image }}-${{ env.GIT_REF_NAME }} - type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.image }}-main - type=registry,ref=ghcr.io/indygreg/python-build-standalone:${{ matrix.image }}-main - cache-to: | - type=registry,ref=ghcr.io/${{ env.REPO_NAME }}:${{ matrix.image }}-${{ env.GIT_REF_NAME }},ignore-error=true - outputs: | - type=docker,dest=build/image-${{ matrix.image }}.tar - - - name: Compress Image - run: | - echo ${{ steps.build-image.outputs.imageid }} > build/image-${{ matrix.image }} - zstd -v -T0 -6 --rm build/image-*.tar - - - name: Upload Docker Image - uses: actions/upload-artifact@v4 - with: - name: image-${{ matrix.image }} - path: build/image-* - - build: - strategy: - fail-fast: false - matrix: - build: - # Cross-compiles can't do PGO. - - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'noopt' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'lto' - - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'noopt' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'lto' - - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'noopt' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'lto' - - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'noopt' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'lto' - - # Cross-compiles can't do PGO and require Python 3.9. - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.9' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.9' - options: 'lto' - - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.10' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.10' - options: 'lto' - - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.11' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.11' - options: 'lto' - - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.12' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.12' - options: 'lto' - - # Cross-compiles can't do PGO and require Python 3.9. - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.9' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.9' - options: 'lto' - - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.10' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.10' - options: 'lto' - - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.11' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.11' - options: 'lto' - - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.12' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.12' - options: 'lto' - - # Cross-compiles can't do PGO and require Python 3.9. - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'noopt' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'lto' - - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'noopt' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'lto' - - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'noopt' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'lto' - - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'noopt' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'lto' - - # Cross-compiles can't do PGO and require Python 3.9. - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'noopt' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'lto' - - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'noopt' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'lto' - - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'noopt' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'lto' - - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'noopt' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'lto' - - # Cross-compiles can't do PGO and require Python 3.9. - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'noopt' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'lto' - - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'noopt' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'lto' - - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'noopt' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'lto' - - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'noopt' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'lto' - - # Cross-compiles can't do PGO and require Python 3.9. - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'noopt' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'lto' - - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'noopt' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'lto' - - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'noopt' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'lto' - - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'noopt' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'lto' - - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'pgo' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'pgo' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'pgo' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'pgo' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'pgo' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'pgo' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'pgo' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'pgo' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'pgo' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'pgo' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'pgo' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'pgo+lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'pgo' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'pgo+lto' - run: true - - # GitHub Actions runners don't support x86-64-v4 so we can't PGO. - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.9' - options: 'lto' - - # GitHub Actions runners don't support x86-64-v4 so we can't PGO. - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.10' - options: 'lto' - - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.11' - options: 'lto' - - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.12' - options: 'lto' - - # musl doesn't support PGO. - - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.9' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.9' - options: 'noopt' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.9' - options: 'lto' - run: true - - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.10' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.10' - options: 'noopt' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.10' - options: 'lto' - run: true - - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.11' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.11' - options: 'noopt' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.11' - options: 'lto' - run: true - - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.12' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.12' - options: 'noopt' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.12' - options: 'lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.9' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.9' - options: 'noopt' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.9' - options: 'lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.10' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.10' - options: 'noopt' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.10' - options: 'lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.11' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.11' - options: 'noopt' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.11' - options: 'lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.12' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.12' - options: 'noopt' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.12' - options: 'lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.9' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.9' - options: 'noopt' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.9' - options: 'lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.10' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.10' - options: 'noopt' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.10' - options: 'lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.11' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.11' - options: 'noopt' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.11' - options: 'lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.12' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.12' - options: 'noopt' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.12' - options: 'lto' - run: true - - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.9' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.9' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.9' - options: 'lto' - - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.10' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.10' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.10' - options: 'lto' - - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.11' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.11' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.11' - options: 'lto' - - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.12' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.12' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.12' - options: 'lto' - - needs: - - pythonbuild - - image - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Install Python - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - - name: Download pythonbuild - uses: actions/download-artifact@v4 - with: - name: pythonbuild - path: build - - - name: Download images - uses: actions/download-artifact@v4 - with: - pattern: image-* - path: build - merge-multiple: true - - - name: Load Docker Images - run: | - for f in build/image-*.tar.zst; do - echo "decompressing $f" - zstd -d --rm ${f} - done - - for f in build/image-*.tar; do - echo "loading $f" - docker load --input $f - done - - - name: Build - run: | - # Do empty target so all generated files are touched. - ./build-linux.py --make-target empty - - # Touch mtimes of all images so they are newer than autogenerated files above. - touch build/image-* - - ./build-linux.py --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --options ${{ matrix.build.options }} - - - name: Validate Distribution - run: | - chmod +x build/pythonbuild - - if [ -n "${{matrix.build.run}}" ]; then - EXTRA_ARGS="--run" - fi - - build/pythonbuild validate-distribution ${EXTRA_ARGS} dist/*.tar.zst - - - name: Upload Distribution - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }}-${{ matrix.build.options }} - path: dist/* - - - - # GitHub enforces a limit of 256 entries per matrix, which we exceeded above - # so the CPython 3.13 jobs are split out - build-313: - strategy: - fail-fast: false - matrix: - build: - - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'noopt' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'lto' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+noopt' - - target_triple: 'aarch64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+lto' - - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.13' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.13' - options: 'lto' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.13' - options: 'freethreaded+noopt' - - target_triple: 'armv7-unknown-linux-gnueabi' - py: 'cpython-3.13' - options: 'freethreaded+lto' - - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.13' - options: 'noopt' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.13' - options: 'lto' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.13' - options: 'freethreaded+noopt' - - target_triple: 'armv7-unknown-linux-gnueabihf' - py: 'cpython-3.13' - options: 'freethreaded+lto' - - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'noopt' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'lto' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+noopt' - - target_triple: 'mips-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+lto' - - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'noopt' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'lto' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+noopt' - - target_triple: 'mipsel-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+lto' - - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'noopt' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'lto' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+noopt' - - target_triple: 's390x-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+lto' - - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'noopt' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'lto' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+noopt' - - target_triple: 'ppc64le-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+lto' - - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'pgo' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'pgo+lto' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+debug' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+pgo' - run: true - - target_triple: 'x86_64-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+pgo+lto' - run: true - - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'pgo' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'pgo+lto' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+pgo' - run: true - - target_triple: 'x86_64_v2-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+pgo+lto' - run: true - - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'pgo' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'pgo+lto' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+pgo' - run: true - - target_triple: 'x86_64_v3-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+pgo+lto' - run: true - - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.13' - options: 'debug' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.13' - options: 'noopt' - run: true - - target_triple: 'x86_64-unknown-linux-musl' - py: 'cpython-3.13' - options: 'lto' - run: true - # TODO: Free-threaded musl builds are blocked by upgrading LLVM 14 -> 18. - # - target_triple: 'x86_64-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+debug' - # run: true - # - target_triple: 'x86_64-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+noopt' - # run: true - # - target_triple: 'x86_64-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+lto' - # run: true - - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.13' - options: 'debug' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.13' - options: 'noopt' - run: true - - target_triple: 'x86_64_v2-unknown-linux-musl' - py: 'cpython-3.13' - options: 'lto' - run: true - # TODO: Free-threaded musl builds are blocked by upgrading LLVM 14 -> 18. - # - target_triple: 'x86_64_v2-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+debug' - # run: true - # - target_triple: 'x86_64_v2-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+noopt' - # run: true - # - target_triple: 'x86_64_v2-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+lto' - # run: true - - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'lto' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+debug' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+noopt' - - target_triple: 'x86_64_v4-unknown-linux-gnu' - py: 'cpython-3.13' - options: 'freethreaded+lto' - - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.13' - options: 'debug' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.13' - options: 'noopt' - run: true - - target_triple: 'x86_64_v3-unknown-linux-musl' - py: 'cpython-3.13' - options: 'lto' - run: true - # TODO: Free-threaded musl builds are blocked by upgrading LLVM 14 -> 18. - # - target_triple: 'x86_64_v3-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+debug' - # run: true - # - target_triple: 'x86_64_v3-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+noopt' - # run: true - # - target_triple: 'x86_64_v3-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+lto' - # run: true - - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.13' - options: 'debug' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.13' - options: 'noopt' - - target_triple: 'x86_64_v4-unknown-linux-musl' - py: 'cpython-3.13' - options: 'lto' - # TODO: Free-threaded musl builds are blocked by upgrading LLVM 14 -> 18. - # - target_triple: 'x86_64_v4-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+debug' - # - target_triple: 'x86_64_v4-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+noopt' - # - target_triple: 'x86_64_v4-unknown-linux-musl' - # py: 'cpython-3.13' - # options: 'freethreaded+lto' - - needs: - - pythonbuild - - image - runs-on: ubuntu-22.04 - - # The above should remain an exact duplicate of the `build` job - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Install Python - uses: actions/setup-python@v5 - with: - python-version: '3.11' - - - name: Download pythonbuild - uses: actions/download-artifact@v4 - with: - name: pythonbuild - path: build - - - name: Download images - uses: actions/download-artifact@v4 - with: - pattern: image-* - path: build - merge-multiple: true - - - name: Load Docker Images - run: | - for f in build/image-*.tar.zst; do - echo "decompressing $f" - zstd -d --rm ${f} - done - - for f in build/image-*.tar; do - echo "loading $f" - docker load --input $f - done - - - name: Build - run: | - # Do empty target so all generated files are touched. - ./build-linux.py --make-target empty - - # Touch mtimes of all images so they are newer than autogenerated files above. - touch build/image-* - - ./build-linux.py --target-triple ${{ matrix.build.target_triple }} --python ${{ matrix.build.py }} --options ${{ matrix.build.options }} - - - name: Validate Distribution - run: | - chmod +x build/pythonbuild - - if [ -n "${{matrix.build.run}}" ]; then - EXTRA_ARGS="--run" - fi - - build/pythonbuild validate-distribution ${EXTRA_ARGS} dist/*.tar.zst - - - name: Upload Distribution - uses: actions/upload-artifact@v4 - with: - name: ${{ matrix.build.py }}-${{ matrix.build.target_triple }}-${{ matrix.build.options }} - path: dist/* diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index ef9e1f62..3277b9f3 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -50,6 +50,7 @@ jobs: vcvars: - 'vcvars32.bat' - 'vcvars64.bat' + - 'vcvarsamd64_arm64.bat' options: - 'pgo' diff --git a/cpython-windows/build.py b/cpython-windows/build.py index b3d61272..00cd522d 100644 --- a/cpython-windows/build.py +++ b/cpython-windows/build.py @@ -438,6 +438,8 @@ def hack_props( suffix = b"-x64" elif arch == "win32": suffix = b"" + elif arch == "arm64": + suffix = b"" else: raise Exception("unhandled architecture: %s" % arch) @@ -917,9 +919,11 @@ def build_openssl_for_arch( elif arch == "amd64": configure = "VC-WIN64A" prefix = "64" + elif arch == "arm64": + configure = "VC-WIN64-ARM" + prefix = "arm64" else: - print("invalid architecture: %s" % arch) - sys.exit(1) + raise Exception("unhandled architecture: %s" % arch) # The official CPython OpenSSL builds hack ms/uplink.c to change the # ``GetModuleHandle(NULL)`` invocation to load things from _ssl.pyd @@ -967,6 +971,12 @@ def build_openssl_for_arch( log("copying %s to %s" % (source, dest)) shutil.copyfile(source, dest) + # Copy `applink.c` to the include directory. + source_applink = source_root / "ms" / "applink.c" + dest_applink = install_root / "include" / "openssl" / "applink.c" + log("copying %s to %s" % (source_applink, dest_applink)) + shutil.copyfile(source_applink, dest_applink) + def build_openssl( entry: str, @@ -988,6 +998,7 @@ def build_openssl( root_32 = td / "x86" root_64 = td / "x64" + root_arm64 = td / "arm64" if arch == "x86": root_32.mkdir() @@ -1011,13 +1022,28 @@ def build_openssl( root_64, jom_archive=jom_archive, ) + elif arch == "arm64": + root_arm64.mkdir() + build_openssl_for_arch( + perl_path, + "arm64", + openssl_archive, + openssl_version, + nasm_archive, + root_arm64, + jom_archive=jom_archive, + ) else: - raise ValueError("unhandled arch: %s" % arch) + raise Exception("unhandled architecture: %s" % arch) install = td / "out" if arch == "x86": shutil.copytree(root_32 / "install" / "32", install / "openssl" / "win32") + elif arch == "arm64": + shutil.copytree( + root_arm64 / "install" / "arm64", install / "openssl" / "arm64" + ) else: shutil.copytree(root_64 / "install" / "64", install / "openssl" / "amd64") @@ -1088,9 +1114,14 @@ def build_libffi( if arch == "x86": args.append("-x86") artifacts_path = ffi_source_path / "i686-pc-cygwin" - else: + elif arch == "arm64": + args.append("-arm64") + artifacts_path = ffi_source_path / "aarch64-w64-cygwin" + elif arch == "amd64": args.append("-x64") artifacts_path = ffi_source_path / "x86_64-w64-cygwin" + else: + raise Exception("unhandled architecture: %s" % arch) subprocess.run(args, env=env, check=True) @@ -1460,8 +1491,11 @@ def build_cpython( elif arch == "x86": build_platform = "win32" build_directory = "win32" + elif arch == "arm64": + build_platform = "arm64" + build_directory = "arm64" else: - raise ValueError("unhandled arch: %s" % arch) + raise Exception("unhandled architecture: %s" % arch) with tempfile.TemporaryDirectory(prefix="python-build-") as td: td = pathlib.Path(td) @@ -1491,7 +1525,7 @@ def build_cpython( # We need all the OpenSSL library files in the same directory to appease # install rules. - openssl_arch = {"amd64": "amd64", "x86": "win32"}[arch] + openssl_arch = {"amd64": "amd64", "x86": "win32", "arm64": "arm64"}[arch] openssl_root = td / "openssl" / openssl_arch openssl_bin_path = openssl_root / "bin" openssl_lib_path = openssl_root / "lib" @@ -1930,9 +1964,14 @@ def main() -> None: if os.environ.get("Platform") == "x86": target_triple = "i686-pc-windows-msvc" arch = "x86" - else: + elif os.environ.get("Platform") == "arm64": + target_triple = "aarch64-pc-windows-msvc" + arch = "arm64" + elif os.environ.get("Platform") == "x64": target_triple = "x86_64-pc-windows-msvc" arch = "amd64" + else: + raise Exception("unhandled architecture: %s" % os.environ.get("Platform")) # TODO need better dependency checking.