123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- cmake_minimum_required(VERSION 3.5)
- project(FBX2glTF)
- set(typical_usage_str
- "Example usage:\n\
- > mkdir -p build_debug\n\
- > conan install . -i build_debug -s build_type=Debug -e FBXSDK_SDKS=/home/zell/FBXSDK\n\
- > conan build . -bf build_debug")
- if ("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
- message(FATAL_ERROR
- "Building from within the source tree is not supported! ${typical_usage_str}")
- endif ()
- set(CMAKE_CXX_STANDARD 11)
- list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}")
- include(ExternalProject)
- # FBX
- foreach (FBXSDK_VERSION "2020.2")
- find_package(FBX)
- if (FBXSDK_FOUND)
- break()
- endif()
- endforeach(FBXSDK_VERSION)
- if (NOT FBXSDK_FOUND)
- message(FATAL_ERROR
- "Can't find FBX SDK in either:\n"
- " - Mac OS X: ${FBXSDK_APPLE_ROOT}\n"
- " - Windows: ${FBXSDK_WINDOWS_ROOT}\n"
- " - Linux: ${FBXSDK_LINUX_ROOT}"
- )
- endif()
- if(NOT EXISTS "${CMAKE_BINARY_DIR}/conan_paths.cmake")
- message(FATAL_ERROR
- "The Conan package manager must run ('install') first. ${typical_usage_str}")
- endif()
- include("${CMAKE_BINARY_DIR}/conan_paths.cmake")
- set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
- find_package(Threads REQUIRED)
- list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_BINARY_DIR}")
- # stuff we get from Conan
- find_package(Boost 1.76 COMPONENTS system filesystem program_options nowide REQUIRED )
- find_package(ZLIB MODULE REQUIRED)
- find_package(fmt MODULE REQUIRED)
- find_package(Iconv MODULE REQUIRED)
- find_package(LibXml2 MODULE REQUIRED)
- # create a compilation database for e.g. clang-tidy
- set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
- # DRACO
- ExternalProject_Add(Draco
- GIT_REPOSITORY https://github.com/google/draco
- GIT_TAG 8786740086a9f4d83f44aa83badfbea4dce7a1b5
- PREFIX draco
- INSTALL_DIR
- CMAKE_ARGS
- -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
- -DBUILD_FOR_GLTF=1
- )
- set(DRACO_INCLUDE_DIR "${CMAKE_BINARY_DIR}/draco/include")
- find_file(FEDORA_FOUND fedora-release
- PATHS /etc
- )
- if (WIN32)
- set(DRACO_LIB "${CMAKE_BINARY_DIR}/draco/lib/${CMAKE_SHARED_MODULE_PREFIX}draco.lib")
- elseif(FEDORA_FOUND)
- set(DRACO_LIB "${CMAKE_BINARY_DIR}/draco/lib64/${CMAKE_SHARED_MODULE_PREFIX}draco.a")
- else()
- set(DRACO_LIB "${CMAKE_BINARY_DIR}/draco/lib/${CMAKE_SHARED_MODULE_PREFIX}draco.a")
- endif()
- # MATHFU
- set(mathfu_build_benchmarks OFF CACHE BOOL "")
- set(mathfu_build_tests OFF CACHE BOOL "")
- ExternalProject_Add(MathFu
- PREFIX mathfu
- GIT_REPOSITORY https://github.com/google/mathfu
- GIT_TAG v1.1.0
- CONFIGURE_COMMAND ${CMAKE_COMMAND} -E echo "Skipping MathFu configure step."
- BUILD_COMMAND ${CMAKE_COMMAND} -E echo "Skipping MathFu build step."
- INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Skipping MathFu install step."
- )
- set(MATHFU_INCLUDE_DIRS
- "${CMAKE_BINARY_DIR}/mathfu/src/MathFu/include/"
- "${CMAKE_BINARY_DIR}/mathfu/src/MathFu/dependencies/vectorial/include")
- # OrderedMap
- ExternalProject_Add(FiFoMap
- PREFIX fifo_map
- GIT_REPOSITORY https://github.com/nlohmann/fifo_map
- CONFIGURE_COMMAND ${CMAKE_COMMAND} -E echo "Skipping FiFoMap configure step."
- BUILD_COMMAND ${CMAKE_COMMAND} -E echo "Skipping FiFoMap build step."
- INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Skipping FiFoMap install step."
- )
- set(FIFO_MAP_INCLUDE_DIR "${CMAKE_BINARY_DIR}/fifo_map/src/FiFoMap/src")
- # cppcodec
- ExternalProject_Add(CPPCodec
- PREFIX cppcodec
- GIT_REPOSITORY https://github.com/tplgy/cppcodec
- CONFIGURE_COMMAND ${CMAKE_COMMAND} -E echo "Skipping CPPCodec configure step."
- BUILD_COMMAND ${CMAKE_COMMAND} -E echo "Skipping CPPCodec build step."
- INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Skipping CPPCodec install step."
- )
- set(CPPCODEC_INCLUDE_DIR "${CMAKE_BINARY_DIR}/cppcodec/src/CPPCodec")
- if (APPLE)
- find_library(CF_FRAMEWORK CoreFoundation)
- message("CoreFoundation Framework: ${CF_FRAMEWORK}")
- set(FRAMEWORKS ${CF_FRAMEWORK})
- endif()
- set(LIB_SOURCE_FILES
- src/FBX2glTF.h
- src/fbx/materials/3dsMaxPhysicalMaterial.cpp
- src/fbx/materials/FbxMaterials.cpp
- src/fbx/materials/FbxMaterials.hpp
- src/fbx/materials/RoughnessMetallicMaterials.hpp
- src/fbx/materials/StingrayPBSMaterial.cpp
- src/fbx/materials/TraditionalMaterials.cpp
- src/fbx/materials/TraditionalMaterials.hpp
- src/fbx/Fbx2Raw.cpp
- src/fbx/Fbx2Raw.hpp
- src/fbx/FbxBlendShapesAccess.cpp
- src/fbx/FbxBlendShapesAccess.hpp
- src/fbx/FbxLayerElementAccess.hpp
- src/fbx/FbxSkinningAccess.cpp
- src/fbx/FbxSkinningAccess.hpp
- src/gltf/Raw2Gltf.cpp
- src/gltf/Raw2Gltf.hpp
- src/gltf/GltfModel.cpp
- src/gltf/GltfModel.hpp
- src/gltf/TextureBuilder.cpp
- src/gltf/TextureBuilder.hpp
- src/gltf/properties/AccessorData.cpp
- src/gltf/properties/AccessorData.hpp
- src/gltf/properties/AnimationData.cpp
- src/gltf/properties/AnimationData.hpp
- src/gltf/properties/BufferData.cpp
- src/gltf/properties/BufferData.hpp
- src/gltf/properties/BufferViewData.cpp
- src/gltf/properties/BufferViewData.hpp
- src/gltf/properties/CameraData.cpp
- src/gltf/properties/CameraData.hpp
- src/gltf/properties/ImageData.cpp
- src/gltf/properties/ImageData.hpp
- src/gltf/properties/LightData.cpp
- src/gltf/properties/LightData.hpp
- src/gltf/properties/MaterialData.cpp
- src/gltf/properties/MaterialData.hpp
- src/gltf/properties/MeshData.cpp
- src/gltf/properties/MeshData.hpp
- src/gltf/properties/NodeData.cpp
- src/gltf/properties/NodeData.hpp
- src/gltf/properties/PrimitiveData.cpp
- src/gltf/properties/PrimitiveData.hpp
- src/gltf/properties/SamplerData.hpp
- src/gltf/properties/SceneData.cpp
- src/gltf/properties/SceneData.hpp
- src/gltf/properties/SkinData.cpp
- src/gltf/properties/SkinData.hpp
- src/gltf/properties/TextureData.cpp
- src/gltf/properties/TextureData.hpp
- src/mathfu.hpp
- src/raw/RawModel.cpp
- src/raw/RawModel.hpp
- src/utils/File_Utils.cpp
- src/utils/File_Utils.hpp
- src/utils/Image_Utils.cpp
- src/utils/Image_Utils.hpp
- src/utils/String_Utils.hpp
- third_party/CLI11/CLI11.hpp
- )
- add_library(libFBX2glTF STATIC ${LIB_SOURCE_FILES})
- set_target_properties(libFBX2glTF PROPERTIES OUTPUT_NAME "libFBX2glTF")
- add_executable(FBX2glTF src/FBX2glTF.cpp)
- set_target_properties(FBX2glTF PROPERTIES OUTPUT_NAME "FBX2glTF")
- add_dependencies(libFBX2glTF
- Draco
- MathFu
- FiFoMap
- CPPCodec
- )
- if (NOT MSVC)
- # Disable annoying & spammy warning from FBX SDK header file
- target_compile_options(libFBX2glTF PRIVATE
- "-Wno-null-dereference"
- "-Wunused"
- )
- target_compile_options(FBX2glTF PRIVATE
- "-Wno-null-dereference"
- "-Wunused"
- )
- endif()
- target_link_libraries(libFBX2glTF
- ${FRAMEWORKS}
- ${DRACO_LIB}
- Boost::system
- Boost::filesystem
- Boost::nowide
- optimized ${FBXSDK_LIBRARY}
- debug ${FBXSDK_LIBRARY_DEBUG}
- fmt::fmt
- ZLIB::ZLIB
- LibXml2::LibXml2
- ${ICONV_MAC_LIB}
- ${CMAKE_DL_LIBS}
- ${CMAKE_THREAD_LIBS_INIT}
- )
- target_include_directories(libFBX2glTF PUBLIC
- ${CMAKE_CURRENT_SOURCE_DIR}/src
- )
- target_include_directories(libFBX2glTF SYSTEM PUBLIC
- "third_party/stb"
- "third_party/json"
- ${FBXSDK_INCLUDE_DIR}
- ${DRACO_INCLUDE_DIR}
- ${MATHFU_INCLUDE_DIRS}
- ${FIFO_MAP_INCLUDE_DIR}
- ${CPPCODEC_INCLUDE_DIR}
- )
- target_include_directories(FBX2glTF PUBLIC
- "third_party/CLI11"
- )
- if (APPLE)
- set(ICONV_MAC_LIB iconv)
- endif()
- target_link_libraries(FBX2glTF libFBX2glTF ${ICONV_MAC_LIB})
- install (TARGETS libFBX2glTF FBX2glTF
- RUNTIME DESTINATION bin
- ARCHIVE DESTINATION lib
- )
|