ru:mingw32
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| ru:mingw32 [2020/05/29 12:40] – kukuruzo | ru:mingw32 [2024/06/16 11:46] (текущий) – kukuruzo | ||
|---|---|---|---|
| Строка 3: | Строка 3: | ||
| ===== Необходимый инструментарий ===== | ===== Необходимый инструментарий ===== | ||
| - | 1. **[[https://download.qt.io/official_releases/ | + | 1. **[[http://www.cmake.org/|CMake build system]]** |
| - | 2. **[[http://sourceforge.net/projects/psiplus/files/MS-Windows/Dev/MinGW-i686-4.8.2-release-posix-dwarf-rt_v3-rev3.7z/download|MinGW v4.8.2]]** //~45 MB// | + | 2. **[[https://github.com/git-for-windows/git/releases|Git for Windows]]** |
| - | 3. **[[http:// | + | 3. **[[http:// |
| - | 4. **[[https://github.com/git-for-windows/git/releases|Git for Windows]]** - набор утилит для | + | 4. **[[http://www.gnu.org/software/libidn/|GNU IDN Library (LibIDN)]]** -- скомпилированную версию (v1.28) можно взять [[http://ftp.gnu.org/gnu/libidn/ |
| - | 5. **[[http:// | + | 5. **[[http:// |
| - | + | ||
| - | 6. **[[http:// | + | |
| - | + | ||
| - | 7. **[[http:// | + | |
| 8. **[[http:// | 8. **[[http:// | ||
| **__Опционально__: | **__Опционально__: | ||
| - | * **[[http:// | ||
| - | * **[[http:// | ||
| * **[[https:// | * **[[https:// | ||
| - | * < | ||
| - | * < | ||
| - | * < | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | ===== Подготовка к сборке, | ||
| - | |||
| - | * Устанавливаем необходимый инструментарий, | ||
| - | * Создаём в папке **C: | ||
| - | * Распаковываем содержимое архива **[[http:// | ||
| - | * Распаковываем содержимое архива **[[http:// | ||
| - | * Скачиваем и распаковываем содержимое архива **[[http:// | ||
| - | * файлы из папки **bin** копируем в папку **Psi+** (например, | ||
| - | * папки **include** и **lib** копируем в папку **C: | ||
| - | * < | ||
| - | * < | ||
| - | < | ||
| - | ........ | ||
| - | QMAKE_CC = ccache | ||
| - | ........ | ||
| - | QMAKE_CXX = ccache $${CROSS_COMPILE}g++ | ||
| - | </ | ||
| - | * В свойствах компьютера (Start → Settings → Control Panel → System Properties → Advanced → Environment Variables) добавляем необходимые пути в системную переменную [[http:// | ||
| - | < | ||
| - | C:\>path | ||
| - | </ | ||
| - | |||
| - | < | ||
| - | PATH=C: | ||
| - | </ | ||
| - | А также создаём новые системные переменные __(при необходимости заменив пути на свои)__: | ||
| - | < | ||
| - | GITDIR=C: | ||
| - | LIBIDNDIR=C: | ||
| - | MINGWDIR=C: | ||
| - | OPENSSLDIR=C: | ||
| - | QCADIR=C: | ||
| - | QCONFDIR=C: | ||
| - | QMAKESPEC=win32-g++ | ||
| - | QTDIR=C: | ||
| - | ZLIBDIR=C: | ||
| - | </ | ||
| - | |||
| - | **__Примечание 1:__** Переменные обновятся только для вновь запущенных процессов, | ||
| - | |||
| - | **__Примечание 2:__** Если у вас закрыт доступ наружу по порту **9418**, то вы **не сможете** скачать исходный код **Psi** и **Psi+** по протоколу **[[git:// | ||
| - | < | ||
| - | C: | ||
| - | </ | ||
| Строка 109: | Строка 52: | ||
| * Запускаем __от имени Администратора__ **CMD** в рабочей папке **C: | * Запускаем __от имени Администратора__ **CMD** в рабочей папке **C: | ||
| - | * Скачиваем исходный код QCA из официального **[[http://quickgit.kde.org/?p=qca.git|git-репозитория]]**: | + | * Скачиваем исходный код QCA из официального **[[https://github.com/KDE/ |
| < | < | ||
| C: | C: | ||
| - | </ | ||
| - | Видим процесс скачивания: | ||
| - | < | ||
| - | $ git clone git:// | ||
| - | Cloning into ' | ||
| - | remote: Counting objects: 14036, done. | ||
| - | remote: Compressing objects: 100% (5391/ | ||
| - | remote: Total 14036 (delta 8820), reused 13132 (delta 8167) | ||
| - | Receiving objects: 100% (14036/ | ||
| - | Resolving deltas: 100% (8820/ | ||
| - | Checking connectivity... done. | ||
| - | Checking out files: 100% (467/467), done. | ||
| </ | </ | ||
| * Переходим в папку **C: | * Переходим в папку **C: | ||
| < | < | ||
| - | cmake -G "MinGW Makefiles" | + | cmake -G "MinGW Makefiles" |
| </ | </ | ||
| Где " | Где " | ||
| - | |||
| - | Видим следующее: | ||
| - | < | ||
| - | C: | ||
| - | BUILD_TYPE=Release -DBUILD_PLUGINS=ossl; | ||
| - | -- Could NOT find Doxygen (missing: | ||
| - | -- Checking for certstore.. | ||
| - | -- Using built in certstore. | ||
| - | -- certstore path: C:/ | ||
| - | -- mlock(2) does not take a void * | ||
| - | CMake Warning at plugins/ | ||
| - | qca-ossl will be compiled without MD2 digest algorithm support | ||
| - | |||
| - | Plugins: | ||
| - | qca-botan off | ||
| - | qca-cyrus-sasl off | ||
| - | qca-gcrypt off | ||
| - | qca-gnupg on | ||
| - | qca-logger off | ||
| - | qca-nss off | ||
| - | qca-ossl on | ||
| - | qca-pkcs11 off | ||
| - | qca-softstore off | ||
| - | |||
| - | QCA prefix is C:/Qt/QCA | ||
| - | Plugins will be installed to C:/ | ||
| - | Binary will be installed to C:/ | ||
| - | Library will be installed to C:/ | ||
| - | Feature file will be installed to C:/ | ||
| - | Public headers will be installed to C:/ | ||
| - | Private headers will be installed to C:/ | ||
| - | Documentation will be installed to C:/ | ||
| - | Man page will be installed to C:/ | ||
| - | Pkg-config file will be installed to C:/ | ||
| - | |||
| - | -- Configuring done | ||
| - | -- Generating done | ||
| - | -- Build files have been written to: C:/ | ||
| - | </ | ||
| * После успешного конфигурирования проекта запускаем сборку командой: | * После успешного конфигурирования проекта запускаем сборку командой: | ||
| < | < | ||
| mingw32-make | mingw32-make | ||
| - | </ | ||
| - | Видим процесс компиляции: | ||
| - | < | ||
| - | ................................ | ||
| - | [ 95%] Generating ssltest.moc | ||
| - | Scanning dependencies of target ssltest | ||
| - | [ 95%] Building CXX object examples/ | ||
| - | bj | ||
| - | Linking CXX executable ..\..\bin\ssltest.exe | ||
| - | [ 95%] Built target ssltest | ||
| - | [ 95%] Generating sslservtest.moc | ||
| - | Scanning dependencies of target sslservtest | ||
| - | [ 96%] Building CXX object examples/ | ||
| - | rvtest.cpp.obj | ||
| - | Linking CXX executable ..\..\bin\sslservtest.exe | ||
| - | [ 96%] Built target sslservtest | ||
| - | [ 97%] Generating tlssocket.moc | ||
| - | Scanning dependencies of target tlssocket | ||
| - | [ 98%] Building CXX object examples/ | ||
| - | .cpp.obj | ||
| - | [ 98%] Building CXX object examples/ | ||
| - | obj | ||
| - | Linking CXX executable ..\..\bin\tlssocket.exe | ||
| - | [ 98%] Built target tlssocket | ||
| - | Scanning dependencies of target mozcerts | ||
| - | [ 99%] Building CXX object tools/ | ||
| - | Linking CXX executable ..\..\bin\mozcerts.exe | ||
| - | [ 99%] Built target mozcerts | ||
| - | [100%] Generating main.moc | ||
| - | Scanning dependencies of target qcatool | ||
| - | [100%] Building CXX object tools/ | ||
| - | Linking CXX executable ..\..\bin\qcatool.exe | ||
| - | [100%] Built target qcatool | ||
| </ | </ | ||
| * Теперь запускаем установку компонентов **QCA** в заданную при конфигурировании папку: | * Теперь запускаем установку компонентов **QCA** в заданную при конфигурировании папку: | ||
| Строка 210: | Строка 69: | ||
| mingw32-make install | mingw32-make install | ||
| </ | </ | ||
| - | Видим процесс установки: | + | |
| - | < | + | * В каталоге **C:\Qt\QCA** появится |
| - | ................................ | + | |
| - | [ 95%] Built target ssltest | + | |
| - | [ 96%] Built target sslservtest | + | |
| - | [ 98%] Built target tlssocket | + | |
| - | [ 99%] Built target mozcerts | + | |
| - | [100%] Built target qcatool | + | |
| - | Install the project... | + | |
| - | -- Install configuration: | + | |
| - | -- Installing: | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | -- Installing: C:/ | + | |
| - | </ | + | |
| - | < | + | |
| Теперь комплект **QCA** готов для конфигурирования и сборки проекта Psi+. | Теперь комплект **QCA** готов для конфигурирования и сборки проекта Psi+. | ||
| - | Если по каким-либо причинам не получается самостоятельно скомпилировать **QCA**, < | ||
| Строка 271: | Строка 94: | ||
| < | < | ||
| mingw32-make -f win32/ | mingw32-make -f win32/ | ||
| - | </ | ||
| - | Видим процесс компиляции: | ||
| - | < | ||
| - | $ mingw32-make -f win32/ | ||
| - | gcc -O3 -Wall -c -o adler32.o adler32.c | ||
| - | gcc -O3 -Wall -c -o compress.o compress.c | ||
| - | gcc -O3 -Wall -c -o crc32.o crc32.c | ||
| - | gcc -O3 -Wall -c -o deflate.o deflate.c | ||
| - | gcc -O3 -Wall -c -o gzclose.o gzclose.c | ||
| - | gcc -O3 -Wall -c -o gzlib.o gzlib.c | ||
| - | gcc -O3 -Wall -c -o gzread.o gzread.c | ||
| - | gcc -O3 -Wall -c -o gzwrite.o gzwrite.c | ||
| - | gcc -O3 -Wall -c -o infback.o infback.c | ||
| - | gcc -O3 -Wall -c -o inffast.o inffast.c | ||
| - | gcc -O3 -Wall -c -o inflate.o inflate.c | ||
| - | gcc -O3 -Wall -c -o inftrees.o inftrees.c | ||
| - | gcc -O3 -Wall -c -o trees.o trees.c | ||
| - | gcc -O3 -Wall -c -o uncompr.o uncompr.c | ||
| - | gcc -O3 -Wall -c -o zutil.o zutil.c | ||
| - | ar rcs libz.a adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o | ||
| - | gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o | ||
| - | windres --define GCC_WINDRES -o zlibrc.o win32/ | ||
| - | gcc -shared -Wl, | ||
| - | -o zlib1.dll win32/ | ||
| - | se.o gzlib.o gzread.o gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o | ||
| - | | ||
| - | Creating library file: libz.dll.a | ||
| - | strip zlib1.dll | ||
| - | gcc -O3 -Wall -I. -c -o example.o test/ | ||
| - | gcc -o example.exe example.o libz.a | ||
| - | strip example.exe | ||
| - | gcc -O3 -Wall -I. -c -o minigzip.o test/ | ||
| - | gcc -o minigzip.exe minigzip.o libz.a | ||
| - | strip minigzip.exe | ||
| - | gcc -o example_d.exe example.o libz.dll.a | ||
| - | strip example_d.exe | ||
| - | gcc -o minigzip_d.exe minigzip.o libz.dll.a | ||
| - | strip minigzip_d.exe | ||
| </ | </ | ||
| Строка 359: | Строка 144: | ||
| Если сборка прошла успешно, | Если сборка прошла успешно, | ||
| - | ===== < | ||
| - | < | ||
| Строка 367: | Строка 150: | ||
| + | ===== Способ сборки Psi+ при помощи кросс-компиляции из OS Linux (рекомендовано) ===== | ||
| + | ==== Настройка и сборка окружения для кросс-компиляции MXE ==== | ||
| - | ===== Сборка | + | * Инструкция по скачиванию доступна на официальном сайте проекта [[https:// |
| - | * Скачиваем скрипт **[[https://raw.githubusercontent.com/psi-plus/maintenance/ | + | <code bash> |
| - | * Включаем необходимый для сборки параметр **MakeClassic** в положение **1** (если он ещё не включен): | + | cd ~ |
| - | < | + | mkdir -p github |
| - | SET MakeClassic=1 | + | cd ~/github |
| - | SET UploadClassic=0 | + | git clone https://github.com/mxe/mxe.git |
| - | SET MakeClassicDebug=0 | + | cd mxe |
| - | SET UploadClassicDebug=0 | + | |
| - | SET MakeWebkit=0 | + | |
| - | SET UploadWebkit=0 | + | |
| - | SET MakeWebkitDebug=0 | + | |
| - | SET UploadWebkitDebug=0 | + | |
| - | SET MakePlugins=0 | + | |
| - | SET UploadPlugins=0 | + | |
| - | SET MakePluginsDebug=0 | + | |
| - | SET UploadPluginsDebug=0 | + | |
| </ | </ | ||
| - | * Запускаем скрипт **auto-compiler-all-in-one.cmd** в папке **C: | ||
| - | Если скрипт отработал успешно, то в рабочей папке **C:\build** появится архив, содержащий скомпилированный и готовый к работе бинарный файл **psi-plus.exe**. | + | * После скачивания МХЕ в заранее созданном каталоге **~/github**, создаем в корневом каталоге исходных кодов **~/ |
| + | |||
| + | <code bash> | ||
| + | # This variable controls the number of compilation processes | ||
| + | # within one package (" | ||
| + | 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/ | ||
| + | # override MXE_PLUGIN_DIRS += plugins/ | ||
| + | # This variable controls the download mirror for SourceForge, | ||
| + | # when it is used. Enabling the value below means auto. | ||
| + | # | ||
| + | # The three lines below makes `make` build these "local | ||
| + | # 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: | ||
| + | </ | ||
| + | __Особое внимание нужно уделить переменным: | ||
| + | - **MXE_TARGETS** где нужно указать цели сборки МХЕ, подробнее про это можно почитать в каталоге **docs** или кратко в файле **README.md**. //В примере окружение МХЕ будет компилироваться для 2х целей: i686-w64-mingw32.shared - 32х битная среда, динамические бибилиотеки (*.dll) на выходе; | ||
| + | - **MXE_TMP** - каталог где будет происходить сборка окружения MXE, если у вас много оперативной памяти (> | ||
| + | - **LOCAL_PKG_LIST** - список пакетов, | ||
| + | - **JOBS** - количество потоков сборки, | ||
| + | - **override MXE_PLUGIN_DIR** - в примере эта строка закомментирована. Таким образом можно указать версию компилятора или указать какой-то специфический набор опций (обязательно загляните в каталог plugins). //В примере указан gcc9 как компилятор, | ||
| + | | ||
| + | * Закончив с настройкой окружения, | ||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | |||
| - | ===== Компиляция плагинов Psi+ ===== | ||
| - | |||
| - | * Скачиваем скрипт **[[https:// | ||
| - | * Включаем необходимый для сборки параметр **MakePlugins** в положение **1**: | ||
| < | < | ||
| - | SET MakeClassic=0 | + | make |
| - | SET UploadClassic=0 | + | |
| - | SET MakeClassicDebug=0 | + | |
| - | SET UploadClassicDebug=0 | + | |
| - | SET MakeWebkit=0 | + | |
| - | SET UploadWebkit=0 | + | |
| - | SET MakeWebkitDebug=0 | + | |
| - | SET UploadWebkitDebug=0 | + | |
| - | SET MakePlugins=1 | + | |
| - | SET UploadPlugins=0 | + | |
| - | SET MakePluginsDebug=0 | + | |
| - | SET UploadPluginsDebug=0 | + | |
| </ | </ | ||
| - | * Запускаем скрипт **auto-compiler-all-in-one.cmd** в папке **C: | ||
| - | Если скрипт | + | Подробнее об опциях сборки пакетов |
| + | **ВНИМАНИЕ** Сборка указанных в примере пакетов для 2х целей будет длиться приблизительно 6 часов, в зависимости от мощности вашего сборочного компьютера. | ||
| + | **СОВЕТ 1** Делайте резервные копии каталога mxe/usr перед каждым обновлением сборочного окружения, | ||
| + | * После окончания сборки окружения МХЕ можно приступать к сборке Psi+ | ||
| + | ==== Сборка Psi+ в окружении MXE ==== | ||
| - | ===== Альтернативный способ | + | * Создаем общий каталог сборки |
| - | ==== Инструментарий ==== | + | <code bash> |
| + | mkdir -p ~/ | ||
| + | cd ~/github | ||
| + | git clone https:// | ||
| + | </ | ||
| - | * **При сборке этим способом все вышеописанные процедуры можно пропустить** | + | * Настраиваем окружение для сборки |
| - | * Скачиваем и устанавливаем [[https:// | + | |
| - | * Если вы хотите собрать Psi+ при помощи **Qt5**, скачиваем [[http:// | + | |
| - | * Для сборки этим способом нам также необходим [[https:// | + | |
| - | //**Устанавливать лучше | + | <code bash> |
| - | + | unset `env | \ | |
| - | Если | + | grep -vi ' |
| - | < | + | grep -vi ' |
| - | | + | cut -d ' |
| - | | + | export PATH=~/github/mxe/ |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| </ | </ | ||
| - | + | * Запускаем симейк к исполнению для конкретной цели, например: | |
| - | ==== Инструкция по установке Qt5 ==== | + | <code bash> |
| - | * Запускаем онлайн-инсталлер **qt-unified-windows-x86-2.0.5-online.exe** | + | cd ~/ |
| - | * Нажимаем **Next** | + | i686-w64-mingw32.shared-cmake -DDEV_MODE=ON |
| - | * Нажимаем **Skip** (если у вас есть аккаунт Qt можете ввести данные) | + | </ |
| - | * Если это первый запуск онлайн-инсталлера, | + | |
| - | * Онлайн-инсталлер начнет скачивать информацию по доступным файлам, | + | |
| - | * В появившемся списке версий снимаем все галочки и ставим их таким образом: | + | |
| - | {{:ru:pic-20170203-141427.png}} | + | |
| - | * Нажимаем **Next** и ждем окончания установки | + | |
| - | ==== Настройка скрипта сборки Psi+ при помощи cmake и сборка ==== | + | тут вместо |
| + | Эта команда запустит конфигурацию Psi+ для сборки самой Psi+ чатлогом на движке QtWebkit, а также всех плагинов и плагина psimedia | ||
| - | * Скачиваем архив [[https:// | + | * Запускаем команду сборки и подготовки собранных бинарных файлов к работе |
| - | * Открываем скрипт **make-psiplus-cmake.cmd** текстовым редактором, | + | |
| - | * Ищем в скрипте и правим следующие переменные: | + | |
| - | **set CPUCOUNT**=// | + | <code bash> |
| - | + | i686-w64-mingw32.shared-cmake --build . --target all --target prepare-bin --target prepare-bin-libs --parallel 4 #тоже самое что и JOBS в файле конфигурации МХЕ | |
| - | **set BUILDDIR**=// | + | </ |
| - | + | ||
| - | **set PSIDEPSPREFIX**=// | + | |
| - | + | ||
| - | **set GITBIN**=// | + | |
| - | + | ||
| - | **set CMAKEDIR**=// | + | |
| - | + | ||
| - | **set ISWEBKIT**=// | + | |
| - | + | ||
| - | **set MINGW32**=// | + | |
| - | + | ||
| - | Если вы хотите собрать Psi+ при помощи Qt5, нужно изменить также следующие переменные: | + | |
| - | + | ||
| - | **set QT5DIR**=// | + | |
| - | + | ||
| - | **set MINGW5DIR**=// | + | |
| - | + | ||
| - | * Выполнив все подготовительные действия и исправив скрипт, | + | |
| - | * Скрипт сам скачает всё необходимое, подготовит исходники к сборке и запустит компиляцию. В процессе он несколько раз будет останавливаться для контроля за процессом сборки. Процесс сборки будет наглядно отображён процентом выполненной работы. Если скрипт отработал правильно, | + | |
| - | | + | |
| - | * psi-plus.exe | + | |
| - | * каталог plugins со всеми плагинами | + | |
| - | * файл client_icons.txt | + | |
| - | * каталог crets | + | |
| - | * каталог iconsets | + | |
| - | * каталог sound | + | |
| - | * и каталог themes (если включен вебкит) | + | |
| - | Файлы переводов (локализации) после сборки | + | В реультате в каталоге **~/ |
| + | Подробнее про флаги для сборки при помощи CMake можно почитать [[https:// | ||
ru/mingw32.1590756014.txt.gz · Последнее изменение: 2020/05/29 12:40 — kukuruzo
