cmake_minimum_required(VERSION 3.20)
project(HelloVulkan CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_BINARY_DIR  ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})

# 第三方库
add_subdirectory(Lib/glfw)
add_subdirectory(Lib/glm)
add_subdirectory(Lib/spdlog)
add_subdirectory(Lib/stb)

# ---- Assimp（vendored submodule，模型导入；只编译需要的 importer） ----
set(BUILD_SHARED_LIBS OFF)                                  # 静态链接
set(ASSIMP_BUILD_TESTS OFF                     CACHE BOOL "" FORCE)
set(ASSIMP_BUILD_ASSIMP_TOOLS OFF              CACHE BOOL "" FORCE)   # 不编 assimp_cmd 等工具
set(ASSIMP_INSTALL OFF                         CACHE BOOL "" FORCE)
set(ASSIMP_WARNINGS_AS_ERRORS OFF              CACHE BOOL "" FORCE)   # assimp 源码警告多
set(ASSIMP_INJECT_DEBUG_POSTFIX OFF            CACHE BOOL "" FORCE)
set(ASSIMP_NO_EXPORT ON                        CACHE BOOL "" FORCE)   # 彻底移除导出代码
set(ASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT OFF  CACHE BOOL "" FORCE)   # 全关，按需开
set(ASSIMP_BUILD_DRACO OFF                     CACHE BOOL "" FORCE)
# 用 assimp 自带 contrib zlib（而非系统 zlib）。原因：系统 zlib 会使 assimp 走
# pkg-config 找系统 minizip，而 Arch 的 minizip 头文件在 /usr/include/minizip/
# 子目录，与 assimp 的 #include <unzip.h> 不符 → ZipArchiveIOSystem 编译失败。
# 自带 zlib 后 ASSIMP_BUILD_MINIZIP=1，跳过 pkg-config，直接用 contrib/unzip。
set(ASSIMP_BUILD_ZLIB ON                       CACHE BOOL "" FORCE)
# 清除首次 configure 残留的 UNZIP_FOUND 缓存（INTERNAL=1 会持续生效，
# 使 assimp 误判系统 minizip 可用而不把 contrib/unzip 加进 include 路径）。
set(UNZIP_FOUND OFF                            CACHE INTERNAL "" FORCE)
# 需要的导入格式（按需增减，每关一个省编译时间）：
set(ASSIMP_BUILD_OBJ_IMPORTER    ON CACHE BOOL "" FORCE)
set(ASSIMP_BUILD_GLTF_IMPORTER   ON CACHE BOOL "" FORCE)   # glTF1+2 同一选项
set(ASSIMP_BUILD_FBX_IMPORTER    ON CACHE BOOL "" FORCE)
set(ASSIMP_BUILD_STL_IMPORTER    ON CACHE BOOL "" FORCE)
set(ASSIMP_BUILD_PLY_IMPORTER    ON CACHE BOOL "" FORCE)
add_subdirectory(Lib/assimp)



# Vulkan
find_package(Vulkan REQUIRED)

# Engine 和 App
add_subdirectory(Engine)
add_subdirectory(App)

file(GLOB ASSETS "assets")
file(COPY ${ASSETS} DESTINATION ${CMAKE_BINARY_DIR})
