<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/55786>55786</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
wasm-ld should ignore .rlib files in archives
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
hoodmane
</td>
</tr>
</table>
<pre>
As per the rust issue https://github.com/rust-lang/rust/issues/80775, if you try to build an empty rust file:
```sh
rustc \
-C target-feature=+mutable-globals \
-C relocation-model=pic \
-C link-args='-s SIDE_MODULE' \
--target wasm32-unknown-emscripten \
--crate-type cdylib \
test.rs
```
the result is the following error:
```sh
note: wasm-ld: error: unknown file type: lib.rmeta
```
Rust libraries contain an index file called `lib.rmeta`. The linker is expected to ignore them. I can work around this with the following patch to the linker:
https://github.com/pyodide/pyodide/pull/2378/files#diff-c21c39739d2d98d34e3063aceea3d659b11bc10471c403a0199a5bc01587e58b
<details>
<summary>Emscripten linker patch</summary>
```py
if any(arg.endswith(".rlib") for arg in cmd):
from tempfile import mkstemp
from pathlib import Path
tempfiles = []
new_cmd = []
try:
for arg in cmd:
if arg == "-lc":
continue
if not arg.endswith(".rlib"):
new_cmd.append(arg)
continue
fd, temp_path = mkstemp()
shutil.copy2(arg, temp_path)
tempfiles.append(Path(temp_path))
subprocess.call(["ar", "-d", temp_path, "lib.rmeta"])
subprocess.call(["emranlib", temp_path])
new_cmd.append(temp_path)
cmd = new_cmd
cmd = get_command_with_possible_response_file(cmd)
check_call(cmd)
finally:
for file in tempfiles:
file.unlink()
else:
cmd = get_command_with_possible_response_file(cmd)
check_call(cmd)
```
</details>
xref Pyodide PR https://github.com/pyodide/pyodide/pull/2378/
@sbc100
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJylVtuOozgQ_RryYoGICQEe8tDT6ZVG2tW2ZnefI2MXwdvGRraZdP5-y0A61-kZaSMUG7uqfOrUxdRGHDdPjvRgiW-B2MF5Ip0bgLTe9y7KniL6Gz576duhTrjp8CVIxYrp_TzHYdRxOCnTosgj-kxkQ45mIN4eiTekHqQShGkCXe-P0zmNVBAOSLdR-hSt0-lx7bQQRDiJ8mcyC6RV_Ew8s3vwcQPMDxa1txH90g2e1QrivTI1Uy7oTCpk_qGeBWU489LouDMCFGr2kj8UVVK_xXiMG60XsSN_fd2-7P74c_vP7y-48EApnmCRA3NdRuNBv2lz0DF0jlvZe9CPdLhlHmJ_7IFwcVSyvhfy4Hxi3Q1D0-sYLnCDCgEbg9cYpcxB6j0Ba439MbXa-ED8CDdWIkxPGmTGPgaHBHBhEcEltgPPHiL5FoKJIpZZCY5woz2TOgRbagHvkynOlAJBUOlsbJ0m5G8EHhjHBEQ34L0H7lEOU0butbEQPOsS8hUNaHIw9o0wawaNEi3KHzAtb3zvmedt0Pcfls9MjP-fZHZ_NEIKuJ4NSuFAs6LEITiDeZ4J2TQxp0ueVUVWCSqqUmQryNJ1xjgAy8Q6r-rlsubLdFUs-SrNWLqsKpbXPF3mZQF5WV-iirJngaRIhdBePpbc0HXMHnHp5ZxMM1-jpyiDqM5iVyZPceqP0wLWJNPHiJaYrglo4QJ_-BpRmliMC44RrZBMiyzvMXyEdwJXPggkpLGmw7zs-jGqsuuN9aR7c2HpSgbRtSGpZ5FXfD3tn9SxVLMtZv2XKN-e9jQcdnjogx0f_Hs6F8gNysstErpP2AslHAxRGisevLuWImOySj3AjS5WCPmUoztDM-6E9T0qTRQHuZ-e1ojQLQMlu0DZ6PiJz3DqlQnXDl4qTNb-SE9nXCjfSH_wfEY1hoGWVxo3Rwx1bw0H55JQswEDhoFSZkfPn0cyxTy_sDNunGsb9zF0v2YaOsv0idpLo3cW7lh-7PopgWbx-w1s1jus-I5psQvx3fXGOYmXyA5bam-0g914O9FyLoCzhRb4226Gf73ZSI3L90k6VYo-h-MmecJaMuhQ1ZcRB-XgQvL_Qv8h8JtuPjWUu1Y0_r9baMjr1BnJ67fPvhF-3kmvOtUqdaFTpguxyUSVVWzhpVewma8oTHwz4DDfCWMhkqmFhJvG8lZ-B7cYrNp8gkmp76chxkT8F6-ay0-XPC_K9aLdsHRdVLTmosl5XRZVUaxX1YoVWVk2BQO2UKzG4Gym9rSQG5pSmuYZwqdVmiUVLIUQHIosK1JgS3QOOmQzCQcnxu4XdjNiqAf8yFjhhei8O28yDOdeA5zss8G3xm5aYwQGHRYj3s0I9j-WSO4q">