You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

189 lines
6.2 KiB

# Find the Vision Labs Face SDK.
# Sets the usual variables expected for find_package scripts:
# FSDK_INCLUDE_DIRS - headers location
# FSDK_LIBRARIES - libraries to link against
# FSDK_RUNTIME_LIBRARIES - runtime libraries
# FSDK_FOUND - true if Face SDK was found.
# This is the directory where the Face SDK is located.
# By default FSDKDIR environment variable value is taken.
set(FSDK_ROOT "$ENV{FSDKDIR}" CACHE PATH "Vision Labs Face SDK root directory.")
# Look for headers.
find_path(FSDK_INCLUDE_DIRS
NAMES fsdk/FaceEngine.h fsdk/Types.h fsdk/Def.h
HINTS $ENV{FSDKDIR}
PATHS ${FSDK_ROOT}
PATH_SUFFIXES include)
# iOS framework have different header structure: not flower/header.h, but Headers/header.h. But when you link against framework it's name is used as prefix for includes, so you still use its includes as flower/header.h in c++ code.
# Now the reason to set this variable is that its used for every other platform and its easier to fake it than rewrite most cmakelists
if(IOS OR ANDROID)
set(FSDK_INCLUDE_DIRS ${FSDK_ROOT}/include)
endif()
#message(STATUS "FSDK: FSDK_INCLUDE_DIRS = ${FSDK_INCLUDE_DIRS}.")
if(WIN32)
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".dll")
elseif(APPLE AND NOT IOS) # mac os
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".dylib")
else()
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
endif()
# Determine compiler version and architecture.
# ios has no architechture/compiler branching, because only can only use clang
# and if you need multiple architechtures there still compiled into single universal binary
if(NOT IOS)
if(MSVC10)
set(FSDK_COMPILER_NAME vs2010)
elseif(MSVC11)
set(FSDK_COMPILER_NAME vs2012)
elseif(MSVC12)
set(FSDK_COMPILER_NAME vs2013)
elseif(MSVC14)
set(FSDK_COMPILER_NAME vs2015)
elseif(CMAKE_COMPILER_IS_GNUCXX)
set(FSDK_COMPILER_NAME gcc4)
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(FSDK_COMPILER_NAME clang)
elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
set(FSDK_COMPILER_NAME clang)
else()
message(SEND_ERROR "[FindFSDK] Unsupported compiler: ${FSDK_COMPILER_NAME}")
endif()
if(ANDROID)
set(FSDK_TARGET_NAME ${ANDROID_ABI})
elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
set(FSDK_TARGET_NAME x64)
else()
set(FSDK_TARGET_NAME x86)
endif()
# What version of Face SDK to use.
set(FSDK_LIB_PREFIX ${FSDK_COMPILER_NAME}/${FSDK_TARGET_NAME})
endif()
if(IOS)
# List of all SDK libraries.
set(FSDK_LIB_NAMES fsdk)
else()
# List of all SDK libraries.
set(FSDK_LIB_NAMES FaceEngineSDK)
endif()
if(IOS)
set(FSDK_LIB_PATH_SUFFIX Frameworks)
set(FSDK_BIN_PATH_SUFFIX Frameworks)
else()
set(FSDK_LIB_PATH_SUFFIX lib/${FSDK_LIB_PREFIX})
set(FSDK_BIN_PATH_SUFFIX bin/${FSDK_LIB_PREFIX})
endif()
macro(find_fsdk_library LIBRARY_VAR LIBRARY_NAME)
find_library(${LIBRARY_VAR}
NAMES ${LIBRARY_NAME}
HINTS $ENV{FSDKDIR}
PATHS ${FSDK_ROOT}
PATH_SUFFIXES ${FSDK_LIB_PATH_SUFFIX}
NO_DEFAULT_PATH
)
endmacro()
if(IOS)
find_fsdk_library(FSDK_LIBRARY_RELEASE fsdk)
find_fsdk_library(FSDK_LIBRARY_DEBUG fsdkd)
elseif(EMSCRIPTEN)
if(EXISTS "${FSDK_ROOT}/include/fsdk/FaceEngine.h")
message(STATUS "[FindFSDK]:${FSDK_ROOT}/include/fsdk/FaceEngine.h exists!")
set(FSDK_INCLUDE_DIRS ${FSDK_ROOT}/include)
else()
message(ERROR "[FindFSDK]:${FSDK_ROOT}/include/fsdk/FaceEngine.h not found...")
endif()
if(EXISTS "${FSDK_ROOT}/lib/clang/x86/libFaceEngineSDK.bc")
message(STATUS "[FindFSDK]: ${FSDK_ROOT}/lib/clang/x86/libFaceEngineSDK.bc exists!")
list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libvlc.bc")
list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libflower.bc")
list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libSdkCore.bc")
list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libDetector.bc")
list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libEstimator.bc")
list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libLicensing.bc")
list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libMTCNN.bc")
list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libOpticalFlow.bc")
list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libWarper.bc")
list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libFaceEngineSDK.bc")
else()
message(ERROR "[FindFSDK]: ${FSDK_ROOT}/lib/clang/x86/libFaceEngineSDK.bc not found...")
endif()
else()
find_fsdk_library(FSDK_LIBRARY_RELEASE FaceEngineSDK)
find_fsdk_library(FSDK_LIBRARY_DEBUG FaceEngineSDKd)
endif()
if(WIN32)
macro(find_fsdk_runtime_library LIBRARY_VAR LIBRARY_NAME)
find_library(${LIBRARY_VAR}
NAMES ${LIBRARY_NAME}
HINTS $ENV{FSDKDIR}
PATHS ${FSDK_ROOT}
PATH_SUFFIXES ${FSDK_BIN_PATH_SUFFIX}
NO_DEFAULT_PATH
)
endmacro()
find_fsdk_runtime_library(FSDK_RUNTIME_LIBRARY_RELEASE FaceEngineSDK)
find_fsdk_runtime_library(FSDK_RUNTIME_LIBRARY_DEBUG FaceEngineSDKd)
endif()
#link components
if(FSDK_LIBRARY_RELEASE AND FSDK_LIBRARY_DEBUG)
set(FSDK_LIBRARIES optimized ${FSDK_LIBRARY_RELEASE} debug ${FSDK_LIBRARY_DEBUG})
elseif(FSDK_LIBRARY_DEBUG)
set(FSDK_LIBRARIES ${FSDK_LIBRARY_DEBUG})
message(STATUS "[FindFSDK]: Release libraries were not found")
elseif(FSDK_LIBRARY_RELEASE)
set(FSDK_LIBRARIES ${FSDK_LIBRARY_RELEASE})
message(STATUS "[FindFSDK]: Debug libraries were not found")
endif()
#runtime components
if(WIN32)
if(FSDK_RUNTIME_LIBRARY_RELEASE)
list(APPEND FSDK_RUNTIME_LIBRARIES ${FSDK_RUNTIME_LIBRARY_RELEASE})
endif()
if(FSDK_RUNTIME_LIBRARY_DEBUG)
list(APPEND FSDK_RUNTIME_LIBRARIES ${FSDK_RUNTIME_LIBRARY_DEBUG})
endif()
else()
list(APPEND FSDK_RUNTIME_LIBRARIES ${FSDK_LIBRARIES})
endif()
message(STATUS "[FindFSDK]: FSDK_INCLUDE_DIRS: ${FSDK_INCLUDE_DIRS}")
message(STATUS "[FindFSDK]: FSDK_LIBRARIES: ${FSDK_LIBRARIES}")
message(STATUS "[FindFSDK]: FSDK_RUNTIME_LIBRARIES: ${FSDK_RUNTIME_LIBRARIES}")
# Support the REQUIRED and QUIET arguments, and set FSDK_FOUND if found.
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(FSDK DEFAULT_MSG
FSDK_INCLUDE_DIRS
FSDK_LIBRARIES
FSDK_RUNTIME_LIBRARIES
)
# Don't show in GUI
mark_as_advanced(
FSDK_INCLUDE_DIRS
FSDK_LIBRARIES
FSDK_COMPILER_NAME
FSDK_TARGET_NAME
FSDK_LIB_PREFIX
FSDK_LIB_NAMES
)