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

config("sabi") {
  sabi_json = read_file(sabi_path, "json")
  sabi_variables = sabi_json.variables
  forward_variables_from(sabi_variables, "*")

  arch_uppercase = exec_script("//starboard/build/gyp_functions.py",
                               [
                                 "str_upper",
                                 target_arch,
                               ],
                               "trim string")
  calling_convention_uppercase =
      exec_script("//starboard/build/gyp_functions.py",
                  [
                    "str_upper",
                    calling_convention,
                  ],
                  "trim string")
  floating_point_abi_uppercase =
      exec_script("//starboard/build/gyp_functions.py",
                  [
                    "str_upper",
                    floating_point_abi,
                  ],
                  "trim string")

  mock_sabi_id = "\"MOCK_SABI_ID\""

  defines = [
    "SB_SABI_JSON_ID=$mock_sabi_id",
    "SB_API_VERSION=$sb_api_version",

    "SB_IS_ARCH_${arch_uppercase}=1",
    "SB_HAS_${calling_convention_uppercase}_CALLING=1",
    "SB_HAS_${floating_point_abi_uppercase}_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}",
  ]

  if (endianness == "little") {
    defines += [
      "SB_IS_BIG_ENDIAN=0",
      "SB_IS_LITTLE_ENDIAN=1",
    ]
  } else {
    defines += [
      "SB_IS_BIG_ENDIAN=1",
      "SB_IS_LITTLE_ENDIAN=0",
    ]
  }

  if (signedness_of_char == "signed") {
    defines += [ "SB_HAS_SIGNED_CHAR=1" ]
  } else {
    defines += [ "SB_HAS_SIGNED_CHAR=0" ]
  }

  if (signedness_of_enum == "signed") {
    defines += [ "SB_HAS_SIGNED_ENUM=1" ]
  } else {
    defines += [ "SB_HAS_SIGNED_ENUM=1" ]
  }

  not_needed("*")
}
