diff options
author | Brecht Van Lommel <brecht@blender.org> | 2020-09-04 19:41:10 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2020-09-04 18:10:50 +0300 |
commit | f04260d8c679851be6a267214daacae44126156f (patch) | |
tree | 41ea1fca782f0e1f9fab299fe8d77f3b48a34295 /intern/cycles/cmake/external_libs.cmake | |
parent | 417695e4a8bff7927a936797ca01c6461ce0eaf7 (diff) |
CMake: refresh building and external library handling of Cycles standalone
* Support precompiled libraries on Linux
* Add license headers
* Refactoring to deduplicate code
Includes work by Ray Molenkamp and Grische for precompiled libraries.
Ref D8769
Diffstat (limited to 'intern/cycles/cmake/external_libs.cmake')
-rw-r--r-- | intern/cycles/cmake/external_libs.cmake | 549 |
1 files changed, 468 insertions, 81 deletions
diff --git a/intern/cycles/cmake/external_libs.cmake b/intern/cycles/cmake/external_libs.cmake index b09f442bd16..e84dc7a1fca 100644 --- a/intern/cycles/cmake/external_libs.cmake +++ b/intern/cycles/cmake/external_libs.cmake @@ -1,83 +1,152 @@ +# Copyright 2011-2020 Blender Foundation +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +########################################################################### +# Helper macros ########################################################################### -# Precompiled libraries tips and hints, for find_package(). -if(CYCLES_STANDALONE_REPOSITORY) - if(APPLE OR WIN32) - include(precompiled_libs) - endif() -endif() +macro(_set_default variable value) + if(NOT ${variable}) + set(${variable} ${value}) + endif() +endmacro() ########################################################################### -# GLUT +# Precompiled libraries detection +# +# Use precompiled libraries from Blender repository +########################################################################### -if(WITH_CYCLES_STANDALONE AND WITH_CYCLES_STANDALONE_GUI) - set(GLUT_ROOT_PATH ${CYCLES_GLUT}) +if(CYCLES_STANDALONE_REPOSITORY) + if(APPLE) + set(_cycles_lib_dir "${CMAKE_SOURCE_DIR}/../lib/darwin") + elseif(WIN32) + if(CMAKE_CL_64) + set(_cycles_lib_dir "${CMAKE_SOURCE_DIR}/../lib/win64_vc15") + else() + message(FATAL_ERROR "Unsupported Visual Studio Version") + endif() + else() + # Path to a locally compiled libraries. + set(LIBDIR_NAME ${CMAKE_SYSTEM_NAME}_${CMAKE_SYSTEM_PROCESSOR}) + string(TOLOWER ${LIBDIR_NAME} LIBDIR_NAME) + set(LIBDIR_NATIVE_ABI ${CMAKE_SOURCE_DIR}/../lib/${LIBDIR_NAME}) - find_package(GLUT) - message(STATUS "GLUT_FOUND=${GLUT_FOUND}") + # Path to precompiled libraries with known CentOS 7 ABI. + set(LIBDIR_CENTOS7_ABI ${CMAKE_SOURCE_DIR}/../lib/linux_centos7_x86_64) - include_directories( - SYSTEM - ${GLUT_INCLUDE_DIR} - ) -endif() + # Choose the best suitable libraries. + if(EXISTS ${LIBDIR_NATIVE_ABI}) + set(_cycles_lib_dir ${LIBDIR_NATIVE_ABI}) + elseif(EXISTS ${LIBDIR_CENTOS7_ABI}) + set(_cycles_lib_dir ${LIBDIR_CENTOS7_ABI}) + set(WITH_CXX11_ABI OFF) -########################################################################### -# GLEW + if(CMAKE_COMPILER_IS_GNUCC AND + CMAKE_C_COMPILER_VERSION VERSION_LESS 9.3) + message(FATAL_ERROR "GCC version must be at least 9.3 for precompiled libraries, found ${CMAKE_C_COMPILER_VERSION}") + endif() + endif() -# Workaround for unconventional variable name use in Blender. -if(NOT CYCLES_STANDALONE_REPOSITORY) - set(GLEW_INCLUDE_DIR "${GLEW_INCLUDE_PATH}") -endif() + # Avoid namespace pollustion. + unset(LIBDIR_NATIVE_ABI) + unset(LIBDIR_CENTOS7_ABI) + endif() + + if(EXISTS ${_cycles_lib_dir}) + _set_default(BOOST_ROOT "${_cycles_lib_dir}/boost") + _set_default(BLOSC_ROOT_DIR "${_cycles_lib_dir}/blosc") + _set_default(EMBREE_ROOT_DIR "${_cycles_lib_dir}/embree") + _set_default(GLEW_ROOT_DIR "${_cycles_lib_dir}/glew") + _set_default(JPEG_ROOT "${_cycles_lib_dir}/jpeg") + _set_default(LLVM_ROOT_DIR "${_cycles_lib_dir}/llvm") + _set_default(OPENCOLORIO_ROOT_DIR "${_cycles_lib_dir}/opencolorio") + _set_default(OPENEXR_ROOT_DIR "${_cycles_lib_dir}/openexr") + _set_default(OPENIMAGEDENOISE_ROOT_DIR "${_cycles_lib_dir}/openimagedenoise") + _set_default(OPENIMAGEIO_ROOT_DIR "${_cycles_lib_dir}/openimageio") + _set_default(OPENJPEG_ROOT_DIR "${_cycles_lib_dir}/openjpeg") + _set_default(OPENSUBDIV_ROOT_DIR "${_cycles_lib_dir}/opensubdiv") + _set_default(OPENVDB_ROOT_DIR "${_cycles_lib_dir}/openvdb") + _set_default(OSL_ROOT_DIR "${_cycles_lib_dir}/osl") + _set_default(PNG_ROOT "${_cycles_lib_dir}/png") + _set_default(TBB_ROOT_DIR "${_cycles_lib_dir}/tbb") + _set_default(TIFF_ROOT "${_cycles_lib_dir}/tiff") + _set_default(ZLIB_ROOT "${_cycles_lib_dir}/zlib") -if(WITH_CYCLES_STANDALONE) - set(CYCLES_APP_GLEW_LIBRARY ${BLENDER_GLEW_LIBRARIES}) + # Ignore system libraries + set(CMAKE_IGNORE_PATH "${CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES};${CMAKE_SYSTEM_INCLUDE_PATH};${CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES};${CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES}") + else() + unset(_cycles_lib_dir) + endif() endif() ########################################################################### -# CUDA +# Zlib +########################################################################### -if(WITH_CYCLES_CUDA_BINARIES OR NOT WITH_CUDA_DYNLOAD) - find_package(CUDA) # Try to auto locate CUDA toolkit - if(CUDA_FOUND) - message(STATUS "CUDA nvcc = ${CUDA_NVCC_EXECUTABLE}") +if(CYCLES_STANDALONE_REPOSITORY) + if(MSVC AND EXISTS ${_cycles_lib_dir}) + set(ZLIB_INCLUDE_DIRS ${_cycles_lib_dir}/zlib/include) + set(ZLIB_LIBRARIES ${_cycles_lib_dir}/zlib/lib/libz_st.lib) + set(ZLIB_INCLUDE_DIR ${_cycles_lib_dir}/zlib/include) + set(ZLIB_LIBRARY ${_cycles_lib_dir}/zlib/lib/libz_st.lib) + set(ZLIB_DIR ${_cycles_lib_dir}/zlib) + set(ZLIB_FOUND ON) else() - message(STATUS "CUDA compiler not found, disabling WITH_CYCLES_CUDA_BINARIES") - set(WITH_CYCLES_CUDA_BINARIES OFF) - if(NOT WITH_CUDA_DYNLOAD) - message(STATUS "Additionally falling back to dynamic CUDA load") - set(WITH_CUDA_DYNLOAD ON) - endif() + find_package(ZLIB REQUIRED) 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 +########################################################################### +# PThreads +########################################################################### + if(CYCLES_STANDALONE_REPOSITORY) - # PThreads - # TODO(sergey): Bloody exception, handled in precompiled_libs.cmake. - if(NOT WIN32) + if(MSVC AND EXISTS ${_cycles_lib_dir}) + set(PTHREADS_LIBRARIES "${_cycles_lib_dir}/pthreads/lib/pthreadVC3.lib") + include_directories("${_cycles_lib_dir}/pthreads/include") + else() set(CMAKE_THREAD_PREFER_PTHREAD TRUE) find_package(Threads REQUIRED) set(PTHREADS_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) endif() +endif() - #### - # OpenGL +########################################################################### +# OpenImageIO and image libraries +########################################################################### - # 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}" - ) +if(CYCLES_STANDALONE_REPOSITORY) + if(MSVC AND EXISTS ${_cycles_lib_dir}) + add_definitions( + # OIIO changed the name of this define in newer versions + # we define both, so it would work with both old and new + # versions. + -DOIIO_STATIC_BUILD + -DOIIO_STATIC_DEFINE + ) + + # Special exceptions for libraries which needs explicit debug version + set(OPENIMAGEIO_LIBRARY + optimized ${OPENIMAGEIO_ROOT_DIR}/lib/OpenImageIO.lib + optimized ${OPENIMAGEIO_ROOT_DIR}/lib/OpenImageIO_Util.lib + debug ${OPENIMAGEIO_ROOT_DIR}/lib/OpenImageIO_d.lib + debug ${OPENIMAGEIO_ROOT_DIR}/lib/OpenImageIO_Util_d.lib + ) + endif() - #### - # OpenImageIO find_package(OpenImageIO REQUIRED) if(OPENIMAGEIO_PUGIXML_FOUND) set(PUGIXML_INCLUDE_DIR "${OPENIMAGEIO_INCLUDE_DIR/OpenImageIO}") @@ -86,37 +155,143 @@ if(CYCLES_STANDALONE_REPOSITORY) find_package(PugiXML REQUIRED) endif() - # OIIO usually depends on OpenEXR, so find this library - # but don't make it required. - find_package(OpenEXR) + # Dependencies + if(MSVC AND EXISTS ${_cycles_lib_dir}) + set(OPENJPEG_INCLUDE_DIR ${OPENJPEG}/include/openjpeg-2.3) + set(OPENJPEG_LIBRARY ${_cycles_lib_dir}/openjpeg/lib/openjp2${CMAKE_STATIC_LIBRARY_SUFFIX}) + endif() - #### - # OpenShadingLanguage - if(WITH_CYCLES_OSL) - find_package(OpenShadingLanguage REQUIRED) + find_package(JPEG REQUIRED) + find_package(OpenJPEG REQUIRED) + find_package(TIFF REQUIRED) + find_package(PNG REQUIRED) +endif() + +########################################################################### +# OpenEXR +########################################################################### + +if(CYCLES_STANDALONE_REPOSITORY) + if(MSVC AND EXISTS ${_cycles_lib_dir}) + set(OPENEXR_IEX_LIBRARY + optimized ${OPENEXR_ROOT_DIR}/lib/Iex_s.lib + debug ${OPENEXR_ROOT_DIR}/lib/Iex_s_d.lib + ) + set(OPENEXR_HALF_LIBRARY + optimized ${OPENEXR_ROOT_DIR}/lib/Half_s.lib + debug ${OPENEXR_ROOT_DIR}/lib/Half_s_d.lib + ) + set(OPENEXR_ILMIMF_LIBRARY + optimized ${OPENEXR_ROOT_DIR}/lib/IlmImf_s.lib + debug ${OPENEXR_ROOT_DIR}/lib/IlmImf_s_d.lib + ) + set(OPENEXR_IMATH_LIBRARY + optimized ${OPENEXR_ROOT_DIR}/lib/Imath_s.lib + debug ${OPENEXR_ROOT_DIR}/lib/Imath_s_d.lib + ) + set(OPENEXR_ILMTHREAD_LIBRARY + optimized ${OPENEXR_ROOT_DIR}/lib/IlmThread_s.lib + debug ${OPENEXR_ROOT_DIR}/lib/IlmThread_s_d.lib + ) + endif() + + find_package(OpenEXR REQUIRED) +endif() + +########################################################################### +# OpenShadingLanguage & LLVM +########################################################################### + +if(WITH_CYCLES_OSL) + if(CYCLES_STANDALONE_REPOSITORY) + if(EXISTS ${_cycles_lib_dir}) + set(LLVM_STATIC ON) + endif() + + find_package(OSL REQUIRED) find_package(LLVM REQUIRED) + + if(MSVC AND EXISTS ${_cycles_lib_dir}) + # TODO(sergey): On Windows llvm-config doesn't give proper results for the + # library names, use hardcoded libraries for now. + file(GLOB _llvm_libs_release ${LLVM_ROOT_DIR}/lib/*.lib) + file(GLOB _llvm_libs_debug ${LLVM_ROOT_DIR}/debug/lib/*.lib) + set(_llvm_libs) + foreach(_llvm_lib_path ${_llvm_libs_release}) + get_filename_component(_llvm_lib_name ${_llvm_lib_path} ABSOLUTE) + list(APPEND _llvm_libs optimized ${_llvm_lib_name}) + endforeach() + foreach(_llvm_lib_path ${_llvm_libs_debug}) + get_filename_component(_llvm_lib_name ${_llvm_lib_path} ABSOLUTE) + list(APPEND _llvm_libs debug ${_llvm_lib_name}) + endforeach() + set(LLVM_LIBRARY ${_llvm_libs}) + unset(_llvm_lib_name) + unset(_llvm_lib_path) + unset(_llvm_libs) + unset(_llvm_libs_debug) + unset(_llvm_libs_release) + + set(OSL_LIBRARIES + optimized ${OSL_ROOT_DIR}/lib/oslcomp.lib + optimized ${OSL_ROOT_DIR}/lib/oslexec.lib + optimized ${OSL_ROOT_DIR}/lib/oslquery.lib + optimized ${OSL_ROOT_DIR}/lib/pugixml.lib + debug ${OSL_ROOT_DIR}/lib/oslcomp_d.lib + debug ${OSL_ROOT_DIR}/lib/oslexec_d.lib + debug ${OSL_ROOT_DIR}/lib/oslquery_d.lib + debug ${OSL_ROOT_DIR}/lib/pugixml_d.lib + ) + endif() endif() +endif() + +########################################################################### +# OpenColorIO +########################################################################### - #### - # OpenColorIO - if(WITH_OPENCOLORIO) +if(WITH_CYCLES_OPENCOLORIO) + if(CYCLES_STANDALONE_REPOSITORY) find_package(OpenColorIO REQUIRED) + set(WITH_OPENCOLORIO ON) + + if(MSVC AND EXISTS ${_cycles_lib_dir}) + set(OPENCOLORIO_LIBPATH ${_cycles_lib_dir}/opencolorio/lib) + set(OPENCOLORIO_LIBRARIES + optimized ${OPENCOLORIO_LIBPATH}/OpenColorIO.lib + optimized ${OPENCOLORIO_LIBPATH}/tinyxml.lib + optimized ${OPENCOLORIO_LIBPATH}/libyaml-cpp.lib + debug ${OPENCOLORIO_LIBPATH}/OpencolorIO_d.lib + debug ${OPENCOLORIO_LIBPATH}/tinyxml_d.lib + debug ${OPENCOLORIO_LIBPATH}/libyaml-cpp_d.lib + ) + endif() + endif() +endif() + +########################################################################### +# Boost +########################################################################### + +if(CYCLES_STANDALONE_REPOSITORY) + if(EXISTS ${_cycles_lib_dir}) + if(MSVC) + set(Boost_USE_STATIC_RUNTIME OFF) + set(Boost_USE_MULTITHREADED ON) + set(Boost_USE_STATIC_LIBS ON) + else() + set(BOOST_LIBRARYDIR ${_cycles_lib_dir}/boost/lib) + set(Boost_NO_BOOST_CMAKE ON) + set(Boost_NO_SYSTEM_PATHS ON) + endif() 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() + list(APPEND __boost_packages wave) endif() find_package(Boost 1.48 COMPONENTS ${__boost_packages} REQUIRED) if(NOT Boost_FOUND) @@ -131,21 +306,233 @@ if(CYCLES_STANDALONE_REPOSITORY) set(BOOST_LIBRARIES ${Boost_LIBRARIES}) set(BOOST_LIBPATH ${Boost_LIBRARY_DIRS}) set(BOOST_DEFINITIONS "-DBOOST_ALL_NO_LIB") +endif() + +########################################################################### +# Embree +########################################################################### + +if(WITH_CYCLES_EMBREE) + if(CYCLES_STANDALONE_REPOSITORY) + if(MSVC AND EXISTS ${_cycles_lib_dir}) + set(EMBREE_TASKING_LIBRARY + optimized ${EMBREE_ROOT_DIR}/lib/tasking.lib + debug ${EMBREE_ROOT_DIR}/lib/tasking_d.lib + ) + set(EMBREE_EMBREE3_LIBRARY + optimized ${EMBREE_ROOT_DIR}/lib/embree3.lib + debug ${EMBREE_ROOT_DIR}/lib/embree3_d.lib + ) + set(EMBREE_EMBREE_AVX_LIBRARY + optimized ${EMBREE_ROOT_DIR}/lib/embree_avx.lib + debug ${EMBREE_ROOT_DIR}/lib/embree_avx_d.lib + ) + set(EMBREE_EMBREE_AVX2_LIBRARY + optimized ${EMBREE_ROOT_DIR}/lib/embree_avx2.lib + debug ${EMBREE_ROOT_DIR}/lib/embree_avx2_d.lib + ) + set(EMBREE_EMBREE_SSE42_LIBRARY + optimized ${EMBREE_ROOT_DIR}/lib/embree_sse42.lib + debug ${EMBREE_ROOT_DIR}/lib/embree_sse42_d.lib + ) + set(EMBREE_LEXERS_LIBRARY + optimized ${EMBREE_ROOT_DIR}/lib/lexers.lib + debug ${EMBREE_ROOT_DIR}/lib/lexers_d.lib + ) + set(EMBREE_MATH_LIBRARY + optimized ${EMBREE_ROOT_DIR}/lib/math.lib + debug ${EMBREE_ROOT_DIR}/lib/math_d.lib + ) + set(EMBREE_SIMD_LIBRARY + optimized ${EMBREE_ROOT_DIR}/lib/simd.lib + debug ${EMBREE_ROOT_DIR}/lib/simd_d.lib + ) + set(EMBREE_SYS_LIBRARY + optimized ${EMBREE_ROOT_DIR}/lib/sys.lib + debug ${EMBREE_ROOT_DIR}/lib/sys_d.lib + ) + endif() - #### - # Embree - if(WITH_CYCLES_EMBREE) find_package(Embree 3.8.0 REQUIRED) endif() +endif() + +########################################################################### +# Logging +########################################################################### - #### - # Logging - if(WITH_CYCLES_LOGGING) +if(WITH_CYCLES_LOGGING) + if(CYCLES_STANDALONE_REPOSITORY) find_package(Glog REQUIRED) find_package(Gflags REQUIRED) endif() +endif() + +########################################################################### +# OpenSubdiv +########################################################################### + +if(WITH_CYCLES_OPENSUBDIV) + if(CYCLES_STANDALONE_REPOSITORY) + find_package(OpenSubdiv REQUIRED) + set(WITH_OPENSUBDIV ON) + + if(MSVC AND EXISTS ${_cycles_lib_dir}) + set(OPENSUBDIV_LIBRARIES + optimized ${OPENSUBDIV_ROOT_DIR}/lib/osdCPU.lib + optimized ${OPENSUBDIV_ROOT_DIR}/lib/osdGPU.lib + debug ${OPENSUBDIV_ROOT_DIR}/lib/osdCPU_d.lib + debug ${OPENSUBDIV_ROOT_DIR}/lib/osdGPU_d.lib + ) + endif() + endif() +endif() + +########################################################################### +# OpenVDB +########################################################################### + +if(WITH_CYCLES_OPENVDB) + if(CYCLES_STANDALONE_REPOSITORY) + if(MSVC AND EXISTS ${_cycles_lib_dir}) + set(BLOSC_LIBRARY + optimized ${BLOSC_ROOT_DIR}/lib/libblosc.lib + debug ${BLOSC_ROOT_DIR}/lib/libblosc_d.lib) + endif() + + find_package(OpenVDB REQUIRED) + find_package(Blosc REQUIRED) + set(WITH_OPENVDB ON) + set(OPENVDB_DEFINITIONS -DNOMINMAX -D_USE_MATH_DEFINES) + endif() +endif() + +########################################################################### +# OpenImageDenoise +########################################################################### + +if(WITH_CYCLES_OPENIMAGEDENOISE) + if(CYCLES_STANDALONE_REPOSITORY) + find_package(OpenImageDenoise REQUIRED) + set(WITH_OPENIMAGEDENOISE ON) + + if(MSVC AND EXISTS ${_cycles_lib_dir}) + set(OPENIMAGEDENOISE_LIBRARIES + optimized ${OPENIMAGEDENOISE_ROOT_DIR}/lib/OpenImageDenoise.lib + optimized ${OPENIMAGEDENOISE_ROOT_DIR}/lib/common.lib + optimized ${OPENIMAGEDENOISE_ROOT_DIR}/lib/dnnl.lib + debug ${OPENIMAGEDENOISE_ROOT_DIR}/lib/OpenImageDenoise_d.lib + debug ${OPENIMAGEDENOISE_ROOT_DIR}/lib/common_d.lib + debug ${OPENIMAGEDENOISE_ROOT_DIR}/lib/dnnl_d.lib) + endif() + + endif() +endif() + +########################################################################### +# TBB +########################################################################### + +if(CYCLES_STANDALONE_REPOSITORY) + if(MSVC AND EXISTS ${_cycles_lib_dir}) + set(TBB_LIBRARY + optimized ${TBB_ROOT_DIR}/lib/tbb.lib + debug ${TBB_ROOT_DIR}/lib/debug/tbb_debug.lib + ) + endif() + + find_package(TBB REQUIRED) +endif() + +########################################################################### +# GLEW +########################################################################### + +if(CYCLES_STANDALONE_REPOSITORY) + if(MSVC AND EXISTS ${_cycles_lib_dir}) + set(GLEW_LIBRARY "${_cycles_lib_dir}/opengl/lib/glew.lib") + set(GLEW_INCLUDE_DIR "${_cycles_lib_dir}/opengl/include") + add_definitions(-DGLEW_STATIC) + endif() + + find_package(GLEW REQUIRED) +else() + # Workaround for unconventional variable name use in Blender. + set(GLEW_INCLUDE_DIR "${GLEW_INCLUDE_PATH}") +endif() + +########################################################################### +# System Libraries +########################################################################### + +# Detect system libraries again +if(EXISTS ${_cycles_lib_dir}) + unset(CMAKE_IGNORE_PATH) +endif() + +########################################################################### +# OpenGL +########################################################################### + +if(CYCLES_STANDALONE_REPOSITORY) + if(NOT DEFINED OpenGL_GL_PREFERENCE) + set(OpenGL_GL_PREFERENCE "LEGACY") + endif() + + find_package(OpenGL REQUIRED) - unset(_lib_DIR) + set(CYCLES_GL_LIBRARIES + ${OPENGL_gl_LIBRARY} + ${OPENGL_glu_LIBRARY} + ${GLEW_LIBRARY} + ) else() - set(LLVM_LIBRARIES ${LLVM_LIBRARY}) + set(CYCLES_GL_LIBRARIES + bf_intern_glew_mx + ${BLENDER_GL_LIBRARIES} + ${BLENDER_GLEW_LIBRARIES}) +endif() + +########################################################################### +# GLUT +########################################################################### + +if(WITH_CYCLES_STANDALONE AND WITH_CYCLES_STANDALONE_GUI) + if(MSVC AND EXISTS ${_cycles_lib_dir}) + add_definitions(-DFREEGLUT_STATIC -DFREEGLUT_LIB_PRAGMAS=0) + set(GLUT_LIBRARIES "${_cycles_lib_dir}/opengl/lib/freeglut_static.lib") + set(GLUT_INCLUDE_DIR "${_cycles_lib_dir}/opengl/include") + else() + find_package(GLUT) + + if(NOT GLUT_FOUND) + set(WITH_CYCLES_STANDALONE_GUI OFF) + message(STATUS "GLUT not found, disabling Cycles standalone GUI") + endif() + endif() + + include_directories( + SYSTEM + ${GLUT_INCLUDE_DIR} + ) +endif() + +########################################################################### +# CUDA +########################################################################### + +if(WITH_CYCLES_CUDA_BINARIES OR NOT WITH_CUDA_DYNLOAD) + 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) + if(NOT WITH_CUDA_DYNLOAD) + message(STATUS "Additionally falling back to dynamic CUDA load") + set(WITH_CUDA_DYNLOAD ON) + endif() + endif() endif() + +unset(_cycles_lib_dir) |