1
0
mirror of https://github.com/qTox/qTox.git synced 2024-03-22 14:00:36 +08:00

Merge pull request #5126

Maxim Biro (6):
      chore(windows): bump Qt 5.9 version to the latest (5.9.5)
      chore: typos
      chore(windows): the installer does get built now
      refactor(docs): re-format Windows cross-compilation instructions
      refactor(windows): remove the unused SCRIPT_DIR variable
      refactor(windows): remove the script directory requirement
This commit is contained in:
sudden6 2018-05-08 21:17:14 +02:00
commit 3751cf7176
No known key found for this signature in database
GPG Key ID: 279509B499E032B9
3 changed files with 98 additions and 112 deletions

View File

@ -111,11 +111,10 @@ ls -lbh "$PWD"
# Build # Build
sudo docker run --rm \ sudo docker run --rm \
-v "$PWD/workspace":/workspace \ -v "$PWD/workspace":/workspace \
-v "$PWD/windows/cross-compile":/script \
-v "$PWD":/qtox \ -v "$PWD":/qtox \
-e TRAVIS_CI_STAGE="$STAGE" \ -e TRAVIS_CI_STAGE="$STAGE" \
debian:stretch-slim \ debian:stretch-slim \
/bin/bash /script/build.sh "$ARCH" "$BUILD_TYPE" /bin/bash /qtox/windows/cross-compile/build.sh "$ARCH" "$BUILD_TYPE"
# Purely for debugging # Purely for debugging
ls -lbh workspace/"$ARCH"/dep-cache/ ls -lbh workspace/"$ARCH"/dep-cache/

View File

@ -2,127 +2,132 @@
## Intro ## Intro
Following these instructions will show you how to cross-compile qTox for Windows. Following these instructions you will be able to cross-compile qTox for
Windows.
This script can be used by qTox users and devs to compile qTox for windows themselves. This script can be used by qTox users and devs to compile qTox for Windows
themselves.
Please note that the compilation script doesn't build the updater and doesn't produce Please note that the compilation script doesn't build the updater.
an installer.
## Usage ## Usage
[Install Docker](https://docs.docker.com/install).
#### 1. [Install Docker](https://docs.docker.com/install). Create 2 directories:
***
#### 2. Create 3 directories for storing the files needed for cross-compiling.
***
* `workspace` -- a directory that will contain a cache of qTox dependencies * `workspace` -- a directory that will contain a cache of qTox dependencies
and the final qTox cross-compilation build. You should create this directory. and the final qTox cross-compilation build. You should create this directory.
* `script` -- a directory that contains the `build.sh` script. * `qtox` -- the root directory of a qTox repository. This directory must
Copy the `build.sh` script to this folder. contain the qTox source code that will be cross-compiled.
* `qtox` -- the root directory of a qTox repository. This directory must contain These directories will be mounted inside a Docker container at `/workspace` and
the qTox source code that will be cross-compiled. You can use an existing qTox `/qtox`.
directory you've been using for development or check one out using
`git clone https://github.com/qTox/qTox.git folder-name`
These directories will be mounted inside a Docker container at`/workspace`, > Note:
`/script`and`/qtox`. > The contents of `qtox` directory are not modified during compilation. The
> `build.sh` script makes a temporary copy of the `qtox` directory for the
> compilation.
The contents of `qtox` and `script` directories are not modified during compilation. The Once you sort out the directories, you are ready to run the `build.sh` script
`build.sh` script makes a temporary copy of the `qtox` directory for compilation. in a Docker container.
> Note:
#### 3. Create the docker container and run the build script. > The`build.sh` script takes 2 arguments: architecture and build type.
***
> Note that the`build.sh`script takes 2 arguments: architecture and build type.
> Valid values for the architecture are `i686` for 32-bit and `x86_64` for > Valid values for the architecture are `i686` for 32-bit and `x86_64` for
> 64-bit. Valid values for the build type are `release` and `debug`. All case > 64-bit. Valid values for the build type are `release` and `debug`. All
> sensitive. You can modify the scripts below to fit your use case. > case sensitive.
> To create the docker container and start cross-compiling run
To start cross-compiling for 32-bit release version of qTox run:
```sh ```sh
sudo docker run --rm \ sudo docker run --rm \
-v /absolute/path/to/your/workspace:/workspace \ -v /absolute/path/to/your/workspace:/workspace \
-v /absolute/path/to/your/script:/script \ -v /absolute/path/to/your/qtox:/qtox \
-v /absolute/path/to/your/qtox:/qtox \ debian:stretch-slim \
debian:stretch-slim \ /bin/bash /qtox/windows/cross-compile/build.sh i686 release
/bin/bash /script/build.sh i686 release
``` ```
If you want to debug some compilation issue, you might want to instead run:
If you are a qTox developer, you might want to enable tty and leave stdin open by running the following script instead.
```sh ```sh
# Get shell inside Debian Stretch container so that you can poke around if needed
sudo docker run -it \ sudo docker run -it \
--rm \ --rm \
-v /absolute/path/to/your/workspace:/workspace \ -v /absolute/path/to/your/workspace:/workspace \
-v /absolute/path/to/your/script:/script \ -v /absolute/path/to/your/qtox:/qtox \
-v /absolute/path/to/your/qtox:/qtox \ debian:stretch-slim \
debian:stretch-slim \ /bin/bash
/bin/bash /script/build.sh i686 release # Run the script
bash /qtox/windows/cross-compile/build.sh i686 release
``` ```
These will cross-compile all of the qTox dependencies and qTox itself, storing These will cross-compile all of the qTox dependencies and qTox itself, storing
them in the `workspace` directory. The first time you run it for each them in the `workspace` directory. The first time you run it for each
architecture, it will take a long time for the cross-compilation to finish, as architecture, it will take a long time for the cross-compilation to finish, as
qTox has a lot of dependencies that need to be cross-compiled. qTox has a lot of dependencies that need to be cross-compiled. But once you do
it once for each architecture, the dependencies will get cached inside the
`workspace` directory, and the next time you build qTox, the `build.sh` script
will skip recompiling them, going straight to compiling qTox, which is a lot
faster.
> Note:
> On a certain Intel Core i7 processor, a fresh build takes about 125
> minutes on a single core, and about 30 minutes using all 8 hyperthreads.
> Once built, however, it takes about 8 minutes on a single core and 2
> minutes using 8 hyperthreads to rebuild using the cached dependencies.
> Note that it takes my Intel Core i7 processor about 125 minutes on average for the cross-compilation After cross-compiling has finished, you should find the comiled qTox in a
> to finish on a single core, and about 30 minutes using all 8 hyperthreads. Once you've compiled `workspace/i686/qtox` or `workspace/x86_64/qtox` directory, depending on the
> it, the dependencies will be cached inside the `workspace` directory. The next time architecture.
> you build qTox, the `build.sh` script will skip recompiling them
> which is a lot faster -- about 8 minutes on a single core and 2 minutes using 8 hyperthreads.
You will also find `workspace/dep-cache` directory, where all the
cross-compiled qTox dependencies will be cached for the future builds. You can
remove any directory inside the `dep-cache`, which will result in the
`build.sh` re-compiling the removed dependency only.
#### 4. After cross-compiling has finished The `workspace` direcory structure for reference:
***
The `workspace\i686\qtox` and `workspace\x86_64\qtox\`directories will contain the compiled binaries in their respective debug or release folder depending on the compilation settings you chose in Step 3.
The `dep-cache` directory is where all the cross-compiled qTox dependencies will be
cached for the future builds. You can remove any directory inside the `deps` folder, which
will result in the `build.sh` re-compiling the removed dependency.
_The `workspace` direcory structure for reference_
``` ```
workspace workspace
├── i686 ├── i686
│ ├── dep-cache │   ├── dep-cache
│ │ ├── libffmpeg │   │   ├── libexif
│ │ ├── libfilteraudio │   │   ├── libffmpeg
│ │ ├── libopenal │   │   ├── libfilteraudio
│ │ ├── libopenssl │   │   ├── libopenal
│ │ ├── libopus │   │   ├── libopenssl
│ │ ├── libqrencode │   │   ├── libopus
│ │ ├── libqt5 │   │   ├── libqrencode
│ │ ├── libsodium │   │   ├── libqt5
│ │ ├── libsqlcipher │   │   ├── libsodium
│ │ ├── libtoxcore │   │   ├── libsqlcipher
│ │ └── libvpx │   │   ├── libtoxcore
│ └── qtox │   │   ├── libvpx
│ ├── debug │   │   ├── mingw-w64-debug-scripts
│ └── release │   │   ├── nsis
│   │   └── nsis_shellexecuteasuser
│   └── qtox
│   ├── debug
│   └── release
└── x86_64 └── x86_64
├── dep-cache ├── dep-cache
│ ├── libffmpeg │   ├── libexif
│ ├── libfilteraudio │   ├── libffmpeg
│ ├── libopenal │   ├── libfilteraudio
│ ├── libopenssl │   ├── libopenal
│ ├── libopus │   ├── libopenssl
│ ├── libqrencode │   ├── libopus
│ ├── libqt5 │   ├── libqrencode
│ ├── libsodium │   ├── libqt5
│ ├── libsqlcipher │   ├── libsodium
│ ├── libtoxcore │   ├── libsqlcipher
│ └── libvpx │   ├── libtoxcore
│   ├── libvpx
│   ├── mingw-w64-debug-scripts
│   ├── nsis
│   └── nsis_shellexecuteasuser
└── qtox └── qtox
├── debug ├── debug
└── release └── release

View File

@ -27,11 +27,6 @@
# because it requires static Qt, which means we'd need to build Qt twice, and # because it requires static Qt, which means we'd need to build Qt twice, and
# building Qt takes really long time. # building Qt takes really long time.
# #
# - Doesn't create an installer because there is no NSIS 3 in Debian Stable. We
# could backport it from Experimental, which is what we do on Jenkins, but
# since we don't build an updater, we might as well just do the nightly qTox
# build: no updater, no installer.
#
# - FFmpeg 3.3 doesn't cross-compile correctly, qTox build fails when linking # - FFmpeg 3.3 doesn't cross-compile correctly, qTox build fails when linking
# against the 3.3 FFmpeg. They have removed `--enable-memalign-hack` switch, # against the 3.3 FFmpeg. They have removed `--enable-memalign-hack` switch,
# which might be what causes this. Further research needed. # which might be what causes this. Further research needed.
@ -43,7 +38,6 @@ set -euo pipefail
# Common directory paths # Common directory paths
readonly WORKSPACE_DIR="/workspace" readonly WORKSPACE_DIR="/workspace"
readonly SCRIPT_DIR="/script"
readonly QTOX_SRC_DIR="/qtox" readonly QTOX_SRC_DIR="/qtox"
@ -54,9 +48,9 @@ then
exit 1 exit 1
fi fi
if [ ! -d "$WORKSPACE_DIR" ] || [ ! -d "$SCRIPT_DIR" ] || [ ! -d "$QTOX_SRC_DIR" ] if [ ! -d "$WORKSPACE_DIR" ] || [ ! -d "$QTOX_SRC_DIR" ]
then then
echo "Error: At least one of $WORKSPACE_DIR, $SCRIPT_DIR or $QTOX_SRC_DIR directories is missing." echo "Error: At least one of $WORKSPACE_DIR or $QTOX_SRC_DIR directories is missing."
exit 1 exit 1
fi fi
@ -262,10 +256,10 @@ fi
QT_PREFIX_DIR="$DEP_DIR/libqt5" QT_PREFIX_DIR="$DEP_DIR/libqt5"
QT_MAJOR=5 QT_MAJOR=5
QT_MINOR=9 QT_MINOR=9
QT_PATCH=4 QT_PATCH=5
QT_VERSION=$QT_MAJOR.$QT_MINOR.$QT_PATCH QT_VERSION=$QT_MAJOR.$QT_MINOR.$QT_PATCH
# hash from https://download.qt.io/archive/qt/5.9/5.9.4/single/qt-everywhere-opensource-src-5.9.4.tar.xz.mirrorlist # hash from https://download.qt.io/archive/qt/5.9/5.9.5/single/qt-everywhere-opensource-src-5.9.5.tar.xz.mirrorlist
QT_HASH="e3acd9cbeafba3aed9f14592f4d70bf0b255e0203943e8d2b4235002268274d5" QT_HASH="a75b87f46240a374fde93fb60038d63e3b570457785268c766c639b5dc18ccf6"
if [ ! -f "$QT_PREFIX_DIR/done" ] if [ ! -f "$QT_PREFIX_DIR/done" ]
then then
rm -rf "$QT_PREFIX_DIR" rm -rf "$QT_PREFIX_DIR"
@ -280,18 +274,6 @@ then
export PKG_CONFIG_PATH="$OPENSSL_PREFIX_DIR/lib/pkgconfig" export PKG_CONFIG_PATH="$OPENSSL_PREFIX_DIR/lib/pkgconfig"
export OPENSSL_LIBS="$(pkg-config --libs openssl)" export OPENSSL_LIBS="$(pkg-config --libs openssl)"
# Fix https://bugreports.qt.io/browse/QTBUG-66123 present in Qt 5.9.4
cd qtbase
wget https://github.com/qt/qtbase/commit/40e87491886957696486b87dc2dedec2adaf6e1a.patch -O "QTBUG-66123.patch"
check_sha256 "15c4e6f0eba90a67fee3faabd86ca670a3021ac49d19fd9b311e16615bce87a6" "QTBUG-66123.patch"
patch -p1 < "QTBUG-66123.patch"
rm "QTBUG-66123.patch"
cd ..
# Fix https://bugreports.qt.io/browse/QTBUG-63637 present in Qt 5.9.2
echo "QMAKE_LINK_OBJECT_MAX = 10" >> qtbase/mkspecs/win32-g++/qmake.conf
echo "QMAKE_LINK_OBJECT_SCRIPT = object_script" >> qtbase/mkspecs/win32-g++/qmake.conf
# So, apparently Travis CI terminates a build if it generates more than 4mb of stdout output # So, apparently Travis CI terminates a build if it generates more than 4mb of stdout output
# which happens when building Qt # which happens when building Qt
CONFIGURE_EXTRA="" CONFIGURE_EXTRA=""
@ -989,11 +971,11 @@ then
# We want to use NSIS 3, instead of NSIS 2, because it added Windows 8 and 10 # We want to use NSIS 3, instead of NSIS 2, because it added Windows 8 and 10
# support, as well as unicode support. NSIS 3 is not packaged in Debian Stretch # support, as well as unicode support. NSIS 3 is not packaged in Debian Stretch
# and building it manually appears to be quite a challenge. Luckly it's # and building it manually appears to be quite a challenge. Luckily it's
# packaged in Debian Unstable, so we can backport it to our Debian version # packaged in Debian Unstable, so we can backport it to our Debian version
# with little effort, utilizing maintainer's build script. # with little effort, utilizing maintainer's build script.
# Kepp the indentation of the next echo command as it is, as apt seems to # Keep the indentation of the next echo command as it is, as apt seems to
# ignore preferences starting with whitespace. # ignore preferences starting with whitespace.
echo " echo "
Package: * Package: *