From f04260d8c679851be6a267214daacae44126156f Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Fri, 4 Sep 2020 18:41:10 +0200 Subject: [PATCH] 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 --- intern/cycles/CMakeLists.txt | 14 + intern/cycles/app/CMakeLists.txt | 128 ++-- intern/cycles/blender/CMakeLists.txt | 13 + intern/cycles/bvh/CMakeLists.txt | 13 + intern/cycles/cmake/external_libs.cmake | 619 ++++++++++++++++---- intern/cycles/cmake/macros.cmake | 353 +++++++++++ intern/cycles/device/CMakeLists.txt | 15 +- intern/cycles/doc/CMakeLists.txt | 13 + intern/cycles/doc/license/CMakeLists.txt | 13 + intern/cycles/graph/CMakeLists.txt | 13 + intern/cycles/kernel/CMakeLists.txt | 14 + intern/cycles/kernel/osl/CMakeLists.txt | 13 + intern/cycles/kernel/shaders/CMakeLists.txt | 13 + intern/cycles/render/CMakeLists.txt | 20 +- intern/cycles/subd/CMakeLists.txt | 13 + intern/cycles/test/CMakeLists.txt | 82 +-- intern/cycles/util/CMakeLists.txt | 13 + 17 files changed, 1093 insertions(+), 269 deletions(-) diff --git a/intern/cycles/CMakeLists.txt b/intern/cycles/CMakeLists.txt index 0dd182526b1..d114820d723 100644 --- a/intern/cycles/CMakeLists.txt +++ b/intern/cycles/CMakeLists.txt @@ -1,3 +1,17 @@ +# 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. + # Standalone or with Blender if(NOT WITH_BLENDER AND WITH_CYCLES_STANDALONE) set(CYCLES_INSTALL_PATH "") diff --git a/intern/cycles/app/CMakeLists.txt b/intern/cycles/app/CMakeLists.txt index a2b0ed03925..67b852013f3 100644 --- a/intern/cycles/app/CMakeLists.txt +++ b/intern/cycles/app/CMakeLists.txt @@ -1,3 +1,20 @@ +# 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. + +##################################################################### +# Cycles standalone executable +##################################################################### set(INC .. @@ -5,8 +22,6 @@ set(INC set(INC_SYS ) -# NOTE: LIBRARIES contains all the libraries which are common -# across release and debug build types, stored in a linking order. set(LIBRARIES cycles_device cycles_kernel @@ -15,96 +30,33 @@ set(LIBRARIES cycles_subd cycles_graph cycles_util - ${BLENDER_GL_LIBRARIES} - ${CYCLES_APP_GLEW_LIBRARY} - ${PNG_LIBRARIES} - ${JPEG_LIBRARIES} - ${ZLIB_LIBRARIES} - ${TIFF_LIBRARY} - ${PTHREADS_LIBRARIES} ) -if(WITH_CUDA_DYNLOAD) - list(APPEND LIBRARIES extern_cuew) -else() - list(APPEND LIBRARIES ${CUDA_CUDA_LIBRARY}) -endif() - if(WITH_CYCLES_OSL) list(APPEND LIBRARIES cycles_kernel_osl) endif() -if(NOT CYCLES_STANDALONE_REPOSITORY) - list(APPEND LIBRARIES bf_intern_glew_mx bf_intern_guardedalloc bf_intern_numaapi bf_intern_sky) -endif() - -if(WITH_CYCLES_LOGGING) - list(APPEND LIBRARIES - ${GLOG_LIBRARIES} - ${GFLAGS_LIBRARIES} - ) +if(CYCLES_STANDALONE_REPOSITORY) + list(APPEND LIBRARIES extern_sky) +else() + list(APPEND LIBRARIES bf_intern_sky) endif() if(WITH_CYCLES_STANDALONE AND WITH_CYCLES_STANDALONE_GUI) list(APPEND LIBRARIES ${GLUT_LIBRARIES}) endif() +list(APPEND LIBRARIES ${CYCLES_GL_LIBRARIES}) + # Common configuration. -link_directories( - ${OPENIMAGEIO_LIBPATH} - ${BOOST_LIBPATH} - ${PNG_LIBPATH} - ${JPEG_LIBPATH} - ${ZLIB_LIBPATH} - ${TIFF_LIBPATH} - ${OPENEXR_LIBPATH} - ${OPENJPEG_LIBPATH} - ${OPENVDB_LIBPATH} -) - -if(WITH_OPENCOLORIO) - link_directories(${OPENCOLORIO_LIBPATH}) -endif() +cycles_link_directories() add_definitions(${GL_DEFINITIONS}) include_directories(${INC}) include_directories(SYSTEM ${INC_SYS}) -# Make sure given target is linked against proper libraries -# which varies across debug and release build types. -# -# This will also make sure dependencies of that libraries -# are sent to the linker after them. -# -# TODO(sergey): Think of a better place for this? -macro(cycles_target_link_libraries target) - target_link_libraries(${target} ${LIBRARIES}) - if(WITH_CYCLES_OSL) - target_link_libraries(${target} ${OSL_LIBRARIES} ${LLVM_LIBRARIES}) - endif() - if(WITH_CYCLES_EMBREE) - target_link_libraries(${target} ${EMBREE_LIBRARIES}) - endif() - if(WITH_OPENSUBDIV) - target_link_libraries(${target} ${OPENSUBDIV_LIBRARIES}) - endif() - if(WITH_OPENCOLORIO) - target_link_libraries(${target} ${OPENCOLORIO_LIBRARIES}) - endif() - target_link_libraries( - ${target} - ${OPENIMAGEIO_LIBRARIES} - ${OPENEXR_LIBRARIES} - ${OPENJPEG_LIBRARIES} - ${PUGIXML_LIBRARIES} - ${BOOST_LIBRARIES} - ${CMAKE_DL_LIBS} - ${PLATFORM_LINKLIBS} - ) -endmacro() - # Application build targets if(WITH_CYCLES_STANDALONE) @@ -113,20 +65,31 @@ if(WITH_CYCLES_STANDALONE) cycles_xml.cpp cycles_xml.h ) - add_executable(cycles ${SRC}) + add_executable(cycles ${SRC} ${INC} ${INC_SYS}) + unset(SRC) + + target_link_libraries(cycles ${LIBRARIES}) cycles_target_link_libraries(cycles) if(UNIX AND NOT APPLE) set_target_properties(cycles PROPERTIES INSTALL_RPATH $ORIGIN/lib) endif() - unset(SRC) + + if(CYCLES_STANDALONE_REPOSITORY) + cycles_install_libraries(cycles) + endif() endif() +##################################################################### +# Cycles network server executable +##################################################################### + if(WITH_CYCLES_NETWORK) set(SRC cycles_server.cpp ) add_executable(cycles_server ${SRC}) + target_link_libraries(cycles_server ${LIBRARIES}) cycles_target_link_libraries(cycles_server) if(UNIX AND NOT APPLE) @@ -135,6 +98,10 @@ if(WITH_CYCLES_NETWORK) unset(SRC) endif() +##################################################################### +# Cycles cubin compiler executable +##################################################################### + if(WITH_CYCLES_CUBIN_COMPILER) # 32 bit windows is special, nvrtc is not supported on x86, so even # though we are building 32 bit blender a 64 bit cubin_cc will have @@ -151,18 +118,7 @@ if(WITH_CYCLES_CUBIN_COMPILER) ) add_executable(cycles_cubin_cc ${SRC}) include_directories(${INC}) - target_link_libraries(cycles_cubin_cc - extern_cuew - ${OPENIMAGEIO_LIBRARIES} - ${OPENEXR_LIBRARIES} - ${OPENJPEG_LIBRARIES} - ${PUGIXML_LIBRARIES} - ${BOOST_LIBRARIES} - ${PLATFORM_LINKLIBS} - ) - if(NOT CYCLES_STANDALONE_REPOSITORY) - target_link_libraries(cycles_cubin_cc bf_intern_guardedalloc) - endif() + cycles_target_link_libraries(cycles_cubin_cc) unset(SRC) unset(INC) endif() diff --git a/intern/cycles/blender/CMakeLists.txt b/intern/cycles/blender/CMakeLists.txt index e0fa45dffbc..0d805dc8683 100644 --- a/intern/cycles/blender/CMakeLists.txt +++ b/intern/cycles/blender/CMakeLists.txt @@ -1,3 +1,16 @@ +# 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. set(INC .. diff --git a/intern/cycles/bvh/CMakeLists.txt b/intern/cycles/bvh/CMakeLists.txt index 8b8f3ca7265..703c69b1797 100644 --- a/intern/cycles/bvh/CMakeLists.txt +++ b/intern/cycles/bvh/CMakeLists.txt @@ -1,3 +1,16 @@ +# 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. set(INC .. 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,20 +1,515 @@ +# 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 +########################################################################### + +macro(_set_default variable value) + if(NOT ${variable}) + set(${variable} ${value}) + endif() +endmacro() + +########################################################################### +# Precompiled libraries detection +# +# Use precompiled libraries from Blender repository ########################################################################### -# Precompiled libraries tips and hints, for find_package(). if(CYCLES_STANDALONE_REPOSITORY) - if(APPLE OR WIN32) - include(precompiled_libs) + 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}) + + # Path to precompiled libraries with known CentOS 7 ABI. + set(LIBDIR_CENTOS7_ABI ${CMAKE_SOURCE_DIR}/../lib/linux_centos7_x86_64) + + # 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) + + 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() + + # 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") + + # 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() +########################################################################### +# Zlib +########################################################################### + +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() + find_package(ZLIB REQUIRED) + endif() +endif() + +########################################################################### +# PThreads +########################################################################### + +if(CYCLES_STANDALONE_REPOSITORY) + 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() + +########################################################################### +# OpenImageIO and image libraries +########################################################################### + +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() + + 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() + + # 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() + + 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 +########################################################################### + +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() + + set(__boost_packages filesystem regex system thread date_time) + if(WITH_CYCLES_NETWORK) + list(APPEND __boost_packages serialization) + endif() + if(WITH_CYCLES_OSL) + list(APPEND __boost_packages wave) + 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") +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() + + find_package(Embree 3.8.0 REQUIRED) + endif() +endif() + +########################################################################### +# 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) + + set(CYCLES_GL_LIBRARIES + ${OPENGL_gl_LIBRARY} + ${OPENGL_glu_LIBRARY} + ${GLEW_LIBRARY} + ) +else() + 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) - set(GLUT_ROOT_PATH ${CYCLES_GLUT}) + 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) - find_package(GLUT) - message(STATUS "GLUT_FOUND=${GLUT_FOUND}") + if(NOT GLUT_FOUND) + set(WITH_CYCLES_STANDALONE_GUI OFF) + message(STATUS "GLUT not found, disabling Cycles standalone GUI") + endif() + endif() include_directories( SYSTEM @@ -22,20 +517,9 @@ if(WITH_CYCLES_STANDALONE AND WITH_CYCLES_STANDALONE_GUI) ) 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) - set(CYCLES_APP_GLEW_LIBRARY ${BLENDER_GLEW_LIBRARIES}) -endif() - ########################################################################### # CUDA +########################################################################### if(WITH_CYCLES_CUDA_BINARIES OR NOT WITH_CUDA_DYNLOAD) find_package(CUDA) # Try to auto locate CUDA toolkit @@ -51,101 +535,4 @@ if(WITH_CYCLES_CUDA_BINARIES OR NOT WITH_CUDA_DYNLOAD) 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() - - #### - # OpenColorIO - if(WITH_OPENCOLORIO) - find_package(OpenColorIO 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") - - #### - # Embree - if(WITH_CYCLES_EMBREE) - find_package(Embree 3.8.0 REQUIRED) - endif() - - #### - # Logging - if(WITH_CYCLES_LOGGING) - find_package(Glog REQUIRED) - find_package(Gflags REQUIRED) - endif() - - unset(_lib_DIR) -else() - set(LLVM_LIBRARIES ${LLVM_LIBRARY}) -endif() +unset(_cycles_lib_dir) diff --git a/intern/cycles/cmake/macros.cmake b/intern/cycles/cmake/macros.cmake index 13328a8b6bf..1a2a730a665 100644 --- a/intern/cycles/cmake/macros.cmake +++ b/intern/cycles/cmake/macros.cmake @@ -1,3 +1,245 @@ +# 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. + +macro(ADD_CHECK_CXX_COMPILER_FLAG + _CXXFLAGS + _CACHE_VAR + _FLAG) + + include(CheckCXXCompilerFlag) + + CHECK_CXX_COMPILER_FLAG("${_FLAG}" "${_CACHE_VAR}") + if(${_CACHE_VAR}) + # message(STATUS "Using CXXFLAG: ${_FLAG}") + set(${_CXXFLAGS} "${${_CXXFLAGS}} ${_FLAG}") + else() + message(STATUS "Unsupported CXXFLAG: ${_FLAG}") + endif() +endmacro() + +# pair of macros to allow libraries to be specify files to install, but to +# only install them at the end so the directories don't get cleared with +# the files in them. used by cycles to install addon. +macro(delayed_install + base + files + destination) + + foreach(f ${files}) + if(IS_ABSOLUTE ${f}) + set_property(GLOBAL APPEND PROPERTY DELAYED_INSTALL_FILES ${f}) + else() + set_property(GLOBAL APPEND PROPERTY DELAYED_INSTALL_FILES ${base}/${f}) + endif() + set_property(GLOBAL APPEND PROPERTY DELAYED_INSTALL_DESTINATIONS ${destination}) + endforeach() +endmacro() + +# note this is a function instead of a macro so that ${BUILD_TYPE} in targetdir +# does not get expanded in calling but is preserved +function(delayed_do_install + targetdir) + + get_property(files GLOBAL PROPERTY DELAYED_INSTALL_FILES) + get_property(destinations GLOBAL PROPERTY DELAYED_INSTALL_DESTINATIONS) + + if(files) + list(LENGTH files n) + math(EXPR n "${n}-1") + + foreach(i RANGE ${n}) + list(GET files ${i} f) + list(GET destinations ${i} d) + install(FILES ${f} DESTINATION ${targetdir}/${d}) + endforeach() + endif() +endfunction() + +macro(remove_cc_flag + flag) + + string(REGEX REPLACE ${flag} "" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") + string(REGEX REPLACE ${flag} "" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}") + string(REGEX REPLACE ${flag} "" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}") + string(REGEX REPLACE ${flag} "" CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS_MINSIZEREL}") + string(REGEX REPLACE ${flag} "" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}") + + string(REGEX REPLACE ${flag} "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + string(REGEX REPLACE ${flag} "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}") + string(REGEX REPLACE ${flag} "" CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE}") + string(REGEX REPLACE ${flag} "" CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL}") + string(REGEX REPLACE ${flag} "" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}") + +endmacro() + +macro(remove_extra_strict_flags) + if(CMAKE_COMPILER_IS_GNUCC) + remove_cc_flag("-Wunused-parameter") + endif() + + if(CMAKE_C_COMPILER_ID MATCHES "Clang") + remove_cc_flag("-Wunused-parameter") + endif() + + if(MSVC) + # TODO + endif() +endmacro() + +macro(TEST_UNORDERED_MAP_SUPPORT) + # - Detect unordered_map availability + # Test if a valid implementation of unordered_map exists + # and define the include path + # This module defines + # HAVE_UNORDERED_MAP, whether unordered_map implementation was found + # + # HAVE_STD_UNORDERED_MAP_HEADER, was found + # HAVE_UNORDERED_MAP_IN_STD_NAMESPACE, unordered_map is in namespace std + # HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE, unordered_map is in namespace std::tr1 + # + # UNORDERED_MAP_INCLUDE_PREFIX, include path prefix for unordered_map, if found + # UNORDERED_MAP_NAMESPACE, namespace for unordered_map, if found + + include(CheckIncludeFileCXX) + CHECK_INCLUDE_FILE_CXX("unordered_map" HAVE_STD_UNORDERED_MAP_HEADER) + if(HAVE_STD_UNORDERED_MAP_HEADER) + # Even so we've found unordered_map header file it doesn't + # mean unordered_map and unordered_set will be declared in + # std namespace. + # + # Namely, MSVC 2008 have unordered_map header which declares + # unordered_map class in std::tr1 namespace. In order to support + # this, we do extra check to see which exactly namespace is + # to be used. + + include(CheckCXXSourceCompiles) + CHECK_CXX_SOURCE_COMPILES("#include + int main() { + std::unordered_map map; + return 0; + }" + HAVE_UNORDERED_MAP_IN_STD_NAMESPACE) + if(HAVE_UNORDERED_MAP_IN_STD_NAMESPACE) + message(STATUS "Found unordered_map/set in std namespace.") + + set(HAVE_UNORDERED_MAP "TRUE") + set(UNORDERED_MAP_INCLUDE_PREFIX "") + set(UNORDERED_MAP_NAMESPACE "std") + else() + CHECK_CXX_SOURCE_COMPILES("#include + int main() { + std::tr1::unordered_map map; + return 0; + }" + HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE) + if(HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE) + message(STATUS "Found unordered_map/set in std::tr1 namespace.") + + set(HAVE_UNORDERED_MAP "TRUE") + set(UNORDERED_MAP_INCLUDE_PREFIX "") + set(UNORDERED_MAP_NAMESPACE "std::tr1") + else() + message(STATUS "Found but cannot find either std::unordered_map " + "or std::tr1::unordered_map.") + endif() + endif() + else() + CHECK_INCLUDE_FILE_CXX("tr1/unordered_map" HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE) + if(HAVE_UNORDERED_MAP_IN_TR1_NAMESPACE) + message(STATUS "Found unordered_map/set in std::tr1 namespace.") + + set(HAVE_UNORDERED_MAP "TRUE") + set(UNORDERED_MAP_INCLUDE_PREFIX "tr1") + set(UNORDERED_MAP_NAMESPACE "std::tr1") + else() + message(STATUS "Unable to find or . ") + endif() + endif() +endmacro() + +macro(TEST_SHARED_PTR_SUPPORT) + # This check are coming from Ceres library. + # + # Find shared pointer header and namespace. + # + # This module defines the following variables: + # + # SHARED_PTR_FOUND: TRUE if shared_ptr found. + # SHARED_PTR_TR1_MEMORY_HEADER: True if header is to be used + # for the shared_ptr object, otherwise use . + # SHARED_PTR_TR1_NAMESPACE: TRUE if shared_ptr is defined in std::tr1 namespace, + # otherwise it's assumed to be defined in std namespace. + + include(CheckIncludeFileCXX) + set(SHARED_PTR_FOUND FALSE) + CHECK_INCLUDE_FILE_CXX(memory HAVE_STD_MEMORY_HEADER) + if(HAVE_STD_MEMORY_HEADER) + # Finding the memory header doesn't mean that shared_ptr is in std + # namespace. + # + # In particular, MSVC 2008 has shared_ptr declared in std::tr1. In + # order to support this, we do an extra check to see which namespace + # should be used. + include(CheckCXXSourceCompiles) + CHECK_CXX_SOURCE_COMPILES("#include + int main() { + std::shared_ptr int_ptr; + return 0; + }" + HAVE_SHARED_PTR_IN_STD_NAMESPACE) + + if(HAVE_SHARED_PTR_IN_STD_NAMESPACE) + message("-- Found shared_ptr in std namespace using header.") + set(SHARED_PTR_FOUND TRUE) + else() + CHECK_CXX_SOURCE_COMPILES("#include + int main() { + std::tr1::shared_ptr int_ptr; + return 0; + }" + HAVE_SHARED_PTR_IN_TR1_NAMESPACE) + if(HAVE_SHARED_PTR_IN_TR1_NAMESPACE) + message("-- Found shared_ptr in std::tr1 namespace using header.") + set(SHARED_PTR_TR1_NAMESPACE TRUE) + set(SHARED_PTR_FOUND TRUE) + endif() + endif() + endif() + + if(NOT SHARED_PTR_FOUND) + # Further, gcc defines shared_ptr in std::tr1 namespace and + # is to be included for this. And what makes things + # even more tricky is that gcc does have header, so + # all the checks above wouldn't find shared_ptr. + CHECK_INCLUDE_FILE_CXX("tr1/memory" HAVE_TR1_MEMORY_HEADER) + if(HAVE_TR1_MEMORY_HEADER) + CHECK_CXX_SOURCE_COMPILES("#include + int main() { + std::tr1::shared_ptr int_ptr; + return 0; + }" + HAVE_SHARED_PTR_IN_TR1_NAMESPACE_FROM_TR1_MEMORY_HEADER) + if(HAVE_SHARED_PTR_IN_TR1_NAMESPACE_FROM_TR1_MEMORY_HEADER) + message("-- Found shared_ptr in std::tr1 namespace using header.") + set(SHARED_PTR_TR1_MEMORY_HEADER TRUE) + set(SHARED_PTR_TR1_NAMESPACE TRUE) + set(SHARED_PTR_FOUND TRUE) + endif() + endif() + endif() +endmacro() + function(cycles_set_solution_folder target) if(WINDOWS_USE_VISUAL_STUDIO_FOLDERS) get_filename_component(folderdir ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY) @@ -69,3 +311,114 @@ macro(cycles_add_library target library_deps) cycles_set_solution_folder(${target}) endmacro() + +# Cycles library dependencies common to all executables + +macro(cycles_link_directories) + if(WITH_OPENCOLORIO) + link_directories(${OPENCOLORIO_LIBPATH}) + endif() + if(WITH_OPENVDB) + link_directories(${OPENVDB_LIBPATH} ${BLOSC_LIBPATH}) + endif() + if(WITH_OPENSUBDIV) + link_directories(${OPENSUBDIV_LIBPATH}) + endif() + if(WITH_OPENIMAGEDENOISE) + link_directories(${OPENIMAGEDENOISE_LIBPATH}) + endif() + + link_directories( + ${OPENIMAGEIO_LIBPATH} + ${BOOST_LIBPATH} + ${PNG_LIBPATH} + ${JPEG_LIBPATH} + ${ZLIB_LIBPATH} + ${TIFF_LIBPATH} + ${OPENEXR_LIBPATH} + ${OPENJPEG_LIBPATH} + ) +endmacro() + +macro(cycles_target_link_libraries target) + if(WITH_CYCLES_LOGGING) + target_link_libraries(${target} ${GLOG_LIBRARIES} ${GFLAGS_LIBRARIES}) + endif() + if(WITH_CYCLES_OSL) + target_link_libraries(${target} ${OSL_LIBRARIES} ${LLVM_LIBRARY}) + endif() + if(WITH_CYCLES_EMBREE) + target_link_libraries(${target} ${EMBREE_LIBRARIES}) + endif() + if(WITH_OPENSUBDIV) + target_link_libraries(${target} ${OPENSUBDIV_LIBRARIES}) + endif() + if(WITH_OPENCOLORIO) + target_link_libraries(${target} ${OPENCOLORIO_LIBRARIES}) + endif() + if(WITH_OPENVDB) + target_link_libraries(${target} ${OPENVDB_LIBRARIES} ${BLOSC_LIBRARIES}) + endif() + if(WITH_OPENIMAGEDENOISE) + target_link_libraries(${target} ${OPENIMAGEDENOISE_LIBRARIES}) + endif() + target_link_libraries( + ${target} + ${OPENIMAGEIO_LIBRARIES} + ${PNG_LIBRARIES} + ${JPEG_LIBRARIES} + ${TIFF_LIBRARY} + ${OPENJPEG_LIBRARIES} + ${OPENEXR_LIBRARIES} + ${OPENEXR_LIBRARIES} # For circular dependencies between libs. + ${PUGIXML_LIBRARIES} + ${BOOST_LIBRARIES} + ${ZLIB_LIBRARIES} + ${CMAKE_DL_LIBS} + ${PTHREADS_LIBRARIES} + ${PLATFORM_LINKLIBS} + ) + + if(WITH_CUDA_DYNLOAD) + target_link_libraries(${target} extern_cuew) + else() + target_link_libraries(${target} ${CUDA_CUDA_LIBRARY}) + endif() + + if(CYCLES_STANDALONE_REPOSITORY) + target_link_libraries(${target} extern_numaapi) + else() + target_link_libraries(${target} bf_intern_numaapi) + endif() + + if(UNIX) + if(CYCLES_STANDALONE_REPOSITORY) + target_link_libraries(${target} extern_libc_compat) + else() + target_link_libraries(${target} bf_intern_libc_compat) + endif() + endif() + + if(NOT CYCLES_STANDALONE_REPOSITORY) + target_link_libraries(${target} bf_intern_guardedalloc) + endif() +endmacro() + +macro(cycles_install_libraries target) + # Copy DLLs for dynamically linked libraries. + if(WIN32) + if(CMAKE_BUILD_TYPE STREQUAL "Debug") + install( + FILES + ${TBB_ROOT_DIR}/lib/debug/tbb_debug${CMAKE_SHARED_LIBRARY_SUFFIX} + ${OPENVDB_ROOT_DIR}/bin/openvdb_d${CMAKE_SHARED_LIBRARY_SUFFIX} + DESTINATION $) + else() + install( + FILES + ${TBB_ROOT_DIR}/lib/tbb${CMAKE_SHARED_LIBRARY_SUFFIX} + ${OPENVDB_ROOT_DIR}/bin/openvdb${CMAKE_SHARED_LIBRARY_SUFFIX} + DESTINATION $) + endif() + endif() +endmacro() diff --git a/intern/cycles/device/CMakeLists.txt b/intern/cycles/device/CMakeLists.txt index 466872e0557..cc54f64b1bb 100644 --- a/intern/cycles/device/CMakeLists.txt +++ b/intern/cycles/device/CMakeLists.txt @@ -1,3 +1,16 @@ +# 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. set(INC .. @@ -67,7 +80,7 @@ set(LIB cycles_render cycles_kernel cycles_util - ${BLENDER_GL_LIBRARIES} + ${CYCLES_GL_LIBRARIES} ) if(WITH_CUDA_DYNLOAD) diff --git a/intern/cycles/doc/CMakeLists.txt b/intern/cycles/doc/CMakeLists.txt index a8d1b53b47e..26a66ec0d82 100644 --- a/intern/cycles/doc/CMakeLists.txt +++ b/intern/cycles/doc/CMakeLists.txt @@ -1,2 +1,15 @@ +# 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. add_subdirectory(license) diff --git a/intern/cycles/doc/license/CMakeLists.txt b/intern/cycles/doc/license/CMakeLists.txt index 2d8651b6ea1..f861846b574 100644 --- a/intern/cycles/doc/license/CMakeLists.txt +++ b/intern/cycles/doc/license/CMakeLists.txt @@ -1,3 +1,16 @@ +# 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. set(LICENSES Apache_2.0.txt diff --git a/intern/cycles/graph/CMakeLists.txt b/intern/cycles/graph/CMakeLists.txt index 9ff1c5b98c6..790d29e9973 100644 --- a/intern/cycles/graph/CMakeLists.txt +++ b/intern/cycles/graph/CMakeLists.txt @@ -1,3 +1,16 @@ +# 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. set(INC .. diff --git a/intern/cycles/kernel/CMakeLists.txt b/intern/cycles/kernel/CMakeLists.txt index db146226dc7..6651dc2d59d 100644 --- a/intern/cycles/kernel/CMakeLists.txt +++ b/intern/cycles/kernel/CMakeLists.txt @@ -1,3 +1,17 @@ +# 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. + remove_extra_strict_flags() set(INC diff --git a/intern/cycles/kernel/osl/CMakeLists.txt b/intern/cycles/kernel/osl/CMakeLists.txt index d7ab778181e..8144d480589 100644 --- a/intern/cycles/kernel/osl/CMakeLists.txt +++ b/intern/cycles/kernel/osl/CMakeLists.txt @@ -1,3 +1,16 @@ +# 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. set(INC ../.. diff --git a/intern/cycles/kernel/shaders/CMakeLists.txt b/intern/cycles/kernel/shaders/CMakeLists.txt index 9dcedc9ba19..02be7813369 100644 --- a/intern/cycles/kernel/shaders/CMakeLists.txt +++ b/intern/cycles/kernel/shaders/CMakeLists.txt @@ -1,3 +1,16 @@ +# 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. # OSL node shaders diff --git a/intern/cycles/render/CMakeLists.txt b/intern/cycles/render/CMakeLists.txt index 46d9b503c03..43e66aa4e5b 100644 --- a/intern/cycles/render/CMakeLists.txt +++ b/intern/cycles/render/CMakeLists.txt @@ -1,3 +1,16 @@ +# 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. set(INC .. @@ -94,9 +107,14 @@ set(LIB cycles_device cycles_subd cycles_util - bf_intern_sky ) +if(CYCLES_STANDALONE_REPOSITORY) + list(APPEND LIB extern_sky) +else() + list(APPEND LIB bf_intern_sky) +endif() + if(WITH_CYCLES_OSL) list(APPEND LIB cycles_kernel_osl diff --git a/intern/cycles/subd/CMakeLists.txt b/intern/cycles/subd/CMakeLists.txt index b874c5c3c2d..c697ddb9891 100644 --- a/intern/cycles/subd/CMakeLists.txt +++ b/intern/cycles/subd/CMakeLists.txt @@ -1,3 +1,16 @@ +# 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. set(INC .. diff --git a/intern/cycles/test/CMakeLists.txt b/intern/cycles/test/CMakeLists.txt index 07b345baff8..aa145af293a 100644 --- a/intern/cycles/test/CMakeLists.txt +++ b/intern/cycles/test/CMakeLists.txt @@ -1,3 +1,17 @@ +# 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. + if(WITH_GTESTS) Include(GTestTesting) @@ -30,79 +44,17 @@ set(ALL_CYCLES_LIBRARIES cycles_subd cycles_util extern_clew - ${BLENDER_GL_LIBRARIES} - ${BLENDER_GLEW_LIBRARIES} - ${CYCLES_APP_GLEW_LIBRARY} - ${OPENIMAGEIO_LIBRARIES} + ${CYCLES_GL_LIBRARIES} ) -if(WITH_CYCLES_OSL) - list(APPEND ALL_CYCLES_LIBRARIES - cycles_kernel_osl - ${OSL_LIBRARIES} - ${LLVM_LIBRARIES} - ) -endif() -if(WITH_OPENCOLORIO) - list(APPEND ALL_CYCLES_LIBRARIES - ${OPENCOLORIO_LIBRARIES} - ) -endif() -if(WITH_IMAGE_OPENJPEG) - list(APPEND ALL_CYCLES_LIBRARIES ${OPENJPEG_LIBRARIES}) -endif() -if(WITH_OPENSUBDIV) - add_definitions(-DWITH_OPENSUBDIV) - include_directories( - SYSTEM - ${OPENSUBDIV_INCLUDE_DIR} - ) - list(APPEND ALL_CYCLES_LIBRARIES - ${OPENSUBDIV_LIBRARIES} - ) -endif() -if(WITH_CYCLES_EMBREE) - list(APPEND ALL_CYCLES_LIBRARIES - ${EMBREE_LIBRARIES} - ) -endif() -if(WITH_CUDA_DYNLOAD) - list(APPEND ALL_CYCLES_LIBRARIES extern_cuew) -else() - list(APPEND ALL_CYCLES_LIBRARIES ${CUDA_CUDA_LIBRARY}) -endif() -if(NOT CYCLES_STANDALONE_REPOSITORY) - list(APPEND ALL_CYCLES_LIBRARIES bf_intern_glew_mx bf_intern_guardedalloc ${GLEW_LIBRARY}) -endif() - -list(APPEND ALL_CYCLES_LIBRARIES - ${BOOST_LIBRARIES} - ${PNG_LIBRARIES} - ${JPEG_LIBRARIES} - ${ZLIB_LIBRARIES} - ${TIFF_LIBRARY} - ${OPENIMAGEIO_LIBRARIES} - ${OPENEXR_LIBRARIES} - ${OPENVDB_LIBRARIES} -) - include_directories(${INC}) -link_directories( - ${OPENIMAGEIO_LIBPATH} - ${BOOST_LIBPATH} - ${PNG_LIBPATH} - ${JPEG_LIBPATH} - ${ZLIB_LIBPATH} - ${TIFF_LIBPATH} - ${OPENEXR_LIBPATH} - ${OPENCOLORIO_LIBPATH} - ${OPENVDB_LIBPATH} -) +cycles_link_directories() set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${PLATFORM_LINKFLAGS}") set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} ${PLATFORM_LINKFLAGS_DEBUG}") CYCLES_TEST(render_graph_finalize "${ALL_CYCLES_LIBRARIES};bf_intern_numaapi") +cycles_target_link_libraries(cycles_render_graph_finalize_test) CYCLES_TEST(util_aligned_malloc "cycles_util") CYCLES_TEST(util_path "cycles_util;${OPENIMAGEIO_LIBRARIES};${BOOST_LIBRARIES}") CYCLES_TEST(util_string "cycles_util;${OPENIMAGEIO_LIBRARIES};${BOOST_LIBRARIES}") diff --git a/intern/cycles/util/CMakeLists.txt b/intern/cycles/util/CMakeLists.txt index a35ec6c7e29..18e14913884 100644 --- a/intern/cycles/util/CMakeLists.txt +++ b/intern/cycles/util/CMakeLists.txt @@ -1,3 +1,16 @@ +# 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. set(INC ..