# 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"

  # Generate as if we were in the main BUILD.gn because that was historically
  # the case and we can't move generated files without clobbering the build.
  custom_gen_dir = "${target_gen_dir}/../.."
  outputs = [
    "src/include/dawn/dawncpp.h",
    "src/include/dawn/dawn.h",
  ]
}

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

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

###############################################################################
# libdawn
###############################################################################

dawn_json_generator("libdawn_gen") {
  target = "libdawn"
  outputs = [
    "src/dawn/dawncpp.cpp",
    "src/dawn/dawn.c",
  ]
}

dawn_component("libdawn") {
  DEFINE_PREFIX = "DAWN"

  public_deps = [
    ":dawn_headers",
  ]

  deps = [
    ":libdawn_gen",
  ]
  sources = get_target_outputs(":libdawn_gen")
}
