| # 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 Vulkan and and set up compilation and linking. |
| |
| # Export these settings to the includer. |
| set(Vulkan_FOUND FALSE) |
| set(VULKAN_CTS_HEADER FALSE) |
| set(VULKAN_LIB "") |
| |
| if (NOT ${Vulkan_FOUND}) |
| if (${AMBER_USE_LOCAL_VULKAN}) |
| set(Vulkan_FOUND TRUE) |
| set(VulkanHeaders_INCLUDE_DIR |
| ${PROJECT_SOURCE_DIR}/third_party/vulkan-headers/include |
| CACHE PATH "vk headers dir" FORCE) |
| set(VulkanHeaders_INCLUDE_DIRS ${VulkanHeaders_INCLUDE_DIR} |
| CACHE PATH "vk headers dir" FORCE) |
| set(VulkanRegistry_DIR |
| ${PROJECT_SOURCE_DIR}/third_party/vulkan-headers/registry |
| CACHE PATH "vk_registry_dir" FORCE) |
| set(VulkanRegistry_DIRS ${VulkanRegistry_DIR} |
| CACHE PATH "vk_registry_dir" FORCE) |
| set(VULKAN_LIB vulkan) |
| message(STATUS "Amber: using local vulkan") |
| endif() |
| endif() |
| |
| if (NOT ${Vulkan_FOUND}) |
| # Our first choice is to pick up the Vulkan headers from an enclosing project. |
| # And if that's the case, then use Vulkan libraries as specified by |
| # Vulkan_LIBRARIES, with a default library of "vulkan". |
| set(X "${Vulkan-Headers_SOURCE_DIR}/include") |
| if (IS_DIRECTORY "${X}") |
| message(STATUS "Amber: Using Vulkan header dir ${X}") |
| list(APPEND CMAKE_REQUIRED_INCLUDES "${X}") |
| |
| include_directories(BEFORE "${X}") |
| CHECK_INCLUDE_FILE(vulkan/vulkan.h HAVE_VULKAN_HEADER) |
| |
| if (${HAVE_VULKAN_HEADER}) |
| if ("${Vulkan_LIBRARIES}" STREQUAL "") |
| message(STATUS "Amber: Defaulting to Vulkan library: vulkan") |
| set(VULKAN_LIB vulkan) |
| else() |
| message(STATUS "Amber: Using specified Vulkan libraries: ${Vulkan_LIBRARIES}") |
| set(VULKAN_LIB "${Vulkan_LIBRARIES}") |
| endif() |
| |
| # For now assume we have Vulkan. We have its header, but we haven't checked |
| # for the library. |
| # TODO(dneto): Actually check for the libraries. |
| set(Vulkan_FOUND TRUE) |
| set(VulkanHeaders_INCLUDE_DIR "${X}") |
| set(VulkanHeaders_INCLUDE_DIRS "${VulkanHeaders_INCLUDE_DIR}") |
| endif() |
| endif() |
| unset(X) |
| endif() |
| |
| # Check if we're in the CTS |
| if (NOT ${Vulkan_FOUND}) |
| message(STATUS "Amber: Checking for CTS Vulkan header") |
| set(X "${Vulkan-Headers_SOURCE_DIR}") |
| if (IS_DIRECTORY "${X}") |
| message(STATUS "Amber: Using Vulkan header dir ${X}") |
| list(APPEND CMAKE_REQUIRED_INCLUDES "${X}") |
| |
| include_directories(BEFORE "${X}") |
| |
| if (EXISTS "${X}/vkDefs.h") |
| set(VULKAN_CTS_HEADER TRUE) |
| set(Vulkan_FOUND TRUE) |
| set(VulkanHeaders_INCLUDE_DIR "${X}") |
| set(VulkanHeaders_INCLUDE_DIRS "${VulkanHeaders_INCLUDE_DIR}") |
| endif() |
| endif() |
| unset(X) |
| endif() |
| |
| if (NOT ${Vulkan_FOUND}) |
| # If we aren't already building a Vulkan library, then use CMake to find it. |
| if(NOT ${CMAKE_VERSION} VERSION_LESS "3.7") |
| # LunarG added FindVulkan support to CMake 3.7. If you have the Vulkan SDK |
| # published by LunarG, then set environment variables: |
| # VULKAN_SDK should point to the platform-specific SDK directory containing |
| # the include and lib directories. |
| # VK_ICD_FILENAMES should point to ICD JSON file. |
| |
| # Example, with the LunarG SDK macOS edition with MoltenVK: |
| # export VULKAN_SDK="$HOME/vulkan-macos-1.1.85.0/macOS" |
| # export VK_ICD_FILENAMES="$VULKAN_SDK/etc/vulkan/icd/MoltenVK_icd.json" |
| # See https://cmake.org/cmake/help/v3.7/module/FindVulkan.html |
| find_package(Vulkan) |
| if(${Vulkan_FOUND}) |
| message(STATUS "Amber: Using Vulkan from Vulkan SDK at $ENV{VULKAN_SDK}") |
| # Use the imported library target set up by find_package. |
| set(VULKAN_LIB Vulkan::Vulkan) |
| set(VulkanHeaders_INCLUDE_DIR "${Vulkan_INCLUDE_DIR}" |
| CACHE PATH "vk headers dir" FORCE) |
| set(VulkanHeaders_INCLUDE_DIRS "${Vulkan_INCLUDE_DIRS}" |
| CACHE PATH "vk headers dir" FORCE) |
| endif() |
| endif() |
| endif() |
| |
| if (NOT ${Vulkan_FOUND}) |
| message(STATUS "Amber: Did not find Vulkan") |
| endif() |