Name: lemonade-server Version: 10.0.1 Release: 1%{?dist} Summary: Local LLM serving with GPU and NPU acceleration License: Apache-2.0 URL: https://github.com/lemonade-sdk/lemonade Source0: %{url}/archive/refs/tags/v%{version}.tar.gz#/%{name}-%{version}.tar.gz Source1: lemonade-server.sysusers # Disabled by default, requires GPU hardware %bcond_with check BuildRequires: cmake BuildRequires: gcc-c++ BuildRequires: openssl-devel BuildRequires: git-core BuildRequires: systemd-rpm-macros BuildRequires: libdrm-devel BuildRequires: libzstd-devel BuildRequires: libcurl-devel BuildRequires: brotli-devel BuildRequires: nlohmann-json-devel BuildRequires: cli11-devel BuildRequires: cpp-httplib-devel BuildRequires: zlib-devel BuildRequires: libwebsockets-devel %description Lemonade helps users discover and run local AI apps by serving optimized LLMs right from their own GPUs and NPUs. It supports GGUF, FLM, and ONNX models. %prep %autosetup -n lemonade-%{version} -p1 # Remove hidden upstream directories not needed for the build rm -rf .github .circleci .gitlab-ci # Force CMake to use system-provided httplib instead of attempting ## to download and vendor it via FetchContent during offline build. sed -i 's/FetchContent_MakeAvailable(httplib)/find_package(httplib REQUIRED)/g' CMakeLists.txt %pre %sysusers_create_compat %{SOURCE1} %build %cmake %cmake_build %install %cmake_install # Install sysusers.d config source for Lemonade system user install -Dpm 0644 %{SOURCE1} %{buildroot}%{_sysusersdir}/%{name}.conf %if %{with check} %check %ctest %endif # Lemonade systemd service file %post %systemd_post lemonade-server.service %preun %systemd_preun lemonade-server.service %postun %systemd_postun_with_restart lemonade-server.service %files %license LICENSE %doc README.md %{_bindir}/lemonade %{_bindir}/lemonade-server %{_bindir}/lemonade-router %{_datadir}/lemonade-server/ %{_mandir}/man1/lemonade*.1* %dir %{_sysconfdir}/lemonade %dir %{_sysconfdir}/lemonade/conf.d %config(noreplace) %{_sysconfdir}/lemonade/lemonade.conf # Restrict secrets file to be readable only by root and the lemonade service group %attr(0640, root, lemonade) %config(noreplace) %{_sysconfdir}/lemonade/conf.d/zz-secrets.conf %{_unitdir}/lemonade-server.service %{_sysusersdir}/%{name}.conf %changelog %autochangelog