From edaf08952d7a8d985ffad7387d67da8d3209f8b2 Mon Sep 17 00:00:00 2001 From: Roberto Alanis Date: Tue, 31 Aug 2021 03:25:40 +0000 Subject: [PATCH] Port Jenkins scripts: compile js Change-Id: I6d66de114758adccab782870e29a09b66a930ebc Bug: b:185520507 --- infra/common.sh | 49 +++++++++++++++++++++++++++++ infra/compile_js.sh | 75 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 124 insertions(+) create mode 100644 infra/common.sh create mode 100755 infra/compile_js.sh diff --git a/infra/common.sh b/infra/common.sh new file mode 100644 index 00000000..2b526eac --- /dev/null +++ b/infra/common.sh @@ -0,0 +1,49 @@ +# 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. + +log_err() { + echo "[$(date +'%Y-%m-%dT%H:%M:%S%z')]: $*" >&2 +} + +####################################### +# Create build directory. Build directory will be deleted if it exists. +# Returns: +# mkdir result +####################################### +make_build_dir() { + if [[ "$#" -ne 1 ]]; then + return 1 + fi + + local build_dir + build_dir="$1" + rm -rf "${build_dir}" + mkdir -p "${build_dir}" +} diff --git a/infra/compile_js.sh b/infra/compile_js.sh new file mode 100755 index 00000000..6a13fe6a --- /dev/null +++ b/infra/compile_js.sh @@ -0,0 +1,75 @@ +#!/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 -ex + +readonly WORKSPACE="${WORKSPACE:-"$(mktemp -d -t webp.js.XXX)"}" +readonly BUILD_DIR="${WORKSPACE}/webp_js/" +readonly LIBWEBP_ROOT="$(realpath "$(dirname "$0")/..")" + +# shellcheck source=infra/common.sh +source "${LIBWEBP_ROOT}/infra/common.sh" + +usage() { + cat << EOF +Usage: $(basename "$0") +Environment variables: +WORKSPACE directory where the build is done +EMSDK_DIR directory where emsdk is installed +EOF +} + +[[ -d "${EMSDK_DIR:?Not defined}" ]] \ + || (log_err "${EMSDK_DIR} is not a valid directory." && exit 1) + +# shellcheck source=/opt/emsdk/emsdk_env.sh +source "${EMSDK_DIR}/emsdk_env.sh" + +readonly EMSCRIPTEN=${EMSCRIPTEN:-"${EMSDK}/upstream/emscripten"} +readonly \ + EMSCRIPTEN_CMAKE_FILE="${EMSCRIPTEN}/cmake/Modules/Platform/Emscripten.cmake" +make_build_dir "${BUILD_DIR}" + +pushd "${BUILD_DIR}" +opts=("-GUnix Makefiles" "-DWEBP_BUILD_WEBP_JS=ON") +if [[ -z "$(command -v emcmake)" ]]; then + opts+=("-DCMAKE_TOOLCHAIN_FILE=${EMSCRIPTEN_CMAKE_FILE}") + cmake \ + "${opts[@]}" \ + "${LIBWEBP_ROOT}" + make -j +else + emcmake cmake \ + "${opts[@]}" \ + "${LIBWEBP_ROOT}" + emmake make -j +fi +popd