Construindo e usando uma cadeia de ferramentas llvm pura para c ++ no linux
Supondo que isso seja possível, alguém poderia me dizer, como eu tenho que configurar o cmake build para criar uma cadeia de ferramentas llvm "pura" no ubuntu-16.04 que consiste em
clanglldlibc ++libc ++ abilibunwind (llvm)compiler-rtquaisquer outras peças que possam ser relevantes e estejam "prontas para produção"O compilador resultante deve
seja o mais rápido possível (otimizações ativadas, sem declarações desnecessárias ou outras verificações no próprio binário do compilador)ser instalado em um diretório local separado (vamos chamá-lo<llvm_install>
)não possui dependências para o llvm tolchain fornecido pelo gerenciador de pacotesuse libc ++, libc ++ abi etc por padrão.suporte aos desinfetantes (ubsan, endereço, memória, thread) (o que provavelmente significa que eu tenho que compilar o libc ++ asegundo tempo)Até agora eu tenho clonado
llvm dehttp://llvm.org/git/llvm.git
para dentro<llvm_root>
clang dehttp://llvm.org/git/clang.git
para dentro<llvm_root>/tools/clang
lld dehttp://llvm.org/git/lld.git
para dentro<llvm_root>/tools/lld
compilador-rt, libcxx, libcxxabi, libunwind dehttp://llvm.org/git/<project_name>
para dentro<llvm_root>/projects/<project_name>
Em seguida, execute o ccmake em um diretório separado - tentei várias configurações, mas assim que tento algo mais sofisticado além de ativar as otimizações, quase sempre recebo algum tipo de erro de compilação. Infelizmente, ainda não encontrei uma maneira de exportar minhas alterações do ccmake, caso contrário, daria um exemplo com as configurações e o erro de acordo, mas estou mais interessado em uma prática recomendada do que em uma correção nas minhas configurações de teste.
Pontos de bônus: por padrão, isso deve ser construído com a cadeia de ferramentas g ++ padrão, mas eu também estaria interessado em uma construção de dois estágios, se isso melhorar o desempenho da cadeia de ferramentas final (por exemplo, usando LTO).
Btw .: A idéia toda veio de assistir a conversa de Chandler
Pacific ++ 2017: Chandler Carruth "LLVM: Uma cadeia de ferramentas C ++ moderna e aberta"