Я пытаюсь выполнить кросс-компиляцию из x86 в ARM, используя LLVM.Я построил стандартную версию LLVM на x86 (которая работает).Теперь я выполняю следующую команду:
clang++ -v -g3 -O0 $< -o $@ $(FLAGS) -rdynamic --target=${ARM_TRIP} \
--sysroot=${SYSROOT}/libc \
-I${SYSROOT}/include/c++/8.2.1 \
-I${SYSROOT}/include/c++/8.2.1/${ARM_TRIP} \
-L${SYSROOT}/lib/gcc/${ARM_TRIP}/8.2.1 \
-B${SYSROOT}/bin
ARM_TRIP
- это триплет моей платформы, arm-linux-gnueabihf
.
Компилируется нормально, но не может связываться (я использую рукукомпоновщик), поскольку LLVM передает компоновщику аргументы X86:
"/path/to/arm-linux-gnueabihf/bin/ld" \
--sysroot=/path/to/libc -export-dynamic -EL -X --hash-style=gnu \
--no-add-needed --eh-frame-hdr -m armelf_linux_eabi -export-dynamic \
-dynamic-linker /lib/ld-linux-armhf.so.3 -o kld-arm (more files...) \
-lLLVMX86Disassembler -lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMGlobalISel (etc...)
Проблема, с которой я сталкиваюсь, - -lLLVMX86*
.Как я могу изменить это на ARM?Файлы существуют в моей системе, но LLVM, похоже, не осознает, что нужно изменить это для моей цели ARM.Нужно ли делать что-то особенное при компиляции LLVM, чтобы сказать, что я могу захотеть сделать кросс-компиляцию?Или я просто не правильно его называю?