# Copyright 2019 The Dawn Authors
#
# 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("../../scripts/dawn_overrides_with_defaults.gni")

import("${dawn_root}/generator/dawn_generator.gni")
import("${dawn_root}/scripts/dawn_component.gni")

###############################################################################
# Dawn headers
###############################################################################

dawn_json_generator("headers_gen") {
  target = "headers"
  outputs = [
    "include/dawn/dawn_proc_table.h",
    "include/dawn/webgpu.h",
  ]
}

source_set("headers") {
  all_dependent_configs = [ ":public" ]
  public_deps = [ ":headers_gen" ]

  sources = get_target_outputs(":headers_gen")
  sources += [ "${dawn_root}/include/dawn/dawn_wsi.h" ]
}

###############################################################################
# Dawn C++ headers
###############################################################################

dawn_json_generator("cpp_headers_gen") {
  target = "cpp_headers"
  outputs = [
    "include/dawn/webgpu_cpp.h",
    "include/dawn/webgpu_cpp_print.h",
  ]
}

source_set("cpp_headers") {
  public_deps = [
    ":cpp_headers_gen",
    ":headers",
  ]

  sources = get_target_outputs(":cpp_headers_gen")
  sources += [ "${dawn_root}/include/dawn/EnumClassBitmasks.h" ]
}

###############################################################################
# Dawn public include directories
###############################################################################

config("public") {
  include_dirs = [
    "${target_gen_dir}/../../include",
    "${dawn_root}/include",

    "${dawn_root}/src/include",  # TODO(crbug.com/dawn/1275) - remove
  ]
}

################################################################################
# Build target aliases
# TODO(crbug.com/dawn/1275) - remove these
################################################################################
group("dawncpp_headers") {
  public_deps = [ ":cpp_headers" ]
}
group("dawn_headers") {
  public_deps = [ ":headers" ]
}
