# Copyright 2022 The Pigweed 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
#
#     https://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("//build_overrides/pigweed.gni")

import("$dir_pw_build/target_types.gni")
import("glfw.gni")
import("imgui.gni")

if (dir_pw_third_party_imgui != "") {
  config("imgui") {
    include_dirs = [
      "$dir_pw_third_party_imgui",
      "$dir_pw_third_party_imgui/backends",
      "$dir_pw_third_party_imgui/examples/libs/glfw",
    ]

    if (host_os == "linux") {
      libs = [
        # pkg-config --static --libs gl
        "GL",

        # pkg-config --static --libs glfw3
        "glfw",
        "rt",
        "m",
        "dl",
      ]
      include_dirs += [ "$dir_pw_third_party_glfw/include" ]
      lib_dirs = [
        "/usr/lib/x86_64-linux-gnu",
        "/usr/lib",
      ]
    } else if (host_os == "mac") {
      # TODO(tonymd) Test Mac build
      ldflags = [
        "-framework",
        "OpenGL",
        "-framework",
        "Cocoa",
        "-framework",
        "IOKit",
        "-framework",
        "CoreVideo",
      ]
      libs = [ "glfw3" ]
      lib_dirs = [
        "$dir_pw_third_party_glfw/lib-universal",
        "/usr/local/lib",
      ]
      include_dirs += [
        "$dir_pw_third_party_glfw/include",
        "/usr/local/include",
      ]
    } else if (host_os == "win") {
      libs = [
        "glfw3",
        "gdi32",
        "opengl32",
        "imm32",
      ]
      include_dirs += [ "$dir_pw_third_party_glfw/include" ]
      lib_dirs = [ "$dir_pw_third_party_glfw/lib-mingw-w64" ]
    }
  }

  _imgui_sources = [
    "$dir_pw_third_party_imgui/backends/imgui_impl_glfw.cpp",
    "$dir_pw_third_party_imgui/backends/imgui_impl_opengl3.cpp",
    "$dir_pw_third_party_imgui/imgui.cpp",
    "$dir_pw_third_party_imgui/imgui_demo.cpp",
    "$dir_pw_third_party_imgui/imgui_draw.cpp",
    "$dir_pw_third_party_imgui/imgui_tables.cpp",
    "$dir_pw_third_party_imgui/imgui_widgets.cpp",
  ]

  pw_source_set("pw_display_host_imgui") {
    public_configs = [ ":imgui" ]
    deps = [ "$dir_pw_display:pw_display.facade" ]
    sources = [ "display.cc" ] + _imgui_sources
    remove_configs = [ "$dir_pw_build:strict_warnings" ]
  }
}
