Fix building wheels for Linux (#240)
This commit is contained in:
19
.github/workflows/build-wheels.yaml
vendored
19
.github/workflows/build-wheels.yaml
vendored
@@ -41,7 +41,24 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
ls -lh ./wheelhouse/
|
ls -lh ./wheelhouse/
|
||||||
|
|
||||||
ls -lh ./wheelhouse/*.whl
|
- name: Install patchelf
|
||||||
|
if: matrix.os == 'ubuntu-latest'
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
sudo apt-get update -q
|
||||||
|
sudo apt-get install -q -y patchelf
|
||||||
|
patchelf --help
|
||||||
|
|
||||||
|
- name: Patch wheels
|
||||||
|
shell: bash
|
||||||
|
if: matrix.os == 'ubuntu-latest'
|
||||||
|
run: |
|
||||||
|
mkdir ./wheels
|
||||||
|
sudo ./scripts/wheel/patch_wheel.py --in-dir ./wheelhouse --out-dir ./wheels
|
||||||
|
|
||||||
|
ls -lh ./wheels/
|
||||||
|
rm -rf ./wheelhouse
|
||||||
|
mv ./wheels ./wheelhouse
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v2
|
- uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
|
cmake_minimum_required(VERSION 3.13 FATAL_ERROR)
|
||||||
project(sherpa-onnx)
|
project(sherpa-onnx)
|
||||||
|
|
||||||
set(SHERPA_ONNX_VERSION "1.6.0")
|
set(SHERPA_ONNX_VERSION "1.6.1")
|
||||||
|
|
||||||
# Disable warning about
|
# Disable warning about
|
||||||
#
|
#
|
||||||
|
|||||||
90
scripts/wheel/patch_wheel.py
Executable file
90
scripts/wheel/patch_wheel.py
Executable file
@@ -0,0 +1,90 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# Copyright 2023 Xiaomi Corp. (authors: Fangjun Kuang)
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import glob
|
||||||
|
import shutil
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
|
||||||
|
def get_args():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument(
|
||||||
|
"--in-dir",
|
||||||
|
type=Path,
|
||||||
|
required=True,
|
||||||
|
help="Input directory.",
|
||||||
|
)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"--out-dir",
|
||||||
|
type=Path,
|
||||||
|
required=True,
|
||||||
|
help="Output directory.",
|
||||||
|
)
|
||||||
|
return parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
def process(out_dir: Path, whl: Path):
|
||||||
|
tmp_dir = out_dir / "tmp"
|
||||||
|
subprocess.check_call(f"unzip {whl} -d {tmp_dir}", shell=True)
|
||||||
|
if "cp37" in str(whl):
|
||||||
|
py_version = "3.7"
|
||||||
|
elif "cp38" in str(whl):
|
||||||
|
py_version = "3.8"
|
||||||
|
elif "cp39" in str(whl):
|
||||||
|
py_version = "3.9"
|
||||||
|
elif "cp310" in str(whl):
|
||||||
|
py_version = "3.10"
|
||||||
|
elif "cp311" in str(whl):
|
||||||
|
py_version = "3.11"
|
||||||
|
else:
|
||||||
|
py_version = "3.12"
|
||||||
|
|
||||||
|
rpath_list = [
|
||||||
|
f"$ORIGIN/../lib/python{py_version}/site-packages/sherpa_onnx/lib",
|
||||||
|
f"$ORIGIN/../lib/python{py_version}/dist-packages/sherpa_onnx/lib",
|
||||||
|
#
|
||||||
|
f"$ORIGIN/../lib/python{py_version}/site-packages/sherpa_onnx/lib64",
|
||||||
|
f"$ORIGIN/../lib/python{py_version}/dist-packages/sherpa_onnx/lib64",
|
||||||
|
#
|
||||||
|
f"$ORIGIN/../lib/python{py_version}/site-packages/sherpa_onnx.libs",
|
||||||
|
]
|
||||||
|
rpaths = ":".join(rpath_list)
|
||||||
|
|
||||||
|
for filename in glob.glob(
|
||||||
|
f"{tmp_dir}/sherpa_onnx-*data/data/bin/*", recursive=True
|
||||||
|
):
|
||||||
|
print(filename)
|
||||||
|
existing_rpath = (
|
||||||
|
subprocess.check_output(["patchelf", "--print-rpath", filename])
|
||||||
|
.decode()
|
||||||
|
.strip()
|
||||||
|
)
|
||||||
|
target_rpaths = rpaths + ":" + existing_rpath
|
||||||
|
subprocess.check_call(
|
||||||
|
f"patchelf --force-rpath --set-rpath '{target_rpaths}' {filename}",
|
||||||
|
shell=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
outwheel = Path(shutil.make_archive(whl, "zip", tmp_dir))
|
||||||
|
Path(outwheel).rename(out_dir / whl.name)
|
||||||
|
|
||||||
|
shutil.rmtree(tmp_dir)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
args = get_args()
|
||||||
|
print(args)
|
||||||
|
in_dir = args.in_dir
|
||||||
|
out_dir = args.out_dir
|
||||||
|
out_dir.mkdir(exist_ok=True, parents=True)
|
||||||
|
|
||||||
|
for whl in in_dir.glob("*.whl"):
|
||||||
|
process(out_dir, whl)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user