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

import("//starboard/build/delegated_config.gni")

# =============================================================================
# DEFAULT COMPILER CONFIGS
# =============================================================================

config("compiler_defaults") {
  libs = [
    "EGL",
    "GLESv2",
    "X11",
    "Xcomposite",
    "Xrender",
  ]

  configs = [ "//starboard/linux/shared:compiler_defaults" ]
}

config("compiler_defaults_debug") {
  configs = [ "//starboard/linux/shared:compiler_defaults_debug" ]
}

config("compiler_defaults_devel") {
  configs = [ "//starboard/linux/shared:compiler_defaults_devel" ]
}

config("compiler_defaults_qa") {
  configs = [ "//starboard/linux/shared:compiler_defaults_qa" ]
}

config("compiler_defaults_gold") {
  configs = [ "//starboard/linux/shared:compiler_defaults_gold" ]
}

# =============================================================================
# DELEGATED CONFIGS
# =============================================================================

delegated_config("pedantic_warnings") {
  path = "//starboard/linux/shared"
  generate_default = false
}

delegated_config("optimizations") {
  path = "//starboard/linux/shared"
  prefixes = [ "no", "debuggable", "full" ]
}

delegated_config("rtti") {
  path = "//starboard/linux/shared"
}

config("wexit_time_destructors") {
  configs = [ "//starboard/linux/shared:wexit_time_destructors" ]
}

# =============================================================================
# starboard_platform TARGET
# =============================================================================

static_library("starboard_platform") {
  sources = [
    "//starboard/linux/x64x11/main.cc",
    "//starboard/linux/x64x11/sanitizer_options.cc",
    "//starboard/linux/x64x11/system_get_property.cc",
    "//starboard/shared/starboard/link_receiver.cc",
    "//starboard/shared/x11/application_x11.cc",
    "//starboard/shared/x11/window_create.cc",
    "//starboard/shared/x11/window_destroy.cc",
    "//starboard/shared/x11/window_get_platform_handle.cc",
    "//starboard/shared/x11/window_get_size.cc",
    "//starboard/shared/x11/window_internal.cc",
  ]
  
  defines = [
    # This must be defined when building Starboard, and must not when
    # building Starboard client code.
    "STARBOARD_IMPLEMENTATION",
  ]

  deps = [
    "//starboard/linux/shared:starboard_platform",
  ]
}
