From dc824ec8759969e6f3836e6d22826eafbf99e2b1 Mon Sep 17 00:00:00 2001 From: Adam Emerson Date: Thu, 23 Jan 2025 16:15:52 -0500 Subject: [PATCH] build: Link TBB into io_exerciser if present libstdc++ uses TBB to implement the execution library if it is available. If it's not present, we get a serial backend. Currently, we aren't getting link errors in most cases because the reference is optimized out, but when compiling with `-O0`, we hit a missing symbol. If we use more of the execution library, we'll reference TBB in ways that don't optimize out. As such, test if TBB is available. If so, link against it. See https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2017 for more information. Signed-off-by: Adam Emerson --- src/common/io_exerciser/CMakeLists.txt | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/common/io_exerciser/CMakeLists.txt b/src/common/io_exerciser/CMakeLists.txt index ab2e64fc22230..6f27607f31ae2 100644 --- a/src/common/io_exerciser/CMakeLists.txt +++ b/src/common/io_exerciser/CMakeLists.txt @@ -12,4 +12,17 @@ target_link_libraries(object_io_exerciser librados global json_structures -) \ No newline at end of file +) + +# libstdc++ uses TBB to implement if it is available, +# which means that if we're going to use , we need to link +# against TBB if it's available. +# +# It happens to work by accident at present because the optimizer +# optimizes out our one reference, for now, but this breaks compiling +# with `-O0` and will break anyway once we try to do more. +find_package(TBB QUIET) +if(TBB_FOUND) + message(STATUS "Linking to TBB for implementations of .") + target_link_libraries(object_io_exerciser TBB::tbb) +endif(TBB_FOUND) -- 2.39.5