# Copyright 2019 The ANGLE Project Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# This file houses the build configuration for the ANGLE Metal back-end.

import("../../../../gni/angle.gni")

assert(is_mac)
assert(angle_enable_metal)

_metal_backend_sources = [
  "BufferMtl.h",
  "BufferMtl.mm",
  "CompilerMtl.h",
  "CompilerMtl.mm",
  "ContextMtl.h",
  "ContextMtl.mm",
  "DisplayMtl.h",
  "DisplayMtl_api.h",
  "DisplayMtl.mm",
  "FrameBufferMtl.h",
  "FrameBufferMtl.mm",
  "ProgramMtl.h",
  "ProgramMtl.mm",
  "RenderBufferMtl.h",
  "RenderBufferMtl.mm",
  "RenderTargetMtl.h",
  "RenderTargetMtl.mm",
  "ShaderMtl.h",
  "ShaderMtl.mm",
  "SurfaceMtl.h",
  "SurfaceMtl.mm",
  "TextureMtl.h",
  "TextureMtl.mm",
  "VertexArrayMtl.h",
  "VertexArrayMtl.mm",
  "mtl_buffer_pool.h",
  "mtl_buffer_pool.mm",
  "mtl_command_buffer.h",
  "mtl_command_buffer.mm",
  "mtl_common.h",
  "mtl_common.mm",
  "mtl_format_table_autogen.mm",
  "mtl_format_utils.h",
  "mtl_format_utils.mm",
  "mtl_glslang_utils.h",
  "mtl_glslang_utils.mm",
  "mtl_render_utils.h",
  "mtl_render_utils.mm",
  "mtl_resources.h",
  "mtl_resources.mm",
  "mtl_state_cache.h",
  "mtl_state_cache.mm",
  "mtl_utils.h",
  "mtl_utils.mm",
  "shaders/mtl_default_shaders_src_autogen.inc",
  "shaders/compiled/mtl_default_shaders.inc",
]

config("angle_metal_backend_config") {
  defines = [ "ANGLE_ENABLE_METAL" ]
  ldflags = [
    "-weak_framework",
    "Metal",
  ]
}

angle_source_set("angle_metal_backend") {
  public_configs = [ ":angle_metal_backend_config" ]

  sources = _metal_backend_sources

  cflags = []
  cflags_cc = []
  cflags_objc = []
  cflags_objcc = []
  ldflags = []
  libs = []

  public_deps = [
    "${angle_root}:angle_glslang_wrapper",
    "${angle_root}:libANGLE_headers",
  ]

  deps = [
    "${angle_spirv_cross_dir}/gn:spirv_cross_sources",
  ]

  objc_flags = [
    "-Wno-nullability-completeness",
    "-Wno-unguarded-availability",
    "-fno-objc-arc",
  ]
  cflags_objc += objc_flags
  cflags_objcc += objc_flags

  if (is_mac) {
    libs += [
      "Cocoa.framework",
      "IOSurface.framework",
      "QuartzCore.framework",
    ]
  }

  # TODO(hqle): iOS support.
}
