if (BUILD_TESTS AND NOT ANDROID)
    add_subdirectory(test)
endif()

file(GLOB PROFILES_FILES ${CMAKE_CURRENT_LIST_DIR})
source_group("Python Files" FILES ${MERGE_PYTHON_FILES} ${LAYER_PYTHON_FILES})

set(PROFILE_DESKTOP_MAX_2024_LABEL "LunarG Vulkan Desktop Max 2024 profile")
set(PROFILE_DESKTOP_MAX_2024_DESC "A profile generated by the intersection of a collection of GPUInfo.org device reports to support the latest AMD, Intel and NVIDIA GPUs and drivers.")
set(PROFILE_DESKTOP_MAX_2024_API_VERSION "1.3.244")

set(PROFILES_FILES_FOR_INSTALL
    VP_KHR_roadmap.json
    VP_LUNARG_minimum_requirements.json
    VP_LUNARG_desktop_baseline_2022.json
    VP_LUNARG_desktop_baseline_2023.json
    VP_LUNARG_desktop_baseline_2024.json
    VP_ANDROID_baseline_2021.json
    VP_ANDROID_baseline_2022.json
    VP_ANDROID_15_minimums.json
)

set(PROFILES_FILES_FOR_API_LIBRARY
    "VP_KHR_roadmap.json,VP_LUNARG_minimum_requirements.json,VP_LUNARG_desktop_baseline_2022.json,VP_LUNARG_desktop_baseline_2023.json,VP_LUNARG_desktop_baseline_2024.json,VP_ANDROID_baseline_2021.json,VP_ANDROID_baseline_2022.json,VP_ANDROID_15_minimums.json"
)

add_custom_target(VpCreateDesktopMax2024 ALL
    COMMAND Python3::Interpreter ${MERGE_PYTHON_FILES}
        --registry ${VULKAN_HEADERS_INSTALL_DIR}/${CMAKE_INSTALL_DATADIR}/vulkan/registry/vk.xml
        --input ${CMAKE_CURRENT_LIST_DIR}/VP_LUNARG_desktop_max_2024
        --output-path ${CMAKE_CURRENT_LIST_DIR}/test/data/VP_LUNARG_desktop_max_2024.json
        --output-profile VP_LUNARG_desktop_max_2024
        --profile-label ${PROFILE_DESKTOP_MAX_2024_LABEL}
        --profile-desc ${PROFILE_DESKTOP_MAX_2024_DESC}
        --profile-date 2023-11-01
        --profile-stage BETA
        --profile-api-version ${PROFILE_DESKTOP_MAX_2024_API_VERSION}
    VERBATIM
    SOURCES ${MERGE_PYTHON_FILES} ${PROFILES_FILES}
    DEPENDS ${MERGE_PYTHON_FILES} ${PROFILES_FILES})

set_target_properties(VpCreateDesktopMax2024 PROPERTIES FOLDER "Profiles generator")

set(PROFILE_DESKTOP_BASELINE_2022_LABEL "LunarG Vulkan Desktop Baseline 2022 profile")
set(PROFILE_DESKTOP_BASELINE_2022_DESC "A profile generated by the intersection of a collection of GPUInfo.org device reports to support a large number of actual systems in the Vulkan ecosystem. This profile is meant to be a usage example for Vulkan application developer.")
set(PROFILE_DESKTOP_BASELINE_2022_API_VERSION "1.1.139")

add_custom_target(VpCreateDesktopBaseline2022 ALL
	COMMAND Python3::Interpreter ${MERGE_PYTHON_FILES}
		--registry ${VULKAN_HEADERS_INSTALL_DIR}/${CMAKE_INSTALL_DATADIR}/vulkan/registry/vk.xml
		--input ${CMAKE_CURRENT_LIST_DIR}/VP_LUNARG_desktop_baseline_2022
		--output-path ${CMAKE_CURRENT_LIST_DIR}/VP_LUNARG_desktop_baseline_2022.json
		--output-profile VP_LUNARG_desktop_baseline_2022
		--profile-label ${PROFILE_DESKTOP_BASELINE_2022_LABEL}
		--profile-desc ${PROFILE_DESKTOP_BASELINE_2022_DESC}
		--profile-date 2023-01-26
		--profile-api-version ${PROFILE_DESKTOP_BASELINE_2022_API_VERSION}
	VERBATIM
	SOURCES ${MERGE_PYTHON_FILES} ${PROFILES_FILES}
	DEPENDS ${MERGE_PYTHON_FILES} ${PROFILES_FILES})

set_target_properties(VpCreateDesktopBaseline2022 PROPERTIES FOLDER "Profiles generator")

set(PROFILE_DESKTOP_BASELINE_2023_LABEL "LunarG Vulkan Desktop Baseline 2023 profile")
set(PROFILE_DESKTOP_BASELINE_2023_DESC "A profile generated by the intersection of a collection of GPUInfo.org device reports to support a large number of actual systems in the Vulkan ecosystem. This profile is meant to be a usage example for Vulkan application developer.")
set(PROFILE_DESKTOP_BASELINE_2023_API_VERSION "1.2.148")

add_custom_target(VpCreateDesktopBaseline2023 ALL
    COMMAND Python3::Interpreter ${MERGE_PYTHON_FILES}
        --registry ${VULKAN_HEADERS_INSTALL_DIR}/${CMAKE_INSTALL_DATADIR}/vulkan/registry/vk.xml
        --input ${CMAKE_CURRENT_LIST_DIR}/VP_LUNARG_desktop_baseline_2023
        --output-path ${CMAKE_CURRENT_LIST_DIR}/VP_LUNARG_desktop_baseline_2023.json
        --output-profile VP_LUNARG_desktop_baseline_2023
        --profile-label ${PROFILE_DESKTOP_BASELINE_2023_LABEL}
        --profile-desc ${PROFILE_DESKTOP_BASELINE_2023_DESC}
        --profile-date 2023-01-30
        --profile-api-version ${PROFILE_DESKTOP_BASELINE_2023_API_VERSION}
        --profile-required-profiles "VP_LUNARG_minimum_requirements_1_2"
    VERBATIM
    SOURCES ${MERGE_PYTHON_FILES} ${PROFILES_FILES}
    DEPENDS ${MERGE_PYTHON_FILES} ${PROFILES_FILES})

set_target_properties(VpCreateDesktopBaseline2023 PROPERTIES FOLDER "Profiles generator")

set(PROFILE_DESKTOP_BASELINE_2024_LABEL "LunarG Vulkan Desktop Baseline 2024 profile")
set(PROFILE_DESKTOP_BASELINE_2024_DESC "A profile generated by the intersection of a collection of GPUInfo.org device reports to support a large number of actual systems in the Vulkan ecosystem. This profile is meant to be a usage example for Vulkan application developer.")
set(PROFILE_DESKTOP_BASELINE_2024_API_VERSION "1.2.197")

add_custom_target(VpCreateDesktopBaseline2024 ALL
    COMMAND Python3::Interpreter ${MERGE_PYTHON_FILES}
        --registry ${VULKAN_HEADERS_INSTALL_DIR}/${CMAKE_INSTALL_DATADIR}/vulkan/registry/vk.xml
        --input ${CMAKE_CURRENT_LIST_DIR}/VP_LUNARG_desktop_baseline_2024
        --output-path ${CMAKE_CURRENT_LIST_DIR}/VP_LUNARG_desktop_baseline_2024.json
        --output-profile VP_LUNARG_desktop_baseline_2024
        --profile-label ${PROFILE_DESKTOP_BASELINE_2024_LABEL}
        --profile-desc ${PROFILE_DESKTOP_BASELINE_2024_DESC}
        --profile-date 2023-11-01
        --profile-api-version ${PROFILE_DESKTOP_BASELINE_2024_API_VERSION}
        --profile-required-profiles "VP_LUNARG_minimum_requirements_1_2"
        --strip-duplicate-structs
    VERBATIM
    SOURCES ${MERGE_PYTHON_FILES} ${PROFILES_FILES}
    DEPENDS ${MERGE_PYTHON_FILES} ${PROFILES_FILES})

set_target_properties(VpCreateDesktopBaseline2024 PROPERTIES FOLDER "Profiles generator")

add_custom_target(VpGenerated
    COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_SOURCE_DIR}/schema
    #COMMAND ${CMAKE_COMMAND} -E copy_directory ${VULKAN_HEADERS_INSTALL_DIR}/${CMAKE_INSTALL_DATADIR}/vulkan/registry/profiles ${CMAKE_CURRENT_LIST_DIR}
    COMMAND Python3::Interpreter ${LAYER_PYTHON_FILES}
        --api ${API_TYPE}
        --registry ${VULKAN_HEADERS_INSTALL_DIR}/${CMAKE_INSTALL_DATADIR}/vulkan/registry/vk.xml
        --input ${CMAKE_CURRENT_LIST_DIR}
        --input-filenames ${PROFILES_FILES_FOR_API_LIBRARY}
        --output-library-inc ${PROJECT_SOURCE_DIR}/library/include/vulkan
        --output-library-src ${PROJECT_SOURCE_DIR}/library/source
        --output-library-filename "vulkan_profiles"
        --output-schema ${PROJECT_SOURCE_DIR}/schema/${PROFILES_SCHEMA_FILENAME}
        --output-doc ${PROJECT_SOURCE_DIR}/PROFILES.md
        --validate
        --debug
    VERBATIM
    SOURCES ${LAYER_PYTHON_FILES} ${PROFILES_FILES}
    DEPENDS ${LAYER_PYTHON_FILES} ${PROFILES_FILES})

set_target_properties(VpGenerated PROPERTIES FOLDER "Profiles generator")

add_dependencies(VpGenerated VpCreateDesktopBaseline2024 VpCreateDesktopBaseline2023 VpCreateDesktopBaseline2022 VpCreateDesktopMax2024)

add_custom_target(VpTestIntersect ALL
    COMMAND Python3::Interpreter ${MERGE_PYTHON_FILES}
        --registry ${VULKAN_HEADERS_INSTALL_DIR}/${CMAKE_INSTALL_DATADIR}/vulkan/registry/vk.xml
        --input ${CMAKE_CURRENT_LIST_DIR}/test/data/VP_LUNARG_test_combine_intersect
        --output-path ${CMAKE_CURRENT_LIST_DIR}/test/data/VP_LUNARG_test_combine_intersect.json
        --output-profile VP_LUNARG_test_combine_intersect
        --mode intersection
    VERBATIM
    SOURCES ${MERGE_PYTHON_FILES} ${PROFILES_FILES}
    DEPENDS ${MERGE_PYTHON_FILES} ${PROFILES_FILES})

set_target_properties(VpTestIntersect PROPERTIES FOLDER "Profiles generator/Tests")

add_dependencies(VpTestIntersect VpGenerated)

add_custom_target(VpTestUnion ALL
    COMMAND Python3::Interpreter ${MERGE_PYTHON_FILES}
        --registry ${VULKAN_HEADERS_INSTALL_DIR}/${CMAKE_INSTALL_DATADIR}/vulkan/registry/vk.xml
        --input ${CMAKE_CURRENT_LIST_DIR}/test/data/VP_LUNARG_test_combine_union
        --output-path ${CMAKE_CURRENT_LIST_DIR}/test/data/VP_LUNARG_test_combine_union.json
        --output-profile VP_LUNARG_test_combine_union
        --mode union
    VERBATIM
    SOURCES ${MERGE_PYTHON_FILES} ${PROFILES_FILES}
    DEPENDS ${MERGE_PYTHON_FILES} ${PROFILES_FILES})

set_target_properties(VpTestUnion PROPERTIES FOLDER "Profiles generator/Tests")

add_dependencies(VpTestUnion VpGenerated)

add_custom_target(VpTestGeneratedName ALL
    COMMAND Python3::Interpreter ${MERGE_PYTHON_FILES}
        --registry ${VULKAN_HEADERS_INSTALL_DIR}/${CMAKE_INSTALL_DATADIR}/vulkan/registry/vk.xml
        --input ${CMAKE_CURRENT_LIST_DIR}/test/data/VP_LUNARG_test_combine_intersect
        --output-path ${CMAKE_CURRENT_LIST_DIR}/test/data/VP_LUNARG_test_generated_name.json
    VERBATIM
    SOURCES ${MERGE_PYTHON_FILES} ${PROFILES_FILES}
    DEPENDS ${MERGE_PYTHON_FILES} ${PROFILES_FILES})

set_target_properties(VpTestGeneratedName PROPERTIES FOLDER "Profiles generator/Tests")

add_dependencies(VpTestGeneratedName VpGenerated)

add_custom_target(VpTestHostImageCopy ALL
    COMMAND Python3::Interpreter ${MERGE_PYTHON_FILES}
        --registry ${VULKAN_HEADERS_INSTALL_DIR}/${CMAKE_INSTALL_DATADIR}/vulkan/registry/vk.xml
        --input ${CMAKE_CURRENT_LIST_DIR}/test/data/VP_LUNARG_test_host_image_copy
        --output-path ${CMAKE_CURRENT_LIST_DIR}/test/data/VP_LUNARG_test_host_image_copy.json
    VERBATIM
    SOURCES ${MERGE_PYTHON_FILES} ${PROFILES_FILES}
    DEPENDS ${MERGE_PYTHON_FILES} ${PROFILES_FILES})

set_target_properties(VpTestHostImageCopy PROPERTIES FOLDER "Profiles generator/Tests")

add_dependencies(VpTestHostImageCopy VpGenerated)

set(json_install_dir "${CMAKE_INSTALL_DATADIR}/vulkan/config/VK_LAYER_KHRONOS_profiles")
if (WIN32)
    set(json_install_dir "Config/VK_LAYER_KHRONOS_profiles")
endif()

install(
    FILES 
        ${PROFILES_FILES_FOR_INSTALL}
    DESTINATION
        ${json_install_dir}
)

install(
    FILES
        ${MERGE_PYTHON_FILES}
        ${LAYER_PYTHON_FILES}
        ${PROJECT_SOURCE_DIR}/schema/${PROFILES_SCHEMA_FILENAME}
    DESTINATION
        "${CMAKE_INSTALL_DATADIR}/vulkan/registry"
)
