7
votes

Comment activer la construction de la bibliothèque partagée lors de l'utilisation de CMAKE pour LLVM?

Le problème: strong> Ubuntu 10.10 ne fournit pas les modules CMAKE LLVM ( / USR / Share / LLVM code>) ou ( / USR / local / Share / LLVM CODE>) Lors de l'installation de LLVM 2.8 des référentiels Ubuntu.

Donc, je compose maintenant LLVM 2.8 à l'aide de CMAKE par moi-même puis en l'installant comme ceci: p>

-- Target triple: i686-pc-linux-gnu
-- Native target architecture is X86
-- Threads enabled.
-- Building with -fPIC
-- Targeting Alpha
-- Targeting ARM
-- Targeting Blackfin
-- Targeting CBackend
-- Targeting CellSPU
-- Targeting CppBackend
-- Targeting Mips
-- Targeting MBlaze
-- Targeting MSP430
-- Targeting PIC16
-- Targeting PowerPC
-- Targeting Sparc
-- Targeting SystemZ
-- Targeting X86
-- Targeting XCore
-- Configuring done
CMake Error: The inter-target dependency graph contains the following strongly connected component (cycle):
  "LLVMARMCodeGen" of type SHARED_LIBRARY
    depends on "LLVMARMAsmPrinter"
  "LLVMARMAsmPrinter" of type SHARED_LIBRARY
    depends on "LLVMARMCodeGen"
At least one of these targets is not a STATIC_LIBRARY.  Cyclic dependencies are allowed only among static libraries.
-- Build files have been written to: /llvm-2.8/build


0 commentaires

3 Réponses :


1
votes

llvm 2.8 La documentation ne mentionne pas la construction avec cmake.

essayer ./configure --enable-partagé


5 commentaires

Soins pour expliquer la bowvote? Si les développeurs LLVM n'approuvent pas l'utilisation de CMAKE, comment pouvons-nous nous attendre à ce qu'il fonctionne?


(Je ne suis pas le bownvoter, mais ...) Je suis sûr qu'ils seraient heureux d'aider à sortir les bugs de leur cumake. LLVMDEV est une liste de diffusion très utile.


Ok, mais je ne vois pas pourquoi c'est nécessaire quand ./configure --enable-partagé semble fonctionner correctement.


llvm.org/docs/cmake.html <- ne faisant pas partie de la documentation 2.8, mais ils utilisent cmake.


Adam Mitz - Bien que cela soit vieux, voir la situation plus récente "Le projet LLVM ne prend plus en charge le bâtiment avec configuration et fabrication". alors configurer ne fonctionne plus. Ils ont changé de cmake et de cmake ont une syntaxe terrible par rapport à GNU AutoConfigure. Ou pouvez-vous facilement trouver l'équivalent de --enable partagée via CMAKE et que cela fonctionne de manière cohérente sur tous les projets?



0
votes

Essayez de lire Cette page puis posez sur le llvmdev liste si cela n'aide pas.


4 commentaires

Ce que j'ai vu de la débâcle de cmake à Boost, c'est que lorsque le Core Devs ne l'utilise pas et l'endorçait comme le mécanisme de construction officiel, il ne vaut pas la peine de dépenser votre temps. Peut-être que LLVM est différent à cet égard, mais ma tentative d'une construction partagée-lib sans cmake a été réussie.


Quelques-uns des ingénieurs Apple qui fonctionnent sur LLVM utilisent CMAKE pour générer un projet Xcode 4. Cmake est également utilisé par la poignée de romantiques sans espoir que un jour veut que Clang soit un remplacement d'une chute de MSVC. Autre que cela, tout le monde sensible utilise l'autoconf et effectue un système de construction. (Les constructions officielles de l'équipe de construction et d'intégration d'Apple utilisent les trucs dans LLVM / Utils / Buildit, qui est également basé sur les trucs autoconf / make.)


Cela ressemble à une approbation des autotools au lieu de CMAKE, sauf si je suis mal compris. Je dois accepter même si je ne suis pas fan de AutoTools (c'est bon comme un utilisateur, je ne voudrais pas le toucher comme mainteneur).


AutoTools a été clairement forgé en enfer par des saditistes enfers penchés sur l'augmentation de vos temps de construction par manque de parallélisme et une complexité accrue. Peut-être qu'ils sont friands de XKCD . Quoi qu'il en soit, le problème réel ici est que la construction d'AutoTools de LLVM est mieux entretenue. Pour moi, le tueur est que la construction Cmake ne gère pas du tout des compilateurs croisés.



5
votes

Après beaucoup d'enquête (Google, Source et LLVMDev Mail-List), j'ai découvert que ce problème est en fait un problème avec la version 2.8, la compilation des bibliothèques partagées utilisant CMAKE dans cette version est cassée. Je portais ma bibliothèque maintenant à la version 2.9rc1 qui fonctionne bien et qui devait déjà être publiée bientôt, merci pour toutes les réponses.


9 commentaires

1) CMAKE fournit une portabilité entre différents compilateurs, y compris GCC, Visual Studio, etc. 2) Ma bibliothèque utilise CMake 3) Autotools = AutoHell 4) LLMV est disponible pour CMAKE 5) Je peux intégrer à l'aide du module de cumake LLVM Native 6). ) Il n'y a pas de choix à ce point de mon projet


Je pense que vous répondez à une question différente. La question était la raison pour laquelle vous devez construire LLVM avec CMAKE, et non la raison pour laquelle vous avez décidé d'utiliser CMAKE pour votre propre projet.


L'homme, le seul moyen d'installer automatiquement les modules Cmake LLVM utilise CMAKE pour construire LLVM, et j'ai besoin de ces modules pour ma bibliothèque.


Je vais me rappeler que la prochaine fois, je déciderai d'utiliser ou non cmake. Il semble avoir cette propriété "infectie" que je préfère éviter.


Quelle propriété "infectieux"?


Il s'agit de projets externes infectant - simplement parce que vous souhaitez utiliser CMAKE pour construire votre propre logiciel, vous êtes obligé de (encourager? Préférer?) Utilisez-le pour construire un logiciel 3ème partie (LLVM).


@Adam: La même chose va pour libtoure, il place également les fichiers .la capté par d'autres projets. Dang Man, donne un repos. Cmake est meilleur dans certains aspects et Autools est l'enfer pour certaines personnes (comme moi). Au moins, les modules de cumake livrés permettent de «officiellement» détecter les bibliothèques LLVM, où les auto-autostics vous devez évoquer vous-même la magie.


Encore une fois, l'argument est changé au lieu de répondre à. La question est / non / non / si la cmake est meilleure en général. La question est de savoir comment construire le logiciel de quelqu'un d'autre: la façon dont ils recommandent et approuve, ou la façon dont une minorité vocale préfère?


Adam Mitz - Souvent, vous n'avez pas beaucoup de choix. Gnome a récemment passé à Meson et Ninja, vous devez donc les avoir disponibles; et Mesa en particulier nécessite une construction commune de LLVM. S'il vous plaît ne pas distraire et aidez plutôt les gens. Tarantula a demandé de l'aide et vous ne l'aidez pas à Adam Mitz.