Como substituir llvm-ld com clang?

Resumo: llvm-ld foi removido doLançamento do LLVM 3.2. Eu estou tentando descobrir como usar o clang em seu lugar no meu sistema de compilação.

Note que eu descobri a resposta para a minha própria pergunta enquanto escrevo, mas ainda estou postando no caso de ser útil para qualquer outra pessoa. Respostas alternativas também são bem vindas.

Detalhes:

Eu tenho um processo de compilação que primeiro gera bitcode usandoclang++ -emit-llvm. Então eu pego os arquivos bitcode e os vinculo comllvm-link. Então eu aplico alguns passes de otimização padrão comopt. Então eu aplico outro passo de compilador personalizado comopt. Então eu aplico a otimização padrão passa novamente usandoopt uma terceira vez. Finalmente eu tomo a saída da última corrida deopt E usellvm-link para vincular com bibliotecas apropriadas para gerar meu executável. Quando tentei substituirllvm-link comclang++ Nesse processo, recebo a mensagem de erro:file not recognized: File format not recognized

Para tornar essa questão mais concreta, criei um exemplo simplificado do que estou tentando fazer. Primeiro, existem dois arquivos que eu quero compilar e vincular

test1.cpp:

#include <stdio.h>

int getNum();

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

test2.cpp

int getNum()
{
  return 5;
}

Eu executei a seguinte sequência de comandos:

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

(Note que atualmente eu estou executando o llvm 3.1, mas estou tentando descobrir as etapas que funcionarão para o llvm 3.2. Eu suponho que eu deveria ser capaz de fazer a versão do LLVM 3.1 funcionar corretamente usando clang ao invés de llvm-ld)

Então, se eu correr:

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

está tudo bem ea.out imprime 5.

No entanto, se eu correr:

clang++ test.bc2 -o a.out

Então eu recebo a mensagem de erro:

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

Obviamente, sei que posso produzir um arquivo executável executando clang diretamente nos arquivos .cpp. Mas eu estou querendo saber qual é a melhor maneira de integrarclang comopt é.

questionAnswers(2)

yourAnswerToTheQuestion