# Copyright 2018 The Amber 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.


# Include this file to find Dawn and and set up compilation and linking.

## Example usage:
##
## include(find_dawn.cmake)
## # Set HAVE_DAWN to 1 if we have Dawn, and 0 otherwise.
## add_definitions(-DHAVE_DAWN=$<BOOL:${Dawn_FOUND}>)
## # Set up link dependencies.
## if (${Dawn_FOUND})
##   target_link_libraries(mylib Dawn::dawn_native)
## endif()
##

# Exports these settings to the includer:
#    Boolean Dawn_FOUND indicates whether we found Dawn.
#    If Dawn was found, then library dependencies for Dawn::dawn and Dawn::dawn_native
#    will be set up.
set(Dawn_FOUND FALSE)

# Setup via CMake setting variables:
#
#   Separately specify the directory locations of the Dawn headers and
#   the dawn_native library.
#
#     -DDawn_INCLUDE_DIR=<directory containing dawn/dawn_export.h>
#     -DDawn_GEN_INCLUDE_DIR=<directory containing dawn/dawn.h>
#     -DDawn_LIBRARY_DIR=<directory containing dawn_native>


find_path(Dawn_INCLUDE_DIR
  NAMES dawn/dawn_export.h
  PATHS
    "${Dawn_INCLUDE_DIR}"
  )
find_path(Dawn_GEN_INCLUDE_DIR
  NAMES dawn/dawn.h dawn/dawncpp.h
  PATHS
    "${Dawn_GEN_INCLUDE_DIR}"
  )
find_library(Dawn_LIBRARY
  NAMES dawn
  PATHS
    "${Dawn_LIBRARY_DIR}"
  )
find_library(Dawn_native_LIBRARY
  NAMES dawn_native
  PATHS
    "${Dawn_LIBRARY_DIR}"
  )

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Dawn
  DEFAULT_MSG
  Dawn_INCLUDE_DIR Dawn_GEN_INCLUDE_DIR Dawn_LIBRARY Dawn_native_LIBRARY)

if(${Dawn_FOUND} AND NOT TARGET Dawn::dawn)
  add_library(Dawn::dawn_native UNKNOWN IMPORTED)
  set_target_properties(Dawn::dawn_native PROPERTIES
    IMPORTED_LOCATION "${Dawn_LIBRARY}"
    INTERFACE_INCLUDE_DIRECTORIES "${Dawn_INCLUDE_DIR};${Dawn_GEN_INCLUDE_DIR}")
endif()
if(${Dawn_FOUND} AND NOT TARGET Dawn::dawn_native)
  add_library(Dawn::dawn_native UNKNOWN IMPORTED)
  # The dawn_native library transitively depends on dawn
  target_link_libraries(Dawn::dawn_native Dawn::dawn)
  set_target_properties(Dawn::dawn_native PROPERTIES
    IMPORTED_LOCATION "${Dawn_native_LIBRARY}"
    INTERFACE_INCLUDE_DIRECTORIES "${Dawn_INCLUDE_DIR};${Dawn_GEN_INCLUDE_DIR}")
endif()

if (${Dawn_FOUND})
  message(STATUS "Amber: Using Dawn headers at ${Dawn_INCLUDE_DIR}")
  message(STATUS "Amber: Using Dawn generated headers at ${Dawn_GEN_INCLUDE_DIR}")
  message(STATUS "Amber: Using Dawn library ${Dawn_LIBRARY}")
  message(STATUS "Amber: Using Dawn native library ${Dawn_native_LIBRARY}")
else()
  message(STATUS "Amber: Did not find Dawn")
endif()
