Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 15 additions & 68 deletions pkgs/development/libraries/tbb/default.nix
Original file line number Diff line number Diff line change
@@ -1,90 +1,37 @@
{ lib
, stdenv
, fetchurl
, fetchFromGitHub
, fixDarwinDylibNames
, fetchpatch
, cmake
}:

stdenv.mkDerivation rec {
pname = "tbb";
version = "2020.3";
version = "2021.8.0";

src = fetchFromGitHub {
owner = "oneapi-src";
repo = "oneTBB";
rev = "v${version}";
sha256 = "prO2O5hd+Wz5iA0vfrqmyHFr0Ptzk64so5KpSpvuKmU=";
rev = "refs/tags/v${version}";
hash = "sha256-7MjUdPB1GsPt7ZkYj7DCisq20X8psljsVCjDpCSTYT4=";
};

patches = [
# Fixes build with Musl.
(fetchurl {
url = "https://github.com/openembedded/meta-openembedded/raw/39185eb1d1615e919e3ae14ae63b8ed7d3e5d83f/meta-oe/recipes-support/tbb/tbb/GLIBC-PREREQ-is-not-defined-on-musl.patch";
sha256 = "gUfXQ9OZQ82qD6brgauBCsKdjLvyHafMc18B+KxZoYs=";
})

# Fixes build with Musl.
(fetchurl {
url = "https://github.com/openembedded/meta-openembedded/raw/39185eb1d1615e919e3ae14ae63b8ed7d3e5d83f/meta-oe/recipes-support/tbb/tbb/0001-mallinfo-is-glibc-specific-API-mark-it-so.patch";
sha256 = "fhorfqO1hHKZ61uq+yTR7eQ8KYdyLwpM3K7WpwJpV74=";
})

# Fixes build with upcoming gcc-13:
# https://github.com/oneapi-src/oneTBB/pull/833
(fetchurl {
name = "gcc-13.patch";
url = "https://github.com/oneapi-src/oneTBB/pull/833/commits/c18342ba667d1f33f5e9a773aa86b091a9694b97.patch";
sha256 = "ZUExE3nsW80Z5GPWZnDNuDiHHaD1EF7qNl/G5M+Wcxg=";
})

# Fixes build for aarch64-darwin
(fetchurl {
name = "aarch64-darwin.patch";
url = "https://github.com/oneapi-src/oneTBB/pull/258/commits/86f6dcdc17a8f5ef2382faaef860cfa5243984fe.patch";
sha256 = "sha256-JXqrFPCb3q1vfxk752tQu7HhApCB4YH2LoVnGRwmspk=";
})
nativeBuildInputs = [
cmake
];

nativeBuildInputs = lib.optionals stdenv.isDarwin [
fixDarwinDylibNames
patches = [
# Fix musl build; vendored from https://github.com/oneapi-src/oneTBB/pull/899
./musl.patch
];

makeFlags = lib.optionals stdenv.cc.isClang [
"compiler=clang"
] ++ (lib.optional (stdenv.buildPlatform != stdenv.hostPlatform)
(if stdenv.hostPlatform.isAarch64 then "arch=arm64"
else if stdenv.hostPlatform.isx86_64 then "arch=intel64"
else throw "Unsupported cross architecture"));

enableParallelBuilding = true;

installPhase = ''
runHook preInstall
mkdir -p $out/lib
cp "build/"*release*"/"*${stdenv.hostPlatform.extensions.sharedLibrary}* $out/lib/
mv include $out/
rm $out/include/index.html
runHook postInstall
# Disable failing test on musl
# 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’?
postPatch = lib.optionalString stdenv.hostPlatform.isMusl ''
sed -i "/conformance_resumable_tasks/d" test/CMakeLists.txt
'';

postInstall = let
pcTemplate = fetchurl {
url = "https://github.com/oneapi-src/oneTBB/raw/478de5b1887c928e52f029d706af6ea640a877be/integration/pkg-config/tbb.pc.in";
sha256 = "2pCad9txSpNbzac0vp/VY3x7HNySaYkbH3Rx8LK53pI=";
};
in ''
# Generate pkg-config file based on upstream template.
# It should not be necessary with tbb after 2021.2.
mkdir -p "$out/lib/pkgconfig"
substitute "${pcTemplate}" "$out/lib/pkgconfig/tbb.pc" \
--subst-var-by CMAKE_INSTALL_PREFIX "$out" \
--subst-var-by CMAKE_INSTALL_LIBDIR "lib" \
--subst-var-by CMAKE_INSTALL_INCLUDEDIR "include" \
--subst-var-by TBB_VERSION "${version}" \
--subst-var-by TBB_LIB_NAME "tbb"
'';
enableParallelBuilding = true;

meta = with lib; {
description = "Intel Thread Building Blocks C++ Library";
Expand Down
24 changes: 24 additions & 0 deletions pkgs/development/libraries/tbb/musl.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
From 493774eb57f9c424fc8907d137665e687861ad94 Mon Sep 17 00:00:00 2001
From: Ismael Luceno <[email protected]>
Date: Fri, 9 Sep 2022 16:18:18 +0200
Subject: [PATCH] Fix build against musl libc

Probably MALLOC_UNIXLIKE_OVERLOAD_ENABLED only works with glibc, so use
__GLIBC__ in addition to __linux__ to define it.
---
src/tbbmalloc_proxy/proxy.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/tbbmalloc_proxy/proxy.h b/src/tbbmalloc_proxy/proxy.h
index 5f0133f9e..ba1a07c39 100644
--- a/src/tbbmalloc_proxy/proxy.h
+++ b/src/tbbmalloc_proxy/proxy.h
@@ -17,7 +17,7 @@
#ifndef _TBB_malloc_proxy_H_
#define _TBB_malloc_proxy_H_

-#define MALLOC_UNIXLIKE_OVERLOAD_ENABLED __linux__
+#define MALLOC_UNIXLIKE_OVERLOAD_ENABLED (__linux__ && __GLIBC__)
#define MALLOC_ZONE_OVERLOAD_ENABLED __APPLE__

// MALLOC_UNIXLIKE_OVERLOAD_ENABLED depends on MALLOC_CHECK_RECURSION stuff