diff options
author | David 'Digit' Turner <digit@google.com> | 2015-07-15 14:00:12 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2015-07-15 14:00:12 +0000 |
commit | 434fffc38fe81e33109363de1dbf2e92c8d96559 (patch) | |
tree | 26641defa88f56a42fd9183a2ed52fde8eb2a4e9 | |
parent | d35f526d929c357323e1d340c85837c9ff39937e (diff) | |
parent | a724ba276b41cfca548488f3aaa0f49838763c5b (diff) | |
download | qemu-434fffc38fe81e33109363de1dbf2e92c8d96559.tar.gz |
Merge "build-qt.sh: Fix Qt build script." into studio-1.4-dev automerge: 7322861
automerge: a724ba2
* commit 'a724ba276b41cfca548488f3aaa0f49838763c5b':
build-qt.sh: Fix Qt build script.
-rw-r--r-- | android/dependencies/PACKAGES.TXT | 4 | ||||
-rwxr-xr-x | android/scripts/build-qt.sh | 169 |
2 files changed, 133 insertions, 40 deletions
diff --git a/android/dependencies/PACKAGES.TXT b/android/dependencies/PACKAGES.TXT index 1c2960afd3..a30b6b2e17 100644 --- a/android/dependencies/PACKAGES.TXT +++ b/android/dependencies/PACKAGES.TXT @@ -19,9 +19,5 @@ SHA1=20e061c463bed415051f0f89e968e331a2078551 URL=http://xorg.freedesktop.org SHA1=79638cf00584b08fd6eeb1e73ea69b331561e7f6 URL=http://llvm.org/releases/3.5.1/llvm-3.5.1.src.tar.xz SHA1=53ec316946bce7b63327f73c40ac9be1f50e31b2 URL=ftp://ftp.freedesktop.org/pub/mesa/10.4.2/MesaLib-10.4.2.tar.bz2 SRCDIR=Mesa-10.4.2 PATCHES=MesaLib-10.4.2-patches.tar.xz -# Qt 5.5 -SHA1=3d6734bc6d00e1017c1db40d68309997bdf7bf6f URL=http://download.qt.io/archive/qt/5.5/5.5.0/submodules/qtbase-opensource-src-5.5.0.tar.xz BASENAME=qt-base SRCDIR=qtbase-opensource-src-5.5.0 -SHA1=9238a1aedd126f84a73014c12b6391267238da0a URL=http://download.qt.io/archive/qt/5.5/5.5.0/submodules/qtsvg-opensource-src-5.5.0.tar.xz BASENAME=qt-svg SRCDIR=qtsvg-opensource-src-5.5.0 DSTDIR=qtbase-opensource-src-5.5.0/qtsvg - # e2fsprogs SHA1=2d008b9902a169bd6767058ba98fce334328c763 URL=https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v1.42.13/e2fsprogs-1.42.13.tar.xz PATCHES=e2fsprogs-1.42.13-patches.tar.xz diff --git a/android/scripts/build-qt.sh b/android/scripts/build-qt.sh index aec2509c99..acf325e407 100755 --- a/android/scripts/build-qt.sh +++ b/android/scripts/build-qt.sh @@ -20,19 +20,24 @@ shell_import utils/aosp_dir.shi shell_import utils/emulator_prebuilts.shi shell_import utils/install_dir.shi shell_import utils/option_parser.shi -shell_import utils/package_list_parser.shi shell_import utils/package_builder.shi PROGRAM_PARAMETERS="" PROGRAM_DESCRIPTION=\ -"Build prebuilt Qt host libraries." +"Build prebuilt Qt host libraries. -package_builder_register_options +This script is used to download the Qt source tarball from source, then +extract it and build the Qt host tools and libraries. +" aosp_dir_register_option prebuilts_dir_register_option install_dir_register_option qt +package_builder_register_options + +OPT_DOWNLOAD= +option_register_var "--download" OPT_DOWNLOAD "Download source tarball." option_parse "$@" @@ -44,40 +49,63 @@ prebuilts_dir_parse_option aosp_dir_parse_option install_dir_parse_option +package_builder_process_options qt + +### +### Download the source tarball if needed. +### ARCHIVE_DIR=$PREBUILTS_DIR/archive if [ ! -d "$ARCHIVE_DIR" ]; then - dump "Downloading dependencies sources first." - $(program_directory)/download-sources.sh \ - --verbosity=$(get_verbosity) \ - --prebuilts-dir="$PREBUILTS_DIR" || - panic "Could not download source archives!" -fi -if [ ! -d "$ARCHIVE_DIR" ]; then - panic "Missing archive directory: $ARCHIVE_DIR" + run mkdir -p "$ARCHIVE_DIR" || + panic "Could not create directory: $ARCHIVE_DIR" fi -PACKAGE_LIST=$ARCHIVE_DIR/PACKAGES.TXT -if [ ! -f "$PACKAGE_LIST" ]; then - panic "Missing package list file, run download-sources.sh: $PACKAGE_LIST" + +QT_SRC_NAME=qt-everywhere-opensource-src-5.5.0 +QT_SRC_PACKAGE=$QT_SRC_NAME.tar.xz +QT_SRC_URL=http://download.qt.io/archive/qt/5.5/5.5.0/single/$QT_SRC_PACKAGE +QT_SRC_PACKAGE_SHA1=4409ef12d1017a9b5e6733ea27596a6ca637a88c + +if [ -z "$OPT_DOWNLOAD" -a ! -f "$ARCHIVE_DIR/$QT_SRC_PACKAGE" ]; then + if [ -z "$OPT_DOWNLOAD" ]; then + echo "The following tarball is missing: $ARCHIVE_DIR/$QT_SRC_PACKAGE" + echo "Please use the --download option to download it. Note that this is" + echo "a huge file over 300 MB, the download will take time." + exit 1 + fi fi -package_builder_process_options qt +# Download a file. +# $1: Source URL +# $2: Destination directory. +# $3: [Optional] expected SHA-1 sum of downloaded file. +download_package () { + # Assume the packages are already downloaded under $ARCHIVE_DIR + local DST_DIR PKG_URL PKG_NAME SHA1SUM REAL_SHA1SUM + + PKG_URL=$1 + PKG_NAME=$(basename "$PKG_URL") + DST_DIR=$2 + SHA1SUM=$3 + + log "Downloading $PKG_NAME..." + (cd "$DST_DIR" && run curl -L -o "$PKG_NAME" "$PKG_URL") || + panic "Can't download '$PKG_URL'" + + if [ "$SHA1SUM" ]; then + log "Checking $PKG_NAME content" + REAL_SHA1SUM=$(compute_file_sha1 "$DST_DIR"/$PKG_NAME) + if [ "$REAL_SHA1SUM" != "$SHA1SUM" ]; then + panic "Error: Invalid SHA-1 sum for $PKG_NAME: $REAL_SHA1SUM (expected $SHA1SUM)" + fi + fi +} -package_list_parse_file "$PACKAGE_LIST" +if [ "$OPT_DOWNLOAD" ]; then + download_package "$QT_SRC_URL" "$ARCHIVE_DIR" "$QT_SRC_PACKAGE_SHA1" +fi BUILD_SRC_DIR=$TEMP_DIR/src -# Unpack package source into $BUILD_SRC_DIR if needed. -# $1: Package basename. -unpack_package_source () { - local PKG_NAME PKG_SRC_DIR PKG_BUILD_DIR PKG_SRC_TIMESTAMP PKG_TIMESTAMP - PKG_NAME=$(package_list_get_unpack_src_dir $1) - PKG_SRC_TIMESTAMP=$BUILD_SRC_DIR/timestamp-$PKG_NAME - if [ ! -f "$PKG_SRC_TIMESTAMP" ]; then - package_list_unpack_and_patch "$1" "$ARCHIVE_DIR" "$BUILD_SRC_DIR" - touch $PKG_SRC_TIMESTAMP - fi -} - # Atomically update target directory $1 with the content of $2. # This also removes $2 on success. # $1: target directory. @@ -94,11 +122,14 @@ directory_atomic_update () { } # $1: Package name (e.g. 'qt-base') -# $2+: Extra configuration options. +# $2: List of extra modules to build (e.g. 'qtsvg') +# $3+: Extra configuration options. build_qt_package () { local PKG_NAME PKG_SRC_DIR PKG_BUILD_DIR PKG_SRC_TIMESTAMP PKG_TIMESTAMP + local PKG_MODULES PKG_NAME=$(package_list_get_src_dir $1) - shift + PKG_MODULES=$2 + shift; shift PKG_SRC_DIR="$BUILD_SRC_DIR/$PKG_NAME" PKG_BUILD_DIR=$TEMP_DIR/build-$SYSTEM/$PKG_NAME ( @@ -113,6 +144,15 @@ build_qt_package () { "$@" && run make -j$NUM_JOBS V=1 && run make install -j$NUM_JOBS V=1 +# export QTDIR=$_SHU_BUILDER_PREFIX && +# export PATH=$QTDIR/bin:$PATH && +# for MODULE in $PKG_MODULES; do +# cd "$PKG_SRC_DIR/$MODULE" && +# run qmake && +# run make -j$NUM_JOBS V=1 && +# run make install -j$NUM_JOBS V=1 || +# panic "Could not build Qt $MODULE module!" +# done ) || panic "Could not build and install $1" } @@ -189,7 +229,27 @@ for SYSTEM in $LOCAL_HOST_SYSTEMS; do ;; esac - dump "$(builder_text) Building Qt" + # Unpacking the sources if needed. + QT_SRC_TIMESTAMP=$TEMP_DIR/timestamp-$QT_SRC_NAME + if [ "$OPT_FORCE" ]; then + rm -f "$QT_SRC_TIMESTAMP" + fi + if [ ! -f "$QT_SRC_TIMESTAMP" ]; then + dump "Unpacking $QT_SRC_NAME sources." + run mkdir -p "$BUILD_SRC_DIR" && + unpack_archive "$ARCHIVE_DIR/$QT_SRC_PACKAGE" "$BUILD_SRC_DIR" || + panic "Failed to unpack source package: $QT_SRC_PACKAGE" + + # Need to patch this file to avoid install syncqt.pl which will + # fail horribly with an error like: + # ..../<binprefix>-strip:.../bin/syncqt.pl: File format not recognized + # because the generated Makefile tries to strip a Perl script. + run sed -i 's|^INSTALLS += syncqt|#INSTALLS += syncqt|g' $BUILD_SRC_DIR/$QT_SRC_NAME/qtbase/qtbase.pro + touch "$QT_SRC_TIMESTAMP" + fi + + # Configuring the build. This takes a lot of time due to QMake. + dump "$(builder_text) Configuring Qt build" EXTRA_CONFIGURE_FLAGS= var_append EXTRA_CONFIGURE_FLAGS \ @@ -200,10 +260,13 @@ for SYSTEM in $LOCAL_HOST_SYSTEMS; do -no-rpath \ -no-gtkstyle \ -shared \ - -v \ -nomake examples \ -nomake tests \ + if [ "$(get_verbosity)" -gt 2 ]; then + var_append EXTRA_CONFIGURE_FLAGS "-v" + fi + case $SYSTEM in linux-x86) var_append EXTRA_CONFIGURE_FLAGS \ @@ -239,11 +302,45 @@ for SYSTEM in $LOCAL_HOST_SYSTEMS; do ;; esac - unpack_package_source qt-base - unpack_package_source qt-svg - - build_qt_package qt-base \ + QT_BUILD_DIR=$(builder_build_dir) + + ( + run mkdir -p "$QT_BUILD_DIR" && + run cd "$QT_BUILD_DIR" && + export LDFLAGS="-L$_SHU_BUILDER_PREFIX/lib" && + export CPPFLAGS="-I$_SHU_BUILDER_PREFIX/include" && + export PKG_CONFIG_LIBDIR="$_SHU_BUILDER_PREFIX/lib/pkgconfig" && + export PKG_CONFIG_PATH="$PKG_CONFIG_LIBDIR:$_SHU_BUILDER_PKG_CONFIG_PATH" && + run "$BUILD_SRC_DIR"/$QT_SRC_NAME/configure \ + -prefix $_SHU_BUILDER_PREFIX \ $EXTRA_CONFIGURE_FLAGS + ) || panic "Could not configure Qt build!" + + # Build everything now. + QT_MODULES="qtbase qtsvg" + QT_TARGET_BUILD_MODULES= + QT_TARGET_INSTALL_MODULES= + for QT_MODULE in $QT_MODULES; do + var_append QT_TARGET_BUILD_MODULES "module-$QT_MODULE" + var_append QT_TARGET_INSTALL_MODULES "module-$QT_MODULE-install_subtargets" + done + + QT_MAKE_FLAGS="-j$NUM_JOBS" + if [ "$(get_verbosity)" -gt 2 ]; then + var_append QT_MAKE_FLAGS "V=1" + fi + + dump "$(builder_text) Building Qt binaries" + ( + run cd "$QT_BUILD_DIR" && + run make $QT_MAKE_FLAGS $QT_TARGET_BUILD_MODULES + ) || panic "Could not build Qt binaries!" + + dump "$(builder_text) Installing Qt binaries" + ( + run cd "$QT_BUILD_DIR" && + run make $QT_MAKE_FLAGS $QT_TARGET_INSTALL_MODULES + ) || panic "Could not install Qt binaries!" # Find all Qt static libraries. case $SYSTEM in |