summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Alanis <alanisbaez@google.com>2021-08-25 23:10:46 +0000
committerRoberto Alanis <alanisbaez@google.com>2021-10-21 00:46:57 +0000
commit0858494e96e56c1a4262fa115a096272088df6bd (patch)
tree2fa05dc9ab3b3407d9d400b47fde041707fad48f
parentc2cf6a93b0e7fceaecb40ee2ca17d444c8258b1d (diff)
downloadlibwebp-0858494e96e56c1a4262fa115a096272088df6bd.tar.gz
Port Jenkins script: compile
https://build.webmproject.org/jenkins/view/webp/job/libwebp__compile/ Change-Id: I646e3048cf4e3d8672b66838e31c7ccc53ced60f Bug: b:185520507
-rw-r--r--infra/common.sh14
-rwxr-xr-xinfra/compile.sh402
2 files changed, 416 insertions, 0 deletions
diff --git a/infra/common.sh b/infra/common.sh
index 9f51a6c2..b3686e6c 100644
--- a/infra/common.sh
+++ b/infra/common.sh
@@ -49,6 +49,20 @@ make_build_dir() {
}
#######################################
+# Cleanup files from the build directory.
+# Args:
+# $1 build directory
+# Globals:
+# LIBWEBP_ROOT repository's root path
+#######################################
+cleanup() {
+ # $1 is not completely removed to allow for binary artifacts to be
+ # extracted.
+ find "${1:?"Build directory not defined"}" \
+ \( -name "*.[ao]" -o -name "*.l[ao]" \) -exec rm -f {} +
+}
+
+#######################################
# Setup ccache for toolchain.
#######################################
setup_ccache() {
diff --git a/infra/compile.sh b/infra/compile.sh
new file mode 100755
index 00000000..60023a69
--- /dev/null
+++ b/infra/compile.sh
@@ -0,0 +1,402 @@
+#!/bin/bash
+# Copyright (c) 2021, Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+#
+# * Neither the name of Google nor the names of its contributors may
+# be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+set -xe
+LIBWEBP_ROOT="$(realpath "$(dirname "$0")/..")"
+WORKSPACE=${WORKSPACE:-"$(mktemp -d -t webp.XXX)"}
+
+# shellcheck source=infra/common.sh
+source "${LIBWEBP_ROOT}/infra/common.sh"
+
+usage() {
+ cat << EOF
+Usage: compile.sh BUILD_TYPE TARGET
+Options:
+BUILD_TYPE supported build type: (shared, static, static-debug)
+TARGET supported target platforms:
+ aarch64-linux-clang
+ aarch64-linux-gnu
+ arm-linux-gnueabi
+ arm-neon-linux-gnueabi
+ cmake
+ cmake-aarch64
+ cmake-arm
+ cmake-clang
+ disable-near-lossless
+ disable-sse4.1
+ disable-stats
+ force-aligned-32
+ force-aligned-64
+ gradle
+ i686-linux-asan
+ i686-linux-clang
+ i686-linux-gnu
+ i686-w64-mingw32
+ mips2el-linux-gnu
+ mips32dspr2el-linux-gnu
+ mips32eb-linux-gnu
+ mips32el-linux-gnu
+ mips32r2el-linux-gnu
+ mips32r5el-linux-gnu
+ mips64r2el-linux-gnu
+ mips64r6el-linux-gnu
+ native
+ reduce-csp
+ reduce-size
+ reduce-size-disable-stats
+ visibility-default-gnu
+ visibility-hidden-clang
+ visibility-hidden-gnu
+ wasm
+ x86_64-linux-clang
+ x86_64-linux-gnu
+ x86_64-linux-msan
+ x86_64-w64-mingw32
+Environment variables:
+WORKSPACE directory where the build is done
+EOF
+}
+
+################################################################################
+echo "Building libwebp in ${WORKSPACE}"
+
+if [[ ! -d "${WORKSPACE}" ]]; then
+ log_err "${WORKSPACE} directory does not exist"
+ exit 1
+fi
+
+BUILD_TYPE=${1:?"Build type not defined.$(
+ echo
+ usage
+)"}
+TARGET=${2:?"Target not defined.$(
+ echo
+ usage
+)"}
+readonly BUILD_DIR="${WORKSPACE}/build-${BUILD_TYPE}"
+
+trap 'cleanup ${BUILD_DIR}' EXIT
+make_build_dir "${BUILD_DIR}"
+
+config_flags=()
+case "${BUILD_TYPE}" in
+ shared*) ;; # Valid BUILD_TYPE but no setup required
+ static*) config_flags+=("--disable-shared") ;;
+ experimental) config_flags+=("--enable-experimental") ;;
+ *)
+ log_err "Invalid BUILD_TYPE"
+ usage
+ exit 1
+ ;;
+esac
+
+if grep -m 1 -q "enable-asserts" "${LIBWEBP_ROOT}/configure.ac"; then
+ config_flags+=("--enable-asserts")
+fi
+
+case "${TARGET}" in
+ aarch64-linux-clang)
+ TARGET="aarch64-linux-gnu"
+ CC="clang"
+ CC="${CC} --target=aarch64-linux-gnu"
+ export CC
+ export CFLAGS="-isystem /usr/aarch64-linux-gnu/include"
+ ;;
+ arm-linux-gnueabi)
+ export CFLAGS="-O3 -march=armv7-a -mfloat-abi=softfp -ftree-vectorize"
+ ;;
+ arm-neon-linux-gnueabi)
+ TARGET="arm-linux-gnueabi"
+ CFLAGS="-O3 -march=armv7-a -mfpu=neon -mfloat-abi=softfp -ftree-vectorize"
+ export CFLAGS
+ ;;
+ mips2el-linux-gnu)
+ export CFLAGS="-EL -O2 -mips2"
+ TARGET="mipsel-linux-gnu"
+ ;;
+ mips32el-linux-gnu)
+ export CFLAGS="-EL -O2 -mips32"
+ TARGET="mipsel-linux-gnu"
+ ;;
+ mips32r2el-linux-gnu)
+ export CFLAGS="-EL -O2 -mips32r2"
+ TARGET="mipsel-linux-gnu"
+ ;;
+ mips32dspr2el-linux-gnu)
+ export CFLAGS="-EL -O2 -mdspr2"
+ TARGET="mipsel-linux-gnu"
+ ;;
+ mips32r5el-linux-gnu)
+ export CFLAGS="-EL -O2 -mips32r5 -mmsa"
+ TARGET="mipsel-linux-gnu"
+ ;;
+ mips32eb-linux-gnu)
+ export CFLAGS="-EB -O2 -mips32"
+ TARGET="mips-linux-gnu"
+ ;;
+ mips64r2el-linux-gnu)
+ export CFLAGS="-EL -O2 -mips64r2 -mabi=64"
+ TARGET="mips64el-linux-gnuabi64"
+ ;;
+ mips64r6el-linux-gnu)
+ export CFLAGS="-EL -O2 -mips64r6 -mabi=64 -mmsa"
+ TARGET="mips-img-linux-gnu"
+ ;;
+ i686-linux-gnu)
+ export CC="gcc -m32"
+ ;;
+ i686-linux-clang)
+ TARGET="i686-linux-gnu"
+ export CC="clang -m32"
+ ;;
+ i686-linux-asan)
+ TARGET="i686-linux-gnu"
+ export CC="clang -m32 -fsanitize=address"
+ ;;
+ i686-linux-msan)
+ TARGET="i686-linux-gnu"
+ export CC="clang -m32 -fsanitize=memory"
+ ;;
+ x86_64-linux-clang)
+ TARGET="x86_64-linux-gnu"
+ export CC=clang
+ ;;
+ x86_64-linux-msan)
+ TARGET="x86_64-linux-gnu"
+ export CC="clang -fsanitize=memory"
+ ;;
+ force-aligned-32)
+ config_flags+=("--enable-aligned")
+ TARGET="i686-linux-gnu"
+ export CC="gcc -m32"
+ ;;
+ force-aligned-64)
+ config_flags+=("--enable-aligned")
+ TARGET="x86_64-linux-gnu"
+ ;;
+ visibility-default-*)
+ export CFLAGS="-O2 -g -fvisibility=default"
+ TARGET="x86_64-linux-gnu"
+ ;;
+ visibility-hidden-*)
+ export CFLAGS="-O2 -g -fvisibility=hidden"
+ if [[ "${TARGET}" = "visibility-hidden-clang" ]]; then
+ export CC=clang
+ fi
+ TARGET="x86_64-linux-gnu"
+ ;;
+ disable-sse4.1)
+ grep "${TARGET}" "${LIBWEBP_ROOT}/configure.ac" || exit 0
+ config_flags+=("--${TARGET}")
+ TARGET="x86_64-linux-gnu"
+ ;;
+ disable-near-lossless)
+ grep "${TARGET}" "${LIBWEBP_ROOT}/configure.ac" || exit 0
+ config_flags+=("--${TARGET}")
+ TARGET="x86_64-linux-gnu"
+ ;;
+ disable-stats)
+ git -C "${LIBWEBP_ROOT}" grep WEBP_DISABLE_STATS || exit 0
+ export CFLAGS="-O2 -g -DWEBP_DISABLE_STATS"
+ TARGET="x86_64-linux-gnu"
+ ;;
+ reduce-size)
+ git -C "${LIBWEBP_ROOT}" grep WEBP_REDUCE_SIZE || exit 0
+ export CFLAGS="-O2 -g -DWEBP_REDUCE_SIZE"
+ TARGET="x86_64-linux-gnu"
+ ;;
+ reduce-size-disable-stats)
+ git -C "${LIBWEBP_ROOT}" grep -e WEBP_DISABLE_STATS -e WEBP_REDUCE_SIZE \
+ || exit 0
+ export CFLAGS="-O2 -g -DWEBP_DISABLE_STATS -DWEBP_REDUCE_SIZE"
+ TARGET="x86_64-linux-gnu"
+ ;;
+ reduce-csp)
+ git -C "${LIBWEBP_ROOT}" grep WEBP_REDUCE_CSP || exit 0
+ export CFLAGS="-O2 -g -DWEBP_REDUCE_CSP"
+ TARGET="x86_64-linux-gnu"
+ ;;
+ x86_64-linux-gnu | *mingw32 | aarch64*) ;; # Default target configuration
+ # non-configure based builds
+ native)
+ setup_ccache
+ # exercise makefile.unix then quit
+ make -C "${LIBWEBP_ROOT}" -f makefile.unix -j all
+ for tgt in extras examples/anim_diff; do
+ grep -q -m 1 "${tgt}" "${LIBWEBP_ROOT}/makefile.unix" \
+ && make -C "${LIBWEBP_ROOT}" -f makefile.unix -j "${tgt}"
+ done
+ [[ -d "${LIBWEBP_ROOT}/tests/fuzzer" ]] \
+ && make -j -C "${LIBWEBP_ROOT}/tests/fuzzer" -f makefile.unix
+ exit 0
+ ;;
+ cmake*)
+ setup_ccache
+ # exercise cmake then quit
+ [ -f "${LIBWEBP_ROOT}/CMakeLists.txt" ] || exit 0
+ opts=()
+ case "${TARGET}" in
+ cmake-clang)
+ opts+=("-DCMAKE_C_COMPILER=clang")
+ ;;
+ cmake-arm)
+ opts+=("-DCMAKE_C_COMPILER=arm-linux-gnueabi-gcc")
+ case "${GERRIT_BRANCH:-}" in
+ portable-intrinsics | 0.6.1) exit 0 ;;
+ *) ;; # Skip configuration
+ esac
+ ;;
+ cmake-aarch64)
+ opts+=("-DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc")
+ case "${GERRIT_BRANCH:-}" in
+ portable-intrinsics | 0.6.1) exit 0 ;;
+ *) ;; # Skip configuration
+ esac
+ ;;
+ *) ;; # Skip configuration
+ esac
+ case "${BUILD_TYPE}" in
+ static*)
+ opts+=("-DBUILD_SHARED_LIBS=OFF")
+ ;;
+ experimental)
+ opts+=("-DWEBP_EXPERIMENTAL_FEATURES=ON" "-DBUILD_SHARED_LIBS=ON")
+ ;;
+ *)
+ opts+=("-DBUILD_SHARED_LIBS=ON")
+ ;;
+ esac
+ case "${BUILD_TYPE}" in
+ *debug) opts+=("-DCMAKE_BUILD_TYPE=Debug") ;;
+ *) opts+=("-DCMAKE_BUILD_TYPE=RelWithDebInfo") ;;
+ esac
+ cd "${BUILD_DIR}"
+ opts+=("-DWEBP_BUILD_CWEBP=ON" "-DWEBP_BUILD_DWEBP=ON")
+ grep -m 1 -q WEBP_BUILD_GIF2WEBP "${LIBWEBP_ROOT}/CMakeLists.txt" \
+ && opts+=("-DWEBP_BUILD_GIF2WEBP=ON")
+ grep -m 1 -q WEBP_BUILD_IMG2WEBP "${LIBWEBP_ROOT}/CMakeLists.txt" \
+ && opts+=("-DWEBP_BUILD_IMG2WEBP=ON")
+ cmake "${opts[@]}" "${LIBWEBP_ROOT}"
+ make VERBOSE=1 -j
+ case "${BUILD_TYPE}" in
+ static)
+ mkdir -p examples
+ cp [cd]webp examples
+ ;;
+ *) ;; # Skip configuration.
+ esac
+
+ grep "install" "${LIBWEBP_ROOT}/CMakeLists.txt" || exit 0
+
+ make DESTDIR="${BUILD_DIR}/webp-install" install/strip
+ mkdir tmp
+ cd tmp
+ cat > CMakeLists.txt << EOF
+cmake_minimum_required(VERSION 2.8.7)
+
+project(libwebp C)
+
+find_package(WebP)
+if (NOT WebP_FOUND)
+ message(FATAL_ERROR "WebP package not found")
+endif ()
+message("WebP_FOUND: \${WebP_FOUND}")
+message("WebP_INCLUDE_DIRS: \${WebP_INCLUDE_DIRS}")
+message("WebP_LIBRARIES: \${WebP_LIBRARIES}")
+message("WEBP_INCLUDE_DIRS: \${WEBP_INCLUDE_DIRS}")
+message("WEBP_LIBRARIES: \${WEBP_LIBRARIES}")
+EOF
+ cmake . "${opts[@]}" \
+ "-DCMAKE_PREFIX_PATH=${BUILD_DIR}/webp-install/usr/local"
+ exit 0
+ ;;
+ gradle)
+ setup_ccache
+ # exercise gradle then quit
+ [[ -f "${LIBWEBP_ROOT}/gradlew" ]] || exit 0
+
+ cd "${BUILD_DIR}"
+ # TODO -g / --gradle-user-home could be used if there's a race between jobs
+ "${LIBWEBP_ROOT}/gradlew" -p "${LIBWEBP_ROOT}" buildAllExecutables
+ exit 0
+ ;;
+ wasm)
+ grep -m 1 -q WEBP_ENABLE_WASM "${LIBWEBP_ROOT}/CMakeLists.txt" || exit 0
+ opts+=("-DCMAKE_C_COMPILER=clang" "-DWEBP_ENABLE_WASM=ON")
+ opts+=("-DWEBP_BUILD_CWEBP=ON" "-DWEBP_BUILD_DWEBP=ON")
+ case "${BUILD_TYPE}" in
+ *debug) opts+=("-DCMAKE_BUILD_TYPE=Debug") ;;
+ *) opts+=("-DCMAKE_BUILD_TYPE=RelWithDebInfo") ;;
+ esac
+ cd "${BUILD_DIR}"
+ cmake "${opts[@]}" "${LIBWEBP_ROOT}"
+ make VERBOSE=1 -j
+ mkdir examples
+ case "${BUILD_TYPE}" in
+ static)
+ mkdir -p examples
+ cp [cd]webp examples
+ ;;
+ *) ;; # Skip configuration
+ esac
+ exit 0
+ ;;
+ *)
+ log_err "Invalid TARGET"
+ usage
+ exit 1
+ ;;
+esac
+
+case "${TARGET}" in
+ *mingw32) ;; # Skip configuration
+ *)
+ case "${TARGET}-${CC}" in
+ static-debug-gcc* | static-debug-)
+ CFLAGS="${CFLAGS} -fprofile-arcs -ftest-coverage -O0 -g"
+ CXXFLAGS="${CXXFLAGS} -fprofile-arcs -ftest-coverage -O0 -g"
+ export CFLAGS CXXFLAGS
+ ;;
+ *) ;; # This case should not be reached.
+ esac
+ ;;
+esac
+
+setup_ccache
+
+cd "${LIBWEBP_ROOT}"
+./autogen.sh
+
+cd "${BUILD_DIR}"
+"${LIBWEBP_ROOT}/configure" \
+ --host "${TARGET}" --build "$("${LIBWEBP_ROOT}/config.guess")" \
+ --enable-everything "${config_flags[@]}"
+make -j V=1