Merge pull request #268619 from tweag/lib-descriptions
[NixPkgs.git] / pkgs / development / libraries / tbb / default.nix
blobb6cc969b9f7832a0e9eb26be9de621141b4a92c7
1 { lib
2 , stdenv
3 , fetchFromGitHub
4 , fetchpatch
5 , cmake
6 }:
8 stdenv.mkDerivation rec {
9   pname = "tbb";
10   version = "2021.8.0";
12   outputs = [ "out" "dev" ];
14   src = fetchFromGitHub {
15     owner = "oneapi-src";
16     repo = "oneTBB";
17     rev = "v${version}";
18     hash = "sha256-7MjUdPB1GsPt7ZkYj7DCisq20X8psljsVCjDpCSTYT4=";
19   };
21   nativeBuildInputs = [
22     cmake
23   ];
25   patches = [
26     # Fix musl build from https://github.com/oneapi-src/oneTBB/pull/899
27     (fetchpatch {
28       url = "https://patch-diff.githubusercontent.com/raw/oneapi-src/oneTBB/pull/899.patch";
29       hash = "sha256-kU6RRX+sde0NrQMKlNtW3jXav6J4QiVIUmD50asmBPU=";
30     })
32     # Fix/suppress warnings on gcc12.1 from https://github.com/oneapi-src/oneTBB/pull/866
33     (fetchpatch {
34       url = "https://patch-diff.githubusercontent.com/raw/oneapi-src/oneTBB/pull/866.patch";
35       hash = "sha256-e44Yv84Hfl5xoxWWTnLJLSGeNA1RBbah4/L43gPLS+c=";
36     })
37   ];
39   # Fix build with modern gcc
40   # In member function 'void std::__atomic_base<_IntTp>::store(__int_type, std::memory_order) [with _ITp = bool]',
41   NIX_CFLAGS_COMPILE = lib.optionals stdenv.cc.isGNU [ "-Wno-error=stringop-overflow" ] ++
42     # error: variable 'val' set but not used
43     lib.optionals stdenv.cc.isClang [ "-Wno-error=unused-but-set-variable" ] ++
44     # Workaround for gcc-12 ICE when using -O3
45     # https://gcc.gnu.org/PR108854
46     lib.optionals (stdenv.cc.isGNU && stdenv.isx86_32) [ "-O2" ];
48   # Disable failing test on musl
49   # test/conformance/conformance_resumable_tasks.cpp:37:24: error: ‘suspend’ is not a member of ‘tbb::v1::task’; did you mean ‘tbb::detail::r1::suspend’?
50   postPatch = lib.optionalString stdenv.hostPlatform.isMusl ''
51     substituteInPlace test/CMakeLists.txt \
52       --replace 'conformance_resumable_tasks' ""
53   '';
55   meta = with lib; {
56     description = "Intel Thread Building Blocks C++ Library";
57     homepage = "http://threadingbuildingblocks.org/";
58     license = licenses.asl20;
59     longDescription = ''
60       Intel Threading Building Blocks offers a rich and complete approach to
61       expressing parallelism in a C++ program. It is a library that helps you
62       take advantage of multi-core processor performance without having to be a
63       threading expert. Intel TBB is not just a threads-replacement library. It
64       represents a higher-level, task-based parallelism that abstracts platform
65       details and threading mechanisms for scalability and performance.
66     '';
67     platforms = platforms.unix;
68     maintainers = with maintainers; [ thoughtpolice tmarkus ];
69   };