Comment compiler les binaires Fortran distribuables sur Mac OS X Mountain Lion?
Depuis Apple a arrêté de distribuer gfortran avec Xcode, comment dois-je compiler indépendant de l'architecture code Fortran? J'ai Mac OS X Mountain Lion (10.8), et XCode 4.4 installé, avec la Outils De Ligne De Commande paquet installé.
Apple Natif de Compilateurs
Autant que je peux dire, le Xcode C /C++ /ObjC compilateurs utilisent une fourchette de la La collection de compilateurs GNUavec llvm comme un back-end; le dernier, j'ai la figure permet la compilation et l'optimisation de la "universelle" des binaires pour les processeurs Intel et PPC architectures.
3ème partie binaire compilateurs Fortran
HPC
J'ai trouvé qu'un seul site web qui distribue une version binaire de gfortran spécifiquement pour Mountain Lion: le HPC site web. Cependant, je n'ai pas réussi à obtenir ce pour compiler SciPy, et plus tard a vu dans SciPy du fichier README qu'il est "connu pour générer buggy scipy binaires".
CRAN/R
SciPy est recommandé (free) compilateur Fortran est la CRAN de la R serveur, mais cela n'a pas été mis à jour pour Mountain Lion encore. Ils fournissent des instructions et un script pour La construction d'un Compilateur Universellemais, encore une fois, cela n'a pas été mis à jour pour Mountain Lion encore..
G95
La G95 projet n'a pas eu une mise à jour depuis 2010, donc je n'ai pas essayer.. quelqu'un a essayé ce sur la Montagne du Lion?
MacPorts
Je suppose que ce sera la meilleure façon d'obtenir gfortran installé, mais port search gfortran
arrive avec rien, et je n'ai pas eu du tout de la joie avec MacPorts dans le passé (n'en déplaise à MacPorts; il ressemble à un projet actif, mais j'ai été gâté avec Linux gestionnaires de paquets, mon préféré manager d'aptitude) donc sur Mac OS X, j'ai compilé les logiciels et les bibliothèques de code source dans le passé. Jamais été un problème jusqu'à maintenant...
La construction d'un compilateur Fortran
Avoir creusé autour sur l'internet, beaucoup de choses dans le dernier couple de jours, j'ai trouvé d'autres compilateurs Fortran, mais je n'ai pas réussi à obtenir tout de cross-compiler les binaires universels, ou de compiler SciPy.
GCC Gnu compiler Collection
J'ai compilé l'ensemble de la GCC collection (v4.6.3), y compris les autotools, automake, libtool et m4 - comme le GCC wiki et ce blog décrire - mais le résultat de compilateurs ne pas compiler les binaires universels, probablement parce que LLVM n'était pas utilisé comme un back-end.
DragonEgg
DragonEgg est un "gcc plugin qui remplace de GCC optimisateurs et-générateurs de code ... avec LLVM". Cela semble intéressant, mais je ne sais pas comment je pourrais l'utiliser pour compiler 'llvm-gfortran-4.x'. Cela peut-il être fait?
Compatibilité
Bibliothèques
Le compilateur fourni avec Xcode est (un fork de?) GCC v4.2. Mais de GCC version actuelle et des branches de développement sont des versions 4.6 et 4.7, respectivement. Apparemment, une licence GNU changement, ou quelque chose, cessé d'Apple à partir de la mise à jour vers des versions plus modernes de la GCC. Donc, si j'étais à construire les bibliothèques dynamiques réalisés avec du CCG gfortran v4.6, pourraient-ils être lié à du code C compilé par Xcode du compilateur natif? Au minimum, je figure résultant de Mach-O binaires ont besoin à la fois et i386 et x86_64 chemins de code. Ne GCC fournir une compatibilité ascendante avec Apple (fourches?) GCC? Je sais gfortran a la -ff2c
drapeaumais est-ce stable entre les versions?
Compiler flags
La GCC compilateur Fortran j'ai construit à partir de la source ne prend pas en charge l'utilisation de la -arch
drapeau de compilation. J'avais été y compris les drapeaux -arch x86_64 -arch i386
dans les deux variables CFLAGS et FFLAGS variables d'environnement sur les anciennes versions OSX (Snow Leopard à Lion). Python distutils, et probablement d'autres OSX compilateurs, attendre de ces drapeaux de travail, lorsqu'il est configuré pour créer des applications ou des cadres, à l'aide de Xcode universel du SDK.
Dans le cas où vous vous demandez quoi compiler flags j'utilise, je l'ai téléchargé le script que j'utilise pour pastebinje source
avant de me compiler quoi que ce soit, à l'aide de: source ~/.bash_devenv
.
L'Idéal OSX Compilateur Fortran
- Créer ppc et intel (32 et 64 bits) les binaires universels, spécifié à l'aide de la
-arch
drapeaux. - Fait binaires compatible avec XCode de l'éditeur de liens.
- Compile SciPy, sans donner d'erreurs (compatible avec numpy est distutils et f2py).
Je n'ai pas utiliser Xcode beaucoup de choses, mais l'intégration avec il serait certainement bénéficier à d'autres utilisateurs. Même Intel sont toujours avoir des problèmes l'intégration ifort dans Xcode 4.4, donc ce n'est pas quelque chose que je m'attends à travailler..
Si vous avez lu tout ce qui précède, alors merci! Vous pouvez dire que je ne suis pas opposé à la construction de ma propre compilateur Fortran de la source, mais est-il même possible? Ai-je raté quelque chose? Configurer drapeau peut-être? Et si un tel compilateur n'est pas encore disponible, alors pourquoi pas?!
(Mise à jour:) Apple GCC
Apple de fournir le code source de leurs patché la version de GCC, à opensource.apple.com. Cela inclut le code source pour gfortran, mais que savez-vous - cela ne compile pas (facilement). Je suis en train d'écrire un script de compilation pour obtenir que cela fonctionne. Malheureusement, j'ai dû appliquer un couple de patchs, et d'apprendre sur "la Pomme façon" de construire des logiciels GNU. C'est la voie à suivre je pense. Toutes les raisons pour lesquelles il ne devrait pas être? Je vais mettre à jour avec une réponse si je le faire fonctionner...
source d'informationauteur Alex Leach
Vous devez vous connecter pour publier un commentaire.
J'ai réussi à compiler après l'installation de gfortran de http://r.research.att.com/tools/gcc-42-5666.3-darwin11.pkgcomme expliqué ici. J'ai dû essayer d'ouvrir le colis une couple de fois, si. Première fois il a dit que seuls les apps de l'App Store peuvent être installés. Après l'installation de gfortran,
python setup.py build
etpython setup.py install
a bien fonctionné. Les tests unitaires de scipy bien donner un nombre assez élevé d'échec, pas sûr que c'est normal.Dans le cas où vous ne l'aviez pas déjà remarqué ceci: Dans les nouvelles versions de Xcode, vous devez explicitement installer les outils de ligne de commande de la manière suivante:
Préférences -> Téléchargements -> Composants
Puis cliquez sur le bouton "installer" pour les outils de ligne de commande. Cela comprend gfortran:
Certes, cela ne résout pas tous mes fortran besoins (dans certains cas "./configurer les scripts vont se plaindre qu'ils ne peuvent pas "de compiler un simple fotran programme").
Vous pouvez utiliser brew (ou Homebrew) pour installer gfortran.
$ brew install gfortran
Je sais que vous avez dit que vous n'aimez pas MacPorts, mais si vous installez le
gcc48
port, il inclut en fait,gfortran
(bien que vous aurez également à fairesudo port select --set gcc mp-gcc48
pour obtenir la mise en place du lien symbolique nommégfortran
).Aussi, FWIW, les MacPorts option n'est pas nécessairement binaire MacPorts pouvez réellement construire à partir de la source, ce qui est pourquoi il prend parfois un certain temps. D'autre part, il semble parfois qu'on archive les fichiers binaires à partir de quelque part, mais je pense que ça dépend de ce que l'auteur original de la portfile téléchargé.
J'ai fini de compiler gfortran le code source fourni à Apple outils de développement de code source de la page. Cela semble être ok maintenant - j'ai compilé avec succès x86-64 et les architectures i386, i686 LAPACK, ATLAS et BLAS fortran bibliothèques - mais il y a quelques ranlib tests qui échouent, lors de l'exécution de
make -k test
dans les répertoires de construction. (Je pourrais donner plus d'infos sur pastebin ou quelque part, si quelqu'un veut...)Processus de construction
Après avoir posé la question, j'ai téléchargé Apple llvmgcc42 code source de l'archive tarqui inclut le code source de llvm/gcc C, C++, ObjC et compilateurs fortran, et a passé du temps à essayer de compiler une version universelle de gfortran. La construction prend environ 30 à 60 minutes sur mon quad-core 2.8 GHz Mac Pro, et est devenu tout à fait un processus complexe, j'ai donc écrit un ensemble de scripts, ce que j'ai partagé à github.com.
....
Je vais garder une archive tar de mon build ici pour le moment, si quelqu'un voudrait une copie. (Mise à jour 26-Sep-2012), Il ne fonctionnera que si installé avec un préfixe de /usr/local/si, sauf si vous exécutez
install_name_tool
sur les exécutables et les dylibs pour changer le préfixe à partir de /usr/local à l'endroit où vous voulez le mettre. Vous pouvez tester install_name's avecotool -L filename
(plus d'info sur les raisons pour cela est ici).La finale de la construction, je suis maintenant en utilisant inclut également des mises à jour de la gcc/fortran et libgfortran répertoires, que j'ai reçu de GNU GCC 4.2.4. Ces sources que j'ai de mon local GCC du miroir. Il n'y avait que des changements mineurs entre 4.2.1 et 4.2.4, et les scripts de construction incluent les correctifs nécessaires pour améliorer le code.
La build-gfortran.sh script j'ai écrit télécharge les dépendances manquantes (mpfr et gmp), compile et cross-compile, patchs différents en-têtes avec des dépendants de l'architecture des macros du préprocesseur, et exécute lipo pour créer universel de fichiers binaires et les bibliothèques, éventuellement soutenir à la fois les architectures i386 et x86_64. Le processus est similaire pour llvmCore, puis GCC. J'ai surtout code copié à partir de la build_llvm et build_gcc scripts bash fourni avec Apple llvmgcc42, mais il a quelques de il a dû être modifié, y compris quelques
lipo
etinstall_name_tool
commandes.Officiel pour compiler Apple gcc, en utilisant Xcode est
gnumake
n'a pas fonctionné pour moi. Je pensais que cela devrait fonctionner byadding "fortran" pour les LANGUES variable dans build_gcc.En ce qui concerne la compilation de Scipy, toujours pas que la construction de la perfection. J'ai eu à utiliser llvm et clang++ que les compilateurs C/C++, ou autre chose-je obtenir EXC_BAD_ACCESS malloc erreurs. N'avez pas essayé le gcc/g++ compilateurs j'ai construit, juste utilisé le système. C'est comme signalé pour le Lion, sur le Scipy page d'installation. Je suis en bas à 11 erreurs et 1 échec, qui sont tous soulevées dans le même 3 appels de fonction (_fitpack._bspleval, numérique.asarray, tests.utils.chk_same_position). Pense que c'est assez bon, mais j'aimerais que tous les tests à passer...