-
Notifications
You must be signed in to change notification settings - Fork 17
141 lines (124 loc) · 5.33 KB
/
Copy pathwheels.yaml
File metadata and controls
141 lines (124 loc) · 5.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
name: Wheels
on:
workflow_dispatch:
push:
tags:
- "v*.*.*"
- "!v*.*.*-*"
permissions:
contents: write
jobs:
build_wheels:
name: Build wheels on ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-22.04, windows-2022, macos-14, macos-15]
steps:
- uses: actions/checkout@v6
with:
submodules: "recursive"
# Used to host cibuildwheel.
- uses: actions/setup-python@v6
with:
python-version: "3.9"
- name: Build wheels
uses: pypa/cibuildwheel@v3.4.1
env:
# Keep repair disabled by default for non-Linux platforms in this job.
CIBW_REPAIR_WHEEL_COMMAND: ""
# Linux needs auditwheel repair so manylinux and musllinux wheels are
# published with distinct platform tags instead of generic linux tags.
CIBW_REPAIR_WHEEL_COMMAND_LINUX: "LD_LIBRARY_PATH=/project/ggml/lib auditwheel repair -w {dest_dir} {wheel}"
# cibuildwheel v3 defaults to manylinux_2_28 images whose current
# GCC toolchain emits symbols newer than the policy allows.
CIBW_MANYLINUX_X86_64_IMAGE: "manylinux2014"
# The release wheel is tagged py3-none, so one build per platform
# covers all supported Python versions and avoids duplicate names.
CIBW_BUILD_LINUX: "cp38-*"
CIBW_BUILD_MACOS: "cp39-*"
CIBW_BUILD_WINDOWS: "cp39-*"
# Skip cibuildwheel's default i686 sidecar and keep release wheels on
# a portable CPU baseline instead of the hosted runner's native flags.
CIBW_ARCHS_LINUX: "auto64"
CIBW_ARCHS_WINDOWS: "AMD64"
CIBW_ENVIRONMENT_LINUX: CMAKE_ARGS="-DGGML_NATIVE=off -DGGML_METAL=OFF"
CIBW_ENVIRONMENT_MACOS: CMAKE_ARGS="-DGGML_NATIVE=off -DGGML_METAL=OFF"
CIBW_ENVIRONMENT_WINDOWS: CMAKE_ARGS="-DGGML_NATIVE=off"
with:
package-dir: .
output-dir: wheelhouse
- uses: actions/upload-artifact@v7
with:
name: wheels-${{ matrix.os }}
path: ./wheelhouse/*.whl
build_wheels_arm64:
name: Build arm64 wheels
runs-on: ubuntu-24.04-arm
steps:
- uses: actions/checkout@v6
with:
submodules: "recursive"
- name: Build wheels
uses: pypa/cibuildwheel@v3.4.1
env:
CIBW_SKIP: "pp*"
CIBW_REPAIR_WHEEL_COMMAND: "LD_LIBRARY_PATH=$PWD/ggml/lib auditwheel repair -w {dest_dir} {wheel}"
CIBW_ARCHS: "aarch64"
# Keep this consistent with the x86_64 Linux release wheels.
CIBW_MANYLINUX_AARCH64_IMAGE: "manylinux2014"
# Keep native arm64 builds on a portable CPU baseline instead of
# tuning wheels to the hosted runner.
CIBW_ENVIRONMENT: CMAKE_ARGS="-DGGML_NATIVE=off -DGGML_METAL=OFF"
# The release wheel is tagged py3-none, so one build covers all
# supported Python versions and avoids duplicate wheel names.
CIBW_BUILD: "cp38-*"
with:
output-dir: wheelhouse
- name: Upload wheels as artifacts
uses: actions/upload-artifact@v7
with:
name: wheels_arm64
path: ./wheelhouse/*.whl
build_wheels_pyodide:
name: Build Pyodide wheel
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
submodules: "recursive"
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Build wheel
uses: pypa/cibuildwheel@v4.1.0
env:
CIBW_PLATFORM: "pyodide"
CIBW_BUILD: "cp314-pyodide_wasm32"
CIBW_BUILD_VERBOSITY: "1"
CIBW_REPAIR_WHEEL_COMMAND: ""
CIBW_TEST_COMMAND: >
python -c "import ggml; params = ggml.ggml_init_params(mem_size=16 * 1024 * 1024, mem_buffer=None); ctx = ggml.ggml_init(params); assert ctx is not None; x = ggml.ggml_new_tensor_1d(ctx, ggml.GGML_TYPE_F32, 1); a = ggml.ggml_new_tensor_1d(ctx, ggml.GGML_TYPE_F32, 1); b = ggml.ggml_new_tensor_1d(ctx, ggml.GGML_TYPE_F32, 1); x2 = ggml.ggml_mul(ctx, x, x); f = ggml.ggml_add(ctx, ggml.ggml_mul(ctx, a, x2), b); gf = ggml.ggml_new_graph(ctx); ggml.ggml_build_forward_expand(gf, f); ggml.ggml_set_f32(x, 2.0); ggml.ggml_set_f32(a, 3.0); ggml.ggml_set_f32(b, 4.0); ggml.ggml_graph_compute_with_ctx(ctx, gf, 1); assert ggml.ggml_get_f32_1d(f, 0) == 16.0; ggml.ggml_free(ctx); print('ggml pyodide ok', ggml.ggml_version().decode())"
CMAKE_ARGS: "-DEMSCRIPTEN_SYSTEM_PROCESSOR=wasm32 -DGGML_NATIVE=OFF -DGGML_OPENMP=OFF -DGGML_METAL=OFF -DGGML_BLAS=OFF -DGGML_CUDA=OFF -DGGML_HIP=OFF -DGGML_VULKAN=OFF -DGGML_OPENCL=OFF -DGGML_RPC=OFF -DGGML_SYCL=OFF -DGGML_CANN=OFF -DGGML_WEBGPU=OFF"
with:
output-dir: wheelhouse
- name: Upload wheels as artifacts
uses: actions/upload-artifact@v7
with:
name: wheels_pyodide
path: ./wheelhouse/*.whl
release:
name: Release
needs: [build_wheels, build_wheels_arm64, build_wheels_pyodide]
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v8
with:
merge-multiple: true
path: dist
- uses: softprops/action-gh-release@v3
with:
files: dist/*
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}