cmake_minimum_required(VERSION 3.20)
project(Ben10PS2Recomp LANGUAGES C CXX)

set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)

# Opciones de compilación optimizadas para MSVC
if(MSVC)
    add_compile_options(/W3 /EHsc /utf-8 /MP /O2 /wd4102 /wd4828)
    add_definitions(-D_CRT_SECURE_NO_WARNINGS -DNOMINMAX)
endif()

# Rutas de inclusión
include_directories(
    "${CMAKE_CURRENT_SOURCE_DIR}/src"
    "${CMAKE_CURRENT_SOURCE_DIR}/runtime"
    "${CMAKE_CURRENT_SOURCE_DIR}/generated"
    "${CMAKE_CURRENT_SOURCE_DIR}/external/SDL2/include"
    "${CMAKE_CURRENT_SOURCE_DIR}/external/imgui"
    "${CMAKE_CURRENT_SOURCE_DIR}/external/imgui/backends"
)

# Shards de funciones recompiladas estáticamente de la Emotion Engine PS2
file(GLOB RECOMP_SOURCES 
    "${CMAKE_CURRENT_SOURCE_DIR}/generated/ben10_shard_*.cpp"
    "${CMAKE_CURRENT_SOURCE_DIR}/generated/ben10_dispatch.cpp"
)

# Fuentes del proyecto
set(SOURCES
    src/main.cpp
    src/ben10_launcher.cpp
    src/ben10_game_runner.cpp
    src/ps2_iso_reader.c
    runtime/ee_memory.cpp
    runtime/ee_syscalls.cpp
    ${RECOMP_SOURCES}
    external/imgui/imgui.cpp
    external/imgui/imgui_draw.cpp
    external/imgui/imgui_tables.cpp
    external/imgui/imgui_widgets.cpp
    external/imgui/backends/imgui_impl_sdl2.cpp
    external/imgui/backends/imgui_impl_opengl3.cpp
)

add_executable(Ben10_PS2Recomp ${SOURCES})

# Directorios de bibliotecas
set(SDL2_LIB_DIR "${CMAKE_CURRENT_SOURCE_DIR}/external/SDL2/lib/x64")

target_link_libraries(Ben10_PS2Recomp PRIVATE
    "${SDL2_LIB_DIR}/SDL2.lib"
    "${SDL2_LIB_DIR}/SDL2main.lib"
    opengl32
    comdlg32
    user32
    gdi32
    shell32
)

# Configurar ejecutable Windows para subsistema Windows
set_target_properties(Ben10_PS2Recomp PROPERTIES
    WIN32_EXECUTABLE TRUE
    LINK_FLAGS "/ENTRY:mainCRTStartup"
)

# Copiar SDL2.dll al directorio de salida
add_custom_command(TARGET Ben10_PS2Recomp POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different
        "${SDL2_LIB_DIR}/SDL2.dll"
        "$<TARGET_FILE_DIR:Ben10_PS2Recomp>"
)
