# Copyright 2017 The Cobalt 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.

###############################################################################
# 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"
