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

# Starboard Application Binary Interface
#
# This file is [mostly] platform-agnostic and translates the set of ABI
# variables, which should be overridden by each Evergreen platform, into build
# time defines.

{
  'variables': {
    # Default ABI variables
    'sb_api_version%': 0,
    'target_arch%': '',
    'target_arch_sub%': '',
    'word_size%': 0,
    'endianness%': '',
    'calling_convention%': '',
    'floating_point_abi%': '',
    'floating_point_fpu%': '',
    'signedness_of_char%': '',
    'signedness_of_enum%': '',
    'alignment_char%':    0,
    'alignment_double%':  0,
    'alignment_float%':   0,
    'alignment_int%':     0,
    'alignment_llong%':   0,
    'alignment_long%':    0,
    'alignment_pointer%': 0,
    'alignment_short%':   0,
    'size_of_char%':    0,
    'size_of_enum%':    0,
    'size_of_double%':  0,
    'size_of_float%':   0,
    'size_of_int%':     0,
    'size_of_llong%':   0,
    'size_of_long%':    0,
    'size_of_pointer%': 0,
    'size_of_short%':   0,

    # arm and arm64
    'conditions': [
      ['target_arch=="arm" or target_arch=="arm64"', {
        'arm_float_abi': '<(floating_point_abi)',
        'arm_fpu': '<(floating_point_fpu)',

        'conditions': [
          ['target_arch_sub=="v7a"', {
            'arm_version': 7,
            'armv7': 1,
          }],
          ['target_arch_sub=="v8a"', {
            'arm_version': 8,
            'armv7': 0,
          }],
        ],
      }],
    ],
  },
  'target_defaults': {
    'defines': [
      'SB_SABI_JSON_ID=R"(<!pymod_do_main(starboard.sabi.generate_sabi_id -f <(DEPTH)/<(sabi_json_path)))"',

      'SB_API_VERSION=<(sb_api_version)',

      # Inlined Python used to capitalize the variable values.
      'SB_IS_ARCH_<!pymod_do_main(starboard.build.gyp_functions str_upper <(target_arch))=1',
      'SB_HAS_<!pymod_do_main(starboard.build.gyp_functions str_upper <(calling_convention))_CALLING=1',
      'SB_HAS_<!pymod_do_main(starboard.build.gyp_functions str_upper <(floating_point_abi))_FLOATS=1',

      'SB_IS_<(word_size)_BIT=1',
      'SB_ALIGNMENT_OF_CHAR=<(alignment_char)',
      'SB_ALIGNMENT_OF_DOUBLE=<(alignment_double)',
      'SB_ALIGNMENT_OF_FLOAT=<(alignment_float)',
      'SB_ALIGNMENT_OF_INT=<(alignment_int)',
      'SB_ALIGNMENT_OF_LLONG=<(alignment_llong)',
      'SB_ALIGNMENT_OF_LONG=<(alignment_long)',
      'SB_ALIGNMENT_OF_POINTER=<(alignment_pointer)',
      'SB_ALIGNMENT_OF_SHORT=<(alignment_short)',
      'SB_SIZE_OF_CHAR=<(size_of_char)',
      'SB_SIZE_OF_ENUM=<(size_of_enum)',
      'SB_SIZE_OF_DOUBLE=<(size_of_double)',
      'SB_SIZE_OF_FLOAT=<(size_of_float)',
      'SB_SIZE_OF_INT=<(size_of_int)',
      'SB_SIZE_OF_LONG=<(size_of_long)',
      'SB_SIZE_OF_LLONG=<(size_of_llong)',
      'SB_SIZE_OF_POINTER=<(size_of_pointer)',
      'SB_SIZE_OF_SHORT=<(size_of_short)',
    ],
    'conditions': [
      ['endianness=="little"', {
        'defines': [
          'SB_IS_BIG_ENDIAN=0',
          'SB_IS_LITTLE_ENDIAN=1',
        ],
      }, {
        'defines': [
          'SB_IS_BIG_ENDIAN=1',
          'SB_IS_LITTLE_ENDIAN=0',
        ],
      }],
      ['signedness_of_char=="signed"', {
        'defines': ['SB_HAS_SIGNED_CHAR=1'],
      }, {
        'defines': ['SB_HAS_SIGNED_CHAR=0'],
      }],
      ['signedness_of_enum=="signed"', {
        'defines': ['SB_HAS_SIGNED_ENUM=1'],
      }, {
        'defines': ['SB_HAS_SIGNED_ENUM=0'],
      }],
    ],
  },
  'includes': [
    # This JSON file also happens to be valid GYP configuration language so we
    # include it here. Slightly hacky, highly effective.
    '<(DEPTH)/<(sabi_json_path)',
  ],
}
