cmake_minimum_required(VERSION 3.15...3.50)
set(CMAKE_CXX_STANDARD 17)

list(APPEND CMAKE_PREFIX_PATH  "../Libraries/")
list(APPEND CMAKE_PREFIX_PATH  "../Libraries/glew-2.3.1")
list(APPEND CMAKE_PREFIX_PATH  "C:/Program Files (x86)/GLFW")

project(
  HydraEngine
  VERSION 1.0
  LANGUAGES CXX)

  file(GLOB_RECURSE SOURCES
    source/ *.h
    source/ *.cpp    
  )

add_compile_definitions(_EXPORTING)

add_library(HydraEngine SHARED ${SOURCES})



#********** GLFW **********
find_package(glfw3 3.5.0 REQUIRED)
include_directories(HydraEngine "C:/Program Files (x86)/GLFW/include")
target_link_libraries(HydraEngine PRIVATE glfw)
#********** Glew  **********
find_package(GLEW REQUIRED)
include_directories(HydraEngine ${GLEW_INCLUDE_DIRS})
target_link_libraries(HydraEngine PRIVATE ${GLEW_LIBRARIES})
#********** GLM  **********
find_package(glm CONFIG REQUIRED)
include_directories(HydraClient "${CMAKE_SOURCE_DIR}/Libraries/glm")
#********** AssImp  **********
include_directories(HydraEngine, "../Libraries/assimp/include/")
target_link_libraries(HydraEngine PRIVATE "c:/Code/HydraV3/Libraries/assimp/lib/Debug/assimp-vc143-mtd.lib")
#********** OpenGL  **********
find_package(OpenGL REQUIRED)
target_link_libraries(HydraEngine PRIVATE OpenGL32)
#********** STB Image ********
include_directories(HydraEngine, "../Libraries/stb-master/")

include_directories(HydraClient "${CMAKE_SOURCE_DIR}/HydraEngine/includes")
 if(WIN32)
    add_custom_command(TARGET HydraEngine POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy -t $<TARGET_FILE_DIR:HydraEngine> $<TARGET_RUNTIME_DLLS:HydraEngine>
        COMMAND_EXPAND_LISTS
    )
endif()





# set(GLSL_VALIDATOR "glslangValidator")

# file(GLOB_RECURSE GLSL_SOURCE_FILES
#   "source/ShaderFiles/*.frag"
#   "source/ShaderFiles/*.vert"
#   "source/ShaderFiles/*.comp"
#   "source/ShaderFiles/*.geom"
#   )

#   foreach(GLSL ${GLSL_SOURCE_FILES})
# get_filename_component(FILE_NAME ${GLSL} NAME)

# set(SPIRV "${PROJECT_BINARY_DIR}/shaders/${FILE_NAME}.spv")
# #set(COMMAND_STRING "${GLSL_VALIDATOR} -V ${GLSL} -o ${SPIRV}")
# set(COMMAND_STRING "${GLSL_VALIDATOR} -V ${GLSL} -o ${SPIRV}")
# add_custom_command(
#   OUTPUT ${SPIRV}
#   COMMAND ${CMAKE_COMMAND} -E make_directory "${PROJECT_BINARY_DIR}/shaders/"  
#   COMMAND ${GLSL_VALIDATOR} -V ${GLSL} -o ${SPIRV}
#   DEPENDS ${GLSL})
# list(APPEND SPIRV_BINARY_FILES ${SPIRV})
# endforeach(GLSL)

# add_custom_target(
#     Shaders 
#     DEPENDS ${SPIRV_BINARY_FILES}
#     )

# add_dependencies(HydraEngine Shaders)

# add_custom_command(TARGET HydraEngine POST_BUILD
#     COMMAND ${CMAKE_COMMAND} -E make_directory "$<TARGET_FILE_DIR:HydraEngine>/shaders/"
#     COMMAND ${CMAKE_COMMAND} -E copy_directory
#         "${PROJECT_BINARY_DIR}/shaders"
#         "$<TARGET_FILE_DIR:HydraEngine>/shaders"
#         )