cmake_minimum_required(VERSION 3.22.1)
project("native-lib")

enable_language(C CXX ASM)

if(${CMAKE_ANDROID_ARCH_ABI} STREQUAL "arm64-v8a")
    set(ARCH "arm64")
endif()
set(SHADOWHOOK_DIR ${CMAKE_CURRENT_SOURCE_DIR}/shadowhook)

add_definitions(-DSH_CONFIG_ARCH_ARM64)
add_definitions(-DSHADOWHOOK_DISABLE_JNI_ONLOAD)
list(FILTER SHADOWHOOK_SOURCES EXCLUDE REGEX "shadowhook/sh_jni.c")

file(GLOB
        SRC
        ${SHADOWHOOK_DIR}/*.c
        ${SHADOWHOOK_DIR}/arch/${ARCH}/*.c
        ${SHADOWHOOK_DIR}/arch/${ARCH}/*.S
        ${SHADOWHOOK_DIR}/common/*.c
        ${SHADOWHOOK_DIR}/nothing/*.c
        ${SHADOWHOOK_DIR}/third_party/xdl/*.c
        ${CMAKE_CURRENT_SOURCE_DIR}/Modules/*.cpp
        ${CMAKE_CURRENT_SOURCE_DIR}/Modules/Combat/*.cpp
)

# =============================================
# hev-socks5-tunnel (built as static library)
# =============================================
set(HEV_DIR ${CMAKE_CURRENT_SOURCE_DIR}/hev-socks5-tunnel)
set(HEV_TASK_DIR ${HEV_DIR}/third-part/hev-task-system)
set(LWIP_DIR ${HEV_DIR}/third-part/lwip)
set(YAML_DIR ${HEV_DIR}/third-part/yaml)

file(GLOB_RECURSE HEV_SOCKS5_SOURCES ${HEV_DIR}/src/*.c)
list(FILTER HEV_SOCKS5_SOURCES EXCLUDE REGEX ".*tunnel-freebsd\\.c$")
list(FILTER HEV_SOCKS5_SOURCES EXCLUDE REGEX ".*tunnel-macos\\.c$")
list(FILTER HEV_SOCKS5_SOURCES EXCLUDE REGEX ".*tunnel-netbsd\\.c$")
list(FILTER HEV_SOCKS5_SOURCES EXCLUDE REGEX ".*tunnel-windows\\.c$")
list(FILTER HEV_SOCKS5_SOURCES EXCLUDE REGEX ".*wintun\\.c$")

file(GLOB HEV_TASK_SOURCES ${HEV_TASK_DIR}/src/*.c ${HEV_TASK_DIR}/src/*.S)
file(GLOB_RECURSE LWIP_SOURCES ${LWIP_DIR}/src/core/*.c ${LWIP_DIR}/src/core/ipv4/*.c ${LWIP_DIR}/src/core/ipv6/*.c ${LWIP_DIR}/src/api/*.c ${LWIP_DIR}/src/netif/*.c)
file(GLOB_RECURSE LWIP_PORT_SOURCES ${LWIP_DIR}/src/ports/*.c)
file(GLOB YAML_SOURCES ${YAML_DIR}/src/*.c)

add_library(hev-socks5-tunnel STATIC
    ${HEV_SOCKS5_SOURCES}
    ${HEV_TASK_SOURCES}
    ${LWIP_SOURCES}
    ${LWIP_PORT_SOURCES}
    ${YAML_SOURCES}
)

target_compile_definitions(hev-socks5-tunnel PRIVATE
    FD_SET_DEFINED
    SOCKLEN_T_DEFINED
    ENABLE_LIBRARY
    COMMIT_ID=\"unknown\"
)

target_include_directories(hev-socks5-tunnel PRIVATE
    ${HEV_DIR}/include
    ${HEV_DIR}/src
    ${HEV_DIR}/src/misc
    ${HEV_DIR}/src/core/include
    ${HEV_DIR}/src/core/src
    ${HEV_TASK_DIR}/include
    ${LWIP_DIR}/src/include
    ${LWIP_DIR}/src/include/lwip
    ${LWIP_DIR}/src/ports/include
    ${YAML_DIR}/include
)

# =============================================
# native-lib (your original code)
# =============================================
add_library(native-lib SHARED
        main.cpp
        hooks/ActorHooks/AttackHooks.cpp
        Utils/Actor.cpp
        Utils/FunctionUtils.cpp
        Utils/GameMode.cpp
        hooks/ActorHooks/ActorTick.cpp
        hooks/Hooks.cpp
        Utils/FunctionsAddress.cpp
        ${SRC}
)

target_include_directories(native-lib PRIVATE
        ${CMAKE_CURRENT_SOURCE_DIR}
        ${SHADOWHOOK_DIR}
        ${SHADOWHOOK_DIR}/arch/${ARCH}
        ${SHADOWHOOK_DIR}/common
        ${SHADOWHOOK_DIR}/third_party/bsd
        ${SHADOWHOOK_DIR}/third_party/lss
        ${SHADOWHOOK_DIR}/third_party/xdl
        ${SHADOWHOOK_DIR}/include
)

target_link_libraries(native-lib
        hev-socks5-tunnel
        log
        android
)
