# 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("dawn_headers_gen") {
  target = "dawn_headers"
  outputs = [
    "src/include/dawn/dawn_proc_table.h",
    "src/include/dawn/webgpu.h",
  ]
}

source_set("dawn_headers") {
  all_dependent_configs = [ "${dawn_root}/src/common:dawn_public_include_dirs" ]
  public_deps = [ ":dawn_headers_gen" ]

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

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

dawn_json_generator("dawncpp_headers_gen") {
  target = "dawncpp_headers"
  outputs = [
    "src/include/dawn/webgpu_cpp.h",
    "src/include/dawn/webgpu_cpp_print.h",
  ]
}

source_set("dawncpp_headers") {
  public_deps = [
    ":dawn_headers",
    ":dawncpp_headers_gen",
  ]

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

###############################################################################
# Dawn C++ wrapper
###############################################################################

dawn_json_generator("dawncpp_gen") {
  target = "dawncpp"
  outputs = [ "src/dawn/webgpu_cpp.cpp" ]
}

source_set("dawncpp") {
  deps = [
    ":dawncpp_gen",
    ":dawncpp_headers",
  ]
  sources = get_target_outputs(":dawncpp_gen")
}

###############################################################################
# dawn_proc
###############################################################################

dawn_json_generator("dawn_proc_gen") {
  target = "dawn_proc"
  outputs = [
    "src/dawn/dawn_proc.c",
    "src/dawn/dawn_thread_dispatch_proc.cpp",
  ]
}

dawn_component("dawn_proc") {
  DEFINE_PREFIX = "WGPU"

  public_deps = [ ":dawn_headers" ]
  deps = [ ":dawn_proc_gen" ]
  sources = get_target_outputs(":dawn_proc_gen")
  sources += [
    "${dawn_root}/src/include/dawn/dawn_proc.h",
    "${dawn_root}/src/include/dawn/dawn_thread_dispatch_proc.h",
  ]
}

###############################################################################
# Other generated files (upstream header, emscripten header, emscripten bits)
###############################################################################

dawn_json_generator("webgpu_headers_gen") {
  target = "webgpu_headers"
  outputs = [ "webgpu-headers/webgpu.h" ]
}

dawn_json_generator("emscripten_bits_gen") {
  target = "emscripten_bits"
  outputs = [
    "emscripten-bits/webgpu.h",
    "emscripten-bits/webgpu_cpp.h",
    "emscripten-bits/webgpu_cpp.cpp",
    "emscripten-bits/webgpu_struct_info.json",
    "emscripten-bits/library_webgpu_enum_tables.js",
  ]
}
