Table of Contents
Инструкция по сборке Psi+ в ОС MS Windows (MinGW)
Необходимый инструментарий
1. CMake build system – версию 3.7.2 можно взять здесь ~14 MB
2. Git for Windows - набор утилит для работы с Git ~33 MB
3. OpenSSL – архив с исходным кодом пакета программ для поддержки шифрования и криптографии (версия > 1.0.0) ~4 MB
4. GNU IDN Library (LibIDN) – скомпилированную версию (v1.28) можно взять здесь
8. GnuPG (Package for Windows) - свежий win32-инсталлятор можно взять здесь
Опционально:
- Hunspell for MinGW - библиотека проверки орфографии
Компиляция OpenSSL Toolkit v1.x.x
Важно! Данный алгоритм справедлив для версий OpenSSL выше v1.x.x.
- Создаём рабочую папку C:\build\openssl
- Распаковываем архив с исходниками OpenSSL v1.x.x (из Пункта №5 необходимого инструментария) в папку C:\build\openssl
- Запускаем от имени Администратора Git Bash (идёт в комплекте с Git) в папке C:\build\openssl и последовательно выполняем следующие команды. Сначала конфигурируем проект:
MAKE=mingw32-make PERL=perl.exe ./config --prefix=/c/OpenSSL shared
По завершении конфигурации выполняем команду:
mingw32-make mingw32-make install
В результате компиляции и инсталляции пакета OpenSSL Toolkit v1.x.x получаем скомпилированные библиотеки libeay32.dll и ssleay32.dll в папке C:\OpenSSL\bin, а также заголовочные файлы в папке C:\OpenSSL\include\openssl и служебные библиотеки для линковки в папке C:\OpenSSL\lib.
Теперь пакет OpenSSL Toolkit v1.x.x готов для линковки и сборки Psi+. Временную папку сборки C:\build\openssl можно удалить.
Компиляция Qt Cryptographic Architecture (QCA)
- Запускаем от имени Администратора CMD в рабочей папке C:\build
- Скачиваем исходный код QCA из официального git-репозитория:
C:\Git\bin\git clone git://anongit.kde.org/qca.git
- Переходим в папку C:\build\qca и конфигурируем проект перед сборкой:
cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX="C:/Qt/QCA" -DCMAKE_BUILD_TYPE=Release -DUSE_RELATIVE_PATHS=ON -DBUILD_PLUGINS=ossl;gnupg
Где “C:/Qt/QCA” - путь по которому будет установлена библиотека QCA (у вас может быть другой)
- После успешного конфигурирования проекта запускаем сборку командой:
mingw32-make
- Теперь запускаем установку компонентов QCA в заданную при конфигурировании папку:
mingw32-make install
- В каталоге C:\Qt\QCA появится полностью собранная библиотека QCA
Теперь комплект QCA готов для конфигурирования и сборки проекта Psi+.
Компиляция zlib
- Скачиваем исходный код zlib-1.2.8 отсюда
- Распаковываем содержимое архива zlib-1.2.8.tar.gz во временную рабочую папку C:\build\zlib
- Запускаем от имени Администратора Git Bash в папке C:\build\zlib
- Выполняем команду:
mingw32-make -f win32/Makefile.gcc
В результате компиляции наблюдаем в рабочей папке C:\build\zlib готовую к употреблению библиотеку zlib1.dll, а также служебные файлы zconf.h, zlib.h, libz.a и libz.dll.a
Копируем из папки C:\build\zlib следующие файлы:
- zlib1.dll в папку C:\Qt\zlib\bin
- zconf.h и zlib.h в папку C:\Qt\zlib\include
- libz.a и libz.dll.a в папку C:\Qt\zlib\lib
После этого временную рабочую папку C:\build\zlib можно удалить.
Теперь комплект zlib готов для конфигурирования и сборки проекта Psi+.
Компиляция библиотеки Hunspell
- Скачиваем при помощи Git исходники из github репозитория:
C:\Git\bin\git clone https://github.com/zdenop/hunspell-mingw.git
- Переходим в каталог исходников
cd hunspell-mingw
- Создаем каталог для теневой сборки и переходим в него:
mkdir build cd build
- Выполняем конфигурацию исходников:
cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX="C:/Hunspell" ..
Где C:/Hunspell - путь куда будет установлена библиотека libhunspell после сборки
- Если конфигурация прошла успешно, запускаем сборку библиотеки и установку:
mingw32-make mingw32-make install
Если сборка прошла успешно, то по адресу C:\Hunspell будет установлена библиотека libhunspell
Способ сборки Psi+ при помощи кросс-компиляции из OS Linux (рекомендовано)
Настройка и сборка окружения для кросс-компиляции MXE
- Инструкция по скачиванию доступна на официальном сайте проекта https://mxe.cc/#download
cd ~ mkdir -p github cd ~/github git clone https://github.com/mxe/mxe.git cd mxe
- После скачивания МХЕ в заранее созданном каталоге ~/github, создаем в корневом каталоге исходных кодов ~/github/mxe файл settings.mk с таким содержимым:
# This variable controls the number of compilation processes # within one package ("intra-package parallelism"). JOBS := 4 # This variable controls where intermediate files are created # this is necessary when compiling inside a virtualbox shared # directory. Some commands like strip fail in there with Protocol error # default is the current directory #MXE_TMP := /tmp # This variable controls the targets that will build. MXE_TARGETS := i686-w64-mingw32.shared x86_64-w64-mingw32.shared # This variable controls which plugins are in use. # See plugins/README.md for further information. # override MXE_PLUGIN_DIRS += plugins/gcc9 # This variable controls the download mirror for SourceForge, # when it is used. Enabling the value below means auto. #SOURCEFORGE_MIRROR := downloads.sourceforge.net # The three lines below makes `make` build these "local # packages" instead of all packages. LOCAL_PKG_LIST := qtbase qtmultimedia qtimageformats qttools qtwebkit qtwinextras qtkeychain \ qttranslations hunspell libotr tidy-html5 minizip \ gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad opus .DEFAULT_GOAL := local-pkg-list local-pkg-list: $(LOCAL_PKG_LIST)
Особое внимание нужно уделить переменным:
- MXE_TARGETS где нужно указать цели сборки МХЕ, подробнее про это можно почитать в каталоге docs или кратко в файле README.md. В примере окружение МХЕ будет компилироваться для 2х целей: i686-w64-mingw32.shared - 32х битная среда, динамические бибилиотеки (*.dll) на выходе; x86_64-w64-mingw32.shared - 64х битная среда, динамические бибилиотеки (*.dll) на выходе.
- MXE_TMP - каталог где будет происходить сборка окружения MXE, если у вас много оперативной памяти (>=32Гб) и каталог /tmp монтируется как файловая система tmpfs, то данную строчку можно раскомментировать для ускорения сборки
- LOCAL_PKG_LIST - список пакетов, которые будут компилироваться по-умолчанию. В примере показан минимальный список необходимый для сборки полного комплекта Psi+
- JOBS - количество потоков сборки, используется для ускорения сборки на многоядерных системах, значение обычно ставят из соображения количество ядер процессора + 1
- override MXE_PLUGIN_DIR - в примере эта строка закомментирована. Таким образом можно указать версию компилятора или указать какой-то специфический набор опций (обязательно загляните в каталог plugins). В примере указан gcc9 как компилятор, а по-умолчанию версия может быть старее или новее.
- Закончив с настройкой окружения, запускаем его сборку командой:
make
Подробнее об опциях сборки пакетов https://mxe.cc/#usage
ВНИМАНИЕ Сборка указанных в примере пакетов для 2х целей будет длиться приблизительно 6 часов, в зависимости от мощности вашего сборочного компьютера.
СОВЕТ 1 Делайте резервные копии каталога mxe/usr перед каждым обновлением сборочного окружения, особенно если собираете MXE из master
- После окончания сборки окружения МХЕ можно приступать к сборке Psi+
Сборка Psi+ в окружении MXE
- Создаем общий каталог сборки и скачиваем исходные коды программы Psi+ при помощи утилиты git
mkdir -p ~/github/build cd ~/github git clone https://github.com/psi-plus/psi-plus-snapshots.git
- Настраиваем окружение для сборки
unset `env | \ grep -vi '^EDITOR=\|^HOME=\|^LANG=\|MXE\|^PATH=' | \ grep -vi 'PKG_CONFIG\|PROXY\|^PS1=\|^TERM=' | \ cut -d '=' -f1 | tr '\n' ' '` export PATH=~/github/mxe/usr/bin:$PATH #тут лучше прописать полный путь к МХЕ
- Запускаем симейк к исполнению для конкретной цели, например:
cd ~/github/build i686-w64-mingw32.shared-cmake -DDEV_MODE=ON -DBUNDLED_IRIS_ALL=ON -DENABLE_PLUGINS=ON -DBUILD_PSIMEDIA=ON -DCHAT_TYPE=webkit ../psi-plus-snapshots
тут вместо i686-w64-mingw32.shared-cmake нужно указывать конкретный симейк для конкретной цели. Для варианта из примера это может быть также x86_64-w64-mingw32.shared-cmake.
Эта команда запустит конфигурацию Psi+ для сборки самой Psi+ чатлогом на движке QtWebkit, а также всех плагинов и плагина psimedia
- Запускаем команду сборки и подготовки собранных бинарных файлов к работе
i686-w64-mingw32.shared-cmake --build . --target all --target prepare-bin --target prepare-bin-libs --parallel 4 #тоже самое что и JOBS в файле конфигурации МХЕ
В реультате в каталоге ~/github/build/psi будет собран *.exe файл Psi+ и в каталоге ~/github/build/psi/plugins будут собраны все плагины *.dll, а также в каталог ~/github/build/psi будут скопированы все необходимые для запуска Psi+ библиотеки зависимостей
Подробнее про флаги для сборки при помощи CMake можно почитать тут