﻿cmake_minimum_required(VERSION 3.22.1)

project("sample")

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

if(MSVC)
    add_compile_options(/Zc:__cplusplus)
endif()



if(CMAKE_SYSTEM_NAME STREQUAL "Android")
        message(STATUS "Building for Android")

        include_directories(
                vulkan
                ${CMAKE_CURRENT_LIST_DIR}/vulkan
                ${CMAKE_CURRENT_LIST_DIR}/vulkan/framework
                ${CMAKE_CURRENT_LIST_DIR}/vulkan/components
                ${CMAKE_CURRENT_LIST_DIR}/vulkan/components/core
                ${CMAKE_CURRENT_LIST_DIR}/vulkan/components/core/include
                ${CMAKE_CURRENT_LIST_DIR}/third_party
                ${CMAKE_CURRENT_LIST_DIR}/third_party/vma
                ${CMAKE_CURRENT_LIST_DIR}/third_party/vma/include
                ${CMAKE_CURRENT_LIST_DIR}/third_party/volk
                ${CMAKE_CURRENT_LIST_DIR}/third_party/fmt
                ${CMAKE_CURRENT_LIST_DIR}/third_party/fmt/include
        )
    
        add_library(sample SHARED
                app/src/main/cpp/main.cpp
                app/src/main/cpp/AndroidOut.cpp
                vulkan/AppBase.h
                vulkan/AppBase.cpp
                vulkan/Application.h
                vulkan/Application.cpp
                vulkan/FaceApp.h
                vulkan/FaceApp.cpp
                vulkan/lodepng.cpp
                )

        find_package(game-activity REQUIRED CONFIG)


        set(CMAKE_SHARED_LINKER_FLAGS
                "${CMAKE_SHARED_LINKER_FLAGS} -u Java_com_google_androidgamesdk_GameActivity_initializeNativeCode")

        find_package(Vulkan REQUIRED)

        target_link_libraries(sample
                game-activity::game-activity_static
                Vulkan::Vulkan
                android
                log)

endif()


if(CMAKE_SYSTEM_NAME STREQUAL "Windows" OR WIN32)
        message(STATUS "Building for Windows")
        add_compile_options(/utf-8)
        add_compile_definitions(_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING)

        include_directories(
                ${CMAKE_CURRENT_LIST_DIR}/vulkan
                ${CMAKE_CURRENT_LIST_DIR}/vulkan/framework
                ${CMAKE_CURRENT_LIST_DIR}/vulkan/components
                ${CMAKE_CURRENT_LIST_DIR}/vulkan/components/core
                ${CMAKE_CURRENT_LIST_DIR}/vulkan/components/core/include
                ${CMAKE_CURRENT_LIST_DIR}/third_party
                ${CMAKE_CURRENT_LIST_DIR}/third_party/vma
                ${CMAKE_CURRENT_LIST_DIR}/third_party/vma/include
                ${CMAKE_CURRENT_LIST_DIR}/third_party/fmt
                ${CMAKE_CURRENT_LIST_DIR}/third_party/fmt/include
                ${CMAKE_CURRENT_LIST_DIR}/third_party/volk
                "third_party/glfw-3.4/output/include"
                "C:/VulkanSDK/1.4.321.1/Include"
        )


        link_libraries(
                # "${CMAKE_CURRENT_LIST_DIR}/third_party/glfw-3.4/output/lib/glfw3.lib"
                "${CMAKE_CURRENT_LIST_DIR}/third_party/glfw-3.4/output/glfw3.lib"
                "C:/VulkanSDK/1.4.321.1/Lib/vulkan-1.lib"
        )

        # 将源代码添加到此项目的可执行文件。
        add_executable (sample
                vulkan/AppBase.h
                vulkan/AppBase.cpp
                vulkan/Application.h
                vulkan/Application.cpp
                vulkan/FaceApp.h
                vulkan/FaceApp.cpp
                vulkan/main.cpp
                vulkan/lodepng.cpp
                third_party/vma/src/VmaUsage.h
                third_party/vma/src/VmaUsage.cpp
                third_party/fmt/src/format.cc
                
        )
endif()


# target_compile_definitions(sample PRIVATE VK_NO_PROTOTYPES)  使用volk 动态加载的时候需要定义，不自动生成vulkan接口
target_compile_definitions(sample PRIVATE GLM_ENABLE_EXPERIMENTAL)
# target_compile_definitions(sample PRIVATE VULKAN_HPP_NO_STRUCT_CONSTRUCTORS) 解决vs 编译c++ 20 不支持新构造函数的特性
 
