вторник, 31 марта 2009 г.

apt-build - Развод в стиле gentoo

Итак есть такой замечательный проект apt-build. Замечателен он тем, что создан с благой целью, а именно: пересборка бинарных пакетов под машину | архитектуру | процессор | с нужными оптимизациями. В принципе cool!
       В чем же развод? А в том, что никакой оптимизации не происходит. Вообще. По сути apt-build пересобирает пакет до уровня пакета в репозитории, т.е работает для обогрева комнаты. Почему же такое происходит?  А потому что на конфигурационный файл apt-build.conf кладется с прибором. И все оптимизации которые вы туда прописали не используются.  В этом легко убедиться, если повнимательней посмотреть на вывод скрипта в начале работы, в момент присвоения значений переменным "CFLAGS", "CXXFLAGS"

---
                                                                                
dpkg-buildpackage: установка CFLAGS в значение по умолчанию: -g -O2                                                    
dpkg-buildpackage: установка CPPFLAGS в значение по умолчанию:                                                         
dpkg-buildpackage: установка LDFLAGS в значение по умолчанию: -Wl,-Bsymbolic-functions                                 
dpkg-buildpackage: установка FFLAGS в значение по умолчанию: -g -O2                                                    
dpkg-buildpackage: установка CXXFLAGS в значение по умолчанию: -g -O2                                                  


---


Ага! совсем не то что скажем у меня в конфиге

#cat /etc/apt/apt-build.conf

build-dir = /var/cache/apt-build/build
repository-dir = /var/cache/apt-build/repository
Olevel = -O3
mtune = -mtune=core2
options = "-pipe -fomit-frame-pointer "
make_options = " -j2"




Гугл забит ( по крайней мере в рунете) ссылкой на одну и ту же статью про "как оптимизировать debian", в части apt-build  абсолютно бредовая, где автор оставил по умлочанию оптимизацию "O2" и даже не потрудился проверить работает ли оно вообще. Пара постов по делу на форумах в итоге ни к чему не приводит, народ не знает как это решить  ( может не зря в man написано "BUGS: Many" ;)


В общем единственное решение , и то не знаю наколько работоспособное ( тестирую) это стягивать apt-build-ом исходники, распаковывать. Птому руками в debian/rules менять флаги по вкусу, и потом продолжать сборку.

типа

#apt-build --noupdate --source   build-source firefox

правим

# apt-build --reinstall  --yes  --noupdate --source  install  firefox

--reinstall - Это потому что у меня firefox уже стоит.

UPD: Разобрался. действительно оптимизирует, но не совсем явным способом.
Цитата из документации.

Q: gcc and g++ do not seem to be called with good options!

A: *** They are called with them! ***
What you see on your screen is the command called by make, but
the wrapper wraps (yeah, it does) calls to gcc/g++ and adds options you
specified in the apt-build configuration file.
You won't see this on your screen.
Try `ps ax | grep gcc' instead as a proof, while building.


4 комментария:

Анонимный комментирует...

ответил на хабре.

burunduk2 комментирует...

спасибо.

меня это -02 и -03 тоже как-то смущало..

Alex комментирует...

В любом случае прироста скорости на глаз не заметно. Да и глючит он.

Анонимный комментирует...

Ну смотрю я на ps aux|grep gcc

...

и он компилирует со СВОИМИ флагами, конкретно игнорируя, как CFLAGS, так и свой конфиг-файл. А на арме оптимизации крайне важны. Как еще мне с неоном всю систему перекомпилировать