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

    <tr>
        <th>Summary</th>
        <td>
            Building llvm libc for an arbitrary RISC-V architecture string
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            libc
      </td>
    </tr>

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

    <tr>
      <th>Reporter</th>
      <td>
          christian-herber-nxp
      </td>
    </tr>
</table>

<pre>
    RISC-V has many optional extensions, and I currently have no clue how to specify these in a libc build.
I have an easy to reproduce setup. After cloning the llvm project, I run this script from the root directory:

```
#!/usr/bin/env bash

rm -rf build-standalone
mkdir build-standalone
pushd build-standalone

C_COMPILER=clang-19
C_FLAGS="--target=riscv32 -march=rv32ic -mabi=ilp32"
CXX_COMPILER=clang++-19
TARGET_TRIPLE=riscv32-unknown-elf
cmake ../runtimes \
   -G Ninja \
   -DCMAKE_INSTALL_PREFIX=$(pwd)/install \
 -DCMAKE_C_COMPILER=$C_COMPILER \
   "-DCMAKE_C_FLAGS=${C_FLAGS}" \
 "-DCMAKE_CXX_FLAGS=${C_FLAGS}" \
   -DCMAKE_CXX_COMPILER=$CXX_COMPILER \
   -DLLVM_ENABLE_RUNTIMES=libc \
   -DLLVM_LIBC_FULL_BUILD=ON \
 -DLIBC_TARGET_TRIPLE=$TARGET_TRIPLE \
   -DCMAKE_BUILD_TYPE=Release
ninja libc libm
popd
```
Clang was installed with the following command:

`wget -qO-  | bash -s -- 19https://apt.llvm.org/llvm.sh`
It fails with the following message:


```
    Run Build Command(s):/usr/bin/ninja cmTC_95cfc && [1/2] Building C object CMakeFiles/cmTC_95cfc.dir/testCCompiler.c.o
    [2/2] Linking C executable cmTC_95cfc
    FAILED: cmTC_95cfc 
    : && /usr/bin/clang-19 --target=riscv32 -march=rv32ic -mabi=ilp32 CMakeFiles/cmTC_95cfc.dir/testCCompiler.c.o -o cmTC_95cfc   && :
    ld.lld: error: unable to find library -lc
    ld.lld: error: unable to find library -lm
    ld.lld: error: unable to find library -lgcc
```
If you omit the CLAGS, it successfully builds for seemingly rv32ic.
Somebody knows how to do build for a user specified architecture string?
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJycVl1v4joT_jXmZhQUHD7KBRchkFX0pt2Ksqu-V8hxJsRbx86xnVL-_ZEDFNrtxdmVIiW255l5ZjwfYdaKvUJckMmSTFYD1rlamwWvjbBOMBXUaAo0gXprB4Uuj4tN9pQEP6FmFhqmjqBbJ7RiEvDNobJCK0toAkyVkAHvjEHl5BFq9oqgNHDZIdT6AE6DbZGL6giuRosgFDCQouBQdEKWQxLG2QnGFCCzRw8x2BpddhzBouvaIcSVQwNcaiXU3msCKV8baI3-hdx5JhmYToGrhQXLjWgdVEY3vajR2kEpDHKnzZFEMQn7ZxqenzAmNCJ0RGjaWUNoWghFaIrqFQpm65O4aSAw1Yl1YB1TJZNaIQnj5qUU5quDtrN1-dUBCeNkl3y_f8zy9YZEKy6Z2gejeb-f5vG3JxKtCKVB4JjZoyPRygjLXyMKQcMMr_3Ga0QF9-tCkGglZBtRQqlX8fz8m3JCl4QuTya28ebbervbbrLHfH1VHXTqRemDClBWJIx5w14QhkNCU9MpJxq0QCYJCWMACL7Bg1C_2M3OKrmP_7feZQ9P2zjPd4-bdZo9926MCb1rDyWhc0JToaxjUl6AF9iHcBA6vq6vJnxA3sWvURqT2fKynvmoXRC38s_P_wVxdeNTDD2jm51b-Tz_eb9bP8TLfL3b_HjYZvdrb6VP8c9ieebt_sjz3fJHlq9ItPr-cI1Ef_r5cggdf9j6nWqvarf9_6MX36BEZn2Oqf5-ehpSFI1PR92Wn_I-8bkBB2bhfC9YwkG4uq-bSkupD77guG4apsrb0jns0UHwz_cAgMySvk4gsBAEMJrXzrXWC9OU0JS1buirdajNntC0_7T1yX7moGJC2q-MNmgt2-PV6EfqAACbTsHSlxckZ4b0zvo8623f1vIpGrzZJrv5hFccCJ0SOgUyWfqyp2SyOmnylhPQhe8rkNyzF0yFREtoegUPS-E1O7QuSXTTColmyIf6zIpMlvSiMxfq5aQS35B3jhUSb2icEWmc5esVieIPDM_aovid7EefLl0D_rRN_KlfEOhbYvDOp78aT1KWQyl9fgAao43_6FTvq9NQCVX6HDTMHCGQ_C8wzV9g9px_SpmsgqPuQDfC9bmW9B2AJiAc2I5ztLbqpDyeWraFShuwiI1Qe3mEUyT9wHrSDfopCb5f2sucK_UJ18MYdBbNefYJLMFfh3DIXWcQrDNC7UmUDspFVM6jORvgYjSL7uZ0OpvMB_ViOi6LOzaaMkpZhCM-icJRMUU-onQ2YdNqIBY0pJOQhrPRaESj-XBWsSm9iwo-n97NaEXJOMSGCfleewNhbYeLEZ1SOh9IVqC0_f8Apb5L-NkxWQ3MwssHRbe3ZBxKYZ29anDCSVy810k_g_sO07usgJlCuD785_-HL7wedEYuPnaIvXB1Vwy5bs794fwK3ud72nP32Xqm_7qg_wYAAP__35K2-Q">