Безопасные CFLAGS

Настройка CFLAGS — часть широких возможностей настройки и управления, которыми отличается работа с Gentoo. У всевластия есть свои плюсы и минусы. Не искючение и настройка CFLAGS.

Предупреждение: Использование чего-либо, за исключением -O2 -fomit-frame-pointer -march/-mcpu/-mtune в CFLAGS или CXXFLAGS (а также -mieee, -mabi и т.д. на тех архитектурах, где об этом прямо сказано), и тем более чего бы то ни было в LDFLAGS или ASFLAGS для большинства пользователей не оправдает затраченных усилий. Обычно выгода невелика, если есть вообще, риск неоправдан, а за гигантское время, потраченное на изматывающую настройку, можно было бы с удовольствием сделать массу более интересного.

Недавнее обновление до GCC 4.1 для пользователей стабильных веток x86 и amd64 изменило влияние CFLAGS. Пользователи, подгонявшие свои CFLAGS в GCC 3.4, могут столкнуться с нестабильностью своей системы после обновления до GCC 4.1.

Вот примеры этого:

* nss_ldap прекращает работать с -ffast-math (-ffast-math часто используется не по назначению; его следует считать опасным флагом)
* -fvisibility-inlines-hidden все еще приводит к сбоям в коде
* -ftree-loop-linear в GCC 4.1 нарушает код (по крайней мере, в mesa)
* -ftree-vectorize, как известно, в GCC 4.1 приводит к сбоям (по крайней мере, на x86 и ppc; пользователи amd64 жаловались реже, но никаких гарантий нет)
* -fforce-addr и -fweb на x86 регулярно нарушают код в видеобиблиотеках или в приложениях для обработки графики, которые оптимизированны с помощью ручных ассеблерных вставок (-fweb может быть безопасным на amd64, но, как и выше, никаких гарантий нет)

Вот флаги, заведомо нарушающие код на всех версиях GCC, наличие которых также рекомендуется проверить:

* -fvisibility=hidden
* -frename-registers (может быть безопасным на amd64, на ваш страх и риск)
* -ftracer
* -D_FILE_OFFSET_BITS=64
* -msse, -mmmx, and -m3dnow (не нужны на amd64, они группируются в -march=k8/nocona/... и благополучно используются)
* -W
* -mfpmath=sse,387
* -malign-double

Пользователям с неподдерживаемыми флагами в CFLAGS есть смысл вернуться к безопасным CFLAGS (см. предупреждения выше), если после обновлений часто возникают проблемы со стабильностью системы. С другой стороны, искателям приключений, возможно, захочется поэкспериментировать с CLFAGS, которые не работали корректно с GCC 3.4.6... Как всегда, все в руках прользователя (даже ружье, которое он направил себе в ногу).

Последние замечания:

* Страница руководства GCC содержит предупреждения о некоторых небезопасных параметрах оптимизации. Вы должны внимательно прочитать его перед тем, как начать эксперименты с CFLAGS или начать обновление GCC на системе Gentoo с измененным набором CFLAGS.
* В некоторых файлах ebuild параметры, небезопасные на общесистемном уровне, могут добавляться автоматически (местным переопределением CFLAGS или при помощи функции append-flags класса flag-o-matic), если разработчик счел их безопасными. Например, в сборочные файлы xmame/xmess на большинстве архитектур добавлен параметр -ffast-math, который вам не следует добавлять в свои CFLAGS.
* Вы можете вникнуть в проблемы стабильности, связанных с конкретным параметром оптимизации, запустив find /usr/portage -name '*.ebuild' | xargs grep -- '-вар-рискованный-параметр-оптимизации'. Поищите 'filter-flags': это займет довольно много времени, но может привести к озарению.

http://www.gentoo.org/news/ru/gwn/20061009-newsletter.xml

как сложно жить

как сложно жить стало...

да так всегда и

да так всегда и было... остаётся добавить что недавно (сравнительно) появилась возможность назначать разным пакетам разные флаги через файл/каталог /etc/portage/package.cflags

Могу добавить

Могу добавить только то у меня вроде как нормально все работает с флагами -msse, -mmmx, -msse2,-mfpmath=sse
Единственное иксы иногда сдыхают при сборке очень больших пакетов и одновременной работе фаерфокса и берила, вот такая интересная взаимосвязь :)

совсем недавно

совсем недавно Энлайтнмент глючил безбожно на x86_64 и нужно было его (точнее edje) компилить с mfpmath=i387 или что-то такое, а сейчас нормально работает.

PORTAGE_STRIP_FLAGS

а что означает например
PORTAGE_STRIP_FLAGS="--strip-all --discard-all -R .comment -R .note -R .note.ABI-tag"

Судя по всему

Судя по всему полностью удаляют отладочную информацию, что уменьшает размер итогового файла.

/etc/portage/package.cflags

что-то не работают, как ими пользоваться?

имя_пакета

имя_пакета --флаг --ещё
только они работают вроде только для пакета, версии неучитывают. у меня работало - в Е глюк был связаный с некорректной работой edje на amd86 , именно на процах от амд, что-то вроде некорректной работы MMX а оно заводилось по дефолту. вот я компилил с сопроцессором i387.

/

не-а так не работает, правда я пробовал с одной черточкой
а скажите - как перекрыть флаги которые стоят например в фирефоксе по дефолту - на нее почему-то вообще никакие флаги не влияют, так-же и nvidia-drivers

Если ты тут

Если ты тут пробовал то полюбому не получиться - есть пакеты корые в ебилде или вообще сами флаги фильтруют.
Вообще можно в ебилд посмотреть, или в пакете поковырятся, но ведь если их засунули в ебилд - то наверно не зря?
Ну а с 2мя чёрточками пролетел - нада так как в make.conf

--X--

все равно не выходит
и вообще я его наверно сглазил
не грузится и вообще все команды вылетают в "Ошибка сегментирования", если распаковать stage1 то работает, потом если что угодно сделать emerge то опять тоже самое.
Я знаю - это мистика ... или вирус? не скорее мистика...

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".