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

set(CMAKE_CONFIGURATION_TYPES "Debug" CACHE STRING "Build configurations" FORCE)

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

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

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

set(MODULE_NAME_CORE ls-atlantis-core)
set(MODULE_NAME_INTERFACE ls-atlantis-interface)

include_directories(${CMAKE_CURRENT_LIST_DIR}/include)

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

find_package(GTest REQUIRED)

################################################################
################################################################
# Module: Core
################################################################
################################################################

################################
# Source Files: Core Module
################################

set(ATLANTIS_CORE_SOURCES
        ${CMAKE_CURRENT_SOURCE_DIR}/source/core/StatusCodeOk.cpp
)

################################
# Library Creation: Core Module
################################

add_library(${MODULE_NAME_CORE} SHARED ${ATLANTIS_CORE_SOURCES})

target_link_libraries(${MODULE_NAME_CORE} PUBLIC
    ${MODULE_NAME_INTERFACE}
)

################################
# Test Files: Core Module
################################

set(ATLANTIS_CORE_TEST_SOURCES
        ${CMAKE_CURRENT_SOURCE_DIR}/test/core/StatusCodeOkTest.cpp
)

################################
# Test Case Creation: Core Module
################################

enable_testing()

add_executable(${MODULE_NAME_CORE}-tests ${ATLANTIS_CORE_TEST_SOURCES})

target_link_libraries(${MODULE_NAME_CORE}-tests PRIVATE
    ${MODULE_NAME_CORE}
    GTest::gtest_main
)

include(GoogleTest)
gtest_discover_tests(${MODULE_NAME_CORE}-tests)

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

################################
# Source Files: Interface Module
################################

set(ATLANTIS_INTERFACE_SOURCES
        ${CMAKE_CURRENT_SOURCE_DIR}/source/interface/AStatusCode.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/source/interface/IWindowApi.cpp
)

################################
# Library Creation: Interface Module
################################

add_library(${MODULE_NAME_INTERFACE} SHARED ${ATLANTIS_INTERFACE_SOURCES})
