cmake_minimum_required(VERSION 3.0)

# 获取git hash
message(STATUS "CMAKE_CURRENT_SOURCE_DIR= ${CMAKE_CURRENT_SOURCE_DIR}")
execute_process(
  COMMAND git submodule foreach git log -1 --format=%H   
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
  OUTPUT_VARIABLE COMMIT_HASH
)

# 判断是否获取到了git hash值(规避如因项目目录非git repository等原因产生的获取异常而中断build)
string(LENGTH ${COMMIT_HASH} OUTPUT_VARIABLE COMMIT_HASH_LENGTH)
string(COMPARE LESS ${COMMIT_HASH_LENGTH} "40" OUTPUT_VARIABLE GIT_HASH_COMPARISON_RESULT)
if(NOT ${GIT_HASH_COMPARISON_RESULT})
    string(REPLACE "\n" ";" COMMIT_HASH "${COMMIT_HASH}")
    list(GET COMMIT_HASH 1 COMMIT_HASH)
    string (REGEX REPLACE "[\n\t\r]" "" COMMIT_HASH ${COMMIT_HASH})
    #string(SUBSTRING ${COMMIT_HASH} 0 7 COMMIT_HASH)
    message(STATUS "git hash= ${COMMIT_HASH}")

    # 获取git分支名称
    execute_process(
      COMMAND git submodule foreach git branch -r --contains ${COMMIT_HASH}
      WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
      OUTPUT_VARIABLE CURRENT_BRANCH
    )

    string(REPLACE "\n" ";" CURRENT_BRANCH "${CURRENT_BRANCH}")
    list(GET CURRENT_BRANCH 1 CURRENT_BRANCH)
    string (REGEX REPLACE "origin/" "" CURRENT_BRANCH ${CURRENT_BRANCH} "")
    string (REGEX REPLACE "[\n\t\r]" "" CURRENT_BRANCH ${CURRENT_BRANCH} "")
    string(SUBSTRING ${CURRENT_BRANCH} 0 8 CURRENT_BRANCH)
    message(STATUS "git current branch = ${CURRENT_BRANCH}")

    # 获取生成时间
    string(TIMESTAMP COMPILE_TIME "%y%m%d")
    string (REGEX REPLACE "[\n\t\r]" "" COMPILE_TIME ${COMPILE_TIME})
    string(REGEX REPLACE "\"" "" COMPILE_TIME ${COMPILE_TIME})

    # 生成版本信息
    set(GIT_VERSION "${CURRENT_BRANCH}_${COMMIT_HASH}_${COMPILE_TIME}")
    message(STATUS "version info = ${GIT_VERSION}")

    # 去除空格
    string(REGEX REPLACE "[ ]+" "" GIT_VERSION "${GIT_VERSION}")
else()
  message(AUTHOR_WARNING "Unable to get git hash, but build will continue.")

endif()

# 保存变量到文件
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.h.in ${CMAKE_CURRENT_SOURCE_DIR}/version.h @ONLY)

#设置项目名称与语言类别(必)
project(clash-bridge C)


set(CMAKE_POSITION_INDEPENDENT_CODE on)
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -O3")

set(GO_OUTPUT_BASE ${GO_OUTPUT}/${FLAVOR_NAME})

if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug")
    set(GO_OUTPUT_BASE "${GO_OUTPUT_BASE}Debug")
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
    set(GO_OUTPUT_BASE "${GO_OUTPUT_BASE}Release")
elseif ("${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo")
    set(GO_OUTPUT_BASE "${GO_OUTPUT_BASE}Release")
else ()
    message(FATAL_ERROR "Unknown build type ${CMAKE_BUILD_TYPE}")
endif ()

include_directories("${GO_OUTPUT_BASE}/${CMAKE_ANDROID_ARCH_ABI}")
include_directories("${GO_SOURCE}")

link_directories("${GO_OUTPUT_BASE}/${CMAKE_ANDROID_ARCH_ABI}")

add_library(bridge SHARED main.c jni_helper.c bridge_helper.c)
target_link_libraries(bridge log clash)
# Ensure 16 KB page alignment for Android 15+ compatibility
target_link_options(bridge PRIVATE "-Wl,-z,max-page-size=16384")
