# 查找编译器和Python
find_program(PYTHON_EXECUTABLE python3)
if (NOT PYTHON_EXECUTABLE)
    find_program(PYTHON_EXECUTABLE python)
endif ()
if (NOT PYTHON_EXECUTABLE)
    message(FATAL_ERROR "无法找到Python解释器")
endif ()
find_program(SLANG_COMPILER slangc REQUIRED)

message(STATUS "Python解释器: ${PYTHON_EXECUTABLE}")
message(STATUS "SLANG编译器: ${SLANG_COMPILER}")

set(SHADER_PATH_FILE ${CMAKE_CURRENT_SOURCE_DIR}/scripts/shader_paths.txt)
# 删除文件
file(REMOVE ${SHADER_PATH_FILE})

function(shader_compile_target INPUT_DIR)
    # 将路径写到scripts/shader_paths.txt中
    file(WRITE ${SHADER_PATH_FILE} ${INPUT_DIR})
endfunction()

set(SLANGC_ARGS "")
if (LLGL_BUILD_RENDERER_OPENGL OR LLGL_BUILD_RENDERER_OPENGLES3 OR LLGL_BUILD_RENDERER_WEBGL)
    list(APPEND SLANGC_ARGS "--opengl")
endif ()
if (LLGL_BUILD_RENDERER_VULKAN)
    list(APPEND SLANGC_ARGS "--vulkan")
endif ()
if (LLGL_BUILD_RENDERER_DIRECT3D11)
    list(APPEND SLANGC_ARGS "--d3d11")
endif ()
if (LLGL_BUILD_RENDERER_DIRECT3D12)
    list(APPEND SLANGC_ARGS "--d3d12")
endif ()
if (LLGL_BUILD_RENDERER_METAL)
    list(APPEND SLANGC_ARGS "--metal")
endif ()
# 如果是Debug模式, 添加--debug选项
if (CMAKE_BUILD_TYPE STREQUAL "Debug")
    list(APPEND SLANGC_ARGS "--debug")
endif ()

message(STATUS "着色器编译输出路径: ${SHADER_OUTPUT_DIR}")

# 添加自定义命令, 用于编译着色器, 调用scripts/compile_shaders.py
add_custom_target(compile_shaders
    COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/scripts/compile_shaders.py --shader-list ${SHADER_PATH_FILE} --output-dir ${SHADER_OUTPUT_DIR} ${SLANGC_ARGS}
    COMMENT "编译着色器"
    VERBATIM
)