воскресенье
15:49
Deeptown Night
Ru Gb

Project blogs

О проблемах сборки

Published by Дмитрий Роот on 02.02.2007

Несколько дней назад я закончил работу над новой системой сборки проекта.

Под системой сборки (build system) я понимаю набор скриптов, которые компилируют исходные файлы проекта, собирают их в библиотеки и запускаемые файлы и инсталлируют это все в соответствующие директории.

В мире opensource все пользуются системой сборки GNU autotools, которая включает в себя утилиты autoconf и automake. С одной стороны, она универсальна: позволяет делать все, что угодно и как угодно. Но с другой стороны, написание файлов Makefile.am - это довольно неприятная задача: каждый новый добавленный исходный файл должен быть вписан в этот файл; каждая новая директория с исходными файлами должна быть вписана в configure.ac и Makefile.am директорией выше и т.д. Но самое ужасное - это скорость работы. Если библиотека состоит из одного файла - для ее сборки нужно подождать несколько минут, пока отработают скрипты autotools и сгенерированный ими configure, и одну секунду - пока скомпилируется этот жалкий файл.

Еще в самом начале проекта мы сочли это неправильным. Тем более, что в нашем проекте есть стандарт кода, который четко регламентирует, где и как должны храниться исходные файлы и каким образом их собирать в библиотеки - т.е. универсальность autotools нам в большей степени не нужна.

Первая версия нашей системы сборки базировалась на все тех же autotools: она автоматически искала исходные проекты и совсем простые в написании конфигурационные файлы библиотек (которые говорят, что собирать - библиотеку или программу, и от чего она зависит), и генерировала все те же файлы для autotools. Т.е. проблема с неудобством была решена, а вот проблема со скоростью - нет.

Пару дней назад я с нуля переписал систему сборки. Теперь общее время сборки проекта уменьшилось, наверное, раза в 3.

Собственно, к чему я это пишу. Новая система сборки позволяет (ну или скоро позволит) создавать бинарные дистрибутивы для linux. Это здорово, но у бинарных дистрибутивов в linux есть одна большая проблема: переносимость между дистрибутивами Linux. Ведь в каждом дистрибутиве свои версии системных библиотек. Т.е. чтобы быть полностью уверенными в переносимости, нужно для каждого дистрибутива Linux собрать свой дистрибутив Deeptown.

Было предложено решение: установить VMWare, создать с пару десятков виртуальных машин с различными линуксами и вперед. В принципе это можно даже автоматизировать. Но это очень, очень медленное решение!

Конечно, когда мы будем большими и богатыми, мы купим 20 компов, установим на них дистрибутивы и будем сидеть и наслаждаться сборкой. Но в принципе, когда мы будем большими и богатыми, мы откроем исходные коды, и каждый сможет собрать Диптаун сам, причем с теми настройками, которые ему будут удобнее.

Нет ли у кого-нибудь пары десятков серверов с зоопарком операционных систем? :)

Please login or register to see comments