dust3d/thirdparty/instant-meshes/CMakeLists.txt

177 lines
7.5 KiB
CMake
Raw Normal View History

cmake_minimum_required (VERSION 2.8.3)
project(InstantMeshes)
set(INSTANT_MESHES_RELATIVE_ROOT instant-meshes-dust3d)
set(INSTANT_MESHES_ROOT ${CMAKE_CURRENT_SOURCE_DIR}/${INSTANT_MESHES_RELATIVE_ROOT})
option(INSTANT_MESHES_DEV_MODE "Instant meshes developer mode" OFF)
if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
message(STATUS "Setting build type to 'Release' as none was specified.")
set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE)
set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release"
"MinSizeRel" "RelWithDebInfo")
endif()
string(TOUPPER "${CMAKE_BUILD_TYPE}" U_CMAKE_BUILD_TYPE)
# Enable folders for projects in Visual Studio
if (CMAKE_GENERATOR MATCHES "Visual Studio")
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
endif()
# Sanitize build environment for static build with C++11
if (MSVC)
add_definitions (/D "_CRT_SECURE_NO_WARNINGS")
add_definitions (/D "__TBB_NO_IMPLICIT_LINKAGE")
add_definitions (/D "DUST3D_INSTANT_MESHES_API_EXPORTS")
add_definitions (/D "_USE_MATH_DEFINES")
set(DUST3D_INSTANT_MESHES_API_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/instant-meshes-api.h
${CMAKE_CURRENT_SOURCE_DIR}/instant-meshes-api.cpp
${INSTANT_MESHES_ROOT}/../../simpleuv/simpleuv/triangulate.h
${INSTANT_MESHES_ROOT}/../../simpleuv/simpleuv/triangulate.cpp)
# Parallel build on MSVC (all targets)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
if (NOT CMAKE_SIZEOF_VOID_P EQUAL 8)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE2")
# Disable Eigen vectorization for Windows 32 bit builds (issues with unaligned access segfaults)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /DEIGEN_DONT_ALIGN")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Od")
endif()
# Static build
set(CompilerFlags
CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE
CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO
CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
foreach(CompilerFlag ${CompilerFlags})
string(REPLACE "/MD" "/MT" ${CompilerFlag} "${${CompilerFlag}}")
endforeach()
elseif(APPLE)
# Try to auto-detect a suitable SDK
# Commented out for now -- causes a too new SDK to be selected on AppVeyor
#execute_process(COMMAND bash -c "xcodebuild -version -sdk | grep MacOSX | grep Path | head -n 1 | cut -f 2 -d ' '" OUTPUT_VARIABLE CMAKE_OSX_SYSROOT)
#string(REGEX REPLACE "(\r?\n)+$" "" CMAKE_OSX_SYSROOT "${CMAKE_OSX_SYSROOT}")
#string(REGEX REPLACE "^.*X([0-9.]*).sdk$" "\\1" CMAKE_OSX_DEPLOYMENT_TARGET "${CMAKE_OSX_SYSROOT}")
endif()
# Enable C++11 mode on GCC / Clang
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
endif()
# Build TBB
if(MSVC)
set(TBB_BUILD_STATIC OFF CACHE BOOL " " FORCE)
set(TBB_BUILD_SHARED ON CACHE BOOL " " FORCE)
else()
set(TBB_BUILD_STATIC ON CACHE BOOL " " FORCE)
set(TBB_BUILD_SHARED OFF CACHE BOOL " " FORCE)
endif()
set(TBB_BUILD_TBBMALLOC OFF CACHE BOOL " " FORCE)
set(TBB_BUILD_TBBMALLOC_PROXY OFF CACHE BOOL " " FORCE)
set(TBB_BUILD_TESTS OFF CACHE BOOL " " FORCE)
add_subdirectory(${INSTANT_MESHES_ROOT}/ext/tbb ext_build/tbb)
if(MSVC)
# Build dll on windows
else()
set_property(TARGET tbb_static tbb_def_files PROPERTY FOLDER "dependencies")
endif()
# Compile instant meshes with various compiler warnings turned on
if(MSVC)
if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]")
string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
endif()
elseif (CMAKE_CXX_COMPILER_ID MATCHES "Clang" OR CMAKE_CXX_COMPILER_ID MATCHES "GNU")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wno-unused-parameter")
if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-gnu-anonymous-struct -Wno-c99-extensions -Wno-nested-anon-types")
endif()
endif()
# Header file directories of dependency libraries
include_directories(
# Intel Thread Building Blocks
${INSTANT_MESHES_ROOT}/ext/tbb/include
# Disjoint set data structure
${INSTANT_MESHES_ROOT}/ext/dset
# Parallel stable sort
${INSTANT_MESHES_ROOT}/ext/pss
# Pseudorandom number generator
${INSTANT_MESHES_ROOT}/ext/pcg32
# RPLY mesh I/O library
${INSTANT_MESHES_ROOT}/ext/rply
# Half precision type
${INSTANT_MESHES_ROOT}/ext/half
# Eigen
${INSTANT_MESHES_ROOT}/../../simpleuv/thirdparty/eigen
# Export API
${INSTANT_MESHES_ROOT}/../../simpleuv
${CMAKE_CURRENT_SOURCE_DIR}
${INSTANT_MESHES_ROOT}/src
)
if (INSTANT_MESHES_DEV_MODE)
add_definitions(-DDEV_MODE)
endif()
if (WIN32)
add_library(instant-meshes SHARED "")
else()
add_library(instant-meshes STATIC "")
endif()
target_sources(instant-meshes PRIVATE
${INSTANT_MESHES_RELATIVE_ROOT}/src/aabb.h
${INSTANT_MESHES_RELATIVE_ROOT}/src/common.h
${INSTANT_MESHES_RELATIVE_ROOT}/src/meshio.h ${INSTANT_MESHES_RELATIVE_ROOT}/src/meshio.cpp
${INSTANT_MESHES_RELATIVE_ROOT}/src/normal.h ${INSTANT_MESHES_RELATIVE_ROOT}/src/normal.cpp
${INSTANT_MESHES_RELATIVE_ROOT}/src/adjacency.h ${INSTANT_MESHES_RELATIVE_ROOT}/src/adjacency.cpp
${INSTANT_MESHES_RELATIVE_ROOT}/src/meshstats.h ${INSTANT_MESHES_RELATIVE_ROOT}/src/meshstats.cpp
${INSTANT_MESHES_RELATIVE_ROOT}/src/hierarchy.h ${INSTANT_MESHES_RELATIVE_ROOT}/src/hierarchy.cpp
${INSTANT_MESHES_RELATIVE_ROOT}/src/extract.h ${INSTANT_MESHES_RELATIVE_ROOT}/src/extract.cpp
${INSTANT_MESHES_RELATIVE_ROOT}/src/field.h ${INSTANT_MESHES_RELATIVE_ROOT}/src/field.cpp
${INSTANT_MESHES_RELATIVE_ROOT}/src/bvh.h ${INSTANT_MESHES_RELATIVE_ROOT}/src/bvh.cpp
${INSTANT_MESHES_RELATIVE_ROOT}/src/subdivide.h ${INSTANT_MESHES_RELATIVE_ROOT}/src/subdivide.cpp
${INSTANT_MESHES_RELATIVE_ROOT}/src/reorder.h ${INSTANT_MESHES_RELATIVE_ROOT}/src/reorder.cpp
${INSTANT_MESHES_RELATIVE_ROOT}/src/serializer.h ${INSTANT_MESHES_RELATIVE_ROOT}/src/serializer.cpp
${INSTANT_MESHES_RELATIVE_ROOT}/src/smoothcurve.h ${INSTANT_MESHES_RELATIVE_ROOT}/src/smoothcurve.cpp
${INSTANT_MESHES_RELATIVE_ROOT}/src/cleanup.h ${INSTANT_MESHES_RELATIVE_ROOT}/src/cleanup.cpp
${INSTANT_MESHES_RELATIVE_ROOT}/src/dedge.h ${INSTANT_MESHES_RELATIVE_ROOT}/src/dedge.cpp
${INSTANT_MESHES_RELATIVE_ROOT}/ext/rply/rply.c
${DUST3D_INSTANT_MESHES_API_SOURCES})
if (WIN32)
target_link_libraries(instant-meshes tbb)
else()
target_link_libraries(instant-meshes tbb_static)
endif()
if (WIN32)
# Quench some warnings on MSVC
if (MSVC)
set_source_files_properties(${INSTANT_MESHES_RELATIVE_ROOT}/ext/rply/rply.c PROPERTIES COMPILE_FLAGS "/wd4127")
endif()
elseif (APPLE)
# Build an application bundle on OSX
# set_target_properties(instant-meshes PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "Instant Meshes")
# set_target_properties(instant-meshes PROPERTIES MACOSX_BUNDLE_BUNDLE_GUI_IDENTIFIER "com.im.InstantMeshes")
# set_target_properties(instant-meshes PROPERTIES MACOSX_BUNDLE_ICON_FILE im.icns)
# set_target_properties(instant-meshes PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/resources/MacOSXBundleInfo.plist.in)
# set_source_files_properties(resources/im.icns PROPERTIES MACOSX_PACKAGE_LOCATION "Resources")
else()
# Insulate from a few types of ABI changes by statically linking against libgcc and libstdc++
set_target_properties(instant-meshes PROPERTIES LINK_FLAGS "-static-libgcc")
#set_target_properties(instant-meshes PROPERTIES LINK_FLAGS "-static-libgcc -static-libstdc++")
endif()