cmake_minimum_required(VERSION 3.28)
project(ls-atlantis-engine VERSION 0.0.1 LANGUAGES CXX)

################################
# Compiler Settings
################################

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

################################
# Global Project Settings
################################

set(MODULE_NAME_CYCLE ls-atlantis-cycle)
set(MODULE_NAME_FACTORY ls-atlantis-factory)
set(MODULE_NAME_INTERFACE ls-atlantis-interface)
set(MODULE_NAME_MESSAGING ls-atlantis-messaging)
set(MODULE_NAME_WINDOW ls-atlantis-window)

set(CMAKE_DEBUG_POSTFIX -d)

include_directories(${CMAKE_CURRENT_LIST_DIR}/include)
include_directories(${CMAKE_CURRENT_LIST_DIR}/)

################################
# Dependencies
################################

find_package(GTest REQUIRED)
find_package(ls-std REQUIRED)
find_package(SDL3 REQUIRED)

enable_testing()
include(GoogleTest)

if (WIN32)
    file(GLOB LS_STD_DLLS_DEBUG "${ls-std_LIB_DIRS_DEBUG}/*.dll")
    file(GLOB LS_STD_DLLS_RELEASE "${ls-std_LIB_DIRS_RELEASE}/*.dll")
endif ()

################################################################
################################################################
# Module: Interface
################################################################
################################################################

include(cmake/ls-atlantis-interface.cmake)
include(cmake/ls-atlantis-interface-tests.cmake)

################################################################
################################################################
# Module: Messaging
################################################################
################################################################

include(cmake/ls-atlantis-messaging.cmake)
include(cmake/ls-atlantis-messaging-tests.cmake)

################################################################
################################################################
# Module: Window
################################################################
################################################################

include(cmake/ls-atlantis-window.cmake)
include(cmake/ls-atlantis-window-tests.cmake)

################################################################
################################################################
# Module: Factory
################################################################
################################################################

include(cmake/ls-atlantis-factory.cmake)
include(cmake/ls-atlantis-factory-tests.cmake)

################################################################
################################################################
# Module: Cycle
################################################################
################################################################

include(cmake/ls-atlantis-cycle.cmake)
include(cmake/ls-atlantis-cycle-tests.cmake)

################################################################
################################################################
# Example
################################################################
################################################################

include(cmake/ls-atlantis-example.cmake)

################################################################
################################################################
# All Tests
################################################################
################################################################

add_custom_target(ls-atlantis-tests
    DEPENDS
        ${MODULE_NAME_CYCLE}-tests
        ${MODULE_NAME_FACTORY}-tests
        ${MODULE_NAME_INTERFACE}-tests
        ${MODULE_NAME_MESSAGING}-tests
        ${MODULE_NAME_WINDOW}-tests
)
