mirror of
https://github.com/YosysHQ/yosys
synced 2025-04-23 17:15:33 +00:00
Pyosys Wheels
* Created `setup.py`: Python package manifest to build `pyosys` wheels with a custom extension to build and include `libyosys.so` using Make * `.gitignore`: Added byproducts of the Python wheel build process * `Makefile`: Added `-undefined dynamic_lookup` to `libyosys.so` so missing symbols can be resolved by importing into a Python interpreter * `kernel/yosys.cc`: Gated `PyImport_AppendInittab` with `!Py_IsInitialized`; as of Python 3.12, the interpreter is already initialized and `PyImport_AppendInittab` would cause an exception to be raised * Created `wheels.yml`: CI workflow for building wheels for CPython on: * Linux (glibc, musl) and Darwin * x86-64 and arm64
This commit is contained in:
parent
1f517d6c7d
commit
407343a7a1
5 changed files with 224 additions and 6 deletions
111
.github/workflows/wheels.yml
vendored
Normal file
111
.github/workflows/wheels.yml
vendored
Normal file
|
@ -0,0 +1,111 @@
|
|||
name: Build Wheels for PyPI
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
# tags: ["yosys-*"]
|
||||
jobs:
|
||||
build_wheels:
|
||||
strategy:
|
||||
matrix:
|
||||
os: [
|
||||
# You can't cross-compile on Linux, so might as well do the emulated
|
||||
# workload on its own
|
||||
{
|
||||
name: "Ubuntu 22.04",
|
||||
family: "linux",
|
||||
runner: "ubuntu-22.04",
|
||||
archs: "x86_64",
|
||||
},
|
||||
{
|
||||
name: "Ubuntu 22.04",
|
||||
family: "linux",
|
||||
runner: "ubuntu-22.04",
|
||||
archs: "aarch64",
|
||||
},
|
||||
# While you can cross-compile on macOS, this is less of a headache
|
||||
{
|
||||
name: "macOS 13",
|
||||
family: "macos",
|
||||
runner: "macos-13",
|
||||
archs: "x86_64",
|
||||
},
|
||||
{
|
||||
name: "macOS 14",
|
||||
family: "macos",
|
||||
runner: "macos-14",
|
||||
archs: "arm64",
|
||||
},
|
||||
# TODO: Make Windows Work
|
||||
# {
|
||||
# name: "Windows Server 2019",
|
||||
# family: "windows",
|
||||
# runner: "windows-2019",
|
||||
# archs: "AMD64 ARM64",
|
||||
# },
|
||||
]
|
||||
name: Build Wheels | ${{ matrix.os.name }} | ${{ matrix.os.archs }}
|
||||
runs-on: ${{ matrix.os.runner }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
submodules: true
|
||||
- if: ${{ matrix.os.family == 'linux' }}
|
||||
name: "[Linux] Set up QEMU"
|
||||
uses: docker/setup-qemu-action@v2
|
||||
- uses: actions/setup-python@v3
|
||||
- name: Get Boost Source
|
||||
run: |
|
||||
mkdir -p boost
|
||||
curl -L https://sourceforge.net/projects/boost/files/boost/1.83.0/boost_1_83_0.tar.bz2 | tar --strip-components=1 -xjC boost
|
||||
- name: Seed Makefile.bak
|
||||
# For every sed, a .bak is created so it can be copied over Makefile to
|
||||
# rever the change for the next Python version to be built.
|
||||
#
|
||||
# This creates a .bak for the first Python version's cp to consume.
|
||||
run: |
|
||||
cp Makefile Makefile.bak
|
||||
- if: ${{ matrix.os.family == 'macos' }}
|
||||
name: "[macOS] Flex/Bison"
|
||||
run: |
|
||||
brew install flex bison
|
||||
echo "PATH=$(brew --prefix flex)/bin:$PATH" >> $GITHUB_ENV
|
||||
echo "PATH=$(brew --prefix bison)/bin:$PATH" >> $GITHUB_ENV
|
||||
- if: ${{ matrix.os.family == 'macos' && matrix.os.archs == 'arm64' }}
|
||||
name: "[macOS/arm64] Install Python 3.8 (see: https://cibuildwheel.pypa.io/en/stable/faq/#macos-building-cpython-38-wheels-on-arm64)"
|
||||
uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: 3.8
|
||||
- name: Build wheels
|
||||
uses: pypa/cibuildwheel@v2.20.0
|
||||
env:
|
||||
# Explaining the build steps:
|
||||
# 1. Revert previous seds (if any)
|
||||
# 2. Delete the libboost static archives from previous builds (if any)
|
||||
# 3. Navigate to boost source extracted in previous GHA step
|
||||
# 4-5. Build Boost against current version of Python, only for
|
||||
# static linkage
|
||||
# (Boost is statically linked because system boost packages
|
||||
# wildly vary in versions, including the libboost_python3
|
||||
# version)
|
||||
# 6-7. Return to package directory and sed the Makefile to point at
|
||||
# the newly compiled libboost_python
|
||||
CIBW_SKIP: pp* # The Makefile requires python3-config which is not in pypy
|
||||
CIBW_ARCHS: ${{ matrix.os.archs }}
|
||||
CIBW_BUILD_VERBOSITY: "1"
|
||||
CIBW_BEFORE_ALL_LINUX: yum install -y libffi-devel flex bison || apk add libffi-dev flex bison
|
||||
CIBW_BEFORE_ALL_MAC: brew install libffi
|
||||
CIBW_BEFORE_BUILD: |
|
||||
cp Makefile.bak Makefile &&\
|
||||
cd ./boost &&\
|
||||
rm -rf ./pfx &&\
|
||||
./bootstrap.sh --prefix=./pfx &&\
|
||||
./b2 --prefix=./pfx --with-filesystem --with-system --with-python cxxflags="$(python3-config --includes) -std=c++17 -fPIC" cflags="$(python3-config --includes) -fPIC" link=static variant=release install &&\
|
||||
ls ./pfx/lib/libboost_python*.a &&\
|
||||
cd {package} &&\
|
||||
sed -i'.bak' -e "1i\\
|
||||
LINKFLAGS = -L./boost/pfx/lib" -e "1i\\
|
||||
CXXFLAGS = -I./boost/pfx/include" -e "s@BOOST_PYTHON_LIB ?=@BOOST_PYTHON_LIB = $(ls ./boost/pfx/lib/libboost_python*.a)\nTrash =@" Makefile
|
||||
- uses: actions/upload-artifact@v3
|
||||
with:
|
||||
path: ./dist/*.whl
|
Loading…
Add table
Add a link
Reference in a new issue