Компиляция SObjectizer, его примеров и тестов выполняется посредством инструмента Mxx_ru использующего язык Ruby. Поэтому, прежде, чем приступать к компиляции SObjectizer, необходимо установить Ruby и Mxx_ru. После чего настроить Mxx_ru на использование соответствующего компилятора (установить должным образом переменную среды MXX_RU_CPP_TOOLSET).
Для нормальной работы SObjectizer 5 необходима версия ACE 6.0.* 6.1.* или выше. Версии библиотеки ACE, отличные от 6.0.* 6.1.* не поддерживаются.
Mxx_ru распространяется в виде RubyGem-а, который доступен в центральном репозитории RubyGems на сайте RubyForge. Для установки Mxx_ru необходимо иметь Ruby и установленную в Ruby систему управления RubyGems. После этого необходимо проинсталлировать Gem Mxx_ru и выставить в правильное значение переменную среды MXX_RU_CPP_TOOLSET, иначе Mxx_ru попытается определить ее самостоятельно (начиная с версии 1.5.3).
Подробные инструкции по инсталляции RubyGems даны на сайте RubyGems. Если RubyGems еще не входит в состав вашей инсталляции Ruby (например, RubyGems является частью стандартной библиотеки Ruby 1.9.1), то достаточно скачать последнюю версию RubyGems с RubyForge, распаковать ее в какой-нибудь каталог, после чего в этом каталоге выполнить команду:
ruby setup.rb
Затем на UNIX-платформах может потребоваться установить переменную среды RUBYOPT:
export RUBYOPT="rubygems"
Если для инсталляции Ruby под Windows используется One-Click Installer, то устанавливать и настраивать RubyGems в ручную нет необходимости -- это делает One-Click Installer.
Инсталляция Gem Mxx_ru выполняется командой gem install:
gem install Mxx_ru
Примечание. Для компиляции SObjectizer версии 5.1 требуется Mxx_ru версии 1.5.6 или выше. По умолчанию ставится последняя доступная версия Gem-а.
Для GNU C++ под Linux:
export MXX_RU_CPP_TOOLSET=gcc_linux
Для MinGW под Windows:
set MXX_RU_CPP_TOOLSET=gcc_mingw
Для GNU C++ под Cygwin:
export MXX_RU_CPP_TOOLSET=gcc_cygwin
Для Visual C++ 7.1 под Windows:
set MXX_RU_CPP_TOOLSET=vc7
Для Visual C++ 8.0 под Windows:
set MXX_RU_CPP_TOOLSET=vc8
Для Visual C++ 9.0 под Windows:
set MXX_RU_CPP_TOOLSET=vc9
Для Visual C++ 10.0 под Windows:
set MXX_RU_CPP_TOOLSET=vc10
Intel C++ for Windows:
set MXX_RU_CPP_TOOLSET=icc_win
Другие доступные значения для MXX_RU_CPP_TOOLSET см. в документации по Mxx_ru.
Выбирается каталог, который будет содержать набор библиотек SObjectizer, после чего в этот каталог распаковывается архив с соответствующей версией SObjectizer. Далее этот каталог будет именоваться как SO5_ROOT.
Исходные тексты библиотеки ACE должны располагаться в каталоге SO5_ROOT/dev/ace/ACE_wrappers. В этом каталоге должны быть подкаталоги ace, include, lib и другие из состава ACE. Существует два способа распаковки ACE: автоматический, когда распаковкой занимаются Ruby скрипты, входящие в состав SObjectizer, и ручной, когда за распаковку ACE отвечает пользователь SObjectizer.
Примечание. Для SObjectizer достаточен дистрибутив ACE, в который входит только сам ACE без TAO и CIAO. Обычно этот дистрибутив имеет имя ACE-X.Y.Z-lib.tar.bz2 или ACE-X.Y.Z.tar.bz2 (так же есть архивы tar.gz и zip). Например, ACE-6.1.6.tar.bz2, ACE-6.0.5.tar.bz2. Архивы ACE, в которые входят TAO и CIAO называются, например, так: ACE+TAO-6.1.6.tar.bz2 и ACE+TAO+CIAO-6.1.8.tar.bz2. Они имеют гораздо больший объем, но использовать их для SObjectizer не имеет смысла, т.к. SObjectizer не нуждается в TAO и CIAO.
Для получения ACE можно обратиться к странице Obtaining ACE.
Для автоматической распаковки ACE необходимо разместить архив ACE (в виде ACE-*-lib.tar.bz2 или ACE-*.tar.bz2) файла в каталог SO5_ROOT/dev/ace_lib_distrib после чего подключить в какой-либо из проектных файлов (например, build.rb) проект ace/ace_lib_unpacker.rb:
require 'mxx_ru/cpp' MxxRu::Cpp::composite_target( MxxRu::BUILD_ROOT ) { global_include_path( "." ) required_prj( "ace/ace_lib_unpacker.rb" ) ...
Подробнее см. соответствующий раздел в API Reference Manual.
Самый простой способ ручной распаковки ACE -- это войти в каталог SO5_ROOT/dev/ace и дать команду на распаковку архива ACE. Например, если архив ACE имеет имя d:/download/ACE-6.1.8.tar.bz2, то распаковка будет выглядеть, например, так:
cd d:/usr/src/so5.0/dev/ace tar jxf d:/download/ACE-6.1.8.tar.bz2
в результате в d:/usr/src/so5.0/dec/ace будет создан подкаталог ACE_wrappers со всеми необходимыми подкаталогами.
Для компиляции SObjectizer необходимо войти в SO5_ROOT/dev и выполнить команду:
ruby build.rb --mxx-cpp-release
Эта команда выполняет компиляцию SObjectizer в Release режиме. Если необходимо скомпилировать SObjectizer в Debug режиме, следует выполнить команду:
ruby build.rb --mxx-cpp-debug
Для Win32 результаты компиляции размещаются в SO5_ROOT/dev (EXE и DLL) и SO4_ROOT/dev/lib (LIB). Для Linux-а результаты размещаются в SO5_ROOT/dev (исполнимые файлы и .so) и SO5_ROOT/dev/lib (.a файлы).
Примечание. Для Unix может потребоваться установить переменную среды LD_LIBRARY_PATH на каталог, в котором выполняется компиляция SObjectizer. Например, под Linux может быть достаточно выполнить команду:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.
Для полной компиляции всего SObjectizer с тестами и примерами необходимо войти в SO5_ROOT/dev и выполнить команду:
ruby build_all.rb --mxx-cpp-release
В результате компиляции исполнимые файлы размещаются в SO5_ROOT/dev.
Примечание. Часть тестов являются unit-тестами и после их компиляции будет так же проверяться корректность прохождения unit-теста. Если какой-то unit-тест завершается неудачно, то вся компиляция останавливается.