#!/bin/bash
#
# Copyright 2017 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.

#
# Perform a mostly normal build.
# Since this test imports 'dalvik.annotation.optimization.FastNative' (and CriticalNative),
# we do a bit of trickery to allow the annotations to be used at javac-compile time,
# but remove them afterwards so it doesn't end up in the dex file.
#
# This enables the test to compile with vanilla RI javac and work on either ART or RI.
#

# Stop on failure.
set -e

export ORIGINAL_JAVAC="$JAVAC"

# Wrapper function for javac which invokes the compiler and applies
# additional setup steps for the test.
function javac_wrapper {
  set -e # Stop on error - the caller script may not have this set.
  $ORIGINAL_JAVAC "$@"
  # Delete CriticalNative.java, FastNative.java annotations after building the .class files.
  find classes/dalvik -name '*.class' -exec rm {} \;
}

export -f javac_wrapper
export JAVAC=javac_wrapper

######################################################################

# Use release mode to check optimizations do not break JNI.
export D8_FLAGS=--release
./default-build "$@"
