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)

include_directories(${CMAKE_CURRENT_LIST_DIR}/include)

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

find_package(GTest REQUIRED)

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

set(ATLANTIS_CORE_SOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/source/IWindowApi.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/source/StatusCode.cpp
)

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

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

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

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

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

enable_testing()

add_executable(atlantis-core-tests ${ATLANTIS_CORE_TEST_SOURCES})

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

include(GoogleTest)
gtest_discover_tests(atlantis-core-tests)
