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

1 year ago
  1. # Find the Vision Labs Face SDK.
  2. # Sets the usual variables expected for find_package scripts:
  3. # FSDK_INCLUDE_DIRS - headers location
  4. # FSDK_LIBRARIES - libraries to link against
  5. # FSDK_RUNTIME_LIBRARIES - runtime libraries
  6. # FSDK_FOUND - true if Face SDK was found.
  7. # This is the directory where the Face SDK is located.
  8. # By default FSDKDIR environment variable value is taken.
  9. set(FSDK_ROOT "$ENV{FSDKDIR}" CACHE PATH "Vision Labs Face SDK root directory.")
  10. # Look for headers.
  11. find_path(FSDK_INCLUDE_DIRS
  12. NAMES fsdk/FaceEngine.h fsdk/Types.h fsdk/Def.h
  13. HINTS $ENV{FSDKDIR}
  14. PATHS ${FSDK_ROOT}
  15. PATH_SUFFIXES include)
  16. # 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.
  17. # 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
  18. if(IOS OR ANDROID)
  19. set(FSDK_INCLUDE_DIRS ${FSDK_ROOT}/include)
  20. endif()
  21. #message(STATUS "FSDK: FSDK_INCLUDE_DIRS = ${FSDK_INCLUDE_DIRS}.")
  22. if(WIN32)
  23. SET(CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".dll")
  24. elseif(APPLE AND NOT IOS) # mac os
  25. SET(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".dylib")
  26. else()
  27. SET(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
  28. endif()
  29. # Determine compiler version and architecture.
  30. # ios has no architechture/compiler branching, because only can only use clang
  31. # and if you need multiple architechtures there still compiled into single universal binary
  32. if(NOT IOS)
  33. if(MSVC10)
  34. set(FSDK_COMPILER_NAME vs2010)
  35. elseif(MSVC11)
  36. set(FSDK_COMPILER_NAME vs2012)
  37. elseif(MSVC12)
  38. set(FSDK_COMPILER_NAME vs2013)
  39. elseif(MSVC14)
  40. set(FSDK_COMPILER_NAME vs2015)
  41. elseif(CMAKE_COMPILER_IS_GNUCXX)
  42. set(FSDK_COMPILER_NAME gcc4)
  43. elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
  44. set(FSDK_COMPILER_NAME clang)
  45. elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "AppleClang")
  46. set(FSDK_COMPILER_NAME clang)
  47. else()
  48. message(SEND_ERROR "[FindFSDK] Unsupported compiler: ${FSDK_COMPILER_NAME}")
  49. endif()
  50. if(ANDROID)
  51. set(FSDK_TARGET_NAME ${ANDROID_ABI})
  52. elseif(CMAKE_SIZEOF_VOID_P EQUAL 8)
  53. set(FSDK_TARGET_NAME x64)
  54. else()
  55. set(FSDK_TARGET_NAME x86)
  56. endif()
  57. # What version of Face SDK to use.
  58. set(FSDK_LIB_PREFIX ${FSDK_COMPILER_NAME}/${FSDK_TARGET_NAME})
  59. endif()
  60. if(IOS)
  61. # List of all SDK libraries.
  62. set(FSDK_LIB_NAMES fsdk)
  63. else()
  64. # List of all SDK libraries.
  65. set(FSDK_LIB_NAMES FaceEngineSDK)
  66. endif()
  67. if(IOS)
  68. set(FSDK_LIB_PATH_SUFFIX Frameworks)
  69. set(FSDK_BIN_PATH_SUFFIX Frameworks)
  70. else()
  71. set(FSDK_LIB_PATH_SUFFIX lib/${FSDK_LIB_PREFIX})
  72. set(FSDK_BIN_PATH_SUFFIX bin/${FSDK_LIB_PREFIX})
  73. endif()
  74. macro(find_fsdk_library LIBRARY_VAR LIBRARY_NAME)
  75. find_library(${LIBRARY_VAR}
  76. NAMES ${LIBRARY_NAME}
  77. HINTS $ENV{FSDKDIR}
  78. PATHS ${FSDK_ROOT}
  79. PATH_SUFFIXES ${FSDK_LIB_PATH_SUFFIX}
  80. NO_DEFAULT_PATH
  81. )
  82. endmacro()
  83. if(IOS)
  84. find_fsdk_library(FSDK_LIBRARY_RELEASE fsdk)
  85. find_fsdk_library(FSDK_LIBRARY_DEBUG fsdkd)
  86. elseif(EMSCRIPTEN)
  87. if(EXISTS "${FSDK_ROOT}/include/fsdk/FaceEngine.h")
  88. message(STATUS "[FindFSDK]:${FSDK_ROOT}/include/fsdk/FaceEngine.h exists!")
  89. set(FSDK_INCLUDE_DIRS ${FSDK_ROOT}/include)
  90. else()
  91. message(ERROR "[FindFSDK]:${FSDK_ROOT}/include/fsdk/FaceEngine.h not found...")
  92. endif()
  93. if(EXISTS "${FSDK_ROOT}/lib/clang/x86/libFaceEngineSDK.bc")
  94. message(STATUS "[FindFSDK]: ${FSDK_ROOT}/lib/clang/x86/libFaceEngineSDK.bc exists!")
  95. list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libvlc.bc")
  96. list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libflower.bc")
  97. list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libSdkCore.bc")
  98. list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libDetector.bc")
  99. list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libEstimator.bc")
  100. list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libLicensing.bc")
  101. list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libMTCNN.bc")
  102. list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libOpticalFlow.bc")
  103. list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libWarper.bc")
  104. list(APPEND FSDK_LIBRARY_RELEASE "${FSDK_ROOT}/lib/clang/x86/libFaceEngineSDK.bc")
  105. else()
  106. message(ERROR "[FindFSDK]: ${FSDK_ROOT}/lib/clang/x86/libFaceEngineSDK.bc not found...")
  107. endif()
  108. else()
  109. find_fsdk_library(FSDK_LIBRARY_RELEASE FaceEngineSDK)
  110. find_fsdk_library(FSDK_LIBRARY_DEBUG FaceEngineSDKd)
  111. endif()
  112. if(WIN32)
  113. macro(find_fsdk_runtime_library LIBRARY_VAR LIBRARY_NAME)
  114. find_library(${LIBRARY_VAR}
  115. NAMES ${LIBRARY_NAME}
  116. HINTS $ENV{FSDKDIR}
  117. PATHS ${FSDK_ROOT}
  118. PATH_SUFFIXES ${FSDK_BIN_PATH_SUFFIX}
  119. NO_DEFAULT_PATH
  120. )
  121. endmacro()
  122. find_fsdk_runtime_library(FSDK_RUNTIME_LIBRARY_RELEASE FaceEngineSDK)
  123. find_fsdk_runtime_library(FSDK_RUNTIME_LIBRARY_DEBUG FaceEngineSDKd)
  124. endif()
  125. #link components
  126. if(FSDK_LIBRARY_RELEASE AND FSDK_LIBRARY_DEBUG)
  127. set(FSDK_LIBRARIES optimized ${FSDK_LIBRARY_RELEASE} debug ${FSDK_LIBRARY_DEBUG})
  128. elseif(FSDK_LIBRARY_DEBUG)
  129. set(FSDK_LIBRARIES ${FSDK_LIBRARY_DEBUG})
  130. message(STATUS "[FindFSDK]: Release libraries were not found")
  131. elseif(FSDK_LIBRARY_RELEASE)
  132. set(FSDK_LIBRARIES ${FSDK_LIBRARY_RELEASE})
  133. message(STATUS "[FindFSDK]: Debug libraries were not found")
  134. endif()
  135. #runtime components
  136. if(WIN32)
  137. if(FSDK_RUNTIME_LIBRARY_RELEASE)
  138. list(APPEND FSDK_RUNTIME_LIBRARIES ${FSDK_RUNTIME_LIBRARY_RELEASE})
  139. endif()
  140. if(FSDK_RUNTIME_LIBRARY_DEBUG)
  141. list(APPEND FSDK_RUNTIME_LIBRARIES ${FSDK_RUNTIME_LIBRARY_DEBUG})
  142. endif()
  143. else()
  144. list(APPEND FSDK_RUNTIME_LIBRARIES ${FSDK_LIBRARIES})
  145. endif()
  146. message(STATUS "[FindFSDK]: FSDK_INCLUDE_DIRS: ${FSDK_INCLUDE_DIRS}")
  147. message(STATUS "[FindFSDK]: FSDK_LIBRARIES: ${FSDK_LIBRARIES}")
  148. message(STATUS "[FindFSDK]: FSDK_RUNTIME_LIBRARIES: ${FSDK_RUNTIME_LIBRARIES}")
  149. # Support the REQUIRED and QUIET arguments, and set FSDK_FOUND if found.
  150. include(FindPackageHandleStandardArgs)
  151. FIND_PACKAGE_HANDLE_STANDARD_ARGS(FSDK DEFAULT_MSG
  152. FSDK_INCLUDE_DIRS
  153. FSDK_LIBRARIES
  154. FSDK_RUNTIME_LIBRARIES
  155. )
  156. # Don't show in GUI
  157. mark_as_advanced(
  158. FSDK_INCLUDE_DIRS
  159. FSDK_LIBRARIES
  160. FSDK_COMPILER_NAME
  161. FSDK_TARGET_NAME
  162. FSDK_LIB_PREFIX
  163. FSDK_LIB_NAMES
  164. )