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:
commit
3751cf7176
|
@ -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/
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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: *
|
||||||
|
|
Loading…
Reference in New Issue
Block a user