LINUX.ORG.RU
Ответ на: комментарий от Sylvia

Ну вот сейчас дособерется - попробую :)

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

aix27249
() автор топика
Ответ на: комментарий от aix27249

CFLAGS ? или что-то наподобие #pragma в исходниках ?
если второе - не знаю.

Sylvia ★★★★★
()
Ответ на: комментарий от aix27249

>Кстати, я правильно понимаю что использование или неиспользование этих оптимизаций при компиляции приложений можно выбирать флагами на лету?

В Gentoo можно сделать использование персональных флагов сборки (и, вообще, выбирать разные компиляторы) для конкретных пакетов.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

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

Sylvia ★★★★★
()
Ответ на: комментарий от KRoN73

> В Gentoo можно сделать использование персональных флагов сборки (и, вообще, выбирать разные компиляторы) для конкретных пакетов

и как указать, к примеру, portage, что emerge должен собирать один пакет gcc-4.3.3, а другой — gcc 4.4.3? C paludis вроде понятно, в bashrc пишем ветвистую лапшу и устанавливаем CFLAGS, PATH и т.п. как хотим. А в emerge это как будет?

Ещё, я тут пересобираю через crossdev MinGW-ом избранные пакетики. И сразу вопрос, вот emerge-wrapper есть, i686-pc-mingw32-emerge или emerge-i686-pc-mingw32, а враппера для ebuild.sh нету (хотя пишется по аналогии на коленке легко).

Но в общем случае вопрос тот же, по поводу профиля portage. Как указать, к примеру, что пакеты для crossdev-emerge надо брать из конкретного оверлея, а не из основного дерева? Как задать «собирать конкретной версией тулчейна», если их несколько и не хочется плодить i686-pc-mingw32-XXXv1/v2 ?? Как задать конкретные use-флаги для конкретного оверлея в emerge? (например, из оверлея ported-2FBSD собираем с elibc_FreeBSD вместо elibc_glibc?)

С paludis как-то проще всё, хотя и нет рабочего аналога crossdev «из коробки», но наколбасить скрипт по аналогии и задать всё, что нужно через bashrc можно просто (или вообще наклонировать /etc/paludis-1, /etc/paludis-2 и задавать paludis --environment paludis-1 по умолчанию).

anonymous
()
Ответ на: комментарий от Sylvia

> Gentoo как среда с автоматизацией сборки даже менее удобна в этом плане , чем среда с ручной сборкой,

ага. Посмотрел на crossdev-wrappers и сразу захотелось в Arch, к простым PKGBUILD'ам.

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

тогда автоматизированный вариант должен быть автоматизирован экстремально: позволять задавать произвольные настройки «ручной сборки» в качестве профиля пакетного менеджера, так, чтобы при этом одним рецептом ebuild/pkgbuild без изменений можно было собрать под любую кросссистему. Пока обходимся «палками и верёвками», полуручная заданная среда с врапперами.

Имеющийся профиль в Генте недостаточно расширяем. Например, взяли gcc-config c одной активной версией, посмотрели gcc-config -E другая PATH, задали его и собрали — и emerge будет думать, что собирали другой версией. Хотя ЕМНИП, он вообще не отслеживает, какой версией gcc собирали, в итоге можем при пересборке напасть на какой-нибудь древний пакет вроде xbase, который собирался gcc 4.1, но уже не собирается gcc 4.4

В идеале, хотелось бы что-нибудь вроде continuous intergration (потому что сборка 9999 scm live ebuild-ов — это тоже ССЗБ, без гарантий, что соберётся вообще или что 9999 не устарел очень сильно, или что тулчейн сильно не поменялся и всё ещё собирает нашу scm версию). Что-то вроде Nix в качестве пакетного менеджера (чтобы задавать зависимости на версии тулчейна, параметры среды сборки, которые сейчас проще собирать вручную) + Hydra в качестве continuous build фермы.

anonymous
()
Ответ на: комментарий от Sylvia

>CC=icc CFLAGS="-O2 -xT -i-static" emerge gzip

ненене. А то давай еще DESTDIR руками укажем, тогда сам ч0ртЪ не разберется, с какими флагами, что и куда собирали. Ну не грепать же логи сборки на предмет переменных, в самом деле. Сделаем потом emerge -v конкретная версия, и все красоты, заданные через переменные затрутся и потеряются. Оно должно идти в новый, обновлённый профиль, по идее.

anonymous
()
Ответ на: комментарий от anonymous

/var/db/pkg/app-arch/bzip2-1.0.5-r1 :$cat CC CFLAGS CXX CXXFLAGS
fgcc
-O2 -fomit-frame-pointer -g0 -mfpmath=sse,387 -msse2 -march=pentium4 -pipe
fg++
-O2 -fomit-frame-pointer -g0 -mfpmath=sse,387 -msse2 -march=pentium4

ай? в /var/db/pkg все сохраняется, чем и с какими флагами...

Sylvia ★★★★★
()
Ответ на: комментарий от Sylvia

в виде логов — да. Но если мы потом сделаем reinstall того пакета, то не факт что все настройки сохранятся (/me не уверен, побежал проверять). По крайней мере, версия gcc, которая Last known good не сохраняется

anonymous
()
Ответ на: комментарий от anonymous

>и как указать, к примеру, portage, что emerge должен собирать один пакет gcc-4.3.3, а другой — gcc 4.4.3?

Да. У меня, правда, сделан упрощённый вариант, подходит для пакетов, которые можно собрать другой версией компилятора без смены по gcc-config. Т.е. просто вызывается, например:

# /etc/portage/package.comppilers
app-arch/gzip gcc-4.1.2 g++-4.1.2

Как указать, к примеру, что пакеты для crossdev-emerge надо брать из конкретного оверлея, а не из основного дерева?


Понятия не имею, я сrossdev вручную не ковырялся. Но в Gentoo перед сборкой любого пакета можно вызывать свой bash-скрипт, который и подготовит всё, что нужно, при желании.

KRoN73 ★★★★★
()
Ответ на: комментарий от Sylvia

>хотя может у KRoN73 есть и другой вариант покрасивее

Мой /etc/portage/bashrc:
http://dpaste.com/150719/

По умолчанию - обычно поведение.

Если пакет указан в /etc/portage/package.icc, то пакет соберётся через icc.

Ещё есть /etc/portage/package.icc-cflags и /etc/portage/package.gcc-cflags для указания персональных опций компиляции.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

>/etc/portage/package.gcc-cflags с флагами для пакета
и

/etc/portage/env/категория/имя_пакета с флагами для пакета

это одно и тоже?

megabaks ★★★★
()
Ответ на: комментарий от megabaks

>и при пересборке мира, например, gzip будет автоматом собран gcc-4.1.2?

Да.

KRoN73 ★★★★★
()
Ответ на: комментарий от megabaks

>это одно и тоже?

Не знаю. Я с новым функционалом портежа не ковырялся, он не документирован нормально :) А я ковырялся с этим давно.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

ясно :)

а вот такого нет?

1)есть /etc/make.conf в нём строка CFLAGS=
2) есть /var/db/pkg/категория/имя_пакета/CFLAGS 
в котором перечислены флаги с которыми собран пакет
надо - сваять скрипт который покажет все пакеты в виде категория/имя_пакета
которые собраны с флагами отличными от флагов в make.conf и одной строкой через пробел - чтоб подсунуть emerge-у

или есть ли какое-то стандартное (скажем так) решение?

megabaks ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.