<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/55432>55432</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            bolt fails to build with -DLLVM_BUILD_LLVM_DYLIB -DLLVM_LINK_LLVM_DYLIB
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          berolinux
      </td>
    </tr>
</table>

<pre>
    Building LLVM 14.0.3 with bolt enabled and LLVM_BUILD_LLVM_DYLIB and LLVM_LINK_LLVM_DYLIB enabled results in

```
[19/51] Linking CXX executable bin/llvm-bolt
FAILED: bin/llvm-bolt 
: && /usr/bin/clang++ -O3  -march=znver1 -mtune=znver1 -O3 -Qunused-arguments -Wl,-Bsymbolic-functions -g1 -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -fdiagnostics-color -ffunction-sections -fdata-sections-Wl,--disable-new-dtags,-rpath,/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/build/lib64,-rpath,/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/build/lib -fuse-ld=lld -Wl,--color-diagnostics    -Wl,--gc-sections tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o -o bin/llvm-bolt  lib64/libLLVM-14.so && :
ld.lld: error: undefined symbol: opts::PerfData[abi:cxx11]
>>> referenced by basic_string.h:1064 (/usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/12.0.0/../../../../include/c++/12.0.0/bits/basic_string.h:1064)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(perf2boltMode(int, char**))
>>> referenced by basic_string.h:1064 (/usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/12.0.0/../../../../include/c++/12.0.0/bits/basic_string.h:1064)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(heatmapMode(int, char**))
>>> referenced by basic_string.h:1064 (/usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/12.0.0/../../../../include/c++/12.0.0/bits/basic_string.h:1064)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)

ld.lld: error: undefined symbol: llvm::bolt::DataAggregator::checkPerfDataMagic(llvm::StringRef)
>>> referenced by llvm-bolt.cpp:116 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:116)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(perf2boltMode(int, char**))

ld.lld: error: undefined symbol: opts::OutputFilename[abi:cxx11]
>>> referenced by basic_string.h:1064 (/usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/12.0.0/../../../../include/c++/12.0.0/bits/basic_string.h:1064)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(perf2boltMode(int, char**))
>>> referenced by basic_string.h:1064 (/usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/12.0.0/../../../../include/c++/12.0.0/bits/basic_string.h:1064)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(boltMode(int, char**))

ld.lld: error: undefined symbol: opts::AggregateOnly
>>> referenced by CommandLine.h:1412 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/llvm/include/llvm/Support/CommandLine.h:1412)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(perf2boltMode(int, char**))
>>> referenced by CommandLine.h:1412 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/llvm/include/llvm/Support/CommandLine.h:1412)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(heatmapMode(int, char**))
>>> referenced by CommandLine.h:1417 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/llvm/include/llvm/Support/CommandLine.h:1417)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)
>>> referenced 1 more times

ld.lld: error: undefined symbol: llvm::bolt::BoltRevision
>>> referenced by llvm-bolt.cpp:96 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:96)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(printBoltRevision(llvm::raw_ostream&))
>>> referenced by llvm-bolt.cpp:96 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:96)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(printBoltRevision(llvm::raw_ostream&))

ld.lld: error: undefined symbol: opts::HeatmapMode
>>> referenced by llvm-bolt.cpp:152 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:152)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(heatmapMode(int, char**))
>>> referenced by llvm-bolt.cpp:230 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:230)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)
>>> referenced by llvm-bolt.cpp:0 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:0)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)

ld.lld: error: undefined symbol: opts::DiffOnly
>>> referenced by CommandLine.h:1412 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/llvm/include/llvm/Support/CommandLine.h:1412)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(boltDiffMode(int, char**))
>>> referenced by CommandLine.h:1417 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/llvm/include/llvm/Support/CommandLine.h:1417)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)

ld.lld: error: undefined symbol: llvm::bolt::RewriteInstance::RewriteInstance(llvm::object::ELFObjectFileBase*, int, char const* const*, llvm::StringRef)
>>> referenced by llvm-bolt.cpp:305 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:305)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)
>>> referenced by llvm-bolt.cpp:308 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:308)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)
>>> referenced by llvm-bolt.cpp:255 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:255)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)

ld.lld: error: undefined symbol: llvm::bolt::RewriteInstance::setProfile(llvm::StringRef)
>>> referenced by llvm-bolt.cpp:306 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:306)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)
>>> referenced by llvm-bolt.cpp:309 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:309)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)
>>> referenced by llvm-bolt.cpp:264 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:264)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)
>>> referenced 1 more times

ld.lld: error: undefined symbol: llvm::bolt::MachORewriteInstance::MachORewriteInstance(llvm::object::MachOObjectFile*, llvm::StringRef)
>>> referenced by llvm-bolt.cpp:278 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:278)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)

ld.lld: error: undefined symbol: llvm::bolt::MachORewriteInstance::setProfile(llvm::StringRef)
>>> referenced by llvm-bolt.cpp:281 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:281)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)

ld.lld: error: undefined symbol: llvm::bolt::MachORewriteInstance::run()
>>> referenced by llvm-bolt.cpp:284 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:284)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)

ld.lld: error: undefined symbol: llvm::bolt::MachORewriteInstance::~MachORewriteInstance()
>>> referenced by llvm-bolt.cpp:285 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:285)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)
>>> referenced by llvm-bolt.cpp:285 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:285)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)

ld.lld: error: undefined symbol: llvm::bolt::RewriteInstance::run()
>>> referenced by llvm-bolt.cpp:315 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:315)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)
>>> referenced by llvm-bolt.cpp:320 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:320)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)
>>> referenced by llvm-bolt.cpp:276 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:276)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)

ld.lld: error: undefined symbol: llvm::bolt::RewriteInstance::compare(llvm::bolt::RewriteInstance&)
>>> referenced by llvm-bolt.cpp:321 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:321)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)

ld.lld: error: undefined symbol: llvm::bolt::RewriteInstance::~RewriteInstance()
>>> referenced by llvm-bolt.cpp:322 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:322)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)
>>> referenced by llvm-bolt.cpp:322 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:322)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)
>>> referenced by llvm-bolt.cpp:277 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/bolt/tools/driver/llvm-bolt.cpp:277)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(main)
>>> referenced 3 more times

ld.lld: error: undefined symbol: opts::BoltCategory
>>> referenced by CommandLine.h:466 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/llvm/include/llvm/Support/CommandLine.h:466)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(_GLOBAL__sub_I_llvm_bolt.cpp)
>>> referenced by llvm-bolt.cpp
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(opts::BoltCategories)

ld.lld: error: undefined symbol: opts::BoltDiffCategory
>>> referenced by CommandLine.h:466 (/home/bero/temp/abf/llvm/BUILD/llvm-project-14.0.3.src/llvm/include/llvm/Support/CommandLine.h:466)
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(_GLOBAL__sub_I_llvm_bolt.cpp)
>>> referenced by llvm-bolt.cpp
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(opts::BoltDiffCategories)

ld.lld: error: undefined symbol: opts::AggregatorCategory
>>> referenced by llvm-bolt.cpp
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(opts::Perf2BoltCategories)

ld.lld: error: undefined symbol: opts::BoltOutputCategory
>>> referenced by llvm-bolt.cpp
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(opts::Perf2BoltCategories)
>>> referenced by llvm-bolt.cpp
>>>               tools/bolt/tools/driver/CMakeFiles/llvm-bolt.dir/llvm-bolt.cpp.o:(opts::BoltCategories)

ld.lld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
clang-14: error: linker command failed with exit code 1 (use -v to see invocation)
```

Bolt seems to think its various sublibraries are part of libLLVM-14.so when they aren't.

The attached patch [llvm-bolt-dylib-link.patch.txt](https://github.com/llvm/llvm-project/files/8686965/llvm-bolt-dylib-link.patch.txt)
"fixes" it, but isn't the right thing to do for obvious reasons.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztW1lz47gR_jXyC4oqkbof9CBZ48QVOZ6dTbK7TyqQBEnEIMAAoCztr083SB32ajKWVx7aE6lYPHD08XWj0SSEUMWbyazkIuYyJYvFv-6I32t32l3yyG1GQiUsYZKGgsWEyti1WM7-ebuYL93t_LfF7Wxfs7j9-98OK7ZdNTOlsIZw2erMW51pfR506qN67M_8cSu46fut_pwsuHxAma5__ZWwNYtKi6RICCSCGyFWuYfCVT1vpreLT_NWd_q8mtSUoaYVDOCAy01pNJyrlpGgMm0FMziId98lxMupjrJWd_67XDHtw7MtJTt4hkbeT6UsDYs9qtMyZxIU834RreDam5lNDnx55CWljCxXEqpS6JV8vr2Gs1SeYTmVFlpwaZkulOHYDOpW3PCQC243UCW4ZMbLeBwzqPuFaa00CBFTyzzLc3ZQVsq0pDpGcVaUC1rTkOwRGlEhsOnaagpXYF9LXlBNcwYCQOmj5kDVWA1woyYRNdb7T0mxZ86NgWIv4UzEIBcISwX_nWloWLDYaVIRFgqa4QkpVIiOR16k8oJazwmAqnOo5XkBCHHrJSCdzbQq0ww7KQAYRDPgeVHmxSyh4DMVcanYOmKF9eymYK5IeiuuLQjpxVahFjEToI93pMaUacpAJaSveYz9K2VBOjSqcfijqoJRHAegJ8BuaW2YmNNUKgOaGughkGayNS_otDVzAsahu-faIbyYG_RbNAfIQ1ODpRowyeAGHDBTOUNvZFrBxbK8gAsNk9qL4eJG29apC63-DRy8apC2jY6wM45fbMHDQe9t6YOa4D8ePHbnQsRbv69w8Q6QIvDbVqbRHiarlDBIEwcvCFQ_xpqDJeDm-o4-sBsumDkcx-2Y6yfPUVG0FfHUHwY8qUFAYTEQoSZG7UZ_tw49Im4LVGJK6mE0JSUYPYFhF5NqEGOZKqzBPt3pZ6aTORgYghSMMCiI1msfA9U2wnyqDgh1CbixjIBOuCEhNTxaVu7WhrAy9TuDHkgzehaH2u29_W7SCFFfjwbLQc9TBZMQMRAg6kFYKNdeKkuo9wMwUWfb99mJy0iUMVq-HouHHUJunQmOydYKxs81evo7pwER2mBUALQBFt4plHgEgRHchkQZhS5Td4yPiHUB-lSgM0ZtTosLzG8Lc04RgvFhpvPCcOMisgs3Thp3h0FnmqaapdS6nhh7MhY9bCPSHU05gDLad_7ZQfCFJd805xP5ETF_UBvzLPPGVyA9wvXdh53XzRr3pS1Ki2JJSLcuc8dl7vioQL_xQNlGOHYvxeZ_W-ta5Qg1vB-yCpCeH5wxaNUN97apC34ui0JpRPOYAB_V9S9gni01OqLJsGkoh42nP8fA8kmuNCP4HcOcKUuawd0Xhp9QlDwt5Rk3kfGMG0l4YA6xT4A6TBo1fVzCq7tmNHcvy992-AuSJyP5usnxrwfB6bR0vn_OYP7idL7_QSP4c0WCbqcB-IDru4zaRwBqAp7mwXndIJ7zJLkkty9FHJ8RsUtC9t6-R31hbr3oVhpLAenjhYfToQoRu-r-0-Lm3j2iAjNqmDPlNTmwL4kUUIHy3Q3WnOPjVrfTbyBeAdfGbf5igEaNADT6KAAF_SY8CLg2DtCbRA3D7GetEpDqTJ-vu50mXkGAa-P2eTFA40YAOjZZv0uAgt2H3-86wt_BOtV3-lBzR6Ps_mg0OFrztUTCNd6nEmfMEoJhE5MgcG3cA97OtGcP9MHIb8JII_8HNpIupYP0ZFM0EjFHzUfMtzNFa_jpK9HwFeZpJGUdNZ-yXgBqIqd_ZRTp-o28m_vNW-GlAAVNfGwFrh8FoGDYxLsfcG0coDcZx-6P2_ppvvb1LsExFL7l0E2kcMD1x7QXpAxnyBa6QRMLhsC1caNcADpXGD7nGsvLw3DzCyvHAOr-uQ8o-9XDGbC-ppalSp-4gtgbnHNerBuesOgF_BswzfIvi_vZdLFcmjJc3i6xzXLnL6f59HeW_KjNOfb_c-vPSA1XVC9e9P_nRQd2P4Mn7XcjvMyX3gkQuF8iOP-Yqv7i_-Mg8b5FP9V-wJxAINlUJYawnFvLYlwsMFYVBe4wluoRY1tpGPFcM09waNbqzjvQnxjGCG6jrSjsWLqdwxDWnrATXD4w_AuDi14koRx3P7ut1GzNLVTEjPg7bqstfS5XKnL7TfcqPdsc7c6oPnbIcSMlsRmwI9wasqKaq9IQiFOCh5oiOARe3wi8w1miEvJ0N-RjxiT0ZhtsAyyHtn3I5R8ZaGwtjTIQvqA2ykirP9tZxos3QA63OTy0XW3bri3uZglGmbWFs1RwA0cKepdhG9DYh_jDSQEek9oNRoPRYDzoHzrAcTY7eIIg4WvsGwACaM-wtIQbpw3qRjRPM-swShGsWJFEaaLClUNKM2qUNO2reNKNx90xvbLcCjZBzs5uDmG387Wynzc_vve9Ln-28_2q1GJyMhrcmNLB0e_3usFVNhl2wtAPBoPhIIwGcUR70bDnd_qDXm_og9jBlaAhE2YC5gEgcMu3IwH3YI8rPgk6QdDp-10_CHpBpw20hqOgHzI6pBQ_XfQ6DJJY0UY52kqnV3pS4V-mBioFN9bsK6kxPJWMOXZAn5Y2U3qCqYDb83LlmE-c8P8FbADZUw">