#!/bin/sh

# Copyright 2015 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

. $(dirname "$0")/utils/common.shi

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 ANGLE for Linux, Windows and Darwin."

package_builder_register_options

aosp_dir_register_option
prebuilts_dir_register_option
install_dir_register_option "common/ANGLE"

option_parse "$@"

if [ "$PARAMETER_COUNT" != 0 ]; then
    panic "This script takes no arguments. See --help for details."
fi

prebuilts_dir_parse_option
aosp_dir_parse_option
install_dir_parse_option

package_builder_process_options ANGLE

# Clone a git repository, and checkout a specific branch & commit.
# $1: Source git URL.
# $2: Destination directory.
# $3: Branch / Commit
git_clone () {
    local GIT_URL DST_DIR BRANCH CHECK_REV
    GIT_URL=$1
    DST_DIR=$2
    BRANCH=$3

    if [ -d "$DST_DIR" ]; then
        panic "Git destination directory already exists: $DST_DIR"
    fi
    run git clone "$GIT_URL" "$DST_DIR" ||
            panic "Could not clone git repository: $GIT_URL"
    run git -C "$DST_DIR" checkout $BRANCH ||
            panic "Could not checkout $GIT_URL - $BRANCH"
}

# Build the ANGLE packages.
#
# $1: Source directory.
# $2: The directory the output libraries are placed in.
build_angle_package () {
    local PKG_FULLNAME="$(basename "$1")"
    dump "$(builder_text) Building $PKG_FULLNAME"

    local PKG_BUILD_DIR="$1"
    local PKG_LIB_DIR="$2"

    # Bolierplate setup
    run mkdir -p "$PKG_BUILD_DIR" &&
    run cd "$PKG_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" &&

    # Ensure the gclient command is available.
    git_clone https://chromium.googlesource.com/chromium/tools/depot_tools.git depot_tools c55ba20c629ef702cd4bb06da9235c4bb7217f96 &&
    export PATH=`pwd`/depot_tools:"$PATH" &&

    # Ensure ninja, included in the depot tools, is used to generator the build
    # files, since it is a cross-platform solution.
    export GYP_GENERATORS=ninja &&

    # Create gclient file and sync the build files
    run python scripts/bootstrap.py &&

    # Sync the appropriate build files
    run gclient sync &&

    # ninja is provided for each platform in the previously cloned depot_tools
    run ninja -C out/Debug

    # The static libs produced by the build script are just thin archives so
    # they don't contain any objects themselves -> repackage them to actually
    # contain the object files
    for lib in $PKG_LIB_DIR/lib*.a; do
        ar -t $lib | run xargs ar rvs $lib.new && mv $lib.new $lib;
        run ranlib $lib
    done
}

# Build the ANGLE packages using mingw.
# Based on the https://github.com/Martchus/PKGBUILDs/blob/master/angleproject/mingw-w64/PKGBUILD
#
# $1: Source directory.
# $2: The directory the output libraries are placed in.
mingw_build_angle_package() {
    local PKG_FULLNAME="$(basename "$1")"
    dump "$(builder_text) Building $PKG_FULLNAME"

    local PKG_BUILD_DIR="$1"
    local PKG_LIB_DIR="$2"

    run mkdir -p "$PKG_BUILD_DIR" &&
    run cd "$PKG_BUILD_DIR"

    # Setup the right version of mingw
    local MINGW_PREFIX GYP_TARGET
    case $SYSTEM in
        windows-x86)
            MINGW_PREFIX=i686
            GYP_TARGET=win32
            $AOSP_DIR/external/qemu/android/scripts/gen-android-sdk-toolchain.sh \
                --host=windows-x86 \
                ./mingw-toolchain
            ;;
        windows-x86_64)
            MINGW_PREFIX=x86_64
            GYP_TARGET=win64
            $AOSP_DIR/external/qemu/android/scripts/gen-android-sdk-toolchain.sh \
                --host=windows-x86_64 \
                ./mingw-toolchain
            ;;
    esac
    export PATH=`pwd`/mingw-toolchain:"$PATH"

    # Boilerplate setup
    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" &&

    # Ensure the gyp command is available.
    git_clone https://chromium.googlesource.com/external/gyp gyp bac4680ec9a5c55ab692490b6732999648ecf1e9 &&
    export PATH=`pwd`/gyp:"$PATH" &&

    # Provide 32-bit versions of *.def files
    cp mingw-w64/libEGL_mingw32.def src/libEGL/ &&
    cp mingw-w64/libGLESv2_mingw32.def src/libGLESv2/ &&

    # Provide a file to export symbols declared in ShaderLang.h as part of libGLESv2.dll
    # (required to build Qt WebKit which uses shader interface)
    cp mingw-w64/entry_points_shader.cpp src/libGLESv2/ &&

    # Remove .git directory to prevent:
    # No rule to make target '../build-i686-w64-mingw32/.git/index', needed by 'out/Debug/obj/gen/angle/id/commit.h'.
    rm -rf .git &&

    # Make sure an import library is created, the correct .def file is used
    # during the build and entry_points_shader.cpp is compiled
    run patch -p1 -i "mingw-w64/angleproject-include-import-library-and-use-def-file.patch" &&

    # Provide own implementation of mbstowcs_s for Windows XP support
    run patch -p1 -i "mingw-w64/provide_mbstowcs_s_for_xp.patch" &&

    # Executing .bat scripts on Linux is a no-go so make this a no-op
    echo "" > src/copy_compiler_dll.bat &&
    chmod +x src/copy_compiler_dll.bat &&

    # Set build flags, make sure all header files are found
    export CXXFLAGS="-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4 -std=c++11 -msse2 -DUNICODE -D_UNICODE -g -Isrc -Iinclude" &&
    export CXX="$MINGW_PREFIX-w64-mingw32-g++" &&
    export AR="$MINGW_PREFIX-w64-mingw32-ar" &&

    # TODO: re-enable building ALL of angle, not just the static libraries
    # gyp -D use_ozone=0 -D OS=win -D TARGET=$GYP_TARGET --format make -D \
    #     MSVS_VERSION="" --depth . -I build/common.gypi src/angle.gyp &&

    # # Forcing non-concurrent build to prevent failure
    # run make -j1 V=1 &&

    # static libs must be built separately
    run gyp -D use_ozone=0 -D OS=win -D TARGET=$GYP_TARGET --format make -D \
        MSVS_VERSION="" --depth . -I build/common.gypi src/angle.gyp -D \
        angle_gl_library_type=static_library &&
    run make -j$NUM_JOBS V=1

    # The static libs produced by the build script are just thin archives so
    # they don't contain any objects themselves -> repackage them to actually
    # contain the object files
    for lib in $PKG_LIB_DIR/lib*.a; do
        ar -t $lib | run xargs ar rvs $lib.new && mv $lib.new $lib;
        run ranlib $lib
    done
}

# Unpack package source into $(builder_src_dir) if needed.
# $1: Package basename.
copy_angle_source () {
    local PKG_SRC_TIMESTAMP PKG_TIMESTAMP
    PKG_SRC_TIMESTAMP=$PKG_BUILD_DIR/timestamp-angle
    if [ ! -f "$PKG_SRC_TIMESTAMP" ]; then
        copy_directory $AOSP_DIR/external/angle $PKG_BUILD_DIR
        touch $PKG_SRC_TIMESTAMP
    fi
}

# $1: Package basename (e.g. 'libpthread-stubs-0.3')
# $2+: Extra configuration options.
build_angle_libraries () {
    local PKG_BUILD_DIR PKG_SRC_TIMESTAMP PKG_TIMESTAMP PKG_LIB_DIR
    PKG_BUILD_DIR=$TEMP_DIR/build-$SYSTEM/angle
    copy_angle_source
    PKG_TIMESTAMP=$TEMP_DIR/build-$SYSTEM/angle-timestamp
    if [ ! -f "$PKG_TIMESTAMP" -o -n "$OPT_FORCE" ]; then
        case $SYSTEM in
            win*)
                PKG_LIB_DIR=$PKG_BUILD_DIR/out/Debug/obj.target/src/
                ;;
            linux*)
                PKG_LIB_DIR=$PKG_BUILD_DIR/out/Debug/obj/src/
                ;;
            darwin*)
                # Required for proper build on Darwin!
                PKG_LIB_DIR=$PKG_BUILD_DIR/out/Debug/
                builder_disable_verbose_install
                ;;
        esac

        case $SYSTEM in
            win*)
                mingw_build_angle_package \
                    "$PKG_BUILD_DIR" \
                    "$PKG_LIB_DIR" \
                    "$@"
                ;;
            *)
                build_angle_package \
                    "$PKG_BUILD_DIR" \
                    "$PKG_LIB_DIR" \
                    "$@"
                ;;
        esac

        # We don't have a make install command at all since the Makefile is
        # auto-generated, so we just copy the files we want directly.
        copy_directory_files \
                    "$PKG_LIB_DIR" \
                    "$(builder_install_prefix)/lib" \
                    libangle_common.a \
                    libpreprocessor.a \
                    libtranslator_lib.a \
                    libtranslator_static.a

        copy_directory \
                "$PKG_BUILD_DIR/include/GLSLANG" \
                "$(builder_install_prefix)/include/GLSLANG"

        touch "$PKG_TIMESTAMP"
    fi
}

for SYSTEM in $LOCAL_HOST_SYSTEMS; do
    (
        builder_prepare_for_host_no_binprefix "$SYSTEM" "$AOSP_DIR"

        build_angle_libraries

        # Copy binaries necessary for the build itself as well as static libraries.
        copy_directory \
                "$(builder_install_prefix)/" \
                "$INSTALL_DIR/$SYSTEM/"

        dump "[$SYSTEM] Done building ANGLE libraries"

    ) || panic "[$SYSTEM] Could not build ANGLE libraries!"

done

log "Done building ANGLE libraries."
