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

    <tr>
        <th>Summary</th>
        <td>
            unittests build does not respect CMAKE_EXE_LINKER_FLAGS, PipSqueak fails to link for MemorySanitizer
        </td>
    </tr>

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

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

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

<pre>
    ## Summary

Trying to build our LLVM fork for MemorySanitizer with a local libc++ per [MemorySanitizerBootstrappingClang](https://github.com/google/sanitizers/wiki/MemorySanitizerBootstrappingClang) fails with “ld.lld: error: unable to find library -lc++” trying to link unittests/Support/DynamicLibrary/CMakeFiles/SecondLib.dir/PipSqueak.cpp.o.  If I add `add_link_options(-L<my custom libc++ path>)` to llvm/unittests/CMakeLists.txt, the file links.  Except for the unittests, this directory is correctly propagated to the clang++ command from the -DCMAKE_EXE_LINKER_FLAGS argument, as in [MemorySanitizerBootstrappingClang#building-clang](https://github.com/google/sanitizers/wiki/MemorySanitizerBootstrappingClang#building-clang).

## Details 
(See also “Configuration Workarounds” below.)
If I add the following arguments to our build system (a front-end to CMake and Ninja) `\\--debug-trycompile  \\-DCMAKE_BUILD_TYPE=Release  \\-DLLVM_ENABLE_PROJECTS="clang;lld" \\-DLLVM_USE_SANITIZER=MemoryWithOrigins  \\-DLLVM_ENABLE_LIBCXX=ON  \\-DCMAKE_CXX_FLAGS="-nostdinc++ -isystem $LIBCXX_DIR/include -isystem $LIBCXX_DIR/include/c++/v1"   \\-DCMAKE_EXE_LINKER_FLAGS="-stdlib=libc++ -Wl,--rpath=$LIBCXX_DIR/lib/x86_64-unknown-linux-gnu -L$LIBCXX_DIR/lib/x86_64-unknown-linux-gnu -fsanitize=memory"`, the clang++ command for the failing link step contains my custom include directories, but is missing the lib directory, so it is understandably “unable to find library -lc++””:
(Expanded with (\s"?-+) ⇒ \n\1 for clarity)

```
: && /usr/bin/clang++
 -fPIC
 -nostdinc++
 -isystem /home/zekebot/Documents/Code/External_Code/Llvm-15.0.4_for_libcxx/build_libcxx//include
 -isystem /home/zekebot/Documents/Code/External_Code/Llvm-15.0.4_for_libcxx/build_libcxx//include/c++/v1
 -stdlib=libc++
 -fvisibility-inlines-hidden
 -Wall
 -Wextra
 -Wno-unused-parameter
 -Wwrite-strings
 -Wcast-qual
 -Wmissing-field-initializers
 -pedantic
 -Wno-long-long
 -Wno-noexcept-type
 -Wnon-virtual-dtor
 -Wdelete-non-virtual-dtor
 -Wsuggest-override
 -Wno-comment
 -fsanitize=memory
 -fsanitize-memory-track-origins
 -fdiagnostics-color
 -O3
 -DNDEBUG 
 -stdlib=libc++ 
 -fuse-ld=lld
 -Wl,--color-diagnostics  
 -fsanitize=memory
 -fsanitize-recover=memory
 -shared 
 -o unittests/Support/DynamicLibrary/PipSqueak.so unittests/Support/DynamicLibrary/CMakeFiles/PipSqueak.dir/PipSqueak.cpp.o   && :
```

## Configuration
Ubuntu 22.04.1 LTS (Jammy Jellyfish) x86_64
Ubuntu clang version 15.0.6
Target: x86_64-pc-linux-gnu
### Configuration Workarounds
- $LIBCXX_DIR/lib in MemorySanitizerBootstrappingClang doc needs platform name appended  (https://github.com/google/sanitizers/issues/1661)
- https://github.com/llvm/llvm-project/issues/57104#issuecomment-1278598494


## See Also
- [MemorySanitizerBootstrappingClang Wiki building instructions out of date #1230](https://github.com/google/sanitizers/issues/1230)
- [MemorySanitizerLibcxxHowTo wiki page has deprecated build instructions. #1574](https://github.com/google/sanitizers/issues/1574)

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEV1Fz4jgS_jXiRSXKloHAAw-AYS-zTGZqyFxy90LJVmO0yJJXkpOwv_5KsjGEZHazc1V3VSliSa1Wq_vrr1vMWlEogCkaztEw7bHa7bWZriSz-80ejOBM9TLNj1NEE0QTvKnLkpkjilIUzZrfe3MUqsBO46wWkmNdG7xe__Mz3mlz8D_4M5TaHDdMCSf-AIOfhdtjhqXOmcRSZDmic0TnuAKD0XB-JT7X2llnWFUJVSwkUwUapoiO985VFiUzRFeIrgrh9nXWz3XpB1oXEhBd2ZMSi-jqWRwEoqu_Vk8neMeEtI2haEnROEKTheR9KTlKZhiM0cZ_1IplEvzdd0JxfxfDzBET2V7ptDfFrvOSFOqAayWcA-u8XZu6qrRxiK7So2KlyNeNGkRXi8_sACshIchBrhVfi6zPhUF09VVUm99rYId-XlV93cf4dodvMeMco1HEON_6o7a6ckIri-iYrFGyKI84r63T5SvPM7dHyRLRCRpFwUj55B15aWawZS2ss3334hBdYLcHvBMSwpVsH-PlSw6VCzH3axe7vbCwmAsDudPmiIXFuTZ-JI-4MrpiBXPA_dl-a94EIhiX67JkiuOd0WVYJOni8-zX5Xb5uNyub-9-XX7brtazXzaYmaIuQQXjmMVCfQxONAnIFaog-f8EX9fn0Un_MqPaXEvBBRSeJscbAMyk1WdILrTaiaI2zIcYP2hzYEbXitsz8DKQ-rnvIxvUdBAJwdNS6mePy5PnrA-Az-Aml-3ROigxomPm3a8cARViFMCAfVTuhPqN-ZRBowgNF2i4IIRDVhfEmWOuy8oDBLcrbeDm32_X6fb-X1-XKEm_gQRmL2Q8eWyXd7P5ern9-u3Lp-XifoOSFFHaeCuZ-zSk9PWG75vldjO7u72__ffyG0rSJgwPwu2_GFEIZd8_YH07Xzw-oiT9cndt5eLxscFVczhR2jou1ClniOi8M2i0bNPbb4iuhMplzeEvBRBdnWiCrp5if6NrE64R3lpiHZciQ0l6kcLkQSK6IMQ0uZxeH-o30NXLeLQdDUitDko_KyKFql9IoWpM1n93w-4EfpSkZXA2otSDoGWGd1O4ZQZPrx52gQutgwrnWjnmo3Tmp5MfT6QhIBBJVjvPHqWwNjDq3vNPdqYWL2M1FkGqVhyMdUxxlsnjOXE-TNznj6TLzvHypWKKA28LBB2j4cL62ycrEvZPmpNu0CSgVKHhIg6XzyUzwh27dGx_R1H71wyTGUZ0hOgIew62nuwzoTxezj5tRDHZfb1dnL5fI_Q0e4bhaq9LD7s_4ACZDhVH503ee4LXAZPLFwdGMbltx2v5VJJ42I_6g-1Om63H3MuLN8lTxHl4Aez_28FXGdXa8U66dN57ElZkQgp3JEJJocCSveAc1EnigUnZfcOLM6wbKU1qVVvgpGKGleDAdGvPRjgg1hmhCtvN5sw68nvNzhpbGJOdAMmJ8BnFZFNRWpEKOFNO5JfHSq2K8HM5qTSE-kvcsYKLBUWehHE1k4Q7fbaQgwQH5Ifrti4KsI7oJzBG8EuNxOezr7MnL76lgusV0swTZ1h-ILqh5E6KC1Z48IrcklzLsxVfktNXepcu599_wX8S1G5tV1sgvlVLfaU42d3wY1BPLg7E-O9cw0DuHfJGwu6ZAd6p0h_t8M5NnP3wnldd4VnBu12hLyktlSQ_YJvLnuNVQ9GsfM9q5WpMaT8a9GO8vt94xvvEyvKIP4GUx52we095Tal4tSnwFX4CY31_EnJ51L4amCnAeaZrK0yVn4vLpUlvrHrV5gRB8qbC-oIg1PXD420rhrnOsQLgFleSuZ02JVasBMyqCgLDowVFs-hn2kFhbR0iFI9GcUf4BP-Jorbr9v9IZfRvkLtLRcObOBogmoSJNgVJTG_Gw8l4MBm8CudlUH3fOJNWd976QFOMH8RB4FOfioWyztR5eElgXTusd5gzBxjRJKZJ9JMt89lHXsfZR28tXAe2_4d-vtfYN9q4YgXgPbOYQ2UgD4-Hpmm9tLUfDBzeDP5rA72Ok4E9Pk34JJmwHkzj0Xh0M0roaNjbT_NBdDOK4wGwJM4YG3AaDbMbluQ8Hgx5THtiSiOaRKN4EN_QOBr2J8MdxBCPdxx2XgkaRFAyIfseBH1til4wYTpKkjjuSZaBtOG1TqmCZxwWfecxTHtmGoCT1YVFg0iGl1qnxQknYdoRTOsqrsFipR02YCvIHf5B20kXuOOV9m18esm-88Dv1UZOfx7m4ar_CQAA___El04D">