cmake_minimum_required(VERSION 3.22.1)
project("iperf3jni")

# ──────────────────────────────────────────────────────────────────
# Paths
# ──────────────────────────────────────────────────────────────────
# CMAKE_SOURCE_DIR here is android/app/src/main/cpp/
set(IPERF_SRC_DIR ${CMAKE_SOURCE_DIR}/iperf)

# ──────────────────────────────────────────────────────────────────
# Generate iperf_config.h from our Android template, into cpp/iperf/
# (iperf.h uses #include "iperf_config.h" which resolves relative to its dir)
# ──────────────────────────────────────────────────────────────────
configure_file(
    ${IPERF_SRC_DIR}/iperf_config_android.h
    ${IPERF_SRC_DIR}/iperf_config.h
)

# ──────────────────────────────────────────────────────────────────
# Shared library: iperf3jni
# ──────────────────────────────────────────────────────────────────
add_library(iperf3jni SHARED

    # JNI bridge (directly in cpp/)
    iperf_jni.c

    # iperf3 source files (in cpp/iperf/)
    iperf/iperf_api.c
    iperf/iperf_client_api.c
    iperf/iperf_util.c
    iperf/iperf_udp.c
    iperf/iperf_tcp.c
    iperf/iperf_server_api.c
    iperf/iperf_sctp.c
    iperf/iperf_error.c
    iperf/iperf_time.c
    iperf/iperf_locale.c
    iperf/iperf_pthread.c
    iperf/iperf_auth.c
    iperf/net.c
    iperf/timer.c
    iperf/units.c
    iperf/cjson.c
    iperf/dscp.c
    iperf/tcp_info.c
)

# ──────────────────────────────────────────────────────────────────
# Include directories - iperf/ FIRST so "iperf_config.h" resolves there
# ──────────────────────────────────────────────────────────────────
target_include_directories(iperf3jni PRIVATE
    ${IPERF_SRC_DIR}             # for iperf headers (iperf_config.h, iperf.h, etc.)
    ${CMAKE_SOURCE_DIR}          # for JNI includes
)

# ──────────────────────────────────────────────────────────────────
# Compile definitions
# ──────────────────────────────────────────────────────────────────
target_compile_definitions(iperf3jni PRIVATE
    HAVE_PTHREAD
    __ANDROID__
    # Disable the main() entry point — we're a shared lib, not a standalone binary
    IPERF_JNI_BUILD=1
)

# ──────────────────────────────────────────────────────────────────
# Link libraries
# ──────────────────────────────────────────────────────────────────
find_package(Threads REQUIRED)
target_link_libraries(iperf3jni
    Threads::Threads
    log
    android
)
