Так как Apple прекратила распространять gfortran с Xcode, как мне скомпилировать независимый от архитектуры Fortran-код? У меня есть Mac OS X Mountain Lion (10.8) и XCode 4.4 с установленным пакетом Command Line Tools.
Ядровые компиляторы Apple
Насколько я могу судить, компиляторы Xcode C/С++/ObjC используют вилку сборник компилятора GNU, llvm в качестве бэкэнд; последнее, что я считаю, позволяет компилировать и оптимизировать "универсальные" двоичные файлы, как для архитектуры Intel, так и для PPC.
Сторонние бинарные компиляторы Fortran
ГПЦ
Я нашел только один веб-сайт, который распространяет двоичную версию gfortran специально для Mountain Lion: HPC. Тем не менее, мне не удалось это сделать, чтобы скомпилировать SciPy, а затем увидели в SciPy README, что "известно, что генерируют багги-скупые двоичные файлы" .
КРАН/Р
Рекомендованный SciPy (бесплатный) компилятор Fortran - это сервер CRAN R, но он еще не обновлен для Mountain Lion. Они предоставляют инструкции и script для Построение универсального компилятора, но, опять же, это еще не обновлено для Mountain Lion.
G95
проект G95 не обновлялся с 2010 года, поэтому я не пробовал его. Любой пробовал это на Mountain Lion
MacPorts
Я предполагаю, что это будет самый простой способ установить gfortran, но port search gfortran
ничего не придумает, и в прошлом я не испытывал радости от MacPorts (без обид MacPorts, он выглядит очень активным проект, но я испорчен менеджерами пакетов Linux, мой любимый менеджер - aptitude), поэтому на Mac OS X я уже скомпилировал программное обеспечение и библиотеки из исходного кода. Никогда не было проблемой до сих пор...
Построение компилятора Fortran
Много раз за последние пару дней я много раз вырыл в Интернете, я нашел других компиляторов Fortran, но мне не удалось получить кросс-компиляцию универсальных двоичных файлов или компиляцию SciPy.
GCC - Сборник компиляторов Gnu
Я собрал всю коллекцию GCC (v4.6.3), включая autotools, automake, libtool и m4 - как GCC wiki и этот блог описывают - но результирующие компиляторы не компилировать универсальные двоичные файлы, возможно потому, что LLVM не использовался в качестве бэкэнд.
DragonEgg
DragonEgg является "gcc-плагином, который заменяет GCC-оптимизаторы и генераторы кода... с LLVM". Это выглядит интересно, но я не знаю, как использовать его для компиляции 'llvm-gfortran-4.x'. Это можно сделать?
Совместимость
Библиотеки
Компилятор, который поставляется с Xcode, является (fork of?) GCC v4.2. Но текущие выпуски релизов и развития GCC - версии 4.6 и 4.7 соответственно. Видимо, изменение лицензии GNU, или что-то, остановило Apple от обновления до более современных версий GCC. Итак, если бы я должен был создавать динамические библиотеки, созданные с GCC gfortran v4.6, могли бы они быть связаны с C-кодом, скомпилированным родным компилятором Xcode? Как минимум, я считаю, что получаемые бинарные файлы Mach-O нуждаются в кодах кода x86_64 и i386. GCC обеспечивает обратную совместимость с Apple (forks of?) GCC? Я знаю, что gfortran имеет -ff2c
флаг, но является ли он стабильным в разных версиях?
Компилировать флаги
Компилятор GCC Fortran, который я создал из источника, не поддерживал использование флага компиляции -arch
. Я включил флагов -arch x86_64 -arch i386
в обоих переменных CFLAGS и FFLAGS для более ранних версий OSX (Snow Leopard to Lion). Python distutils и, возможно, другие компиляторы OSX ожидают, что эти флаги будут работать при настройке для создания приложений или фреймворков, используя универсальный SDK Xcode.
В случае, если вам интересно, какие флаги компиляции я использую, я загрузил script, который я использую для pastebin, который я source
, прежде чем компилировать что-нибудь, используя: source ~/.bash_devenv
.
Идеальный компилятор OSX Fortran
- Создайте универсальные двоичные файлы ppc и intel (32 и 64 бит), заданные с помощью флагов
-arch
. - Делает двоичные файлы совместимыми с компоновщиком XCode.
- Скомпилирует SciPy, не давая ошибок (совместим с numpy distutils и f2py).
Я не использую Xcode так много, но интеграция с ним наверняка принесет пользу другим пользователям. Даже Intel по-прежнему имеет проблемы, интегрируя ifort в Xcode 4.4, так что это не то, что я ожидаю работать.
Если вы прочтете все вышеизложенное, тогда спасибо! Вы, вероятно, можете сказать, что я не прочь создать собственный компилятор Fortran из источника, но возможно ли это? Я что-то пропустил? Может быть, флаг настройки? И если такой компилятор пока недоступен, то почему бы и нет?!
(Обновление:) Apple GCC
Apple предоставляет исходный код для их исправленной версии GCC, opensource.apple.com. На самом деле это включает исходный код gfortran, но что вы знаете - он не компилируется (легко). Я собираюсь написать сборку script, чтобы заставить ее работать. К сожалению, мне пришлось применить пару патчей и узнать о "путь Apple" для создания программного обеспечения GNU. Думаю, это путь. Любые причины, почему этого не должно быть? Я обновлю ответ, если я его заработаю...