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

#####################################################################
# If you modify this file, PLEASE REMEMBER TO UPDATE
# //starboard/build/config/base.gni AS WELL
#####################################################################

# This contains the defaults and documentation for all Starboard-defined GYP
# variables. Applications that build on top of Starboard are likely to have
# their own base configuration, as well.
#
# starboard/build/gyp_runner includes this file automatically in all .gyp files
# that it processes.

{
  'variables': {
    # We need to define some variables inside of an inner 'variables' scope
    # so that they can be referenced by other outer variables here.  Also, it
    # allows for the specification of default values that get referenced by
    # a top level scope.
    'variables': {
      'sb_enable_lib%': 0,
      # TODO: Remove the "data" subdirectory.
      'sb_static_contents_output_data_dir%': '<(PRODUCT_DIR)/content/data',
      'sb_deploy_output_dir%': '<(PRODUCT_DIR)/deploy',
    },

    # Enables the yasm compiler to be used to compile .asm files.
    'yasm_exists%': 0,

    # Where yasm can be found on the target device.
    'path_to_yasm%': "yasm",

    # Enabling this variable enables pedantic levels of warnings for the current
    # toolchain.
    'sb_pedantic_warnings%': 0,

    # Enables embedding Cobalt as a shared library within another app. This
    # requires a 'lib' starboard implementation for the corresponding platform.
    'sb_enable_lib%': '<(sb_enable_lib)',

    # When this is set to true, the web bindings for the microphone
    # are disabled
    'sb_disable_microphone_idl%': 0,

    # Directory path to static contents' data.
    'sb_static_contents_output_data_dir%': '<(sb_static_contents_output_data_dir)',

    # Top-level directory for staging deploy build output. Platform deploy
    # actions should use <(target_deploy_dir) defined in deploy.gypi to place
    # artifacts for each deploy target in its own subdirectoy.
    'sb_deploy_output_dir%': '<(sb_deploy_output_dir)',

    # Contains the name of the hosting OS. The value is defined by the gyp
    # wrapper script.
    'host_os%': 'win',

    # The target platform id as a string, like 'linux-x64x11', 'win32', etc..
    'sb_target_platform': '',

    # Whether this is an evergreen build.
    'sb_evergreen': 0,

    # The operating system of the target, separate from the target_arch. In many
    # cases, an 'unknown' value is fine, but, if set to 'linux', then we can
    # assume some things, and it'll save us some configuration time.
    'target_os%': 'unknown',

    # The variables allow changing the target type on platforms where the
    # native code may require an additional packaging step (ex. Android).
    'gtest_target_type%': 'executable',
    'final_executable_type%': 'executable',

    # Halt execution on failure to allocate memory.
    'abort_on_allocation_failure%': 1,

    # The relative path from src/ to the directory containing the
    # starboard_platform.gyp file.  It is currently set to
    # 'starboard/<(target_arch)' to make semi-starboard platforms work.
    # TODO: Set the default value to '' once all semi-starboard platforms are
    # moved to starboard.
    'starboard_path%': 'starboard/<(target_arch)',

    # The source of EGL and GLES headers and libraries.
    # Valid values (case and everything sensitive!):
    #   'none'   - No EGL + GLES implementation is available on this platform.
    #   'system_gles3' - Use the system implementation of EGL + GLES3. The
    #                    headers and libraries must be on the system include and
    #                    link paths.
    #   'system_gles2' - Use the system implementation of EGL + GLES2. The
    #                    headers and libraries must be on the system include and
    #                    link paths.
    #   'glimp'  - Cobalt's own EGL + GLES2 implementation. This requires a
    #              valid Glimp implementation for the platform.
    #   'angle'  - A DirectX-to-OpenGL adaptation layer. This requires a valid
    #              ANGLE implementation for the platform.
    # Choosing an unsupported value will result in a GYP error:
    #   "cobalt/renderer/egl_and_gles/egl_and_gles_<gl_type>.gyp not found"
    'gl_type%': 'system_gles2',

    # Temporary indicator for Tizen - should eventually move to feature defines.
    'tizen_os%': 0,

    # The event polling mechanism available on this platform to support libevent.
    # Platforms may redefine to 'poll' if necessary.
    # Other mechanisms, e.g. devpoll, kqueue, select, are not yet supported.
    'sb_libevent_method%': 'epoll',

    # Used to indicate that the player is filter based.
    'sb_filter_based_player%': 1,

    # This variable dictates whether a given gyp target should be compiled with
    # optimization flags for size vs. speed.
    'optimize_target_for_speed%': 0,

    # Compiler configuration.

    # The following variables are used to specify compiler and linker
    # flags by build configuration. Platform specific .gypi includes and
    # .gyp targets can use them to add additional flags.

    'compiler_flags%': [],
    'linker_flags%': [],

    # TODO: Replace linker_flags_(config) with linker_shared_flags_(config)
    # and linker_executable_flags_(config) to distinguish the flags for
    # SharedLibraryLinker and ExecutableLinker.
    'compiler_flags_debug%': [],
    'compiler_flags_c_debug%': [],
    'compiler_flags_cc_debug%': [],
    'linker_flags_debug%': [],
    'defines_debug%': [],

    'compiler_flags_devel%': [],
    'compiler_flags_c_devel%': [],
    'compiler_flags_cc_devel%': [],
    'linker_flags_devel%': [],
    'defines_devel%': [],

    # For qa and gold configs, different compiler flags may be specified for
    # gyp targets that should be built for size than for speed. Targets which
    # specify 'optimize_target_for_speed == 1', will compile with flags:
    #   ['compiler_flags_*<config>', 'compiler_flags_*<config>_speed'].
    # Otherwise, targets will use compiler flags:
    #   ['compiler_flags_*<config>', 'compiler_flags_*<config>_size'].
    # Platforms may decide to use the same optimization flags for both
    # target types by leaving the '*_size' and '*_speed' variables empty.
    'compiler_flags_qa%': [],
    'compiler_flags_qa_size%': [],
    'compiler_flags_qa_speed%': [],
    'compiler_flags_c_qa%': [],
    'compiler_flags_c_qa_size%': [],
    'compiler_flags_c_qa_speed%': [],
    'compiler_flags_cc_qa%': [],
    'compiler_flags_cc_qa_size%': [],
    'compiler_flags_cc_qa_speed%': [],
    'linker_flags_qa%': [],
    'defines_qa%': [],

    'compiler_flags_gold%': [],
    'compiler_flags_gold_size%': [],
    'compiler_flags_gold_speed%': [],
    'compiler_flags_c_gold%': [],
    'compiler_flags_c_gold_size%': [],
    'compiler_flags_c_gold_speed%': [],
    'compiler_flags_cc_gold%': [],
    'compiler_flags_cc_gold_size%': [],
    'compiler_flags_cc_gold_speed%': [],
    'linker_flags_gold%': [],
    'defines_gold%': [],

    'compiler_flags_host%': [],
    'compiler_flags_c_host%': [],
    'defines_host%': [],

    'platform_libraries%': [],

    # TODO: Remove these compatibility variables from Starboard.

    # List of platform-specific targets that get compiled into cobalt.
    'cobalt_platform_dependencies%': [],

    'conditions': [
      ['host_os=="linux"', {
        'conditions': [
          ['target_arch=="arm" or target_arch=="ia32" or target_arch=="x32"\
           or target_arch=="mips" or target_arch=="mipsel" or\
           target_arch=="ppc"', {
            # All the 32 bit CPU architectures v8 supports.
            'compiler_flags_cc_host%': [
              '-m32',
              '--std=gnu++11',
            ],
            'linker_flags_host%': [
              '-target', 'i386-unknown-linux-gnu',
              '-pthread',
            ],
          }, {
            'compiler_flags_cc_host%': [
              '--std=gnu++11',
            ],
            'linker_flags_host%': [
            '-pthread',
            ],
          }],
        ],
      }, {
        'compiler_flags_cc_host%': [],
        'linker_flags_host%': [],
      }],
    ],
  },

  'target_defaults': {
    'variables': {
      # The condition that operates on sb_pedantic_warnings is in a
      # target_conditions section, and will not have access to the default
      # fallback value of sb_pedantic_warnings at the top of this file,
      # or to the sb_pedantic_warnings variable placed at the root
      # variables scope of .gyp files, because those variables are not set at
      # target scope.  As a workaround, if sb_pedantic_warnings is not
      # set at target scope, define it in target scope to contain whatever
      # value it has during early variable expansion. That's enough to make
      # it available during target conditional processing.
      'sb_pedantic_warnings%': '<(sb_pedantic_warnings)',

      # This workaround is used to surface the default setting for the variable
      # 'optimize_target_for_speed' if the gyp target does not explicitly set
      # it.
      'optimize_target_for_speed%': '<(optimize_target_for_speed)',
    },
    'cflags': [ '<@(compiler_flags)' ],
    'ldflags': [ '<@(linker_flags)' ],
    'cflags_host': [ '<@(compiler_flags_host)', ],
    'cflags_c_host': [ '<@(compiler_flags_c_host)', ],
    'cflags_cc_host': [ '<@(compiler_flags_cc_host)', ],
    'ldflags_host': [ '<@(linker_flags_host)' ],

    # Location of Cygwin which is used by the build system when running on a
    # Windows platform.
    'msvs_cygwin_dirs': ['<(DEPTH)/third_party/cygwin'],

    # Allows any source file to include files relative to the source tree.
    'include_dirs': [ '<(DEPTH)' ],
    'libraries': [ '<@(platform_libraries)' ],

    'conditions': [
      ['final_executable_type=="shared_library"', {
        'target_conditions': [
          ['_toolset=="target"', {
            'defines': [
              # Rewrite main() functions into StarboardMain. TODO: This is a
              # hack, it would be better to be more surgical, here.
              'main=StarboardMain',
            ],
            'cflags': [
              # To link into a shared library on Linux and similar platforms,
              # the compiler must be told to generate Position Independent Code.
              # This appears to cause errors when linking the code statically,
              # however.
              '-fPIC',
            ],
          }],
        ],
      }],
      ['OS == "starboard"', {
        'target_conditions': [
          ['_toolset=="target"', {
            # Keeps common Starboard target changes in the starboard project.
            'includes': [
              '../../starboard/starboard_base_target.gypi',
            ],
          }],
        ],
      }],  # OS == "starboard"
    ],

    # TODO: Revisit and remove unused configurations.
    'configurations': {
      'debug_base': {
        'abstract': 1,
        # no optimization, include symbols:
        'cflags': [ '<@(compiler_flags_debug)' ],
        'cflags_c': [ '<@(compiler_flags_c_debug)' ],
        'cflags_cc': [ '<@(compiler_flags_cc_debug)' ],
        'ldflags': [ '<@(linker_flags_debug)' ],
        'defines': [
          '<@(defines_debug)',
          'STARBOARD_BUILD_TYPE_DEBUG',
          '_DEBUG',
        ],
      }, # end of debug_base
      'devel_base': {
        'abstract': 1,
        # optimize, include symbols:
        'cflags': [ '<@(compiler_flags_devel)' ],
        'cflags_c': [ '<@(compiler_flags_c_devel)' ],
        'cflags_cc': [ '<@(compiler_flags_cc_devel)' ],
        'ldflags': [ '<@(linker_flags_devel)' ],
        'defines': [
          '<@(defines_devel)',
          'STARBOARD_BUILD_TYPE_DEVEL',
          '_DEBUG',
        ],
      }, # end of devel_base
      'qa_base': {
        'abstract': 1,
        # optimize:
        'target_conditions': [
          ['optimize_target_for_speed==1', {
            'cflags': [
              '<@(compiler_flags_qa)',
              '<@(compiler_flags_qa_speed)',
            ],
            'cflags_c': [
              '<@(compiler_flags_c_qa)',
              '<@(compiler_flags_c_qa_speed)',
            ],
            'cflags_cc': [
              '<@(compiler_flags_cc_qa)',
              '<@(compiler_flags_cc_qa_speed)',
            ],
          }, {
            'cflags': [
              '<@(compiler_flags_qa)',
              '<@(compiler_flags_qa_size)',
            ],
            'cflags_c': [
              '<@(compiler_flags_c_qa)',
              '<@(compiler_flags_c_qa_size)',
            ],
            'cflags_cc': [
              '<@(compiler_flags_cc_qa)',
              '<@(compiler_flags_cc_qa_size)',
            ],
          }]
        ],
        'ldflags': [ '<@(linker_flags_qa)' ],
        'defines': [
          '<@(defines_qa)',
          'STARBOARD_BUILD_TYPE_QA',
          'NDEBUG',
        ],
      }, # end of devel_base
      'gold_base': {
        'abstract': 1,
        # optimize:
        'target_conditions': [
          ['optimize_target_for_speed==1', {
            'cflags': [
              '<@(compiler_flags_gold)',
              '<@(compiler_flags_gold_speed)',
            ],
            'cflags_c': [
              '<@(compiler_flags_c_gold)',
              '<@(compiler_flags_c_gold_speed)',
            ],
            'cflags_cc': [
              '<@(compiler_flags_cc_gold)',
              '<@(compiler_flags_cc_gold_speed)',
            ],
          }, {
            'cflags': [
              '<@(compiler_flags_gold)',
              '<@(compiler_flags_gold_size)',
            ],
            'cflags_c': [
              '<@(compiler_flags_c_gold)',
              '<@(compiler_flags_c_gold_size)',
            ],
            'cflags_cc': [
              '<@(compiler_flags_cc_gold)',
              '<@(compiler_flags_cc_gold_size)',
            ],
          }]
        ],
        'ldflags': [ '<@(linker_flags_gold)' ],
        'defines': [
          '<@(defines_gold)',
          'STARBOARD_BUILD_TYPE_GOLD',
          'NDEBUG',
        ],
      }, # end of gold_base
    }, # end of configurations
  }, # end of target_defaults

  'conditions': [
    ['cobalt_config != "gold"', {
      'variables' : {
        'sb_allows_memory_tracking': 1,
      },
    },
    {
      'variables' : {
        'sb_allows_memory_tracking': 0,
      },
    }],
  ],
}
