#!/usr/bin/env bash
# Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.

# Script for generating kernel files using Dart 2 pipeline: Fasta with
# strong mode enabled.

set -e

ABI_VERSION=""
HAS_PLATFORM=""
ARGV=()

for arg in "$@"; do
  case $arg in
    --use-abi-version=*)
    ABI_VERSION="$(echo "$arg" | sed "s|--use-abi-version=||")"
    ;;
    --platform*)
    HAS_PLATFORM="TRUE"
    ARGV+=("$arg")
    ;;
    *)
    ARGV+=("$arg")
    ;;
  esac
done

function follow_links() {
  file="$1"
  while [ -h "$file" ]; do
    # On Mac OS, readlink -f doesn't work.
    file="$(readlink "$file")"
  done
  echo "$file"
}

# Unlike $0, $BASH_SOURCE points to the absolute path of this file.
PROG_NAME="$(follow_links "$BASH_SOURCE")"

# Handle the case where dart-sdk/bin has been symlinked to.
CUR_DIR="$(cd "${PROG_NAME%/*}" ; pwd -P)"

SDK_DIR="$CUR_DIR/../../.."

# TODO(kustermann): For windows as well as for hosts running on arm, our
# checked-in dart binaries must be adjusted.
if [[ `uname` == 'Darwin' ]]; then
  DART="$SDK_DIR/tools/sdks/dart-sdk/bin/dart"
  OUT_DIR="$SDK_DIR/xcodebuild"
else
  DART="$SDK_DIR/tools/sdks/dart-sdk/bin/dart"
  OUT_DIR="$SDK_DIR/out"
fi

export DART_CONFIGURATION=${DART_CONFIGURATION:-ReleaseX64}
BIN_DIR="$OUT_DIR/$DART_CONFIGURATION"

if [ $ABI_VERSION ]; then
  ABI_DIR="$BIN_DIR/dart-sdk/lib/_internal/abiversions/$ABI_VERSION"
  PLATFORM=()
  if [ -z $HAS_PLATFORM ]; then
    PLATFORM+=("--platform" "$ABI_DIR/vm_platform_strong.dill")
  fi
  exec "$BIN_DIR/dart" $DART_VM_FLAGS --enable-interpreter \
    "$ABI_DIR/gen_kernel_bytecode.dill" "${PLATFORM[@]}" "${ARGV[@]}"
else
  exec "$DART" $DART_VM_FLAGS \
    "${SDK_DIR}/pkg/vm/bin/gen_kernel.dart" "${ARGV[@]}"
fi
