Как заменить llvm-ld на clang?

Резюме: llvm-ld был удален изВыпуск LLVM 3.2, Я пытаюсь понять, как использовать clang вместо него в моей системе сборки.

Обратите внимание, что я выяснил ответ на свой вопрос, когда писал его, но я все еще публикую его на тот случай, если он пригодится кому-то еще. Альтернативные ответы также приветствуются.

Подробности:

У меня есть процесс сборки, который сначала генерирует битовый код, используяclang++ -emit-llvm, Затем я беру файлы с битовым кодом и связываю их вместе сllvm-link, Затем я применяю некоторые стандартные проходы оптимизации сopt, Затем я применяю другой пользовательский проход компилятора сopt, Затем я применяю стандартные проходы оптимизации снова, используяopt в третий раз. Наконец я беру вывод из последнего запускаopt и использоватьllvm-link связать с соответствующими библиотеками для генерации моего исполняемого файла. Когда я пытался заменитьllvm-link сclang++ в этом процессе я получаю сообщение об ошибке:file not recognized: File format not recognized

Чтобы сделать этот вопрос более конкретным, я создал упрощенный пример того, что я пытаюсь сделать. Сначала есть два файла, которые я хочу скомпилировать и связать вместе

test1.cpp:

#include 

int getNum();

int main()
{
  int value = getNum();
  printf("value is %d\n", value);
  return 0;
}

test2.cpp

int getNum()
{
  return 5;
}

Я выполнил следующую последовательность команд:

clang++ -emit-llvm -c test1.cpp test2.cpp
llvm-link -o test.bc1 test1.o test2.o 
opt test.bc1 -o test.bc2 -std-compile-opts

(Обратите внимание, что в настоящее время я использую llvm 3.1, но яЯ пытаюсь выяснить шаги, которые будут работать для llvm 3.2. Я предполагаю, что смогу заставить корректно работать версию LLVM 3.1, используя clang вместо llvm-ld)

Тогда, если я бегу:

llvm-ld test.bc2 -o a.out -native

все хорошо иa.out распечатывает 5.

Однако, если я бегу:

clang++ test.bc2 -o a.out

Тогда я получаю сообщение об ошибке:

test.bc2: file not recognized: File format not recognized clang-3:
error: linker command failed with exit code 1 (use -v to see invocation)

Очевидно, я знаю, что могу создать исполняемый файл, запустив clang непосредственно над файлами .cpp. Но я'Мне интересно, что лучший способ интеграцииclang сopt является.

Ответы на вопрос(2)

Ваш ответ на вопрос