cmake_minimum_required(VERSION 3.10)
project(OpenGLProject C)
set(CMAKE_C_STANDARD 11)

# MinGW-hez szükséges a windres
if(MINGW)
    enable_language(RC)
    set(CMAKE_RC_COMPILER windres)
endif()

# =============================================================================
# SOURCES
# =============================================================================
set(SOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/main.c
    ${CMAKE_CURRENT_SOURCE_DIR}/draw.c
    ${CMAKE_CURRENT_SOURCE_DIR}/glad/glad.c
    ${CMAKE_CURRENT_SOURCE_DIR}/elf_dwarf.c
    ${CMAKE_CURRENT_SOURCE_DIR}/svd_parser.c
    ${CMAKE_CURRENT_SOURCE_DIR}/ui_callbacks.c
    ${CMAKE_CURRENT_SOURCE_DIR}/armdisasm.c
    ${CMAKE_CURRENT_SOURCE_DIR}/thumb2_disasm.c
    ${CMAKE_CURRENT_SOURCE_DIR}/breakpoints.c
    ${CMAKE_CURRENT_SOURCE_DIR}/fault_analyze.c
    ${CMAKE_CURRENT_SOURCE_DIR}/step.c
    ${CMAKE_CURRENT_SOURCE_DIR}/serial_comm.c
    ${CMAKE_CURRENT_SOURCE_DIR}/dap.c
    ${CMAKE_CURRENT_SOURCE_DIR}/flm.c
    ${CMAKE_CURRENT_SOURCE_DIR}/probe.c
    ${CMAKE_CURRENT_SOURCE_DIR}/mcu_id.c
    ${CMAKE_CURRENT_SOURCE_DIR}/pdsc_db.c
    ${CMAKE_CURRENT_SOURCE_DIR}/pdsc_seq.c
    ${CMAKE_CURRENT_SOURCE_DIR}/pdsc_xml.c
    ${CMAKE_CURRENT_SOURCE_DIR}/stm32_flash.c
    ${CMAKE_CURRENT_SOURCE_DIR}/resources.rc
    ${CMAKE_CURRENT_SOURCE_DIR}/plot_view.c
    ${CMAKE_CURRENT_SOURCE_DIR}/stack_unwind.c
    ${CMAKE_CURRENT_SOURCE_DIR}/target_algo.c
)

add_executable(OpenGLProject WIN32 ${SOURCES})

# =============================================================================
# INCLUDE PATHS
# =============================================================================

target_include_directories(OpenGLProject PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}
    ${CMAKE_CURRENT_SOURCE_DIR}/glad
    ${CMAKE_CURRENT_SOURCE_DIR}/GLFW
    ${CMAKE_CURRENT_SOURCE_DIR}/KHR
    C:/msys64/mingw64/include/GLFW
)

# =============================================================================
# LIBRARIES
# =============================================================================
find_package(OpenGL REQUIRED)

set(GLFW_LIB C:/msys64/mingw64/lib/libglfw3.a)

target_link_directories(OpenGLProject PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/lib
)
target_link_libraries(OpenGLProject PRIVATE
    ${GLFW_LIB}
    ${CMAKE_CURRENT_SOURCE_DIR}/lib/libusb-1.0.a
    OpenGL::GL
    opengl32
    gdi32
    user32
    kernel32
    ole32
    shell32
    setupapi
    hid
    cfgmgr32
    comctl32
    winusb
)

# Static runtime — egyetlen hordozható exe, nincs DLL függőség
target_link_options(OpenGLProject PRIVATE -static -static-libgcc)

# =============================================================================
# BUILD TYPE alapértelmezés
# =============================================================================
if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Debug CACHE STRING "Build type" FORCE)
endif()

target_compile_options(OpenGLProject PRIVATE
    $<$<CONFIG:Debug>:   -g -O0 -Wall -Wextra -Wno-format-truncation -Wno-unused-function>
    $<$<CONFIG:Release>: -O2 -Wall -Wno-format-truncation -Wno-unused-function>
)
