Безопасные 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': это займет довольно много времени, но может привести к озарению.
- Для комментирования войдите или зарегистрируйтесь
как сложно жить
как сложно жить стало...
да так всегда и
да так всегда и было... остаётся добавить что недавно (сравнительно) появилась возможность назначать разным пакетам разные флаги через файл/каталог /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 то опять тоже самое.
Я знаю - это мистика ... или вирус? не скорее мистика...