|
| 1 | +cmake_minimum_required(VERSION 3.5) |
| 2 | +project(FBX2glTF) |
| 3 | + |
| 4 | +if ("${CMAKE_CURRENT_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") |
| 5 | + message(FATAL_ERROR |
| 6 | + "Building from within the source tree is not supported.\n" |
| 7 | + "Hint: mkdir -p build; cmake -H. -Bbuild; make -Cbuild\n") |
| 8 | +endif () |
| 9 | + |
| 10 | +set(CMAKE_CXX_STANDARD 11) |
| 11 | +find_package(Threads REQUIRED) |
| 12 | + |
| 13 | +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}") |
| 14 | +include(ExternalProject) |
| 15 | + |
| 16 | +# FBX |
| 17 | +find_package(FBX REQUIRED) |
| 18 | +if (NOT FBXSDK_FOUND) |
| 19 | + message(FATAL_ERROR |
| 20 | + "Can't find FBX SDK in either:\n" |
| 21 | + " - Mac OS X: ${FBXSDK_APPLE_ROOT}\n" |
| 22 | + " - Windows: ${FBXSDK_WINDOWS_ROOT}\n" |
| 23 | + " - Linux: ${FBXSDK_LINUX_ROOT}" |
| 24 | +) |
| 25 | +endif() |
| 26 | + |
| 27 | +# DRACO |
| 28 | +ExternalProject_Add(Draco |
| 29 | + UPDATE_DISCONNECTED TRUE |
| 30 | + GIT_REPOSITORY https://github.com/google/draco |
| 31 | + PREFIX draco |
| 32 | + INSTALL_DIR |
| 33 | + CMAKE_ARGS |
| 34 | + -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> |
| 35 | +) |
| 36 | +set(DRACO_INCLUDE_DIR "${CMAKE_BINARY_DIR}/draco/include") |
| 37 | +if (WIN32) |
| 38 | + set(DRACO_LIB "${CMAKE_BINARY_DIR}/draco/lib/dracoenc.lib") |
| 39 | +else() |
| 40 | + set(DRACO_LIB "${CMAKE_BINARY_DIR}/draco/lib/libdracoenc.a") |
| 41 | +endif() |
| 42 | + |
| 43 | +# MATHFU |
| 44 | +set(mathfu_build_benchmarks OFF CACHE BOOL "") |
| 45 | +set(mathfu_build_tests OFF CACHE BOOL "") |
| 46 | +ExternalProject_Add(MathFu |
| 47 | + UPDATE_DISCONNECTED TRUE |
| 48 | + GIT_REPOSITORY https://github.com/google/mathfu |
| 49 | + PREFIX mathfu |
| 50 | + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E echo "Skipping MathFu configure step." |
| 51 | + BUILD_COMMAND ${CMAKE_COMMAND} -E echo "Skipping MathFu build step." |
| 52 | + INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Skipping MathFu install step." |
| 53 | +) |
| 54 | +set(MATHFU_INCLUDE_DIRS |
| 55 | + "${CMAKE_BINARY_DIR}/mathfu/src/MathFu/include/" |
| 56 | + "${CMAKE_BINARY_DIR}/mathfu/src/MathFu/dependencies/vectorial/include") |
| 57 | + |
| 58 | +# JSON |
| 59 | +ExternalProject_Add(Json |
| 60 | + UPDATE_DISCONNECTED TRUE |
| 61 | + GIT_REPOSITORY https://github.com/nlohmann/json |
| 62 | + PREFIX json |
| 63 | + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E echo "Skipping JSON configure step." |
| 64 | + BUILD_COMMAND ${CMAKE_COMMAND} -E echo "Skipping JSON build step." |
| 65 | + INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Skipping JSON install step." |
| 66 | +) |
| 67 | +set(JSON_INCLUDE_DIR "${CMAKE_BINARY_DIR}/json/src/Json/src") |
| 68 | + |
| 69 | +# cppcodec |
| 70 | +ExternalProject_Add(CPPCodec |
| 71 | + UPDATE_DISCONNECTED TRUE |
| 72 | + GIT_REPOSITORY https://github.com/tplgy/cppcodec |
| 73 | + PREFIX cppcodec |
| 74 | + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E echo "Skipping CPPCodec configure step." |
| 75 | + BUILD_COMMAND ${CMAKE_COMMAND} -E echo "Skipping CPPCodec build step." |
| 76 | + INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Skipping CPPCodec install step." |
| 77 | +) |
| 78 | +set(CPPCODEC_INCLUDE_DIR "${CMAKE_BINARY_DIR}/cppcodec/src/CPPCodec") |
| 79 | + |
| 80 | +# CXXOPTS |
| 81 | +ExternalProject_Add(CxxOpts |
| 82 | + UPDATE_DISCONNECTED TRUE |
| 83 | + GIT_REPOSITORY https://github.com/jarro2783/cxxopts |
| 84 | + PREFIX cxxopts |
| 85 | + CONFIGURE_COMMAND ${CMAKE_COMMAND} -E echo "Skipping cxxopts configure step." |
| 86 | + BUILD_COMMAND ${CMAKE_COMMAND} -E echo "Skipping cxxopts build step." |
| 87 | + INSTALL_COMMAND ${CMAKE_COMMAND} -E echo "Skipping cxxopts install step." |
| 88 | +) |
| 89 | +set(CXXOPTS_INCLUDE_DIR "${CMAKE_BINARY_DIR}/cxxopts/src/CxxOpts/include") |
| 90 | + |
| 91 | +# FMT |
| 92 | +ExternalProject_Add(Fmt |
| 93 | + UPDATE_DISCONNECTED TRUE |
| 94 | + GIT_REPOSITORY https://github.com/fmtlib/fmt |
| 95 | + CMAKE_CACHE_ARGS "-DFMT_DOC:BOOL=OFF" "-DFMT_INSTALL:BOOL=ON" "-DFMT_TEST:BOOL=OFF" |
| 96 | + CMAKE_ARGS |
| 97 | + -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR> |
| 98 | + PREFIX fmt |
| 99 | +) |
| 100 | +set(FMT_INCLUDE_DIR "${CMAKE_BINARY_DIR}/fmt/include") |
| 101 | +if (WIN32) |
| 102 | + set(FMT_LIB "${CMAKE_BINARY_DIR}/fmt/lib/fmt.lib") |
| 103 | +else() |
| 104 | + set(FMT_LIB "${CMAKE_BINARY_DIR}/fmt/lib/libfmt.a") |
| 105 | +endif() |
| 106 | + |
| 107 | +if (APPLE) |
| 108 | + find_library(CF_FRAMEWORK CoreFoundation) |
| 109 | + message("CoreFoundation Framework: ${CF_FRAMEWORK}") |
| 110 | + set(FRAMEWORKS ${CF_FRAMEWORK}) |
| 111 | +endif() |
| 112 | + |
| 113 | +set(SOURCE_FILES |
| 114 | + src/utils/File_Utils.cpp |
| 115 | + src/utils/Image_Utils.cpp |
| 116 | + src/utils/String_Utils.cpp |
| 117 | + src/main.cpp |
| 118 | + src/Fbx2Raw.cpp |
| 119 | + src/Raw2Gltf.cpp |
| 120 | + src/RawModel.cpp |
| 121 | + src/glTF/BufferData.cpp |
| 122 | + src/glTF/MaterialData.cpp |
| 123 | + src/glTF/MeshData.cpp |
| 124 | + src/glTF/NodeData.cpp |
| 125 | + src/glTF/PrimitiveData.cpp |
| 126 | + src/glTF/BufferViewData.cpp |
| 127 | + src/glTF/BufferViewData.h |
| 128 | + src/glTF/AccessorData.cpp |
| 129 | + src/glTF/AccessorData.h |
| 130 | + src/glTF/ImageData.cpp |
| 131 | + src/glTF/TextureData.cpp |
| 132 | + src/glTF/SkinData.cpp |
| 133 | + src/glTF/AnimationData.cpp |
| 134 | + src/glTF/CameraData.cpp |
| 135 | + src/glTF/SceneData.cpp |
| 136 | +) |
| 137 | + |
| 138 | +add_executable(FBX2glTF ${SOURCE_FILES}) |
| 139 | + |
| 140 | +add_dependencies(FBX2glTF |
| 141 | + Draco |
| 142 | + MathFu |
| 143 | + Json |
| 144 | + CxxOpts |
| 145 | + CPPCodec |
| 146 | + Fmt |
| 147 | +) |
| 148 | + |
| 149 | +if (NOT MSVC) |
| 150 | + # Disable annoying & spammy warning from FBX SDK header file |
| 151 | + target_compile_options(FBX2glTF PRIVATE |
| 152 | + "-Wno-null-dereference" |
| 153 | + "-Wunused" |
| 154 | + ) |
| 155 | +endif() |
| 156 | + |
| 157 | +target_link_libraries(FBX2glTF |
| 158 | + ${FRAMEWORKS} |
| 159 | + ${CMAKE_DL_LIBS} |
| 160 | + ${CMAKE_THREAD_LIBS_INIT} |
| 161 | + ${DRACO_LIB} |
| 162 | + ${FMT_LIB} |
| 163 | + optimized ${FBXSDK_LIBRARY} |
| 164 | + debug ${FBXSDK_LIBRARY_DEBUG} |
| 165 | +) |
| 166 | + |
| 167 | +target_include_directories(FBX2glTF PUBLIC |
| 168 | + ${CMAKE_CURRENT_SOURCE_DIR}/src |
| 169 | + ${FBXSDK_INCLUDE_DIR} |
| 170 | + ${DRACO_INCLUDE_DIR} |
| 171 | + ${MATHFU_INCLUDE_DIRS} |
| 172 | + ${JSON_INCLUDE_DIR} |
| 173 | + ${CXXOPTS_INCLUDE_DIR} |
| 174 | + ${CPPCODEC_INCLUDE_DIR} |
| 175 | + ${FMT_INCLUDE_DIR} |
| 176 | +) |
| 177 | + |
| 178 | +install (TARGETS FBX2glTF DESTINATION bin) |
0 commit comments