将 xo65 对象文件与 ELF 对象和 LLVM IR 文件链接

Linking xo65 object files with ELF objects and LLVM IR files

我有一堆 LLVM IR / BC 文件,目前,我正在使用 clang:

使用 LTO 编译为本机代码
llvm-mos/bin/clang 
  --config llvm-mos-sdk/build/commodore/64.cfg \
  -O2 \
  -o _build/chip8.prg  \
  _build/dir.c.ll  \
  _build/interrupt.c.ll \
  _build/main.c.ll  \
  _build/dir.s.o  \
  _build/panic.ll.bc \
  rs/target/release/deps/chip8_engine-2a1bf4bc9333b677.bc \
  rs/target/release/deps/chip8_c64-a95cc9a5a3e99697.bc

在这里,我正在使用三种输入文件:

这行得通,但现在我想添加一些用 CC65 编译的 xo65 目标文件。我不能只将它们添加到 clang 调用中,因为 ld.lld 猜测文件的含义错误:

ld.lld: error: _build/native/readdir.c.o:30: unclosed quote

所以我的问题是,将这些文件链接在一起有哪些选择? 显而易见的解决方案是使用 clang 编译 readdir.c,前述 CC65(以及 xo65 目标文件格式);不幸的是,这说起来容易做起来难,因为 readdir.c 导入了一整套低级平台特定的导入,这些导入是用与 LLVM 的汇编器不兼容的汇编语法编写的。

我在 LLVM-MOS 问题跟踪器中找到了 a relevant feature request ticket。截至 2021-09-13,此问题的答案是否定的:这是一个未解决的问题。

xo65 文件不是 ELF 格式。在撰写本文时,它们不能直接与 llvm-mos ELF 格式文件链接。这在原则上并非不可能;尚未在等式的两边创建对它的支持。