# ~~~
# Copyright 2022-2023 The Khronos Group Inc.
# Copyright 2022-2023 Valve Corporation
# Copyright 2022-2023 LunarG, Inc.
#
# SPDX-License-Identifier: Apache-2.0
# ~~~
cmake_minimum_required(VERSION 3.14.2)

project(API LANGUAGES C)

if (FIND_PACKAGE_TESTING)
    find_package(VulkanHeaders REQUIRED CONFIG)
else()
    add_subdirectory(../../ ${CMAKE_CURRENT_BINARY_DIR}/headers)
endif()

if (NOT TARGET Vulkan::Headers)
    message(FATAL_ERROR "Vulkan::Headers target not defined")
endif()

if (FIND_PACKAGE_TESTING)
    if (NOT DEFINED VulkanHeaders_VERSION)
        message(FATAL_ERROR "VulkanHeaders_VERSION not defined!")
    endif()
    message(STATUS "VulkanHeaders_VERSION = ${VulkanHeaders_VERSION}")
endif()

if (NOT FIND_PACKAGE_TESTING)
    # Consuming vulkan-headers via add_subdirectory should NOT add installation code to the parent CMake project.
    if (DEFINED CMAKE_INSTALL_INCLUDEDIR)
        message(FATAL_ERROR "CMAKE_INSTALL_INCLUDEDIR was defined!")
    endif()

    # NOTE: Some users may not be using the namespace target.
    # Don't accidentally break them unless we have to.
    if (NOT TARGET Vulkan-Headers)
        message(FATAL_ERROR "Backcompat for Vulkan-Headers target broken!")
    endif()
endif()

set(CMAKE_C_STANDARD 99)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS OFF)

if(${CMAKE_C_COMPILER_ID} MATCHES "(GNU|Clang)")
    add_compile_options(
        -Wpedantic
        -Wall
        -Wextra
        -Werror
    )
endif()

if (MSVC)
    add_compile_options(
        /W4
        /permissive-
        /WX
    )
endif()

# Test the non-API headers provided by this repo
# NOTE: For us testing just means that these header files compile
# with reasonable warnings.

# vk_icd.h
add_library(vk_icd MODULE ../vk_icd.c)
target_link_libraries(vk_icd PRIVATE Vulkan::Headers)

# vk_layer.h
add_library(vk_layer MODULE ../vk_layer.c)
target_link_libraries(vk_layer PRIVATE Vulkan::Headers)
