# Copyright 2017 Google Inc. 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.

###############################################################################
# This file is imported into BUILDCONFIG.gn. As a side effect, any variable
# defined here becomes a global variable in all GN files.
#
# Adding new variables to this file could result in variable name conflicts, so
# keep the number of variables in this file to a minimum!
#
# If you need to define a temporary variable, prefix it with an underscore like
# _this. Prefixing a variable with an underscore makes it a private variable
# that won't bleed into other files.
###############################################################################

# Target OS and CPU.
# BUILDCONFIG.gn sets target_os and target_cpu to the values of these two
# variables below. Unfortunately, due to GN's restrictions on how variables can
# be changed, we can't directly set target_os and target_cpu here.
target_os_ = "linux"
target_cpu_ = "x64"

# The target and host toolchain
target_toolchain = "//starboard/build/toolchain/linux:clang_x64"
host_toolchain = "//starboard/build/toolchain/linux:clang_$host_cpu"
