2014-09-07 3 views
0

Quelqu'un peut-il me dire comment compiler le compilateur Clang en LtVM bytecode (c'est-à-dire, auto-hôte Clang)? La raison pour laquelle je veux faire ceci est que je peux prendre le bytecode LLVM résultant et ensuite utiliser Emscripten pour produire un compilateur C vers Javascript.Comment auto-héberger Clang?

+0

Utilisez -flt puis récupérez les modules IR résultants dans un grand module unique. –

Répondre

3

Vous pouvez obtenir clang à la sortie dans le bytecode LLVM en utilisant l'indicateur de ligne de commande -emit-llvm, avec l'indicateur -c. (Si vous utilisez l'indicateur -S au lieu de -c, vous obtenez une représentation textuelle du bytecode LLVM.) Vous n'avez pas besoin de compiler clang dans le bytecode LLVM pour que cela fonctionne.

Si vous souhaitez essayer de s'exécuter dans un navigateur, vous devrez compiler tout le clang dans le code à barres LLVM, puis lier les fichiers objet à l'aide de llvm-link. Ensuite, vous aurez besoin de comprendre comment donner au compilateur compilé l'accès aux fichiers d'en-tête système dont il a besoin. Je ne sais pas s'il y a une option de construction pour tout cela, mais je n'ai jamais rien vu dans les options ./configure pour cela, donc je ne pense pas. Mais il est possible que cela existe.

+0

Il ya un fil similaire à http://stackoverflow.com/questions/12479458/how-to-build-clang-with-clang, mais je suis un débutant à clanger et à compiler en général, donc je n'ai aucune idée de comment adopter à compiler clang à LLVM. Pensez-vous que vous pourriez m'aider à modifier légèrement ce code pour le compiler en LLVM? – user3059347

+0

Comme je l'ai dit dans la réponse, ce n'est pas un processus trivial. Je n'ai pas mentionné que si vous vouliez faire tout cela dans le navigateur, vous auriez aussi besoin de construire lui-même des emscripten, et que le résultat serait probablement impraticable. Êtes-vous certain de devoir le faire? – rici