120 lines
4.0 KiB
CMake
120 lines
4.0 KiB
CMake
# -----------------------------------------------------------------
|
||
# 1. 项目基本配置
|
||
# -----------------------------------------------------------------
|
||
cmake_minimum_required(VERSION 3.18)
|
||
|
||
project(FaceSDK CXX)
|
||
|
||
# -----------------------------------------------------------------
|
||
# 2. 编译选项
|
||
# -----------------------------------------------------------------
|
||
|
||
# (关键!) 设定C++标准为 C++17
|
||
set(CMAKE_CXX_STANDARD 17)
|
||
set(CMAKE_CXX_STANDARD_REQUIRED True)
|
||
|
||
if(ANDROID)
|
||
# (关键!) 告诉编译器源文件使用UTF-8编码,避免中文乱码警告
|
||
add_compile_options(-finput-charset=UTF-8)
|
||
|
||
# 其他安卓特有的编译选项
|
||
add_compile_options(-fexceptions -frtti)
|
||
endif()
|
||
|
||
# -----------------------------------------------------------------
|
||
# 3. 依赖项: OpenCV
|
||
# -----------------------------------------------------------------
|
||
# 注意: OpenCV_DIR 应该由您的 VSCode 'settings.json' 文件传入。
|
||
# 我们保留一个默认路径作为备用。
|
||
if(NOT OpenCV_DIR)
|
||
set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/third_party/opencv_android/sdk/native/jni)
|
||
message(STATUS "OpenCV_DIR not set, defaulting to: ${OpenCV_DIR}")
|
||
endif()
|
||
|
||
find_package(OpenCV REQUIRED)
|
||
|
||
if(NOT OpenCV_FOUND)
|
||
message(FATAL_ERROR "OpenCV NOT FOUND. Set OpenCV_DIR in settings.json to the 'sdk/native/jni' directory.")
|
||
else()
|
||
message(STATUS "OpenCV FOUND: ${OpenCV_LIBS}")
|
||
endif()
|
||
|
||
# -----------------------------------------------------------------
|
||
# 4. 依赖项: ONNX Runtime (ORT)
|
||
# -----------------------------------------------------------------
|
||
message(STATUS "Configuring ONNX Runtime (ORT)...")
|
||
|
||
# 定义ORT的根目录 (基于您的 "third_party" 结构)
|
||
set(ORT_ROOT_DIR ${CMAKE_SOURCE_DIR}/third_party/onnxruntime)
|
||
set(ORT_INCLUDE_DIR ${ORT_ROOT_DIR}/include)
|
||
|
||
if(NOT EXISTS ${ORT_INCLUDE_DIR})
|
||
message(FATAL_ERROR "ONNX Runtime 'include' directory not found at ${ORT_INCLUDE_DIR}")
|
||
endif()
|
||
|
||
# 确定库文件路径
|
||
if(ANDROID)
|
||
# ANDROID_ABI 由 NDK 工具链自动设置 (e.g., "arm64-v8a")
|
||
message(STATUS "CMake: Configuring for Android ABI: ${ANDROID_ABI}")
|
||
set(ORT_LIBRARY_PATH ${ORT_ROOT_DIR}/lib/${ANDROID_ABI}/libonnxruntime.so)
|
||
else()
|
||
# 为 Windows 本地测试配置 (如果需要)
|
||
message(STATUS "CMake: Configuring for non-Android (e.g., Windows)")
|
||
set(ORT_LIBRARY_PATH ${ORT_ROOT_DIR}/lib/win-x64/onnxruntime.lib)
|
||
endif()
|
||
|
||
if(NOT EXISTS ${ORT_LIBRARY_PATH})
|
||
message(FATAL_ERROR "ONNX Runtime library not found. Expected at: ${ORT_LIBRARY_PATH}")
|
||
endif()
|
||
|
||
# 创建 IMPORTED 库目标
|
||
add_library(onnxruntime SHARED IMPORTED)
|
||
set_target_properties(onnxruntime PROPERTIES
|
||
IMPORTED_LOCATION "${ORT_LIBRARY_PATH}"
|
||
)
|
||
|
||
message(STATUS "ORT Include Dir: ${ORT_INCLUDE_DIR}")
|
||
message(STATUS "ORT Library: ${ORT_LIBRARY_PATH}")
|
||
|
||
|
||
# -----------------------------------------------------------------
|
||
# 5. 定义我们的 JNI 库
|
||
# -----------------------------------------------------------------
|
||
message(STATUS "Defining face_sdk_jni library...")
|
||
|
||
add_library(face_sdk_jni SHARED
|
||
src/face_pipeline.cpp
|
||
src/face_sdk_api.cpp
|
||
src/face_sdk_jni.cpp
|
||
)
|
||
|
||
# -----------------------------------------------------------------
|
||
# 6. 包含目录
|
||
# -----------------------------------------------------------------
|
||
target_include_directories(face_sdk_jni PUBLIC
|
||
# 公开头文件 (include/face_sdk.h)
|
||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||
|
||
# 内部头文件 (src/face_pipeline.h)
|
||
${CMAKE_CURRENT_SOURCE_DIR}/src
|
||
|
||
# 依赖项的头文件
|
||
${OpenCV_INCLUDE_DIRS}
|
||
${ORT_INCLUDE_DIR}
|
||
)
|
||
|
||
# -----------------------------------------------------------------
|
||
# 7. 链接库
|
||
# -----------------------------------------------------------------
|
||
target_link_libraries(face_sdk_jni
|
||
# OpenCV 库
|
||
${OpenCV_LIBS}
|
||
|
||
# ONNX Runtime 库
|
||
onnxruntime
|
||
|
||
# Android NDK 库
|
||
log # 用于 __android_log_print
|
||
android # 用于 AConfiguration, AAssetManager 等
|
||
jnigraphics # 用于 Android Bitmap 操作
|
||
) |