# Maintainer: Spencer Bull <spencer@omarchy.org>

pkgname=openvino-genai
pkgver=2026.3.1.0
pkgrel=3
pkgdesc="OpenVINO GenAI C and C++ runtime libraries"
arch=('x86_64')
url="https://github.com/openvinotoolkit/openvino.genai"
license=('Apache-2.0')
options=('!debug' '!lto')
depends=(
    'gcc-libs'
    'glibc'
    'onetbb'
    'openvino=2026.3.1' # Includes libopenvino_c.so.
)
makedepends=(
    'cmake'
    'git'
    'ninja'
    'python'
)
optdepends=(
    'openvino-intel-gpu-plugin: inference on Intel GPUs'
    'openvino-intel-npu-plugin: inference on Intel NPUs'
)

_commit=56d9685302da2fc5cc7c9689cfab500fd0660a02
source=(
    "openvino.genai::git+$url.git#commit=$_commit"
    'gcc-16-char8_t.patch'
    'format-template-linkage.patch::https://github.com/openvinotoolkit/openvino.genai/commit/398fbc1450f7485368edf52dd82f45eba215d6c9.patch'
)
sha256sums=(
    'SKIP'
    '6e685c1e45d4b2314fd55e2f791846cc9086413ba62a6bb5e31be5a5878a243c'
    '8c2a3e4bf1d33e00b780da7bec2d5e40b6fd26a4e518359d6ff7c59ca7f649e3'
)

prepare() {
    cd openvino.genai
    patch -Np1 -i "$srcdir/gcc-16-char8_t.patch"
    # Backport upstream 398fbc14: GCC -O3 can otherwise leave format<int>
    # unresolved in libopenvino_genai.so.
    patch -Np1 -i "$srcdir/format-template-linkage.patch"
    git submodule update --init --recursive
}

build() {
    CFLAGS+=" -ffile-prefix-map=$srcdir=/usr/src/$pkgname"
    CXXFLAGS+=" -ffile-prefix-map=$srcdir=/usr/src/$pkgname"

    cmake -S openvino.genai -B build -G Ninja \
        -DCMAKE_BUILD_TYPE=Release \
        -DCMAKE_INSTALL_PREFIX=/usr \
        -DCMAKE_SKIP_RPATH=ON \
        -DENABLE_JS=OFF \
        -DENABLE_MISAKI_CPP=OFF \
        -DENABLE_PYTHON=OFF \
        -DENABLE_SAMPLES=OFF \
        -DENABLE_TESTS=OFF \
        -DENABLE_TOOLS=OFF \
        -DENABLE_XGRAMMAR=OFF

    cmake --build build
}

check() {
    LD_LIBRARY_PATH="$srcdir/build/openvino_genai:$srcdir/build/src/c${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" \
        python -c 'import ctypes; ctypes.CDLL("libopenvino_c.so"); ctypes.CDLL("libopenvino_genai_c.so")'
}

package() {
    install -d "$pkgdir/usr/lib" "$pkgdir/usr/share/licenses/$pkgname"

    cp -a build/openvino_genai/libopenvino_genai.so* "$pkgdir/usr/lib/"
    cp -a build/openvino_genai/libopenvino_tokenizers.so* "$pkgdir/usr/lib/"
    cp -a build/src/c/libopenvino_genai_c.so* "$pkgdir/usr/lib/"

    # Consumers such as omawake load the unversioned name dynamically.
    # Reject a missing/empty library or a broken symlink before publishing.
    if [[ ! -s "$pkgdir/usr/lib/libopenvino_genai_c.so" ]]; then
        error 'Required C binding is missing or empty: libopenvino_genai_c.so'
        return 1
    fi

    install -Dm644 openvino.genai/LICENSE \
        "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
    install -Dm644 openvino.genai/third-party-programs.txt \
        "$pkgdir/usr/share/licenses/$pkgname/third-party-programs.txt"
    install -Dm644 openvino.genai/thirdparty/openvino_tokenizers/LICENSE \
        "$pkgdir/usr/share/licenses/$pkgname/openvino-tokenizers-LICENSE"
    install -Dm644 openvino.genai/thirdparty/openvino_tokenizers/third-party-programs.txt \
        "$pkgdir/usr/share/licenses/$pkgname/openvino-tokenizers-third-party-programs.txt"
}
