Files
FaceRecognition/libfacedetection/CMakeLists.txt
2026-07-11 18:11:03 +08:00

70 lines
2.9 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================================
# libfacedetection —— 独立动态库 (SHARED)
# 对外仅导出 facedetect_cnn (由 FACEDETECTION_EXPORT 标记)。
# AVX/NEON 内联函数代码在此目标内编译,对应编译标志也只加到这里。
# ============================================================================
add_library(facedetection SHARED
src/facedetectcnn.cpp
src/facedetectcnn-model.cpp
src/facedetectcnn-data.cpp
)
# 对外头文件目录PUBLIC使用本库的目标会自动获得该 include 路径)
target_include_directories(facedetection PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
)
# 动态库符号可见性:默认隐藏,仅 FACEDETECTION_EXPORT 标记的符号导出。
# CMake 会为 SHARED 目标自动定义 facedetection_EXPORTS配合 facedetection_export.h 使用。
set_target_properties(facedetection PROPERTIES
POSITION_INDEPENDENT_CODE ON
CXX_VISIBILITY_PRESET hidden
VISIBILITY_INLINES_HIDDEN ON
)
# ----------------------------------------------------------------------------
# SIMD 加速AVX/NEON 内联函数需要对应编译标志 + 宏定义
# ----------------------------------------------------------------------------
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
target_compile_options(facedetection PRIVATE -O3)
if(ENABLE_AVX512)
target_compile_options(facedetection PRIVATE
-mavx512f -mavx512cd -mavx512dq -mavx512bw -mavx512vl -mfma)
target_compile_definitions(facedetection PRIVATE _ENABLE_AVX512)
message(STATUS "libfacedetection: SIMD = AVX512")
elseif(ENABLE_AVX2)
target_compile_options(facedetection PRIVATE -mavx2 -mfma)
target_compile_definitions(facedetection PRIVATE _ENABLE_AVX2)
message(STATUS "libfacedetection: SIMD = AVX2")
elseif(ENABLE_NEON)
target_compile_definitions(facedetection PRIVATE _ENABLE_NEON)
# AArch64 下 NEON 默认开启无需标志32 位 ARM 需要 -mfpu=neon。
if(CXX_HAS_MFPU_NEON)
target_compile_options(facedetection PRIVATE -mfpu=neon)
endif()
message(STATUS "libfacedetection: SIMD = NEON")
else()
message(STATUS "libfacedetection: SIMD disabled")
endif()
elseif(MSVC)
target_compile_options(facedetection PRIVATE /O2)
if(ENABLE_AVX512)
target_compile_options(facedetection PRIVATE /arch:AVX512)
target_compile_definitions(facedetection PRIVATE _ENABLE_AVX512)
elseif(ENABLE_AVX2)
target_compile_options(facedetection PRIVATE /arch:AVX2)
target_compile_definitions(facedetection PRIVATE _ENABLE_AVX2)
elseif(ENABLE_NEON)
# MSVC for ARM: NEON 默认开启,无需额外标志。
target_compile_definitions(facedetection PRIVATE _ENABLE_NEON)
endif()
endif()
# OpenMP加速卷积运算可选
if(OpenMP_FOUND)
target_link_libraries(facedetection PRIVATE OpenMP::OpenMP_CXX)
endif()