# Copyright 2019 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 was initially generated by starboard/tools/create_derived_build.py,
# though it may have been modified since its creation.
"""Starboard Linux X64X11 Blittergles Sbversion 6 platform configuration."""

from starboard.linux.x64x11 import gyp_configuration as parent_configuration


class LinuxX64X11BlitterglesSbversion6Configuration(
    parent_configuration.LinuxX64X11Configuration):

  def GetVariables(self, config_name):
    variables = super(LinuxX64X11BlitterglesSbversion6Configuration,
                      self).GetVariables(config_name)
    # V8 requires new Starboard features so we must use SpiderMonkey in older
    # versions of Starboard.
    variables.update({
        'javascript_engine': 'mozjs-45',
        'cobalt_enable_jit': 0,
    })
    return variables


def CreatePlatformConfig():
  return LinuxX64X11BlitterglesSbversion6Configuration(
      'linux-x64x11-blittergles-sbversion-6')
