Как ускорить сборку 1000 VisualStudio C++ проектов

в 11:21, , рубрики: c++, devops, разработка, сборка проекта, управление проектами, метки: , ,

Добрый день, уважаемые читатели.
Я решил написать этот топик, чтобы не не копировать мой комментарий к данному посту. Здесь я просто опишу наше решение

До изменений:
Полная сборка (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

Источник

Поделиться

* - обязательные к заполнению поля