Создание универсальных двоичных файлов на Mac — форсирование одного дочернего процесса компилятора

Ваше здоровье,

в компании мы создаем порт наших игр, и нам нужно скомпилировать PythonOgre, оболочку Ogre3d для Python. Это огромный кусок кода, особенно сгенерированный код оболочки. У нас есть Mac Mini с 1 ГБ оперативной памяти.

Мы построили версию i386. Поскольку у нас всего 1 ГБ ОЗУ, мы заставили систему сборки использовать только одно ядро; второй процесс, работающий в то же время, совершил приятное путешествие в виртуальную память.

Теперь нам нужно создавать универсальные бинарники, потому что издатель настаивает на поддержке PPC. Чтобы упростить сборку универсальных двоичных файлов, мы изменили CFLAGS и CXXFLAGS, чтобы включить -arch i386 -arch ppc при компиляции кода оболочки (сам Ogre3d уже кажется универсальным двоичным файлом).

Однако Apple решила использовать оба ядра при создании универсального двоичного файла, и это привело к тому, что система перевернулась и умерла. (Ну, в любом случае, сканируйте при 0,9-1,4% загрузки ЦП.) Хотя обычно мы были бы признательны за это, на Mac Mini с 1 ГБ это полностью блокирует нашу разработку.

Помимо получения новой машины для сборки, отказа от поддержки PPC и создания сборки только для PPC, единственный выход, который у нас есть, — это заблокировать создание GCC второго одновременного процесса.

Как бы мы это сделали?


person Ivan Vučica    schedule 08.10.2009    source источник
comment
Конечно, было бы дешевле получить лучшую сборочную машину или, по крайней мере, увеличить ее память.   -  person mmmmmm    schedule 08.10.2009
comment
@Mark, абсолютно точно: 4-гигабайтные комплекты оперативной памяти для Intel Mac Minis стоят около 90 долларов США от авторитетных сторонних поставщиков (в США, но я не думаю, что они будут стоить это намного дороже в Хорватии). ) - определенно лучший подход здесь, ИМХО.   -  person Alex Martelli    schedule 08.10.2009
comment
Я не уверен, что вы, ребята, имеете в виду под более дешевым - это разовая сборка, и обычно мы не будем строить такие большие обертки :-) Тем не менее, это было первое, что я предложил не потому, что это дешево, а потому, что это быстро сделать.   -  person Ivan Vučica    schedule 10.10.2009


Ответы (2)


Я проверил исходный код драйвера Apple GCC (тот, который поддерживает эти параметры -arch и запускает дочерние процессы), и нет ни одного параметра или переменной среды, которую вы можете выбрать.

Единственные варианты, которые я вижу для вас, это:

  • загрузите драйвер Apple (например, с здесь; конец страницы) и измените файл driverdriver.c чтобы процессы запускались последовательно (а не параллельно)
  • делать отдельные сборки i386 и powerpc и объединять окончательные объекты сборки (исполняемые файлы, общие библиотеки и т. д.) с помощью lipo

Надеюсь, это поможет!

person F'x    schedule 08.10.2009
comment
Спасибо! Я взглянул на код драйвера (darwin-driver.c), но так как я не могу быстро найти вызов fork(), мы не пойдем по этому пути. С другой стороны, вчера мы быстро создали сборку ppc, и lipo кажется довольно простым в использовании, поэтому мы объединим i386 и ppc .so с lipo. Благодарю вас! - person Ivan Vučica; 10.10.2009
comment
Драйвер не вызывает fork() напрямую, он вызывает функцию с именем pexecute(), которая скрывает характерное для системы поведение (GCC работает на платформах, отличных от POSIX, таких как Windows! библиотека, обеспечивающая это, — libiberty, которая включена в GCC). ). - person F'x; 13.10.2009

Достаточно ли просто отключить одно ядро? По-видимому, установка Apple Developer Tools (XCode и др.) дает вам панель настроек системы процессора, позволяющую отключить одно ядро. Я пытался проверить это, но по какой-то причине установка XCode не удалась...

РЕДАКТИРОВАТЬ: Я знаю, что это было некоторое время назад, но я просто кое о чем подумал. Почему бы не построить с -march=i386 и -march=ppc отдельно, а затем объединить двоичные файлы с помощью lipo?

person Chinmay Kanchi    schedule 09.10.2009
comment
Я только что установил его, и он работает, как рекламируется. Если prefPane не удается установить после установки инструментов разработчика, вы можете найти его в /Developer/Extras/PreferencePanes/ при условии, что вы установили инструменты разработчика в папку по умолчанию. - person Chinmay Kanchi; 09.10.2009
comment
В настоящее время мы создаем версию только для PPC (сроки, о, сроки), поэтому я не могу протестировать. Но я подозреваю, что это делает то же самое, что и /Library/Application Support/HW Prefs/CPU Palette, что НЕ помогло, поскольку GCC не действовал на основании того факта, что активно только одно ядро, и с радостью породил второй процесс. - person Ivan Vučica; 09.10.2009