#!/bin/bash
#
# Copyright 2016 The Bazel Authors. All rights reserved.
#
# 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.
#
# Tests compiling using an external Linaro toolchain on a Linux machine
#

# Load the test setup defined in the parent directory
CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${CURRENT_DIR}/../integration_test_setup.sh" \
  || { echo "integration_test_setup.sh not found!" >&2; exit 1; }

MACHINE_TYPE="$(uname -m)"

if ! [ "${PLATFORM-}" = "linux" -a "${MACHINE_TYPE}" = "x86_64" ]; then
  echo "Skipping test: linaro toolchain is not supported on this platform"
  exit 0
fi

# Run in a temporary directory!
mkdir -p "${TEST_TMPDIR}/TEMP_TEMP_TEMP"
cd "${TEST_TMPDIR}/TEMP_TEMP_TEMP"

# Copy the project package here
# We must use -L here; the files may be symlinks into the source tree, which we
# could inadvertently modify below.
cp -rL ${testdata_path}/bazel_toolchain_test_data/* .

# Rename WORKSPACE.linaro file to WORKSPACE
# (Did not include the file WORKSPACE in the test because source tree under
# directories that contain this file is not parsed)
mv WORKSPACE.linaro WORKSPACE
create_workspace_with_default_repos WORKSPACE

# Rename BUILD.linaro files
for i in $(find . -name BUILD.linaro); do
  mv "$i" "$(dirname "$i")/BUILD"
done

# Make sure that the wrapper scripts have the execution permission
chmod +x tools/arm_compiler/linaro_linux_gcc/arm-linux-gnueabihf-*

bazel clean --expunge
bazel build --crosstool_top=//tools/arm_compiler:toolchain --cpu=armeabi-v7a \
  --spawn_strategy=standalone hello || fail "Should build"

# Assert that output binary exists
test -f ./bazel-bin/hello || fail "output not found"

# Assert that output has the right machine architecture
file ./bazel-bin/hello | grep -q "ARM" || fail "expect ARM machine architecture"
file ./bazel-bin/hello | grep -q "x86-64" && fail "expect ARM machine architecture"

echo "PASS"

