mirror of
https://github.com/Ponce/slackbuilds
synced 2024-11-22 19:44:21 +01:00
libraries/qt5: Add CCACHE and WEBENGINE options. Add notes.
I've added some benchmarking notes on building with various ways - with/without webengine, with/without ccache etc. Ought to save some time for anyone not wanting the web code.
This commit is contained in:
parent
67ad7cc10c
commit
053c9bd589
4 changed files with 296 additions and 61 deletions
|
@ -7,61 +7,48 @@ against if they are detected at build time:
|
|||
|
||||
libwebp opus pcre2 snappy
|
||||
|
||||
|
||||
============================================================
|
||||
|
||||
OPTIONS
|
||||
|
||||
To build the documentation pass DOCS=yes to the SlackBuild:
|
||||
To use Qt's built-in ccache option:
|
||||
|
||||
CCACHE=yes ./qt5.SlackBuild
|
||||
|
||||
See README.benchmarks for the benefits of using ccache.
|
||||
|
||||
To build the documentation:
|
||||
|
||||
DOCS=yes ./qt5.SlackBuild
|
||||
|
||||
To build the examples pass EXAMPLES=yes to the SlackBuild:
|
||||
To build the examples:
|
||||
|
||||
EXAMPLES=yes ./qt5.SlackBuild
|
||||
|
||||
NOTE
|
||||
|
||||
Building the documentation and examples creates a
|
||||
significantly larger package.
|
||||
|
||||
|
||||
ROUGH SIZE GUIDE
|
||||
|
||||
Package size:
|
||||
|
||||
Qt alone: 102M
|
||||
With documentation: 339M
|
||||
With examples: 391M
|
||||
With both documentation and examples: 628M
|
||||
|
||||
Minumum working space needed (size of source and package
|
||||
directories at end of build):
|
||||
|
||||
Qt alone: 5018M
|
||||
With documentation: 6197M
|
||||
With examples: 6388M
|
||||
With both documentation and examples: 7604M
|
||||
|
||||
|
||||
To build support for proprietary media codecs pass
|
||||
PROPRIETARY_CODECS=yes to the SlackBuild (this will produce
|
||||
a non-redistributable package in some countries):
|
||||
To build support for proprietary media codecs:
|
||||
|
||||
PROPRIETARY_CODECS=yes ./qt5.SlackBuild
|
||||
|
||||
To disable support for pulseaudio pass PULSEAUDIO=no to the
|
||||
SlackBuild:
|
||||
(this will produce a non-redistributable package in some
|
||||
countries)
|
||||
|
||||
To disable support for pulseaudio:
|
||||
|
||||
PULSEAUDIO=no ./qt5.SlackBuild
|
||||
|
||||
Qt will automatically detect if it is not installed at build
|
||||
time and not provide support for it.
|
||||
(Qt will automatically detect if pulseaudio is not installed
|
||||
at build time and disable it if it is missing.)
|
||||
|
||||
To NOT build qtwebengine (EXPERIMENTAL):
|
||||
|
||||
WEBENGINE=no ./qt5.SlackBuild
|
||||
|
||||
|
||||
Combine any or all of the above.
|
||||
|
||||
============================================================
|
||||
|
||||
NOTE
|
||||
GENERAL NOTES
|
||||
|
||||
After upgrading Qt5 it is important to rebuild qt5ct too, if
|
||||
it is installed, or some applications may not display or
|
||||
|
@ -69,7 +56,62 @@ function correctly.
|
|||
|
||||
There is a qt5-legacy (5.7.1) SlackBuild that is available
|
||||
for older applications that do not run correctly with this
|
||||
version. However it will not coexist with this version.
|
||||
version. However it will not coexist with this version.
|
||||
|
||||
Please report any problems about applications that don't
|
||||
work correctly to the Qt5 maintainer or to the mailing list.
|
||||
|
||||
============================================================
|
||||
|
||||
ROUGH SPEED & SIZE GUIDE
|
||||
|
||||
OPTION PKG SPACE TIME
|
||||
Normal: 102M 5018M 9:55
|
||||
No Webengine: 50M 1895M 3:18
|
||||
With Documentation: 339M 6197M -
|
||||
With Examples: 391M 6388M -
|
||||
With Documentation and Examples: 628M 7604M -
|
||||
|
||||
PKG: Package size.
|
||||
SPACE: Package directory + source space needed.
|
||||
TIME: Rough build time (- = unknown.)
|
||||
|
||||
See README.benchmarks for more detailed information.
|
||||
See README.ccache for information on setting up ccache.
|
||||
|
||||
============================================================
|
||||
|
||||
NOTES ON OPTIONS
|
||||
|
||||
* Using ccache should speed up subsequent rebuilds, but may
|
||||
be slower for first time or one-off builds.
|
||||
|
||||
* Building the documentation and/or examples creates a
|
||||
significantly larger package.
|
||||
|
||||
* Successfully tested so far without webengine (VERY quick
|
||||
tests):
|
||||
|
||||
QMPlay2
|
||||
qt5ct
|
||||
qbittorrent-qt5
|
||||
speedcrunch
|
||||
qca-qt5
|
||||
psi-plus
|
||||
sddm
|
||||
|
||||
============================================================
|
||||
|
||||
BUILDING WITHOUT WEBENGINE
|
||||
|
||||
See README.benchmarks for the benefits of not building
|
||||
webengine.
|
||||
|
||||
YMMV whether it works with an application or not, but if you
|
||||
have no intention of using the browser code, which includes
|
||||
a chunk of 3rd party Google Chromium source, then it may
|
||||
make sense to skip it and save yourself about 2/3 of the
|
||||
build time.
|
||||
|
||||
The package version has _nowebengine appended to it for
|
||||
clarity.
|
||||
|
|
114
libraries/qt5/README.benchmarks
Normal file
114
libraries/qt5/README.benchmarks
Normal file
|
@ -0,0 +1,114 @@
|
|||
ENVIRONMENT
|
||||
|
||||
Linux 4.4.157 SMP x86_64 (stock 14.2 -huge.)
|
||||
Using /usr/bin/time rather than shell built-in.
|
||||
Jobs: 2.
|
||||
Qt version: 5.9.7
|
||||
|
||||
DMI Info:
|
||||
|
||||
Board: Lenovo Mahobay motherboard.
|
||||
CPU: Version: Intel(R) Pentium(R) CPU G640 @ 2.80GHz
|
||||
Family: Core i7 Core Count: 2
|
||||
Core Enabled: 2
|
||||
Thread Count: 2
|
||||
Max Speed: 2800 MHz
|
||||
Current Speed: 2800 MHz
|
||||
External Clock: 100 MHz
|
||||
|
||||
CPUFREQ: Performance mode.
|
||||
|
||||
RAM: 12G (1333 MHz) DDR3.
|
||||
|
||||
An 8 GB tmpfs in /mnt/memory is used as a ramdisk for /tmp
|
||||
while the package was output on the real HDD. i.e.
|
||||
$TMP=/mnt/memory/SBo
|
||||
$OUTPUT=/tmp
|
||||
|
||||
System ccache setup:
|
||||
|
||||
cache size: 18.3 GB
|
||||
max_cache: 20.0 GB
|
||||
cache_dir: /root/.ccache
|
||||
CCACHE_TEMPDIR=/mnt/memory/ccache
|
||||
|
||||
No special settings were used for Qt's -ccache.
|
||||
All builds with either ccache option were performed a few
|
||||
times to build up enough cache.
|
||||
|
||||
BENCHMARKS
|
||||
|
||||
BUILDS WITH WEBENGINE
|
||||
|
||||
Normal build:
|
||||
|
||||
45970.94 user
|
||||
2408.58 system
|
||||
9:55:02 elapsed
|
||||
135% CPU (0 avgtext + 0 avgdata 7378176 maxresident) k
|
||||
80232 inputs + 522800 outputs (263 major + 950621123 minor) pagefaults
|
||||
0 swaps
|
||||
|
||||
Using Qt's -ccache option:
|
||||
|
||||
36223.82 user
|
||||
1872.14 system
|
||||
6:58:03 elapsed
|
||||
151% CPU (0 avgtext + 0 avgdata 7375136 maxresident) k
|
||||
274848 inputs + 578712 outputs (730 major + 724828690 minor) pagefaults
|
||||
0 swaps
|
||||
|
||||
Using system ccache:
|
||||
|
||||
4008.03 user
|
||||
289.34 system
|
||||
1:17:11 elapsed
|
||||
92% CPU (0 avgtext + 0 avgdata 7377248 maxresident) k
|
||||
4396232 inputs + 391856 outputs (97 major + 59094442 minor) pagefaults
|
||||
0 swaps
|
||||
|
||||
|
||||
BUILDS WITHOUT WEBENGINE
|
||||
|
||||
Normal build:
|
||||
|
||||
10408.66 user
|
||||
687.60 system
|
||||
3:18:22 elapsed
|
||||
93% CPU (0 avgtext + 0 avgdata 3850048 maxresident) k
|
||||
48176 inputs + 414056 outputs (26 major + 265106108 minor) pagefaults
|
||||
0 swaps
|
||||
|
||||
Using Qt's -ccache option:
|
||||
|
||||
1055.75 user
|
||||
167.14 system
|
||||
22:17.13 elapsed
|
||||
91% CPU (0 avgtext + 0 avgdata 1188432 maxresident) k
|
||||
936 inputs + 468464 outputs (8 major + 42575851 minor) pagefaults
|
||||
0 swaps
|
||||
|
||||
Using system ccache:
|
||||
|
||||
922.05 user
|
||||
159.25 system
|
||||
19:42.82 elapsed
|
||||
91% CPU (0 avgtext + 0 avgdata 504048 maxresident) k
|
||||
5672 inputs + 158016 outputs (5 major + 38449127 minor) pagefaults
|
||||
0 swaps
|
||||
|
||||
|
||||
Average Packages Sizes:
|
||||
|
||||
Normal: 102 MB
|
||||
Without webengine: 50 MB
|
||||
|
||||
|
||||
As is seen by the elapsed time in the results, using ccache
|
||||
system-wide has a huge benefit. Qt's -ccache option showed
|
||||
little gain when building the full package, but was good
|
||||
when building without webengine.
|
||||
|
||||
See README.ccache for information on setting up ccache.
|
||||
|
||||
Last updated Mon 10 Dec 03:46:29 UTC 2018
|
46
libraries/qt5/README.ccache
Normal file
46
libraries/qt5/README.ccache
Normal file
|
@ -0,0 +1,46 @@
|
|||
NOTES ON SETTING UP CCACHE
|
||||
|
||||
Using ccache can save a lot of time when building packages,
|
||||
and this is not limited to Qt5. Ccache is installed by
|
||||
default on stock Slackware.
|
||||
|
||||
ccache(1) has a lot of useful info on using ccache, however
|
||||
I don't recommend using its method of symlinking. Instead I
|
||||
recommend the following way:
|
||||
|
||||
mkdir -p /usr/local/bin
|
||||
ln -s /usr/bin/ccache /usr/local/bin/cc
|
||||
ln -s /usr/bin/ccache /usr/local/bin/c++
|
||||
ln -s /usr/bin/ccache /usr/local/bin/gcc
|
||||
ln -s /usr/bin/ccache /usr/local/bin/g++
|
||||
|
||||
Doing it this way rather than copying the ccache binary as
|
||||
the man page suggests will ensure that the ccache used is
|
||||
updated whenever the ccache package is.
|
||||
|
||||
The cache is created in the home directory of the user using
|
||||
it, and since slackbuilds are run by root that will be in
|
||||
/root/.ccache, therefore ensure that you have enough free
|
||||
space on the root file system for it. It is possible to put
|
||||
the cache directory elsewhere though. See the man page for
|
||||
info. But it would probably be fastest when on the same
|
||||
file system as the build directory.
|
||||
|
||||
It's also possible to host the cache on a shared NFS
|
||||
directory, but be sure to test the speed before committing
|
||||
to that. The man page has some notes on this.
|
||||
|
||||
Since Qt5 can take a lot of build space I recommend a max
|
||||
cache size of AT LEAST 6 GB. If you intend to use it all
|
||||
the time then use as much as you can. The default size is
|
||||
5 GB. I use 20 GB on my main build box, but use 7 GB on
|
||||
workstations and servers.
|
||||
|
||||
Handy commands:
|
||||
|
||||
ccache -s: To show some statistics.
|
||||
ccache -M <N>: To set the max cache size to N.
|
||||
|
||||
(use G for GB with -M.)
|
||||
|
||||
Last updated Mon 10 Dec 03:46:41 UTC 2018
|
|
@ -67,6 +67,52 @@ TMP=${TMP:-/tmp/SBo}
|
|||
PKG=$TMP/package-$PRGNAM
|
||||
OUTPUT=${OUTPUT:-/tmp}
|
||||
|
||||
EXAMPLES=${EXAMPLES:-no}
|
||||
DOCS=${DOCS:-no}
|
||||
PROPRIETARY_CODECS=${PROPRIETARY_CODECS:-no}
|
||||
PULSEAUDIO=${PULSEAUDIO:-yes}
|
||||
CCACHE=${CCACHE:-no}
|
||||
WEBENGINE=${WEBENGINE:-yes}
|
||||
|
||||
printf "\n%s\n\n" "SlackBuild Options:"
|
||||
printf "%s\n" "CCACHE: $CCACHE"
|
||||
printf "%s\n" "DOCS: $DOCS"
|
||||
printf "%s\n" "EXAMPLES: $EXAMPLES"
|
||||
printf "%s\n" "PROPRIETARY_CODECS: $PROPRIETARY_CODECS"
|
||||
printf "%s\n" "PULSEAUDIO: $PULSEAUDIO"
|
||||
printf "%s\n" "WEBENGINE: $WEBENGINE"
|
||||
printf "\n"
|
||||
|
||||
# Default is no.
|
||||
if [ "$EXAMPLES" == "yes" ]; then
|
||||
BUILD_EXAMPLES=""
|
||||
else
|
||||
BUILD_EXAMPLES="-nomake examples"
|
||||
fi
|
||||
|
||||
# Default is yes.
|
||||
if [ "$PULSEAUDIO" = "no" ]; then
|
||||
PULSE="-no-pulseaudio"
|
||||
fi
|
||||
|
||||
# Default is no.
|
||||
if [ "$CCACHE" = "yes" ]; then
|
||||
CCACHE="-ccache"
|
||||
else
|
||||
unset CCACHE
|
||||
fi
|
||||
|
||||
if [ "$WEBENGINE" = "no" ]; then
|
||||
EXCLUDE="--exclude=qtweb*"
|
||||
PKGVERSION="${VERSION}_nowebengine"
|
||||
else
|
||||
PKGVERSION="${VERSION}"
|
||||
# Note that this changes to -webengine-proprietary-codecs in later versions
|
||||
if [ "$PROPRIETARY_CODECS" = "yes" ]; then
|
||||
CODECS="-proprietary-codecs"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$ARCH" = "i586" ]; then
|
||||
SLKCFLAGS="-O2 -march=i586 -mtune=i686"
|
||||
LIBDIRSUFFIX=""
|
||||
|
@ -101,7 +147,7 @@ mkdir -p $TMP $PKG $OUTPUT
|
|||
cd $TMP
|
||||
echo "Removing any existing source directory. Please wait..."
|
||||
rm -rf ${PRGNAM/5/}-everywhere-opensource-src-$VERSION
|
||||
tar xvf $CWD/${PRGNAM/5/}-everywhere-opensource-src-$VERSION.tar.xz
|
||||
tar xvf $CWD/${PRGNAM/5/}-everywhere-opensource-src-$VERSION.tar.xz $EXCLUDE
|
||||
cd ${PRGNAM/5/}-everywhere-opensource-src-$VERSION
|
||||
chown -R root:root .
|
||||
find -L . \
|
||||
|
@ -120,23 +166,6 @@ fi
|
|||
|
||||
sed -i "s|-O2|$SLKCFLAGS|" qtbase/mkspecs/common/gcc-base.conf
|
||||
|
||||
# Build examples. Default is no.
|
||||
if [ "${EXAMPLES:-no}" == "yes" ]; then
|
||||
BUILD_EXAMPLES=""
|
||||
else
|
||||
BUILD_EXAMPLES="-nomake examples"
|
||||
fi
|
||||
|
||||
if [ "${PULSEAUDIO:-yes}" = "no" ]; then
|
||||
PULSE="-no-pulseaudio"
|
||||
fi
|
||||
|
||||
# New codec option.
|
||||
# Note that this changes to -webengine-proprietary-codecs in later versions
|
||||
if [ "${PROPRIETARY_CODECS:-no}" = "yes" ]; then
|
||||
CODECS="-proprietary-codecs"
|
||||
fi
|
||||
|
||||
export CFLAGS="$SLKCFLAGS"
|
||||
export CXXFLAGS="$SLKCFLAGS -std=c++11"
|
||||
./configure -v \
|
||||
|
@ -167,6 +196,7 @@ export CXXFLAGS="$SLKCFLAGS -std=c++11"
|
|||
-release \
|
||||
-no-use-gold-linker \
|
||||
-c++std c++11 \
|
||||
$CCACHE \
|
||||
$CODECS \
|
||||
$PULSE \
|
||||
$RELOCATIONS \
|
||||
|
@ -176,7 +206,7 @@ make
|
|||
make install INSTALL_ROOT=$PKG
|
||||
|
||||
# Install documentation. Default is not to install documentation.
|
||||
if [ "${DOCS:-no}" == "yes" ]; then
|
||||
if [ "$DOCS" == "yes" ]; then
|
||||
# Recreate Makefiles in order to use the just compiled qdoc.
|
||||
for doc in $(find . -name "Makefile*" | xargs egrep "^\s/usr/lib${LIBDIRSUFFIX}/qt5/bin/" \
|
||||
| cut -d':' -f1 | uniq)
|
||||
|
@ -236,11 +266,13 @@ Description: Qt5 Configuration
|
|||
Version: $VERSION
|
||||
EOF
|
||||
|
||||
# Fix internal linking for Qt5WebEngineCore.pc.
|
||||
sed -i \
|
||||
-e 's|-Wl,--start-group.* -Wl,--end-group||' \
|
||||
-e "s|-L${PWD}/qtwebengine/src/core/api/Release||" \
|
||||
$PKG/usr/lib${LIBDIRSUFFIX}/pkgconfig/Qt5WebEngineCore.pc
|
||||
if [ "$WEBENGINE" = "yes" ]; then
|
||||
# Fix internal linking for Qt5WebEngineCore.pc.
|
||||
sed -i \
|
||||
-e 's|-Wl,--start-group.* -Wl,--end-group||' \
|
||||
-e "s|-L${PWD}/qtwebengine/src/core/api/Release||" \
|
||||
$PKG/usr/lib${LIBDIRSUFFIX}/pkgconfig/Qt5WebEngineCore.pc
|
||||
fi
|
||||
|
||||
# While we are at it, there isn't any reason to keep references to $PKG in the *.prl files.
|
||||
for PRL in $(find $PKG -name "*\.prl"); do
|
||||
|
@ -291,6 +323,7 @@ find $PKG \( -name "*.qml" -o -name "*.app" \) -perm 755 -exec chmod 644 '{}' \;
|
|||
mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
|
||||
cp -a \
|
||||
README qtbase/{header*,LGPL_EXCEPTION.txt,LICENSE.*L} \
|
||||
$CWD/README.benchmarks $CWD/README.ccache \
|
||||
$PKG/usr/doc/$PRGNAM-$VERSION
|
||||
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild
|
||||
|
||||
|
@ -299,6 +332,6 @@ cat $CWD/slack-desc > $PKG/install/slack-desc
|
|||
cat $CWD/doinst.sh > $PKG/install/doinst.sh
|
||||
|
||||
cd $PKG
|
||||
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
|
||||
/sbin/makepkg -l y -c n $OUTPUT/$PRGNAM-$PKGVERSION-$ARCH-$BUILD$TAG.${PKGTYPE:-tgz}
|
||||
|
||||
# vim: expandtab
|
||||
|
|
Loading…
Reference in a new issue