# Copyright 2015 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 included in the target defaults from
# cobalt/build/config/base.gypi
{
  'defines': [
    # The canonical way to detect Starboard is #if defined(STARBOARD). This
    # should be defined both when building Starboard itself, and when building
    # any other source file in a Starboard-based project.
    'STARBOARD',
  ],
  'conditions': [
    ['gl_type == "none"', {
      'defines': [
        'SB_GYP_GL_TYPE_IS_NONE=1',
      ],
    }, {
      'defines': [
        'SB_GYP_GL_TYPE_IS_NONE=0',
      ],
    }],
    ['abort_on_allocation_failure==1', {
      'defines': [
        'SB_ABORT_ON_ALLOCATION_FAILURE',
      ],
    }],
    ['sb_allows_memory_tracking==1', {
      'defines': [
        'STARBOARD_ALLOWS_MEMORY_TRACKING',
      ],
    }],
    ['sb_enable_lib==1', {
      'defines': [
        'SB_IS_LIBRARY=1',
      ],
    }],
    ['starboard_path == ""', {
      'defines': [
        # There doesn't appear to be any way to use the C preprocessor to do
        # string concatenation with the / character. This prevents us from using
        # the preprocessor to assemble an include file path, so we have to do
        # the concatenation here in GYP.
        # http://stackoverflow.com/questions/29601786/c-preprocessor-building-a-path-string
        'STARBOARD_ATOMIC_INCLUDE="starboard/<(target_arch)/atomic_public.h"',
        'STARBOARD_CONFIGURATION_INCLUDE="starboard/<(target_arch)/configuration_public.h"',
        'STARBOARD_THREAD_TYPES_INCLUDE="starboard/<(target_arch)/thread_types_public.h"',
      ],
    }, {
      'defines': [
        'STARBOARD_ATOMIC_INCLUDE="<(starboard_path)/atomic_public.h"',
        'STARBOARD_CONFIGURATION_INCLUDE="<(starboard_path)/configuration_public.h"',
        'STARBOARD_THREAD_TYPES_INCLUDE="<(starboard_path)/thread_types_public.h"',
      ],
    }],
    ['sb_media_platform == "starboard"', {
      'defines': [
        'SB_GYP_CAN_MEDIA_USE_STARBOARD_PIPELINE=1',
      ],
    }, {
      'defines': [
        'SB_GYP_CAN_MEDIA_USE_STARBOARD_PIPELINE=0',
      ],
    }],
  ],
}
