# Copyright (c) 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Modifications 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.

# Defines the configuration of Goma.

# Allow ports to set an alternate default for use_goma
import("//$starboard_path/configuration.gni")

declare_args() {
  if (!defined(use_goma)) {
    # Set to true to enable distributed compilation using Goma. By default we
    # use Goma for stub and linux.
    use_goma = false
  }

  # Set the default value based on the platform.
  if (host_os == "win" || host_os == "winrt_81" ||
      host_os == "winrt_81_phone" || host_os == "winrt_10") {
    # Absolute directory containing the gomacc.exe binary.
    goma_dir = "C:\goma\goma-win64"
  } else {
    # Absolute directory containing the gomacc binary.
    goma_dir = getenv("HOME") + "/goma"
  }
}
