#!/bin/sh

# Copyright 2014 Google Inc.
#
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

set -e  # When any command fails, the shell will immediately exit.

if echo $- | grep -q 'x'; then
    # Debug mode
    trap 'echo exit status = $?' EXIT
fi

usage() {
    cat >&2 <<EOF
barelinux_make - this script builds a version of skia that does not
depend on external libraries, perfect for putting in an embedded
system running Linux.

Assumes that you have already run the download_deps script.

Usage:
  $0 \\
    [-o SKIA_OUT_DIR] [-c CC_EXE] [-x CXX_EXE] \\
    [-t Debug | Release | Coverage | Release_Developer] \\
    [GYP_DEFINES...]

Example use:
  $0 \\
    -o ~/build/skia/arg64gcc \\
    -c ~/local/arm64/bin/aarch64-linux-gnu-gcc \\
    -x ~/local/arm64/bin/aarch64-linux-gnu-g++ \\
    skia_gpu=0 skia_arch_type=arm skia_arch_width=64 \\
    armv7=1 armv8=1 arm_neon=0 arm_thumb=0
EOF
    return 1
}

# BUILD_TYPE should be one of:
#  Coverage, Debug, Release, or Release_Developer
BUILD_TYPE='Debug'

while getopts ":c:x:o:t:h" opt ; do
    case $opt in
        c)  export CC="$OPTARG" ;;
        x)  export CXX="$OPTARG" ;;
        o)  export SKIA_OUT="$OPTARG";;
        t)  BUILD_TYPE="$OPTARG";;
        h)  usage || exit;;
        ?)  echo "unknown option '$OPTARG'" >&2;
            usage || exit;;
    esac
done
# Append exra arguments to GYP_DEFINES variable.
shift $(( $OPTIND - 1 ))
GYP_DEFINES="${GYP_DEFINES} $*"

# If you move this script, this must be changed.
SKIA_SRC_DIR="$(cd "$(dirname "$0")/../../.."; pwd)"

# Set a reasonable default.
export SKIA_OUT="${SKIA_OUT:-${SKIA_SRC_DIR}/out/barelinux}"

mkdir -p "$SKIA_OUT"

export GYP_GENERATORS="ninja"
export GYP_GENERATOR_FLAGS=""
export GYP_DEFINES="${GYP_DEFINES} \
    skia_warnings_as_errors=0 \
    skia_giflib_static=1 \
    skia_libpng_static=1 \
    skia_zlib_static=1 \
    skia_freetype_static=1 \
    skia_no_fontconfig=1 \
    skia_poppler_enabled=0 \
    skia_skip_gui=1 \
    "

"${SKIA_SRC_DIR}/gyp_skia"

ninja -C "${SKIA_OUT}/${BUILD_TYPE}"

