CMakeLists.txt 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. cmake_minimum_required(VERSION 3.5)
  2. project(FBX2glTF)
  3. set(typical_usage_str
  4. "Example usage:\n\
  5. > mkdir -p build_debug\n\
  6. > conan install . -i build_debug -s build_type=Debug -e FBXSDK_SDKS=/home/zell/FBXSDK\n\
  7. > conan build . -bf build_debug")
  8. if ("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
  9. message(FATAL_ERROR
  10. "Building from within the source tree is not supported! ${typical_usage_str}")
  11. endif ()
  12. set(CMAKE_CXX_STANDARD 11)
  13. list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}")
  14. include(ExternalProject)
  15. # FBX
  16. foreach (FBXSDK_VERSION "2020.2")
  17. find_package(FBX)
  18. if (FBXSDK_FOUND)
  19. break()
  20. endif()
  21. endforeach(FBXSDK_VERSION)
  22. if (NOT FBXSDK_FOUND)
  23. message(FATAL_ERROR
  24. "Can't find FBX SDK in either:\n"
  25. " - Mac OS X: ${FBXSDK_APPLE_ROOT}\n"
  26. " - Windows: ${FBXSDK_WINDOWS_ROOT}\n"
  27. " - Linux: ${FBXSDK_LINUX_ROOT}"
  28. )
  29. endif()
  30. if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan_paths.cmake")
  31. message(FATAL_ERROR
  32. "The Conan package manager must run ('install') first. ${typical_usage_str}")
  33. endif()
  34. include("${CMAKE_BINARY_DIR}/conan_paths.cmake")
  35. set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
  36. find_package(Threads REQUIRED)
  37. list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_BINARY_DIR}")
  38. # stuff we get from Conan
  39. find_package(Boost 1.76 COMPONENTS system filesystem program_options nowide REQUIRED )
  40. find_package(ZLIB MODULE REQUIRED)
  41. find_package(fmt MODULE REQUIRED)
  42. find_package(Iconv MODULE REQUIRED)
  43. find_package(LibXml2 MODULE REQUIRED)
  44. # create a compilation database for e.g. clang-tidy
  45. set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
  46. # DRACO
  47. ExternalProject_Add(Draco
  48. GIT_REPOSITORY https://github.com/google/draco
  49. GIT_TAG 8786740086a9f4d83f44aa83badfbea4dce7a1b5
  50. PREFIX draco
  51. INSTALL_DIR
  52. CMAKE_ARGS
  53. -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
  54. -DBUILD_FOR_GLTF=1
  55. )
  56. set(DRACO_INCLUDE_DIR "${CMAKE_BINARY_DIR}/draco/include")
  57. find_file(FEDORA_FOUND fedora-release
  58. PATHS /etc
  59. )
  60. if (WIN32)
  61. set(DRACO_LIB "${CMAKE_BINARY_DIR}/draco/lib/${CMAKE_SHARED_MODULE_PREFIX}draco.lib")
  62. elseif(FEDORA_FOUND)
  63. set(DRACO_LIB "${CMAKE_BINARY_DIR}/draco/lib64/${CMAKE_SHARED_MODULE_PREFIX}draco.a")
  64. else()
  65. set(DRACO_LIB "${CMAKE_BINARY_DIR}/draco/lib/${CMAKE_SHARED_MODULE_PREFIX}draco.a")
  66. endif()
  67. # MATHFU
  68. set(mathfu_build_benchmarks OFF CACHE BOOL "")
  69. set(mathfu_build_tests OFF CACHE BOOL "")
  70. ExternalProject_Add(MathFu
  71. PREFIX mathfu
  72. GIT_REPOSITORY https://github.com/google/mathfu
  73. GIT_TAG v1.1.0
  74. CONFIGURE_COMMAND ${CMAKE_COMMAND} -E echo "Skipping MathFu configure step."
  75. BUILD_COMMAND ${CMAKE_COMMAND} -E echo "Skipping MathFu build step."
  76. INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Skipping MathFu install step."
  77. )
  78. set(MATHFU_INCLUDE_DIRS
  79. "${CMAKE_BINARY_DIR}/mathfu/src/MathFu/include/"
  80. "${CMAKE_BINARY_DIR}/mathfu/src/MathFu/dependencies/vectorial/include")
  81. # OrderedMap
  82. ExternalProject_Add(FiFoMap
  83. PREFIX fifo_map
  84. GIT_REPOSITORY https://github.com/nlohmann/fifo_map
  85. CONFIGURE_COMMAND ${CMAKE_COMMAND} -E echo "Skipping FiFoMap configure step."
  86. BUILD_COMMAND ${CMAKE_COMMAND} -E echo "Skipping FiFoMap build step."
  87. INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Skipping FiFoMap install step."
  88. )
  89. set(FIFO_MAP_INCLUDE_DIR "${CMAKE_BINARY_DIR}/fifo_map/src/FiFoMap/src")
  90. # cppcodec
  91. ExternalProject_Add(CPPCodec
  92. PREFIX cppcodec
  93. GIT_REPOSITORY https://github.com/tplgy/cppcodec
  94. CONFIGURE_COMMAND ${CMAKE_COMMAND} -E echo "Skipping CPPCodec configure step."
  95. BUILD_COMMAND ${CMAKE_COMMAND} -E echo "Skipping CPPCodec build step."
  96. INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Skipping CPPCodec install step."
  97. )
  98. set(CPPCODEC_INCLUDE_DIR "${CMAKE_BINARY_DIR}/cppcodec/src/CPPCodec")
  99. if (APPLE)
  100. find_library(CF_FRAMEWORK CoreFoundation)
  101. message("CoreFoundation Framework: ${CF_FRAMEWORK}")
  102. set(FRAMEWORKS ${CF_FRAMEWORK})
  103. endif()
  104. set(LIB_SOURCE_FILES
  105. src/FBX2glTF.h
  106. src/fbx/materials/3dsMaxPhysicalMaterial.cpp
  107. src/fbx/materials/FbxMaterials.cpp
  108. src/fbx/materials/FbxMaterials.hpp
  109. src/fbx/materials/RoughnessMetallicMaterials.hpp
  110. src/fbx/materials/StingrayPBSMaterial.cpp
  111. src/fbx/materials/TraditionalMaterials.cpp
  112. src/fbx/materials/TraditionalMaterials.hpp
  113. src/fbx/Fbx2Raw.cpp
  114. src/fbx/Fbx2Raw.hpp
  115. src/fbx/FbxBlendShapesAccess.cpp
  116. src/fbx/FbxBlendShapesAccess.hpp
  117. src/fbx/FbxLayerElementAccess.hpp
  118. src/fbx/FbxSkinningAccess.cpp
  119. src/fbx/FbxSkinningAccess.hpp
  120. src/gltf/Raw2Gltf.cpp
  121. src/gltf/Raw2Gltf.hpp
  122. src/gltf/GltfModel.cpp
  123. src/gltf/GltfModel.hpp
  124. src/gltf/TextureBuilder.cpp
  125. src/gltf/TextureBuilder.hpp
  126. src/gltf/properties/AccessorData.cpp
  127. src/gltf/properties/AccessorData.hpp
  128. src/gltf/properties/AnimationData.cpp
  129. src/gltf/properties/AnimationData.hpp
  130. src/gltf/properties/BufferData.cpp
  131. src/gltf/properties/BufferData.hpp
  132. src/gltf/properties/BufferViewData.cpp
  133. src/gltf/properties/BufferViewData.hpp
  134. src/gltf/properties/CameraData.cpp
  135. src/gltf/properties/CameraData.hpp
  136. src/gltf/properties/ImageData.cpp
  137. src/gltf/properties/ImageData.hpp
  138. src/gltf/properties/LightData.cpp
  139. src/gltf/properties/LightData.hpp
  140. src/gltf/properties/MaterialData.cpp
  141. src/gltf/properties/MaterialData.hpp
  142. src/gltf/properties/MeshData.cpp
  143. src/gltf/properties/MeshData.hpp
  144. src/gltf/properties/NodeData.cpp
  145. src/gltf/properties/NodeData.hpp
  146. src/gltf/properties/PrimitiveData.cpp
  147. src/gltf/properties/PrimitiveData.hpp
  148. src/gltf/properties/SamplerData.hpp
  149. src/gltf/properties/SceneData.cpp
  150. src/gltf/properties/SceneData.hpp
  151. src/gltf/properties/SkinData.cpp
  152. src/gltf/properties/SkinData.hpp
  153. src/gltf/properties/TextureData.cpp
  154. src/gltf/properties/TextureData.hpp
  155. src/mathfu.hpp
  156. src/raw/RawModel.cpp
  157. src/raw/RawModel.hpp
  158. src/utils/File_Utils.cpp
  159. src/utils/File_Utils.hpp
  160. src/utils/Image_Utils.cpp
  161. src/utils/Image_Utils.hpp
  162. src/utils/String_Utils.hpp
  163. third_party/CLI11/CLI11.hpp
  164. )
  165. add_library(libFBX2glTF STATIC ${LIB_SOURCE_FILES})
  166. set_target_properties(libFBX2glTF PROPERTIES OUTPUT_NAME "libFBX2glTF")
  167. add_executable(FBX2glTF src/FBX2glTF.cpp)
  168. set_target_properties(FBX2glTF PROPERTIES OUTPUT_NAME "FBX2glTF")
  169. add_dependencies(libFBX2glTF
  170. Draco
  171. MathFu
  172. FiFoMap
  173. CPPCodec
  174. )
  175. if (NOT MSVC)
  176. # Disable annoying & spammy warning from FBX SDK header file
  177. target_compile_options(libFBX2glTF PRIVATE
  178. "-Wno-null-dereference"
  179. "-Wunused"
  180. )
  181. target_compile_options(FBX2glTF PRIVATE
  182. "-Wno-null-dereference"
  183. "-Wunused"
  184. )
  185. endif()
  186. target_link_libraries(libFBX2glTF
  187. ${FRAMEWORKS}
  188. ${DRACO_LIB}
  189. Boost::system
  190. Boost::filesystem
  191. Boost::nowide
  192. optimized ${FBXSDK_LIBRARY}
  193. debug ${FBXSDK_LIBRARY_DEBUG}
  194. fmt::fmt
  195. ZLIB::ZLIB
  196. LibXml2::LibXml2
  197. ${ICONV_MAC_LIB}
  198. ${CMAKE_DL_LIBS}
  199. ${CMAKE_THREAD_LIBS_INIT}
  200. )
  201. target_include_directories(libFBX2glTF PUBLIC
  202. ${CMAKE_CURRENT_SOURCE_DIR}/src
  203. )
  204. target_include_directories(libFBX2glTF SYSTEM PUBLIC
  205. "third_party/stb"
  206. "third_party/json"
  207. ${FBXSDK_INCLUDE_DIR}
  208. ${DRACO_INCLUDE_DIR}
  209. ${MATHFU_INCLUDE_DIRS}
  210. ${FIFO_MAP_INCLUDE_DIR}
  211. ${CPPCODEC_INCLUDE_DIR}
  212. )
  213. target_include_directories(FBX2glTF PUBLIC
  214. "third_party/CLI11"
  215. )
  216. if (APPLE)
  217. set(ICONV_MAC_LIB iconv)
  218. endif()
  219. target_link_libraries(FBX2glTF libFBX2glTF ${ICONV_MAC_LIB})
  220. install (TARGETS libFBX2glTF FBX2glTF
  221. RUNTIME DESTINATION bin
  222. ARCHIVE DESTINATION lib
  223. )