# Inferno Userspace Tests / Interactive Shell
# SPDX-License-Identifier: Apache-2.0
#
# Build tests:       west build -b native_posix -p
# Build interactive: west build -b native_posix -p -- -DINTERACTIVE=1

cmake_minimum_required(VERSION 3.20.0)

# Out-of-tree module roots: default to sibling checkouts in the west
# workspace; override with -DNINEP_ROOT=... / -DAEPHYR_ROOT=... when the
# modules live elsewhere.
set(NINEP_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../../9p4z" CACHE PATH "9p4z module root")
set(AEPHYR_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/../../aephyr" CACHE PATH "aephyr module root")

# Add 9p4z module (must be before find_package)
list(APPEND ZEPHYR_EXTRA_MODULES ${NINEP_ROOT})

find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
project(inferno_tests)

# Include source directory for headers
target_include_directories(app PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../src)

# Check for interactive mode
option(INTERACTIVE "Build interactive shell instead of tests" OFF)

if(INTERACTIVE)
    message(STATUS "Building INTERACTIVE shell")
    target_sources(app PRIVATE
        interactive_main.c
        interactive_stubs.c
    )
else()
    message(STATUS "Building TESTS")
    target_sources(app PRIVATE
        main.c
        test_stubs.c
        srv_test.c
        dev_test.c
        dev_srv_test.c
        ns_test.c
        rc_test.c
        ed_test.c
        integration_test.c
        attune_test.c
        gopher_test.c
        id_test.c
        vt_test.c
        reliable_test.c
        zmodem_test.c
    )
    # Æther reliable-datagram engine under test (pure logic — compiled in
    # directly; the aether mesh subsys is not enabled in the test build, so
    # its include dir isn't on the path automatically).
    target_sources(app PRIVATE
        ${AEPHYR_ROOT}/subsys/net/aether/aether_reliable.c
    )
    target_include_directories(app PRIVATE ${AEPHYR_ROOT}/include)
    # vt parser under test
    target_sources(app PRIVATE
        ${CMAKE_CURRENT_SOURCE_DIR}/../src/vt.c
    )
    # Tell vt_test.c where to find the .expect files at runtime
    target_compile_definitions(app PRIVATE
        ZTEST_DIR="${CMAKE_CURRENT_SOURCE_DIR}"
    )
    # Optional: 9P loopback tests (requires networking)
    # Build with: west build -b native_sim -- -DCONF_FILE="prj.conf;prj_loopback.conf"
    if(CONFIG_NETWORKING)
        target_sources(app PRIVATE ninep_loopback_test.c)
    endif()
endif()

# Sources under test (from main project)
target_sources(app PRIVATE
    ${CMAKE_CURRENT_SOURCE_DIR}/../src/srv.c
    ${CMAKE_CURRENT_SOURCE_DIR}/../src/dev_cons.c
    ${CMAKE_CURRENT_SOURCE_DIR}/../src/dev_env.c
    ${CMAKE_CURRENT_SOURCE_DIR}/../src/dev_proc.c
    ${CMAKE_CURRENT_SOURCE_DIR}/../src/dev_srv.c
    ${CMAKE_CURRENT_SOURCE_DIR}/../src/ns.c
    ${CMAKE_CURRENT_SOURCE_DIR}/../src/fortunes.c
    ${CMAKE_CURRENT_SOURCE_DIR}/../src/zrc.c
    ${CMAKE_CURRENT_SOURCE_DIR}/../src/zrc_pim.c
    ${CMAKE_CURRENT_SOURCE_DIR}/../src/ed.c
    ${CMAKE_CURRENT_SOURCE_DIR}/../src/cpu6502.c
    ${CMAKE_CURRENT_SOURCE_DIR}/../src/gopher.c
    ${CMAKE_CURRENT_SOURCE_DIR}/../src/net_tcp.c
    ${CMAKE_CURRENT_SOURCE_DIR}/../src/zmodem.c
)
