diff --git a/cibuildwheel/__main__.py b/cibuildwheel/__main__.py index b3aaacf2..1e5b249b 100644 --- a/cibuildwheel/__main__.py +++ b/cibuildwheel/__main__.py @@ -159,6 +159,7 @@ def main(): if platform == 'linux': manylinux_x86_64_image = os.environ.get('CIBW_MANYLINUX_X86_64_IMAGE', 'manylinux2010') manylinux_i686_image = os.environ.get('CIBW_MANYLINUX_I686_IMAGE', 'manylinux2010') + manylinux_pypy_x86_64_image = os.environ.get('CIBW_MANYLINUX_PYPY_X86_64_IMAGE', 'manylinux2010') default_manylinux_images_x86_64 = {'manylinux1': 'quay.io/pypa/manylinux1_x86_64', 'manylinux2010': 'quay.io/pypa/manylinux2010_x86_64', @@ -166,10 +167,12 @@ def main(): default_manylinux_images_i686 = {'manylinux1': 'quay.io/pypa/manylinux1_i686', 'manylinux2010': 'quay.io/pypa/manylinux2010_i686', 'manylinux2014': 'quay.io/pypa/manylinux2014_i686'} + default_manylinux_images_pypy_x86_64 = {'manylinux2010': 'pypywheels/manylinux2010-pypy_x86_64'} build_options.update( manylinux_images={'x86_64': default_manylinux_images_x86_64.get(manylinux_x86_64_image) or manylinux_x86_64_image, - 'i686': default_manylinux_images_i686.get(manylinux_i686_image) or manylinux_i686_image}, + 'i686': default_manylinux_images_i686.get(manylinux_i686_image) or manylinux_i686_image, + 'pypy_x86_64': default_manylinux_images_pypy_x86_64.get(manylinux_pypy_x86_64_image) or manylinux_pypy_x86_64_image}, ) elif platform == 'macos': pass diff --git a/cibuildwheel/linux.py b/cibuildwheel/linux.py index 24a034d6..e4e60913 100644 --- a/cibuildwheel/linux.py +++ b/cibuildwheel/linux.py @@ -27,6 +27,8 @@ def get_python_configurations(build_selector): PythonConfiguration(identifier='cp36-manylinux_i686', path='/opt/python/cp36-cp36m'), PythonConfiguration(identifier='cp37-manylinux_i686', path='/opt/python/cp37-cp37m'), PythonConfiguration(identifier='cp38-manylinux_i686', path='/opt/python/cp38-cp38'), + PythonConfiguration(identifier='pp271-manylinux_pypy_x86_64', path='/opt/python/pp271-pypy_41'), + PythonConfiguration(identifier='pp371-manylinux_pypy_x86_64', path='/opt/python/pp371-pypy3_71'), ] # skip builds as required @@ -47,6 +49,7 @@ def build(project_dir, output_dir, test_command, test_requires, test_extras, bef platforms = [ ('manylinux_x86_64', manylinux_images['x86_64']), ('manylinux_i686', manylinux_images['i686']), + ('manylinux_pypy_x86_64', manylinux_images['pypy_x86_64']), ] for platform_tag, docker_image in platforms: diff --git a/test/shared/utils.py b/test/shared/utils.py index 4d6b96d0..beb2f357 100644 --- a/test/shared/utils.py +++ b/test/shared/utils.py @@ -82,16 +82,21 @@ def expected_wheels(package_name, package_version, manylinux_versions=['manylinu python_abi_tags = ['cp27-cp27m', 'cp35-cp35m', 'cp36-cp36m', 'cp37-cp37m', 'cp38-cp38'] if platform == 'linux': python_abi_tags.append('cp27-cp27mu') # python 2.7 has 2 different ABI on manylinux - platform_tags = [] - for architecture in ['x86_64', 'i686']: - for manylinux_version in manylinux_versions: - platform_tags.append('{manylinux_version}_{architecture}'.format( - manylinux_version=manylinux_version, architecture=architecture - )) + # Starting out by adding PyPy support on Linux + python_abi_tags.extend(['pp271-pypy_41', 'pp371-pypy3_71']) + cp_architectures = ['x86_64', 'i686'] + pp_architectures = ['x86_64'] def get_platform_tags(python_abi_tag): - return platform_tags - + if python_abi_tag.startswith('pp'): + architectures = pp_architectures + else: + architectures = cp_architectures + return ['{manylinux_version}_{architecture}'.format( + manylinux_version=manylinux_version, architecture=architecture + ) + for manylinux_version in manylinux_versions + for architecture in architectures] elif platform == 'windows': def get_platform_tags(python_abi_tag):