mirror of
https://github.com/NixOS/nix.git
synced 2025-11-08 19:46:02 +01:00
build: Disable libstdc++ TBB backend to avoid unnecessary dependency
boost::concurrent_flat_map (used in libutil and libstore) includes the
C++17 <execution> header. GCC's libstdc++ implements parallel algorithms
using Intel TBB as the backend, which creates a link-time dependency on
libtbb even though we don't actually use any parallel algorithms.
Disable the TBB backend for libstdc++ by setting
_GLIBCXX_USE_TBB_PAR_BACKEND=0. This makes parallel algorithms fall back
to serial execution, which is acceptable since we don't use them anyway.
This only affects libstdc++ (GCC's standard library); other standard
libraries like libc++ (LLVM) are unaffected.
(cherry picked from commit 2f3ec16793)
This commit is contained in:
parent
441aba4823
commit
287b54b49c
1 changed files with 20 additions and 0 deletions
|
|
@ -42,6 +42,26 @@ if cxx.get_id() == 'clang'
|
||||||
add_project_arguments('-fpch-instantiate-templates', language : 'cpp')
|
add_project_arguments('-fpch-instantiate-templates', language : 'cpp')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Detect if we're using libstdc++ (GCC's standard library)
|
||||||
|
# libstdc++ uses Intel TBB as backend for C++17 parallel algorithms when <execution> is included.
|
||||||
|
# boost::concurrent_flat_map includes <execution>, which would require linking against TBB.
|
||||||
|
# Since we don't actually use parallel algorithms, disable the TBB backend to avoid the dependency.
|
||||||
|
# TBB is a dependency of blake3 and leaking into our build environment.
|
||||||
|
is_using_libstdcxx = cxx.compiles(
|
||||||
|
'''
|
||||||
|
#include <ciso646>
|
||||||
|
#ifndef __GLIBCXX__
|
||||||
|
#error "not libstdc++"
|
||||||
|
#endif
|
||||||
|
int main() { return 0; }
|
||||||
|
''',
|
||||||
|
name : 'using libstdc++',
|
||||||
|
)
|
||||||
|
|
||||||
|
if is_using_libstdcxx
|
||||||
|
add_project_arguments('-D_GLIBCXX_USE_TBB_PAR_BACKEND=0', language : 'cpp')
|
||||||
|
endif
|
||||||
|
|
||||||
# Darwin ld doesn't like "X.Y.ZpreABCD+W"
|
# Darwin ld doesn't like "X.Y.ZpreABCD+W"
|
||||||
nix_soversion = meson.project_version().split('+')[0].split('pre')[0]
|
nix_soversion = meson.project_version().split('+')[0].split('pre')[0]
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue