Creación y uso de una cadena de herramientas llvm pura para c ++ en linux

Suponiendo que esto sea posible, alguien podría decirme cómo debo configurar la compilación de cmake para crear una cadena de herramientas llvm "pura" en ubuntu-16.04 que consiste en

sonido metálicolldlibc ++libc ++ abilibunwind (llvm)compilador-rtcualquier otra pieza que pueda ser relevante y esté "lista para producción"

El compilador resultante debería

ser lo más rápido posible (optimizaciones activadas, sin afirmaciones innecesarias u otras verificaciones en el binario del compilador)ser instalado en un directorio local separado (vamos a llamarlo<llvm_install>)no tener dependencias a la cadena de caracteres llvm proporcionada por el administrador de paquetesuse libc ++, libc ++ abi, etc. de forma predeterminada.admite los desinfectantes (ubsan, dirección, memoria, hilo) (lo que probablemente significa que tengo que compilar libc ++ asegunda vez)

Hasta ahora he clonado

llvm dehttp://llvm.org/git/llvm.git dentro<llvm_root>repiqueteo dehttp://llvm.org/git/clang.git dentro<llvm_root>/tools/clanglld dehttp://llvm.org/git/lld.git dentro<llvm_root>/tools/lldcompilador-rt, libcxx, libcxxabi, libunwind dehttp://llvm.org/git/<project_name> dentro<llvm_root>/projects/<project_name>

Luego ejecute ccmake en un directorio separado: he probado varias configuraciones, pero tan pronto como intento algo más sofisticado más allá de activar las optimizaciones, casi siempre recibo algún tipo de error de compilación. Desafortunadamente, todavía tengo que encontrar una manera de exportar mis cambios de ccmake; de lo contrario, le daría un ejemplo con la configuración y el error correspondiente, pero de todos modos estoy más interesado en una mejor práctica que una solución a mis configuraciones de prueba.

Puntos de bonificación: de forma predeterminada, esto debería compilarse con la cadena de herramientas g ++ predeterminada, pero también me interesaría una construcción de dos etapas si eso mejora el rendimiento de la cadena de herramientas final (por ejemplo, usando LTO).

Por cierto: toda la idea surgió de ver la charla de Chandler
Pacific ++ 2017: Chandler Carruth "LLVM: una cadena de herramientas moderna y abierta de C ++"

Respuestas a la pregunta(1)

Su respuesta a la pregunta