Name: qthreads Version: 1.22 Release: %{autorelease} Summary: Lightweight locality-aware user-level threading runtime License: BSD-3-Clause AND MIT URL: https://www.sandia.gov/qthreads/ Source: https://github.com/sandialabs/qthreads/archive/%{version}/qthreads-%{version}.tar.gz # Add soname # https://github.com/sandialabs/qthreads/pull/370 Patch: soname.patch # Unsupported architectures ExcludeArch: %{ix86} s390x BuildRequires: cmake BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: hwloc-devel %description The Qthreads API is designed to make using large numbers of threads convenient and easy. The Qthreads API also provides access to full/empty-bit (FEB) semantics, where every word of memory can be marked either full or empty, and a thread can wait for any word to attain either state. Qthreads is essentially a library for spawning and controlling stackful coroutines: threads with small (4-8k) stacks. The exposed user API resembles OS threads, however the threads are entirely in user-space and use their locked/unlocked status as part of their scheduling. The library's metaphor is that there are many Qthreads and several "shepherds". Shepherds generally map to specific processors or memory regions, but this is not an explicit part of the API. Qthreads are assigned to specific shepherds and are only allowed to migrate when running on a scheduler that supports work stealing or when migration is explicitly triggered via user APIs. The API includes utility functions for making threaded loops, sorting, and similar operations convenient. %package devel Summary: Development files for qthreads library Requires: %{name}%{?_isa} = %{version}-%{release} %description devel Header files and development libraries for qthreads library. %prep %autosetup -p1 %build %cmake %cmake_build %install %cmake_install rm %{buildroot}%{_includedir}/qthread/.gitignore %check # Tests fail on ppc64le, though build completes. Perhaps try a post release commit. %ifnarch ppc64le %ctest %endif %files %license COPYING %doc AUTHORS %doc NEWS %doc README.md %doc README.affinity %doc SCHEDULING %{_libdir}/libqthread.so.1* %files devel %{_includedir}/qthread.h %dir %{_includedir}/qthread %{_includedir}/qthread/*.h %{_includedir}/qthread/*.hpp %dir %{_libdir}/cmake/qthread %{_libdir}/cmake/qthread/*.cmake %{_libdir}/libqthread.so %changelog %autochangelog