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.
116 lines
3.2 KiB
116 lines
3.2 KiB
# Find required packages |
|
FIND_PACKAGE(CGAL REQUIRED) |
|
if(CGAL_FOUND) |
|
include_directories(${CGAL_INCLUDE_DIRS}) |
|
add_definitions(${CGAL_DEFINITIONS}) |
|
link_directories(${CGAL_LIBRARY_DIRS}) |
|
endif() |
|
|
|
FIND_PACKAGE(VCG REQUIRED) |
|
if(VCG_FOUND) |
|
include_directories(${VCG_INCLUDE_DIRS}) |
|
add_definitions(${VCG_DEFINITIONS}) |
|
endif() |
|
|
|
# 在find_package(CUDA)之前设置全局PIC |
|
SET(CMAKE_POSITION_INDEPENDENT_CODE ON) |
|
|
|
find_package(CUDA REQUIRED) |
|
|
|
SET(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} |
|
-Xcompiler=-fPIC |
|
--relocatable-device-code=true |
|
--ptxas-options=-v |
|
-gencode arch=compute_75,code=sm_75 |
|
") |
|
|
|
# 启用CUDA语言支持(现代CMake方式) |
|
IF(CMAKE_VERSION VERSION_GREATER_EQUAL 3.18) |
|
ENABLE_LANGUAGE(CUDA) |
|
ENDIF() |
|
|
|
cuda_add_library(MeshTextureCUDA |
|
cuda/MeshTextureCUDA.cu |
|
) |
|
|
|
SET_TARGET_PROPERTIES(MeshTextureCUDA PROPERTIES |
|
CUDA_SEPARABLE_COMPILATION ON |
|
CUDA_RESOLVE_DEVICE_SYMBOLS ON # 关键:解析设备符号 |
|
POSITION_INDEPENDENT_CODE ON |
|
) |
|
# 为CUDA目标显式添加编译标志 |
|
TARGET_COMPILE_OPTIONS(MeshTextureCUDA PRIVATE |
|
$<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=-fPIC> |
|
) |
|
|
|
set(CERES_LIBS "") |
|
if(OpenMVS_USE_CERES) |
|
FIND_PACKAGE(Ceres) |
|
if(CERES_FOUND) |
|
include_directories(${CERES_INCLUDE_DIRS}) |
|
add_definitions(${CERES_DEFINITIONS}) |
|
else() |
|
set(OpenMVS_USE_CERES OFF) |
|
message("-- Can't find CERES. Continuing without it.") |
|
endif() |
|
endif() |
|
|
|
# List sources files |
|
FILE(GLOB LIBRARY_FILES_C "*.cpp") |
|
FILE(GLOB LIBRARY_FILES_H "*.h" "*.inl") |
|
if(_USE_CUDA) |
|
FILE(GLOB LIBRARY_FILES_CUDA "*.cu") |
|
LIST(APPEND LIBRARY_FILES_C ${LIBRARY_FILES_CUDA}) |
|
endif() |
|
|
|
GET_FILENAME_COMPONENT(PATH_PythonWrapper_cpp ${CMAKE_CURRENT_SOURCE_DIR}/PythonWrapper.cpp ABSOLUTE) |
|
LIST(REMOVE_ITEM LIBRARY_FILES_C "${PATH_PythonWrapper_cpp}") |
|
|
|
cxx_library_with_type(MVS "Libs" "" "${cxx_default}" |
|
${LIBRARY_FILES_C} ${LIBRARY_FILES_H} |
|
) |
|
|
|
# Manually set Common.h as the precompiled header |
|
IF(CMAKE_VERSION VERSION_GREATER_EQUAL 3.16.0) |
|
TARGET_PRECOMPILE_HEADERS(MVS PRIVATE "Common.h") |
|
endif() |
|
|
|
TARGET_LINK_LIBRARIES(MeshTextureCUDA |
|
${CUDA_LIBRARIES} |
|
${OpenCV_LIBRARIES} |
|
cudart_static |
|
) |
|
|
|
# Link its dependencies |
|
if(_USE_CUDA) |
|
SET_TARGET_PROPERTIES(MVS PROPERTIES CUDA_ARCHITECTURES "50;72;75") |
|
endif() |
|
TARGET_LINK_LIBRARIES(MVS PRIVATE Common Math IO CGAL::CGAL ${CERES_LIBRARIES} ${CUDA_CUDA_LIBRARY} |
|
MeshTextureCUDA |
|
${CUDA_LIBRARIES}) |
|
|
|
if(OpenMVS_USE_PYTHON) |
|
# Create the Python wrapper |
|
cxx_library_with_type(pyOpenMVS "Libs" "SHARED" "${cxx_default}" |
|
${PATH_PythonWrapper_cpp} |
|
) |
|
# Link its dependencies |
|
if(_USE_CUDA) |
|
SET_TARGET_PROPERTIES(pyOpenMVS PROPERTIES CUDA_ARCHITECTURES "50;72;75") |
|
endif() |
|
TARGET_LINK_LIBRARIES(pyOpenMVS PRIVATE MVS ${OpenMVS_EXTRA_LIBS}) |
|
# Suppress prefix "lib" because Python does not allow this prefix |
|
SET_TARGET_PROPERTIES(pyOpenMVS PROPERTIES PREFIX "") |
|
# Install |
|
INSTALL(TARGETS pyOpenMVS DESTINATION "${PYTHON_INSTALL_PATH}") |
|
endif() |
|
|
|
# Install |
|
SET_TARGET_PROPERTIES(MVS PROPERTIES |
|
PUBLIC_HEADER "${LIBRARY_FILES_H}") |
|
INSTALL(TARGETS MVS |
|
EXPORT OpenMVSTargets |
|
LIBRARY DESTINATION "${INSTALL_LIB_DIR}" |
|
ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" |
|
RUNTIME DESTINATION "${INSTALL_BIN_DIR}" |
|
PUBLIC_HEADER DESTINATION "${INSTALL_INCLUDE_DIR}/MVS")
|
|
|