пятница, 7 февраля 2014 г.

HowTo // Как строить Apache Thrift в Visual Studio

Доброго времени суток!

Прелюдия (не очень полезная информация)

Возник интерес по сборке и использованию Apache Thrift (в прошлом проект Facebook-а) у себя в продукте на Windows.

У Apache все работают на Mac/Linux и индейцев проблемы остального населения не беспокоят. Хотя, надо признать, в последние версии "пролезли" обрезанные проекты от Visual Studio для компилятора и библиотеки - земной поклон.

Мы же по простому крестьянски в Windows мастерим (иногда из любви к кросс платформенности проверяя MinGW/Cygwin или в виртуалочке на распоследней Fedora с clang).

И так мне не любо, когда необходимо читать README_WINDOWS.txt с какими-то инструкциями, что нужно вручную что-то скопировать, что-то переименовать и что-то прописать в переменные окружения. Да так, что руки невольно начинают "ерзать" по клавиатуре и описывать проект в CMake (простите за мою слабость к данному инструменту).

Так как "индейские" ребята из племени Апачей (как и Гуглоидов), походу, ненавидят CMake, о чем они демонстративно заявили, накорню убив в Июне 10-го интергацию какого-то залетного "перца" и его надежду в светлое будущее кросс платформенного генератора билдов. Поэтому, подавать это в "индейское" племя (Jira то бишь) видимо смысла нет.

Ну так вот... Подсмотрев идею не интрузивного (или не инвазивного???) проекта для Google Protobuf накидал похожее для ApacheThrift о чем спешу поделиться - может кому тоже подойдет.

HowTo (полезная информация)

Зависимости

CMake (у меня 2.8.12)
Git
Какой нибудь компилятор C++ (у меня основная платформа msvc++ 11 (vs2012))
Flex/Bison
Boost C++ (1.55 использую собранный, тем компилятором что выбрали выше)
Клонируете исходный код Thrift (можно официальный, можно зеркало)
Клонируете мой проект (fork me on github)

запустить из командной строки

cmake <путь к моему проекту> -DTHRIFT_SRC_ROOT=<путь до клона thrift>
если стандартный генератор не люб - добавте -G<имя генератора> (я например фэн Ninja)

Дополнительные опции (вроде понятные)

Обязательные (если cmake не найдет сам, по любому придется указать - зависимость)
  • -DBOOST_ROOT=<путь до Boost C++ Library>

Необязательные (без них будет строиться, но пропадут фичи упаковки и криптования)
  • -DWITH_TESTS=ON
  • -DZLIB_ROOT=<путь до ZLib>
  • -DOPENSSL_ROOT_DIR=<путь до OpenSSL>

Может заработать не сразу - штука экспериментальная.
Патчи и проблемные репорты приветствуются, хотя не обещаю скорого исправления :)
Пока в планах - добавление Libevent для асинхронных сервера и клиента и инсталляция.
Далее - как пойдет.

Удачи.
----------
If you build it, CR will come... (старая Motorola-вская шутка)