Как вручную собрать универсальный рубин на Mac OS X? Как насчет rvm?

Я получил исходники Ruby из официального зеркала git, а затем просмотрел ветку ruby_1_9_2.

git clone http://github.com/ruby/ruby.git
git checkout rubyruby_1_9_29_2

Итак, сейчас я хочу скомпилировать 1.9.2-head. Но, как вы увидите позже, я надеюсь на решение, которое подойдет и для 1.8.

Стандартный способ скомпилировать это:

autoconf
./configure
make
make install

Это работает, но дает мне сборку только для x86_64:

$ ruby -v
ruby 1.9.2dev (2010-06-14 revision 28321) [x86_64-darwin10.3.0]

Очевидно, что меня не волнует PPC, поскольку я использую 10.6, но я хочу иметь и i386, и x86_64, потому что некоторые вещи нужно делать в 32-разрядной версии.

Итак, что я хочу знать:

  1. волшебные песнопения для создания толстого двоичного файла с архивами i386 и x86_64.
  2. Мне также было бы интересно сделать то же самое с моими рубиновыми версиями RVM.

Возможно ненужная системная информация:

$ system_profiler -detailLevel mini SPSoftwareDataType | ack '^ {6}' | head -3
      System Version: Mac OS X 10.6.4 (10F569)
      Kernel Version: Darwin 10.4.0
      64-bit Kernel and Extensions: No

$ uname -a
Darwin meaningless.local 10.4.0 Darwin Kernel Version 10.4.0: Fri Apr 23 18:28:53 PDT 2010; root:xnu-1504.7.4~1/RELEASE_I386 i386

person kch    schedule 29.06.2010    source источник


Ответы (2)


Используйте параметр --with-arch, чтобы ./configure:

$ ./configure --with-arch=x86_64,i386

--with-arch принимает разделенный запятыми список архитектур, для которых должен быть построен Ruby.


добавил kch:

Вывод после успешной сборки:

$ file ruby
ruby: Mach-O universal binary with 2 architectures
ruby (for architecture x86_64): Mach-O 64-bit executable x86_64
ruby (for architecture i386):   Mach-O executable i386

$ arch -i386 ./ruby -v
ruby 1.9.2dev (2010-06-29 revision 28468) [universal.i386-darwin10.4.0]

$ arch -x86_64 ./ruby -v
ruby 1.9.2dev (2010-06-29 revision 28468) [universal.x86_64-darwin10.4.0]

$ ./ruby -v
ruby 1.9.2dev (2010-06-29 revision 28468) [universal.x86_64-darwin10.4.0]
person mipadi    schedule 29.06.2010
comment
Нет проблем, я сам собирался обновить его соответствующими выходными данными. - person mipadi; 29.06.2010
comment
@zengr Задайте новый вопрос по вашей проблеме, постараюсь помочь. - person kch; 11.07.2010
comment
@kch Спасибо, вопрос размещен здесь: stackoverflow.com/questions/3197686/ - person zengr; 12.07.2010

Что касается RVM, говорится, что у вас не может быть толстых двоичных файлов, но это не так, поскольку из этого коммита, который включает мой патч.

Используя последнюю версию rvm, вы можете установить ruby-1.9.2-head, используя тот же флаг конфигурации, что и при ручной сборке:

$ rvm install ruby-1.9.2-head -C --with-arch=x86_64,i386

Доказательство того, что он якобы работает:

$ rvm use 1.9.2-head
info: Using ruby 1.9.2 head

$ file `which ruby` | perl -pe 's|^.*/||'
ruby: Mach-O universal binary with 2 architectures
ruby (for architecture x86_64): Mach-O 64-bit executable x86_64
ruby (for architecture i386):   Mach-O executable i386
person kch    schedule 29.06.2010
comment
Просто к сведению, не работает для 1.8.7-p352, простое сравнение файлов configure.in показало, что часть поддержки мультиархива, присутствующая в 1.9.2, отсутствует в 1.8.7. - person ; 03.10.2011
comment
Похоже, это не работает для ruby-2.0.0; у меня не получается с Error running '__rvm_make -j 1', привязанным к ld: unknown option: -fstack-protector в журнале. - person Sai; 05.11.2013