cmake_minimum_required(VERSION 3.12)

# Nome del progetto
project(YourProjectName)

# Imposta la versione di C++
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -fPIC")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pthread -fPIC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")

# Opzione per selezionare la configurazione
set(CONFIG_TYPE "STD" CACHE STRING "Select which configuration to build")
set_property(CACHE CONFIG_TYPE PROPERTY STRINGS "STD" "ALT1" "ALT2" "ALT3" "ALT4")



# Aggiungi il direttorio src e utils ai percorsi di ricerca dell'header
include_directories(src utils)

# Configurare le definizioni in base all'opzione selezionata
if (CONFIG_TYPE STREQUAL "STD")
    add_definitions(-DUSE_STD)
elseif (CONFIG_TYPE STREQUAL "ALT1")
    add_definitions(-DUSE_ALT1)
endif()

# Aggiungi i filw sorgente per l'eseguibile compilato
set(COMPILED_SOURCES
    src/compiledVersion.cpp
    src/utils/libraries/dsyevj3.cc
    src/utils/Matrix3D.cc
    src/utils/Matrix3DAnalysis.cc
    src/utils/ImageLoader.cc
    src/utils/MinHeap.cc
    src/utils/Point3D.hh
    src/utils/Graph.cc
)



# Trova OpenCV
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})

# Trova le librerie di OpenGL, GLEW e GLFW
find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED)
find_package(glfw3 3.3 REQUIRED)
# Trova GDAL
find_package(GDAL REQUIRED)
include_directories(${GDAL_INCLUDE_DIRS})
message(STATUS "GDAL include dirs: ${GDAL_INCLUDE_DIRS}")
message(STATUS "GDAL libraries: ${GDAL_LIBRARIES}")

# Crea una libreria statica per GLAD
add_library(glad STATIC src/utils/glad/src/gl.c)
target_include_directories(glad PUBLIC src/utils/glad/include)

# Crea l'eseguibile per il compilato
add_executable(compiledVersion ${COMPILED_SOURCES})
target_link_libraries(compiledVersion ${OPENGL_LIBRARIES} ${GLEW_LIBRARIES} glfw ${OpenCV_LIBS} gdal ${GDAL_LIBRARIES} glad stdc++fs )
