#!/bin/bash

set -ex

source ./get_skia2.sh
source ./cache_helper.sh

ARCH=$1
CONFIG=$2

build_skia_android() {
    cd $SKIA_DIR_NAME

    if [ "$ARCH" != "x86" ] &&
        [ "$ARCH" != "x64" ] &&
        [ "$ARCH" != "arm" ] &&
        [ "$ARCH" != "arm64" ]; then
        printf "Invalid architecture: '%s'. Choose one between 'x86', \
            'x64', \
            'arm', \
            or 'arm64'" "$ARCH"
        exit 1
    fi

    BUILD_FLAGS=
    EXTRA_CFLAGS=
    if [ "$CONFIG" = "debug" ]; then
        BUILD_FLAGS="is_official_build=false is_debug=true skia_enable_tools=false"
    else # release
        BUILD_FLAGS="is_official_build=true is_debug=false"
        EXTRA_CFLAGS="\
    \"-fno-rtti\",                          \
    \"-flto=full\",                         \
    \"-fembed-bitcode\",                    \
    \"-DRIVE_OPTIMIZED\",                   \
    \"-DSK_DISABLE_SKPICTURE\",             \
    \"-DSK_DISABLE_TEXT\",                  \
    \"-DSK_DISABLE_LEGACY_SHADERCONTEXT\",  \
    \"-DSK_DISABLE_LOWP_RASTER_PIPELINE\",  \
    \"-DSK_FORCE_RASTER_PIPELINE_BLITTER\", \
    \"-DSK_DISABLE_AAA\",                   \
    \"-DSK_DISABLE_EFFECT_DESERIALIZATION\" \
    "
    fi

    # Useful for debugging:
    # bin/gn args --list out/${ARCH}

    bin/gn gen out/"${CONFIG}"/"${ARCH}" --args=" \
        ndk=\"${NDK_PATH}\" \
        target_cpu=\"${ARCH}\" \
        extra_cflags=[                              \
            ${EXTRA_CFLAGS}                         \
            ]                                       \
        \
        ${BUILD_FLAGS} \

        skia_gl_standard=\"gles\" 
        skia_use_zlib=true \
        skia_use_egl=true \
        skia_use_gl=true \
        skia_enable_gpu=true \
        skia_use_libpng_decode=false \
        skia_use_libpng_encode=false \

        skia_use_angle=false \
        skia_use_dng_sdk=false \
        
        skia_use_expat=false \
        skia_use_fontconfig=false \
        skia_use_system_freetype2=false \
        skia_use_icu=false \
        skia_use_libheif=false \
        skia_use_system_libpng=false \
        skia_use_system_libjpeg_turbo=false \
        skia_use_system_libwebp=false \
        skia_use_libjpeg_turbo_encode=false \
        skia_use_libjpeg_turbo_decode=false \
        skia_use_libwebp_encode=false \
        skia_use_libwebp_decode=false \
        skia_use_lua=false \
        skia_use_piex=false \
        skia_use_vulkan=false \
        
        skia_use_system_zlib=false \
        skia_enable_fontmgr_empty=false \
        skia_enable_spirv_validation=false \
        skia_enable_pdf=false \
        skia_enable_skottie=false \
        "

    ninja -C out/"${CONFIG}"/"${ARCH}"
    cd ..
}

if is_build_cached_locally; then
    echo "Build is cached, nothing to do."
else
    if is_build_cached_remotely; then
        pull_cache
    else
        getSkia
        build_skia_android
        # hmm not the appiest with this guy
        if [ "$CONFIG" != "debug" ]; then
            OUTPUT_CACHE=out/"${CONFIG}"/$ARCH upload_cache
        fi
    fi
fi
