Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[v5] Wheel build fixes: manylinux1, trigger upload on release, Linux AArch64 #2443

Merged
merged 4 commits into from
Aug 19, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions .github/workflows/python-publish-release.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: RELEASE BUILD - PyPI 📦 Distribution

on: [push, pull_request, workflow_dispatch]
on: [push, pull_request, release, workflow_dispatch]

jobs:
build_wheels:
Expand All @@ -26,7 +26,7 @@ jobs:
uses: pypa/[email protected]
env:
CIBW_ARCHS_MACOS: "x86_64 universal2 arm64"
CIBW_ARCHS_LINUX: "x86_64 i686" # ppc64le s390x really slow
CIBW_ARCHS_LINUX: "x86_64 i686 aarch64" # ppc64le s390x really slow
CIBW_ARCHS_WINDOWS: "AMD64" # ARM64 Seems ARM64 will rebuild amd64 wheel for unknow reason.
CIBW_BUILD: "cp38-* cp39-* cp310-* cp311-* cp312-*"
CIBW_SKIP: ""
Expand Down Expand Up @@ -69,17 +69,22 @@ jobs:
publish:
needs: [build_wheels]
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags')
if: github.event_name == 'release' && github.event.prerelease == false && github.event.action == 'published'
permissions:
id-token: write
steps:
- uses: actions/download-artifact@v4
with:
merge-multiple: true
path: dist

- name: Show downloaded artifacts
run: ls -laR dist

- name: Publish distribution 📦 to PyPI
if: ${{ success() }}
uses: pypa/gh-action-pypi-publish@release/v1
with:
verbose: true
user: __token__
password: ${{ secrets.pypi_pass }}
22 changes: 12 additions & 10 deletions bindings/python/setup.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/usr/bin/env python
#!/usr/bin/env python3

import glob
import os
Expand Down Expand Up @@ -135,6 +135,7 @@ def build_libraries():
os.chdir(BUILD_DIR)

# platform description refers at https://docs.python.org/3/library/sys.html#sys.platform
# Use cmake for both Darwin and Windows since it can generate fat binaries
if SYSTEM == "win32" or SYSTEM == 'darwin':
# Windows build: this process requires few things:
# - CMake + MSVC installed
Expand Down Expand Up @@ -203,18 +204,19 @@ def run(self):
print("Proper 'develop' support unavailable.")

if 'bdist_wheel' in sys.argv and '--plat-name' not in sys.argv:
# Inject the platform identifier into argv.
# Platform tags are described here:
# https://packaging.python.org/en/latest/specifications/platform-compatibility-tags
#
# I couldn't really find out in time why we need to inject the platform here?
# The cibuildwheel doesn't need it for the Windows job. But for Mac and Linux.
# This here is very dirty and will maybe break in the future.
# Sorry if this is the case and you read this.
# See: https://github.com/capstone-engine/capstone/issues/2445
idx = sys.argv.index('bdist_wheel') + 1
sys.argv.insert(idx, '--plat-name')
name = get_platform()
if 'linux' in name:
# linux_* platform tags are disallowed because the python ecosystem is fubar
# linux builds should be built in the centos 5 vm for maximum compatibility
# see https://github.com/pypa/manylinux
# see also https://github.com/angr/angr-dev/blob/master/bdist.sh
sys.argv.insert(idx + 1, 'manylinux1_' + platform.machine())
else:
# https://www.python.org/dev/peps/pep-0425/
sys.argv.insert(idx + 1, name.replace('.', '_').replace('-', '_'))
sys.argv.insert(idx + 1, name.replace('.', '_').replace('-', '_'))

setup(
provides=['capstone'],
Expand Down
3 changes: 2 additions & 1 deletion suite/check_wheel_bin_arch.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
filename = {
"macosx": "libcapstone.dylib",
"manylinux": "libcapstone.so",
"musllinux": "libcapstone.so",
"win": "capstone.dll",
}

Expand All @@ -45,7 +46,7 @@
continue
wheel_seen = True
target = re.search(r"py3-none-(.+).whl", f"{f}").group(1)
platform = re.search("^(win|manylinux|macosx)", target).group(1)
platform = re.search("^(win|manylinux|musllinux|macosx)", target).group(1)

arch = re.search(
"(universal2|x86_64|arm64|aarch64|i686|win32|amd64)$", target
Expand Down
Loading