
The main purpose of such linking is to make Blender compatible with NVidia's debuggers and profilers which are doing some LD_PRELOAD magic to intercept some function calls. Such magic conflicts with our CUDA wrangler magic and causes segmentation faults. The option is disabled by default, so there's no affect on any of artists. In order to make Blender linked directly against CUDA library use the WITH_CUDA_DYNLOAD CMake option (it's marked as advanced).
144 lines
4.1 KiB
CMake
144 lines
4.1 KiB
CMake
###########################################################################
|
|
# Precompiled libraries tips and hints, for find_package().
|
|
|
|
if(CYCLES_STANDALONE_REPOSITORY)
|
|
if(APPLE OR WIN32)
|
|
include(precompiled_libs)
|
|
endif()
|
|
endif()
|
|
|
|
###########################################################################
|
|
# GLUT
|
|
|
|
if(WITH_CYCLES_STANDALONE AND WITH_CYCLES_STANDALONE_GUI)
|
|
set(GLUT_ROOT_PATH ${CYCLES_GLUT})
|
|
|
|
find_package(GLUT)
|
|
message(STATUS "GLUT_FOUND=${GLUT_FOUND}")
|
|
|
|
include_directories(
|
|
SYSTEM
|
|
${GLUT_INCLUDE_DIR}
|
|
)
|
|
endif()
|
|
|
|
###########################################################################
|
|
# GLEW
|
|
|
|
# Workaround for unconventional variable name use in Blender.
|
|
if(NOT CYCLES_STANDALONE_REPOSITORY)
|
|
set(GLEW_INCLUDE_DIR "${GLEW_INCLUDE_PATH}")
|
|
endif()
|
|
|
|
if(WITH_CYCLES_STANDALONE AND WITH_CYCLES_STANDALONE_GUI)
|
|
set(CYCLES_APP_GLEW_LIBRARY ${BLENDER_GLEW_LIBRARIES})
|
|
endif()
|
|
|
|
###########################################################################
|
|
# CUDA
|
|
|
|
if(WITH_CYCLES_CUDA_BINARIES OR NOT WITH_CUDA_DUNLOAD)
|
|
find_package(CUDA) # Try to auto locate CUDA toolkit
|
|
if(CUDA_FOUND)
|
|
message(STATUS "CUDA nvcc = ${CUDA_NVCC_EXECUTABLE}")
|
|
else()
|
|
message(STATUS "CUDA compiler not found, disabling WITH_CYCLES_CUDA_BINARIES")
|
|
set(WITH_CYCLES_CUDA_BINARIES OFF)
|
|
endif()
|
|
endif()
|
|
|
|
# Packages which are being found by Blender when building from inside Blender
|
|
# source code. but which we need to take care of when building Cycles from a
|
|
# standalone repository
|
|
if(CYCLES_STANDALONE_REPOSITORY)
|
|
# PThreads
|
|
# TODO(sergey): Bloody exception, handled in precompiled_libs.cmake.
|
|
if(NOT WIN32)
|
|
set(CMAKE_THREAD_PREFER_PTHREAD TRUE)
|
|
find_package(Threads REQUIRED)
|
|
set(PTHREADS_LIBRARIES ${CMAKE_THREAD_LIBS_INIT})
|
|
endif()
|
|
|
|
####
|
|
# OpenGL
|
|
|
|
# TODO(sergey): We currently re-use the same variable name as we use
|
|
# in Blender. Ideally we need to make it CYCLES_GL_LIBRARIES.
|
|
find_package(OpenGL REQUIRED)
|
|
find_package(GLEW REQUIRED)
|
|
list(APPEND BLENDER_GL_LIBRARIES
|
|
"${OPENGL_gl_LIBRARY}"
|
|
"${OPENGL_glu_LIBRARY}"
|
|
"${GLEW_LIBRARY}"
|
|
)
|
|
|
|
####
|
|
# OpenImageIO
|
|
find_package(OpenImageIO REQUIRED)
|
|
if(OPENIMAGEIO_PUGIXML_FOUND)
|
|
set(PUGIXML_INCLUDE_DIR "${OPENIMAGEIO_INCLUDE_DIR/OpenImageIO}")
|
|
set(PUGIXML_LIBRARIES "")
|
|
else()
|
|
find_package(PugiXML REQUIRED)
|
|
endif()
|
|
|
|
# OIIO usually depends on OpenEXR, so find this library
|
|
# but don't make it required.
|
|
find_package(OpenEXR)
|
|
|
|
####
|
|
# OpenShadingLanguage
|
|
if(WITH_CYCLES_OSL)
|
|
find_package(OpenShadingLanguage REQUIRED)
|
|
find_package(LLVM REQUIRED)
|
|
endif()
|
|
|
|
####
|
|
# Boost
|
|
set(__boost_packages filesystem regex system thread date_time)
|
|
if(WITH_CYCLES_NETWORK)
|
|
list(APPEND __boost_packages serialization)
|
|
endif()
|
|
if(WITH_CYCLES_OSL)
|
|
# TODO(sergey): This is because of the way how our precompiled
|
|
# libraries works, could be different for someone's else libs..
|
|
if(APPLE OR MSVC)
|
|
list(APPEND __boost_packages wave)
|
|
elseif(NOT (${OSL_LIBRARY_VERSION_MAJOR} EQUAL "1" AND ${OSL_LIBRARY_VERSION_MINOR} LESS "6"))
|
|
list(APPEND __boost_packages wave)
|
|
endif()
|
|
endif()
|
|
find_package(Boost 1.48 COMPONENTS ${__boost_packages} REQUIRED)
|
|
if(NOT Boost_FOUND)
|
|
# Try to find non-multithreaded if -mt not found, this flag
|
|
# doesn't matter for us, it has nothing to do with thread
|
|
# safety, but keep it to not disturb build setups.
|
|
set(Boost_USE_MULTITHREADED OFF)
|
|
find_package(Boost 1.48 COMPONENTS ${__boost_packages})
|
|
endif()
|
|
unset(__boost_packages)
|
|
set(BOOST_INCLUDE_DIR ${Boost_INCLUDE_DIRS})
|
|
set(BOOST_LIBRARIES ${Boost_LIBRARIES})
|
|
set(BOOST_LIBPATH ${Boost_LIBRARY_DIRS})
|
|
set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB")
|
|
|
|
####
|
|
# Logging
|
|
if(WITH_CYCLES_LOGGING)
|
|
find_package(Glog REQUIRED)
|
|
find_package(Gflags REQUIRED)
|
|
endif()
|
|
|
|
unset(_lib_DIR)
|
|
else()
|
|
if(WIN32)
|
|
set(GLOG_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/glog/src/windows)
|
|
set(GFLAGS_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/gflags/src)
|
|
else()
|
|
set(GLOG_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/glog/src)
|
|
set(GFLAGS_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/extern/gflags/src)
|
|
endif()
|
|
set(GFLAGS_NAMESPACE "gflags")
|
|
set(LLVM_LIBRARIES ${LLVM_LIBRARY})
|
|
endif()
|