cmake_minimum_required(VERSION 3.20)

project(FESA LANGUAGES CXX)

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

add_library(fesa_core STATIC
    src/boundary/SinglePointConstraint.cpp
    src/core/Domain.cpp
    src/element/Mitc4Element.cpp
    src/load/NodalLoad.cpp
    src/material/LinearElasticMaterial.cpp
    src/property/ShellProperty.cpp
)
target_include_directories(fesa_core PUBLIC
    ${CMAKE_CURRENT_SOURCE_DIR}/include
)

enable_testing()

add_executable(fesa_domain_tests
    tests/core/boundary_condition_test.cpp
    tests/core/domain_bootstrap_test.cpp
    tests/core/domain_model_object_test.cpp
    tests/core/domain_storage_test.cpp
    tests/core/element_definition_test.cpp
    tests/core/load_definition_test.cpp
    tests/core/material_definition_test.cpp
    tests/core/model_types_test.cpp
    tests/core/node_test.cpp
    tests/core/property_definition_test.cpp
    tests/core/step_definition_test.cpp
)
target_link_libraries(fesa_domain_tests PRIVATE fesa_core)

add_test(NAME domain.bootstrap COMMAND fesa_domain_tests)
set_tests_properties(domain.bootstrap PROPERTIES LABELS "domain;core")

add_executable(fesa_model_object_tests
    tests/boundary/boundary_base_test.cpp
    tests/element/element_base_test.cpp
    tests/element/mitc4_element_model_test.cpp
    tests/load/load_base_test.cpp
    tests/material/material_base_test.cpp
    tests/model_object_main.cpp
    tests/property/shell_property_test.cpp
)
target_link_libraries(fesa_model_object_tests PRIVATE fesa_core)

add_test(NAME model-object.base COMMAND fesa_model_object_tests)
set_tests_properties(model-object.base PROPERTIES LABELS "model-object;core")
