<div dir="ltr"><div>Thank you for the hint - while it's certainly possible that with a better choice of target the link would attempt other libraries, there is no RISC-V compiler runtime library being built at all. Linking "testdiv.c" without libraries fails as would be expected with an undefined reference to the symbol "__divsi3"</div><div><br></div><div>Looking for this symbol across the release/12.0 installed binaries it's only present in the x86 support:<br></div><div><br></div><div>lib/clang/12.0.0/lib/linux/libclang_rt.builtins-x86_64.a</div><div><br></div><div>perhaps suggesting that the list of LLVM_TARGETS_TO_BUILD isn't applied to the compiler-rt build? However when building compiler-rt separately I didn't yet find a working way to specify targets.<br></div><br><div></div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, 27 Jul 2021 at 18:21, Fāng-ruì Sòng <<a href="mailto:maskray@google.com" target="_blank">maskray@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">On Tue, Jul 27, 2021 at 3:51 AM Thomas Goodfellow via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>My overall goal is locally building [1] an LLVM toolchain which compiles a mixture of C and supporting assembler for bare RISC-V development environments (no OS). Library support is required for some language features on some RISC-V targets, e.g. integer division when the "M" extension isn't present. <br><div><br></div><div>From the details on <a href="https://compiler-rt.llvm.org/" target="_blank">https://compiler-rt.llvm.org/</a> I expected that something like this on release/12.x would build the support library for RISC-V:<br></div><div><br></div><div>cmake -G Ninja ../llvm -DCMAKE_BUILD_TYPE=Release  -DLLVM_ENABLE_PROJECTS='clang;lld;compiler-rt' -DCMAKE_INSTALL_PREFIX=~/bin/s4e -DLLVM_TARGETS_TO_BUILD='RISCV'</div><div>ninja</div><div>ninja install<br></div><div><br></div><div>however
 although that yields the RISCV compiler target libraries 
(libLLVMRISCV*.a) it doesn't install any obvious RISCV runtime libraries
 (only x86 ones) and linking a test program with integer division fails:</div><div><br></div><div>clang  testdiv.c --target=riscv32 -march=rv32i<br>ld.lld: error: unable to find library -lc<br>ld.lld: error: unable to find library -lm<br>ld.lld: error: unable to find library -lclang_rt.builtins-riscv32</div><div><br></div><div>(using LLVM release/12.x on x86_64 release/12.x; also tried building all targets and also copying the cmake line from a build triggered by Phabricator for a RISC-V-related change to compiler-rt with the hope that some of the additional defines would prove the solution)</div><div><br></div><div>Thanks in advance for whatever advice you can provide for building the support libraries for RISC-V.</div><div><br></div><div>Tom Goodfellow</div></div></div></blockquote><div><br></div><div>Your --target= is not correct.</div><div><br></div><div>Normally, if you use --target=aarch64-linux-gnu, the clang driver will pick up crt1.o crti.o crtn.o libc libm from libc, crtbegin.o/crtend.o from aarch64-linux-gnu-gcc.</div><div>The libc and gcc paths are detected by locating aarch64-linux-gnu-gcc.</div><div>riscv may be more strange on some systems due to the complex multiarch/multilib scheme.</div></div><div><br></div></div>
</blockquote></div>