Добрый день, уважаемые читатели.
Я решил написать этот топик, чтобы не не копировать мой комментарий к данному посту. Здесь я просто опишу наше решение
До изменений:
Полная сборка (clean) занимала около 4.5 часов
Инкрементальная сборка (continuous) занимала около 30 минут.
После изменений:
Полная сборка — около 40 минут.
Инкрементальная сборка — 2-3 минуты
Входные данные:
Железо (dedicated builder machine): Intel Xeon E5430@2.66Hz, 4 GB RAM
Среда разработки: Windows XP, 2003, 7, 2008. VisualStudio 6, 2005, 2008, 2012.
Сборка включает в себя около 1000 C++ проектов: ~3MLN LOC
Как это работало:
У нас был файл, котрый содержал список проектов которые должны быть скомпилированы в порядке очередности.
Сборочный скрипт проходил по этому файлу и запускал компиляцию каждого проекта по-очереди.
Соответственно, скорость сборки росла из месяца в месяц линейно к количеству проектов, и какой-то момент, перестала нас устраивать категорически.
Что было поменяно:
- Замена дисков на SSD (до этого были неплохие HDD диски от WD)
- Интеграция IncrediBuild в сборочный скрипт. Incredibuild мы установили на 4 компа. (тривиальное изменение, если у вас уже есть сборочный скрипт)
- Компиляция одного огромного solution с прописанными зависимостями. Solution генерируется автоматически на основании списка проектов и файла зависимостей для каждого проекта
- Еще одно существенное ускорение процесса сборки, хотя и не имеющее отношение к скорости компиляции, нам дал перехед на svn 7 (только client). Особенно сильно это сказывается на инкр. сборке, когда надо сделать update огромной working copy. С svn 7, время упало с 10 минут до 1 минуты.
Сразу замечу, что, к сожалению, я не могу описать точный эффект от каждого изменения, так как все было поменяно за один раз.
По-ощущениям, каждое изменение ускорило сборку в 2-3 раза.
Для нас самой сложной частью было создать файлы зависимистей для каждого проекта. Здесь я не буду описивать как мы это сделали, т.к. не уверен, интересно ли это кому-нибудь.
Надеюсь, что кому-нибудь наш опыт может показаться полезным.
Автор: moiseir