diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1a508dc --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/llvmlite-0.37.0.tar.gz diff --git a/python-llvmlite.spec b/python-llvmlite.spec new file mode 100644 index 0000000..bc29ab4 --- /dev/null +++ b/python-llvmlite.spec @@ -0,0 +1,103 @@ +%bcond_without tests + +%global forgeurl https://github.com/numba/llvmlite + +Name: python-llvmlite +Version: 0.37.0 +Release: %{autorelease} +Summary: Lightweight LLVM Python binding for writing JIT compilers + +%forgemeta + +License: BSD +URL: http://llvmlite.pydata.org/ +Source0: %{forgesource} + +BuildRequires: pyproject-rpm-macros +BuildRequires: python3-devel +# 0.37.0 only supports llvm11 +BuildRequires: llvm11-devel +BuildRequires: gcc-c++ + +%global _description %{expand: +llvmlite provides a Python binding to LLVM for use in Numba. + +Numba previously relied on llvmpy. While llvmpy exposed large parts of the +LLVM C++ API for direct calls into the LLVM library, llvmlite takes an entirely +different approach. Llvmlite starts from the needs of a JIT compiler and splits +them into two decoupled tasks: + +- Construction of a Module, function by function, Instruction by instruction. +- Compilation and optimization of the module into machine code. + +The construction of an LLVM module does not call the LLVM C++ API. Rather, it +constructs the LLVM intermediate representation (IR) in pure Python. This is +the role of the IR layer. + +The compilation of an LLVM module takes the IR in textual form and feeds it +into LLVM's parsing API. It then returns a thin wrapper around LLVM's C++ +module object. This is the role of the binding layer. + +Once parsed, the module's source code cannot be modified, which loses the +flexibility of the direct mapping of C++ APIs into Python that was provided by +llvmpy but saves a great deal of maintenance.} + + +%description %_description + +%package -n python3-llvmlite +Summary: %{summary} + + +%description -n python3-llvmlite %_description + +%package doc +Summary: %{summary} +BuildRequires: %{py3_dist sphinx} +BuildRequires: %{py3_dist sphinx-rtd-theme} + +%description doc +Documentation for %{name}. + +%prep +%forgesetup + +# seems to be fine with 3.10 but we need to remove the guard +# https://github.com/numba/llvmlite/issues/740 +sed -i 's/max_python_version =.*/max_python_version = "3.11"/' setup.py + +# increase verbosity of tests to 2 +sed -i 's/\(def run_tests.*verbosity=\)1/\12/' llvmlite/tests/__init__.py + +# Comment out to remove /usr/bin/env shebangs +# Can use something similar to correct/remove /usr/bin/python shebangs also +# find . -type f -name "*.py" -exec sed -i '/^#![ ]*\/usr\/bin\/env.*$/ d' {} 2>/dev/null ';' + +%generate_buildrequires +%pyproject_buildrequires + +%build +export LLVM_CONFIG="%{_libdir}/llvm11/bin/llvm-config" +%pyproject_wheel + +make -C docs SPHINXBUILD=sphinx-build-3 html +rm -rf docs/_build/html/{.doctrees,.buildinfo,_static/EMPTY} -vf + +%install +%pyproject_install +%pyproject_save_files llvmlite + +%check +%if %{with tests} +LD_LIBRARY_PATH="%{buildroot}%{python3_sitearch}/llvmlite/binding/" PYTHONPATH="$PYTHONPATH:%{buildroot}%{python3_sitearch}:%{buildroot}%{python3_sitelib}" %{python3} runtests.py +%endif + +%files -n python3-llvmlite -f %{pyproject_files} +%doc CHANGE_LOG README.rst + +%files doc +%license LICENSE +%doc docs/_build/html examples/ + +%changelog +%autochangelog diff --git a/sources b/sources new file mode 100644 index 0000000..94ab5cc --- /dev/null +++ b/sources @@ -0,0 +1 @@ +SHA512 (llvmlite-0.37.0.tar.gz) = 665f486fd38c9cc4ee91b15fc75f33451ada6391fc9f1b371091ece844693e0cd8e23766400bf76d9879e8f10f53f4e21f8bb19f3ff1e01c4a95ce9004b0884a