Создавая Универсальные расширения для Perl, Python и Ruby

С появлением процессора Intel семье Macintosh программное обеспечение должно компилироваться/соединяться для работы многократной архитектуры. В OS X v10.4 и предыдущий, расширения, созданные perl, python и ruby только обычно создавал бы для собственной архитектуры. В OS X v10.5 и позже, расширение создается универсальное по умолчанию, и это может быть настроено.

Содержание:

Создание Universal

Включая 64-разрядную архитектуру в настоящее время существует 4 архитектуры, которая может быть создана:

Имя архитектуры

Описание

i386

(32-разрядный) Intel

PPC

(32-разрядный) PowerPC

ppc64

(64-разрядный) PowerPC

x86_64

(64-разрядный) Intel

Например, чтобы сказать компилятору и компоновщику создавать две 32-разрядной архитектуры (который является обычной установкой), следующие параметры командной строки использовались бы:

-arch i386 -arch ppc

Создавая Perl, Python и расширения Ruby

Процесс здания perl, python и ruby расширения подобны этому на других платформах. Для perl, это смотрит что-то как:

% perl Makefile.PL
% make
% make install

Для python, это смотрит что-то как:

% python setup.py install

И для ruby:

% ruby extconf.rb
% make
% make install

Все параметры компилятору и компоновщику автоматически сгенерированы, и так как большинство других операционных систем не имеет понятия многократной архитектуры, perl, python и ruby не знайте, как иметь дело с ними. Возможно вынудить дополнительные параметры архитектуры использоваться компилятором и компоновщиком, но это не симпатично.

Для perl, переопределение некоторой переменной Make-файла работает во многих случаях (хотя не единственный путь):

% perl Makefile.PL
% make PASTHRU_INC='-arch i386 -arch ppc' LD='cc -arch i386 -arch ppc'
% make install

Аналогично, для python, это обычно работает:

% env CFLAGS='-arch i386 -arch ppc' LDFLAGS='-arch i386 -arch ppc' python setup.py install

И для ruby:

% env CFLAGS='-arch i386 -arch ppc' LDFLAGS='-arch i386 -arch ppc' ruby extconf.rb
% make
% make install

OS X v10.5 и позже

В OS X v10.5 и позже, значение по умолчанию для perl, python и ruby расширения должны создать две 32-разрядной архитектуры. В большинстве случаев это - то, что желаемо, таким образом, не будет никакого различия в процедурах сборки.

Однако в течение тех времен, когда различный набор архитектуры желаем, новая переменная окружения может использоваться для изменения этого. Например, для создания a perl расширение только для 32-разрядного PowerPC, можно использовать:

% env ARCHFLAGS='-arch ppc' perl Makefile.PL
% make
% make install

или для python:

% env ARCHFLAGS='-arch ppc' python setup.py install

или для ruby:

% env ARCHFLAGS='-arch ppc' ruby extconf.rb
% make
% make install

Или, можно установить ARCHFLAGS переменная окружения глобально, и затем просто выполненный нормальные команды сборки/установки.