Skip to content

v7.5: Parallelism & Portability #16

v7.5: Parallelism & Portability

v7.5: Parallelism & Portability #16

Workflow file for this run

name: Release C
on:
release:
types: [published]
permissions:
contents: write
env:
BUILD_TYPE: Release
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
jobs:
create_linux_deb_package:
name: Create Debian Package
runs-on: ubuntu-24.04
env:
CC: clang-20
CXX: clang++-20
AR: llvm-ar-20
NM: llvm-nm-20
RANLIB: llvm-ranlib-20
strategy:
fail-fast: false
matrix:
include:
- arch: amd64
target: x86_64-linux-gnu
- arch: arm64
target: aarch64-linux-gnu
steps:
- name: Checkout Repository
uses: actions/checkout@v6
with:
ref: "main"
- name: Update Git Submodules
run: git submodule update --init --recursive
- name: Get Version
id: set_version
run: echo "version=$(cat VERSION)" >> $GITHUB_OUTPUT
- name: Install Dependencies
run: |
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
echo "deb http://apt.llvm.org/noble/ llvm-toolchain-noble-20 main" | sudo tee /etc/apt/sources.list.d/llvm-20.list
sudo apt-get update
sudo apt-get install -y clang-20 lld-20 make crossbuild-essential-arm64
- name: Build Shared Library
run: |
cmake -B build_release \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_C_COMPILER_TARGET=${{ matrix.target }} \
-DCMAKE_CXX_COMPILER_TARGET=${{ matrix.target }} \
-DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=lld-20" \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_PROCESSOR=${{ matrix.arch }} \
-DNK_BUILD_SHARED=ON \
-DNK_BUILD_TEST=OFF \
-DNK_BUILD_BENCH=OFF
cmake --build build_release --config Release
cp build_release/libnumkong.so \
"numkong_linux_${{ matrix.arch }}_${{ steps.set_version.outputs.version }}.so"
- name: Package Debian Archive
run: |
DEB_DIR="numkong_linux_${{ matrix.arch }}_${{ steps.set_version.outputs.version }}"
mkdir -p "${DEB_DIR}/DEBIAN"
mkdir -p "${DEB_DIR}/usr/local/lib"
mkdir -p "${DEB_DIR}/usr/local/include/numkong"
mkdir -p "${DEB_DIR}/usr/local/share/doc/numkong"
cp build_release/libnumkong.so "${DEB_DIR}/usr/local/lib/"
cp -r include/numkong/* "${DEB_DIR}/usr/local/include/numkong/"
cp LICENSE "${DEB_DIR}/usr/local/share/doc/numkong/"
cat > "${DEB_DIR}/DEBIAN/control" <<CTRL
Package: numkong
Version: ${{ steps.set_version.outputs.version }}
Maintainer: Ash Vardanian
Architecture: ${{ matrix.arch }}
Description: Portable SIMD-Accelerated Algebra for Vectors, Matrices, and Tensors
CTRL
sed -i 's/^ //' "${DEB_DIR}/DEBIAN/control"
dpkg-deb --build "${DEB_DIR}"
- name: Upload to GitHub Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload ${{ github.event.release.tag_name }} *.so *.deb --clobber
create_windows_dll_library:
name: Create DLL Library for Windows
runs-on: windows-2025
strategy:
fail-fast: false
matrix:
include:
- arch: x64
cmake_arch: x64
- arch: arm64
cmake_arch: ARM64
steps:
- name: Checkout Repository
uses: actions/checkout@v6
with:
ref: "main"
- name: Update Git Submodules
run: git submodule update --init --recursive
- name: Set Up MSVC
uses: microsoft/setup-msbuild@v3
- name: Get Version
id: set_version
shell: bash
run: echo "version=$(cat VERSION)" >> $GITHUB_OUTPUT
- name: Build Shared Library
run: |
cmake -G "Visual Studio 17 2022" -A ${{ matrix.cmake_arch }} `
-DCMAKE_BUILD_TYPE=Release `
-DNK_BUILD_SHARED=ON `
-DNK_BUILD_TEST=OFF `
-DNK_BUILD_BENCH=OFF `
-B build_release
cmake --build build_release --config Release
- name: Package Archive
shell: bash
run: |
tar -czf "numkong_windows_${{ matrix.arch }}_${{ steps.set_version.outputs.version }}.tar.gz" \
build_release/Release/numkong.dll \
include/numkong/ \
LICENSE
- name: Upload to GitHub Release
shell: bash
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload ${{ github.event.release.tag_name }} "numkong_windows_${{ matrix.arch }}_${{ steps.set_version.outputs.version }}.tar.gz" --clobber
create_macos_dylib_library:
name: Create Library for macOS
runs-on: macos-15
strategy:
fail-fast: false
matrix:
arch: [arm64, x86_64]
steps:
- name: Checkout Repository
uses: actions/checkout@v6
with:
ref: "main"
- name: Update Git Submodules
run: git submodule update --init --recursive
- name: Get Version
id: set_version
run: echo "version=$(cat VERSION)" >> $GITHUB_OUTPUT
- name: Build Shared Library
run: |
cmake -B build_release \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_OSX_ARCHITECTURES=${{ matrix.arch }} \
-DNK_BUILD_SHARED=ON \
-DNK_BUILD_TEST=OFF \
-DNK_BUILD_BENCH=OFF
cmake --build build_release --config Release
cp build_release/libnumkong.dylib \
"numkong_macos_${{ matrix.arch }}_${{ steps.set_version.outputs.version }}.dylib"
zip -r "numkong_macos_${{ matrix.arch }}_${{ steps.set_version.outputs.version }}.zip" \
build_release/libnumkong.dylib include/numkong/ LICENSE
- name: Upload to GitHub Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload ${{ github.event.release.tag_name }} *.dylib *.zip --clobber
create_android_library:
name: Create Android Libraries
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
include:
- abi: armeabi-v7a
arch: arm32
- abi: arm64-v8a
arch: arm64
steps:
- name: Checkout Repository
uses: actions/checkout@v6
with:
ref: "main"
- name: Update Git Submodules
run: git submodule update --init --recursive
- name: Get Version
id: set_version
run: echo "version=$(cat VERSION)" >> $GITHUB_OUTPUT
- name: Build Shared Library
run: |
cmake -B build_android \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_TOOLCHAIN_FILE=${ANDROID_NDK_LATEST_HOME}/build/cmake/android.toolchain.cmake \
-DCMAKE_ANDROID_STL_TYPE=c++_static \
-DANDROID_PLATFORM=28 \
-DANDROID_ABI=${{ matrix.abi }} \
-DNK_BUILD_SHARED=ON \
-DNK_BUILD_TEST=OFF \
-DNK_BUILD_BENCH=OFF
cmake --build build_android --config Release
- name: Package Archive
run: |
zip -r "numkong_android_${{ matrix.arch }}_${{ steps.set_version.outputs.version }}.zip" \
build_android/libnumkong.so include/numkong/ LICENSE
- name: Upload to GitHub Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload ${{ github.event.release.tag_name }} *.zip --clobber
create_wasm_library:
name: Create WASM Libraries
runs-on: ubuntu-24.04
steps:
- name: Checkout Repository
uses: actions/checkout@v6
with:
ref: "main"
- name: Update Git Submodules
run: git submodule update --init --recursive
- name: Get Version
id: set_version
run: echo "version=$(cat VERSION)" >> $GITHUB_OUTPUT
- name: Install Emscripten
run: |
git clone --depth 1 https://github.com/emscripten-core/emsdk.git ~/emsdk
(cd ~/emsdk && ./emsdk install latest && ./emsdk activate latest)
- name: Set Up Node.js
uses: actions/setup-node@v6
with:
node-version: 22
- name: Build WASM
run: |
source ~/emsdk/emsdk_env.sh
cmake -B build_wasm \
-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-wasm.cmake \
-DCMAKE_BUILD_TYPE=Release \
-DNK_BUILD_SHARED=ON
cmake --build build_wasm --config Release
- name: Build Browser Bundle
run: |
npm install --ignore-scripts
npm run build-js
cp build_wasm/numkong.js build_wasm/numkong-emscripten.js
npx esbuild javascript/dist/esm/numkong-browser.js \
--bundle --format=esm --platform=browser --target=es2022 \
--outfile=build_wasm/numkong-bundle.js
cp javascript/dist/esm/numkong-browser.d.ts build_wasm/numkong.d.ts
cp LICENSE build_wasm/
- name: Package WASM Release
run: |
cd build_wasm
mv numkong-bundle.js numkong.js
tar -czf "../numkong_wasm_${{ steps.set_version.outputs.version }}.tar.gz" \
numkong.js numkong-emscripten.js numkong.wasm numkong.d.ts LICENSE
zip -r "../numkong_wasm_${{ steps.set_version.outputs.version }}.zip" \
numkong.js numkong-emscripten.js numkong.wasm numkong.d.ts LICENSE
- name: Upload to GitHub Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload ${{ github.event.release.tag_name }} numkong_wasm_*.tar.gz numkong_wasm_*.zip --clobber
create_freebsd_library:
name: Create Library for FreeBSD
runs-on: ubuntu-24.04
env:
CC: clang-20
CXX: clang++-20
AR: llvm-ar-20
NM: llvm-nm-20
RANLIB: llvm-ranlib-20
strategy:
fail-fast: false
matrix:
include:
- arch: amd64
freebsd_arch: amd64
target: x86_64-unknown-freebsd14.2
processor: x86_64
- arch: arm64
freebsd_arch: arm64/aarch64
target: aarch64-unknown-freebsd14.2
processor: aarch64
steps:
- name: Checkout Repository
uses: actions/checkout@v6
with:
ref: "main"
- name: Update Git Submodules
run: git submodule update --init --recursive
- name: Get Version
id: set_version
run: echo "version=$(cat VERSION)" >> $GITHUB_OUTPUT
- name: Install Dependencies
run: |
wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | sudo tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc
echo "deb http://apt.llvm.org/noble/ llvm-toolchain-noble-20 main" | sudo tee /etc/apt/sources.list.d/llvm-20.list
sudo apt-get update
sudo apt-get install -y clang-20 lld-20
- name: Download FreeBSD Sysroot
run: |
mkdir -p /tmp/freebsd-sysroot
curl -fsSL "https://download.freebsd.org/releases/${{ matrix.freebsd_arch }}/14.2-RELEASE/base.txz" \
| tar -xJf - -C /tmp/freebsd-sysroot ./lib ./usr/lib ./usr/include
- name: Build Shared Library
run: |
cmake -B build_freebsd \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_SYSTEM_NAME=FreeBSD \
-DCMAKE_SYSTEM_PROCESSOR=${{ matrix.processor }} \
-DCMAKE_SYSROOT=/tmp/freebsd-sysroot \
-DCMAKE_C_COMPILER_TARGET=${{ matrix.target }} \
-DCMAKE_CXX_COMPILER_TARGET=${{ matrix.target }} \
-DCMAKE_SHARED_LINKER_FLAGS="-fuse-ld=lld-20" \
-DNK_BUILD_SHARED=ON \
-DNK_BUILD_TEST=OFF \
-DNK_BUILD_BENCH=OFF
cmake --build build_freebsd --config Release
cp build_freebsd/libnumkong.so \
"numkong_freebsd_${{ matrix.arch }}_${{ steps.set_version.outputs.version }}.so"
- name: Upload to GitHub Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload ${{ github.event.release.tag_name }} *.so --clobber
create_linux_exotic_library:
name: Create Library for Linux (${{ matrix.name }})
runs-on: ubuntu-24.04
strategy:
fail-fast: false
matrix:
include:
- name: ppc64le
arch: ppc64le
cc: powerpc64le-linux-gnu-gcc-14
cxx: powerpc64le-linux-gnu-g++-14
pkg: gcc-14-powerpc64le-linux-gnu g++-14-powerpc64le-linux-gnu
processor: ppc64le
- name: loongarch64
arch: loongarch64
cc: loongarch64-linux-gnu-gcc-14
cxx: loongarch64-linux-gnu-g++-14
pkg: gcc-14-loongarch64-linux-gnu g++-14-loongarch64-linux-gnu
processor: loongarch64
steps:
- name: Checkout Repository
uses: actions/checkout@v6
with:
ref: "main"
- name: Update Git Submodules
run: git submodule update --init --recursive
- name: Get Version
id: set_version
run: echo "version=$(cat VERSION)" >> $GITHUB_OUTPUT
- name: Install Dependencies
run: |
sudo apt-get update
sudo apt-get install -y ${{ matrix.pkg }}
- name: Build Shared Library
run: |
cmake -B build_release \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_PROCESSOR=${{ matrix.processor }} \
-DCMAKE_C_COMPILER=${{ matrix.cc }} \
-DCMAKE_CXX_COMPILER=${{ matrix.cxx }} \
-DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY \
-DCMAKE_BUILD_TYPE=Release \
-DNK_BUILD_SHARED=ON \
-DNK_BUILD_TEST=OFF \
-DNK_BUILD_BENCH=OFF
cmake --build build_release --config Release
cp build_release/libnumkong.so \
"numkong_linux_${{ matrix.arch }}_${{ steps.set_version.outputs.version }}.so"
- name: Upload to GitHub Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload ${{ github.event.release.tag_name }} *.so --clobber
create_linux_riscv_library:
name: Create Library for Linux (riscv64)
runs-on: ubuntu-24.04
steps:
- name: Checkout Repository
uses: actions/checkout@v6
with:
ref: "main"
- name: Update Git Submodules
run: git submodule update --init --recursive
- name: Get Version
id: set_version
run: echo "version=$(cat VERSION)" >> $GITHUB_OUTPUT
- name: Install Dependencies
run: |
curl -fsSL https://apt.llvm.org/llvm-snapshot.gpg.key \
| sudo gpg --dearmor -o /usr/share/keyrings/llvm.gpg
echo "deb [signed-by=/usr/share/keyrings/llvm.gpg] http://apt.llvm.org/noble/ llvm-toolchain-noble main" \
| sudo tee /etc/apt/sources.list.d/llvm.list > /dev/null
sudo apt-get update
sudo apt-get install -y cmake clang-23 lld-23 llvm-23 \
gcc-riscv64-linux-gnu libc6-dev-riscv64-cross
- name: Build Shared Library
run: |
SYSROOT="$(riscv64-linux-gnu-gcc -print-sysroot)"
cmake -B build_riscv \
-DCMAKE_TOOLCHAIN_FILE=cmake/toolchain-riscv64-llvm.cmake \
-DLLVM_ROOT=/usr/lib/llvm-23 \
-DRISCV_SYSROOT="${SYSROOT}" \
-DRISCV_MARCH=rv64gcv_zvfh_zvfbfwma_zvbb \
-DCMAKE_BUILD_TYPE=Release \
-DNK_BUILD_SHARED=ON \
-DNK_BUILD_TEST=OFF \
-DNK_BUILD_BENCH=OFF
cmake --build build_riscv --config Release
cp build_riscv/libnumkong.so \
"numkong_linux_riscv64_${{ steps.set_version.outputs.version }}.so"
- name: Upload to GitHub Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload ${{ github.event.release.tag_name }} *.so --clobber