Files
test2/source/creator/CMakeLists.txt

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

2128 lines
67 KiB
CMake
Raw Normal View History

# SPDX-FileCopyrightText: 2006 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(INC
../blender/editors/include
../blender/io/usd
../blender/makesrna
)
set(LIB
PRIVATE bf::blenkernel
PRIVATE bf::blenlib
PRIVATE bf::bmesh
PRIVATE bf::depsgraph
Cleanup: CMake: Modernize bf_dna dependencies There's quite a few libraries that depend on dna_type_offsets.h but had gotten to it by just adding the folder that contains it to their includes INC section without declaring a dependency to bf_dna in the LIB section. which occasionally lead to the lib building before bf_dna and the header being missing, while this generally gets fixed in CMake by adding bf_dna to the LIB section of the lib, however until last week all libraries in the LIB section were linked as INTERFACE so adding it in there did not resolve the build issue. To make things still build, we sprinkled add_dependencies wherever we needed it to force a build order. This diff : Declares public include folders for the bf_dna target so there's no more fudging the INC section required to get to them. Removes all dna related paths from the INC section for all libraries. Adds an alias target bf:dna to signify it has been updated to modern cmake Declares a dependency on bf::dna for all libraries that require it Removes (almost) all calls to add_dependencies for bf_dna Future work: Because of the manual dependency management that was done, there is now some "clutter" with libs depending on bf_dna that realistically don't. Example bf_intern_opencolorio itself has no dependency on bf_dna at all, doesn't need it, doesn't use it. However the dna include folder had been added to it in the past since bf_blenlib uses dna headers in some of its public headers and bf_intern_opencolorio does use those blenlib headers. Given bf_blenlib now correctly declares the dependency on bf_dna as public bf_intern_opencolorio will get the dna header directory automatically from CMake, hence some cleanup could be done for bf_intern_opencolorio Because 99% of the changes in this diff have been automated, this diff does not seek to address these issues as there is no easy way to determine why a certain dependency is in place. A developer will have to make a pass a this at some later point in time. As I'd rather not mix automated and manual labour. There are a few libraries that could not be automatically processed (ie bf_blendthumb) that also will need this manual look-over. Pull Request: https://projects.blender.org/blender/blender/pulls/109835
2023-07-10 15:07:37 +02:00
PRIVATE bf::dna
PRIVATE bf::gpu
PRIVATE bf::imbuf
PRIVATE bf::imbuf::movie
PRIVATE bf::intern::clog
PRIVATE bf::intern::guardedalloc
PRIVATE bf::render
PRIVATE bf::sequencer
PRIVATE bf::windowmanager
Refactor: OpenColorIO integration Briefly about this change: - OpenColorIO C-API is removed. - The information about color spaces in ImBuf module is removed. It was stored in global ListBase in colormanagement.cc. - Both OpenColorIO and fallback implementation supports GPU drawing. - Fallback implementation supports white point, RGB curves, etc. - Removed check for support of GPU drawing in IMB. Historically it was implemented in a separate library with C-API, this is because way back C++ code needed to stay in intern. This causes all sort of overheads, and even calls that are strictly considered bad level. This change moves OpenColorIO integration into a module within imbuf, next to movie, and next to IMB_colormanagement which is the main user of it. This allows to avoid copy of color spaces, displays, views etc in the ImBuf: they were used to help quickly querying information to be shown on the interface. With this change it can be stored in the same data structures as what is used by the OpenColorIO integration. While it might not be fully avoiding duplication it is now less, and there is no need in the user code to maintain the copies. In a lot of cases this change also avoids allocations done per access to the OpenColorIO. For example, it is not needed anymore to allocate image descriptor in a heap. The bigger user-visible change is that the fallback implementation now supports GLSL drawing, with the whole list of supported features, such as curve mapping and white point. This should help simplifying code which relies on color space conversion on GPU: there is no need to figure out fallback solution in such cases. The only case when drawing will not work is when there is some actual bug, or driver issue, and shader has failed to compile. The change avoids having an opaque type for color space, and instead uses forward declaration. It is a bit verbose on declaration, but helps avoiding unsafe type-casts. There are ways to solve this in the future, like having a header for forward declaration, or to flatten the name space a bit. There should be no user-level changes under normal operation. When building without OpenColorIO or the configuration has a typo or is missing a fuller set of color management tools is applies (such as the white point correction). Pull Request: https://projects.blender.org/blender/blender/pulls/138433
2025-05-09 14:01:43 +02:00
PRIVATE bf::dependencies::optional::opencolorio
)
if(HAVE_FEENABLEEXCEPT)
add_definitions(-DHAVE_FEENABLEEXCEPT)
endif()
if(WITH_STRSIZE_DEBUG)
add_definitions(-DWITH_STRSIZE_DEBUG)
endif()
if(WITH_TBB)
# Force TBB libraries to be in front of MKL (part of `OpenImageDenoise`), so
# that it is initialized before MKL and static library initialization order issues are avoided.
#
# This isn't fully robust but seems to work.
list(INSERT LIB 0 ${TBB_LIBRARIES})
list(INSERT LIB 0 bf_blenkernel)
endif()
if(WIN32)
list(APPEND INC ../../intern/utfconv)
endif()
Camera tracking integration =========================== Commiting camera tracking integration gsoc project into trunk. This commit includes: - Bundled version of libmv library (with some changes against official repo, re-sync with libmv repo a bit later) - New datatype ID called MovieClip which is optimized to work with movie clips (both of movie files and image sequences) and doing camera/motion tracking operations. - New editor called Clip Editor which is currently used for motion/tracking stuff only, but which can be easily extended to work with masks too. This editor supports: * Loading movie files/image sequences * Build proxies with different size for loaded movie clip, also supports building undistorted proxies to increase speed of playback in undistorted mode. * Manual lens distortion mode calibration using grid and grease pencil * Supervised 2D tracking using two different algorithms KLT and SAD. * Basic algorithm for feature detection * Camera motion solving. scene orientation - New constraints to "link" scene objects with solved motions from clip: * Follow Track (make object follow 2D motion of track with given name or parent object to reconstructed 3D position of track) * Camera Solver to make camera moving in the same way as reconstructed camera This commit NOT includes changes from tomato branch: - New nodes (they'll be commited as separated patch) - Automatic image offset guessing for image input node and image editor (need to do more tests and gather more feedback) - Code cleanup in libmv-capi. It's not so critical cleanup, just increasing readability and understanadability of code. Better to make this chaneg when Keir will finish his current patch. More details about this project can be found on this page: http://wiki.blender.org/index.php/User:Nazg-gul/GSoC-2011 Further development of small features would be done in trunk, bigger/experimental features would first be implemented in tomato branch.
2011-11-07 12:55:18 +00:00
if(WITH_LIBMV)
list(APPEND INC ../../intern/libmv)
Camera tracking integration =========================== Commiting camera tracking integration gsoc project into trunk. This commit includes: - Bundled version of libmv library (with some changes against official repo, re-sync with libmv repo a bit later) - New datatype ID called MovieClip which is optimized to work with movie clips (both of movie files and image sequences) and doing camera/motion tracking operations. - New editor called Clip Editor which is currently used for motion/tracking stuff only, but which can be easily extended to work with masks too. This editor supports: * Loading movie files/image sequences * Build proxies with different size for loaded movie clip, also supports building undistorted proxies to increase speed of playback in undistorted mode. * Manual lens distortion mode calibration using grid and grease pencil * Supervised 2D tracking using two different algorithms KLT and SAD. * Basic algorithm for feature detection * Camera motion solving. scene orientation - New constraints to "link" scene objects with solved motions from clip: * Follow Track (make object follow 2D motion of track with given name or parent object to reconstructed 3D position of track) * Camera Solver to make camera moving in the same way as reconstructed camera This commit NOT includes changes from tomato branch: - New nodes (they'll be commited as separated patch) - Automatic image offset guessing for image input node and image editor (need to do more tests and gather more feedback) - Code cleanup in libmv-capi. It's not so critical cleanup, just increasing readability and understanadability of code. Better to make this chaneg when Keir will finish his current patch. More details about this project can be found on this page: http://wiki.blender.org/index.php/User:Nazg-gul/GSoC-2011 Further development of small features would be done in trunk, bigger/experimental features would first be implemented in tomato branch.
2011-11-07 12:55:18 +00:00
add_definitions(-DWITH_LIBMV)
endif()
if(WITH_CYCLES)
add_definitions(-DWITH_CYCLES)
list(APPEND INC ../../intern/cycles/blender)
endif()
if(WITH_OPENGL_BACKEND)
add_definitions(-DWITH_OPENGL_BACKEND)
endif()
if(WITH_VULKAN_BACKEND)
add_definitions(-DWITH_VULKAN_BACKEND)
endif()
if(WITH_RENDERDOC)
add_definitions(-DWITH_RENDERDOC)
endif()
if(WITH_CODEC_FFMPEG)
add_definitions(-DWITH_FFMPEG)
endif()
if(WITH_TBB)
list(APPEND INC ${TBB_INCLUDE_DIRS})
if(WIN32)
# For `pragma` that links `tbbmalloc_proxy.lib`.
link_directories(${LIBDIR}/tbb/lib)
endif()
endif()
if(WIN32)
2024-09-20 13:14:57 +10:00
# Windows.h will define min/max macros that will collide with the STL versions.
add_definitions(-DNOMINMAX)
endif()
if(WITH_USD)
# USD links libMaterialX, when using pre-compiled libraries
# ensures `usd_ms` can find `MaterialXRender` and friends.
#
# NOTE: This is _only_ needed when linking blender before the install target runs.
# Once MATERIALX libraries have been copied into `TARGETDIR_LIB` then Blender will link.
# Don't rely on this though as failing on a fresh build is no good and the library
# files could get outdated too.
if(DEFINED LIBDIR)
link_directories(${LIBDIR}/materialx/lib)
endif()
endif()
2008-12-31 05:20:35 +00:00
if(WITH_PYTHON)
list(APPEND INC ../blender/python)
add_definitions(-DWITH_PYTHON)
if(WITH_PYTHON_SECURITY)
add_definitions(-DWITH_PYTHON_SECURITY)
endif()
2008-12-31 05:20:35 +00:00
endif()
if(WITH_HEADLESS)
add_definitions(-DWITH_HEADLESS)
endif()
if(WITH_SDL)
add_definitions(-DWITH_SDL)
endif()
if(WITH_BINRELOC)
list(APPEND INC ${BINRELOC_INCLUDE_DIRS})
add_definitions(-DWITH_BINRELOC)
2009-07-19 19:36:56 +00:00
endif()
if(WITH_FREESTYLE)
list(APPEND INC ../blender/freestyle)
add_definitions(-DWITH_FREESTYLE)
endif()
VR: Initial Virtual Reality support - Milestone 1, Scene Inspection NOTE: While most of the milestone 1 goals are there, a few smaller features and improvements are still to be done. Big picture of this milestone: Initial, OpenXR-based virtual reality support for users and foundation for advanced use cases. Maniphest Task: https://developer.blender.org/T71347 The tasks contains more information about this milestone. To be clear: This is not a feature rich VR implementation, it's focused on the initial scene inspection use case. We intentionally focused on that, further features like controller support are part of the next milestone. - How to use? Instructions on how to use this are here: https://wiki.blender.org/wiki/User:Severin/GSoC-2019/How_to_Test These will be updated and moved to a more official place (likely the manual) soon. Currently Windows Mixed Reality and Oculus devices are usable. Valve/HTC headsets don't support the OpenXR standard yet and hence, do not work with this implementation. --------------- This is the C-side implementation of the features added for initial VR support as per milestone 1. A "VR Scene Inspection" Add-on will be committed separately, to expose the VR functionality in the UI. It also adds some further features for milestone 1, namely a landmarking system (stored view locations in the VR space) Main additions/features: * Support for rendering viewports to an HMD, with good performance. * Option to sync the VR view perspective with a fully interactive, regular 3D View (VR-Mirror). * Option to disable positional tracking. Keeps the current position (calculated based on the VR eye center pose) when enabled while a VR session is running. * Some regular viewport settings for the VR view * RNA/Python-API to query and set VR session state information. * WM-XR: Layer tying Ghost-XR to the Blender specific APIs/data * wmSurface API: drawable, non-window container (manages Ghost-OpenGL and GPU context) * DNA/RNA for management of VR session settings * `--debug-xr` and `--debug-xr-time` commandline options * Utility batch & config file for using the Oculus runtime on Windows. * Most VR data is runtime only. The exception is user settings which are saved to files (`XrSessionSettings`). * VR support can be disabled through the `WITH_XR_OPENXR` compiler flag. For architecture and code documentation, see https://wiki.blender.org/wiki/Source/Interface/XR. --------------- A few thank you's: * A huge shoutout to Ray Molenkamp for his help during the project - it would have not been that successful without him! * Sebastian Koenig and Simeon Conzendorf for testing and feedback! * The reviewers, especially Brecht Van Lommel! * Dalai Felinto for pushing and managing me to get this done ;) * The OpenXR working group for providing an open standard. I think we're the first bigger application to adopt OpenXR. Congratulations to them and ourselves :) This project started as a Google Summer of Code 2019 project - "Core Support of Virtual Reality Headsets through OpenXR" (see https://wiki.blender.org/wiki/User:Severin/GSoC-2019/). Some further information, including ideas for further improvements can be found in the final GSoC report: https://wiki.blender.org/wiki/User:Severin/GSoC-2019/Final_Report Differential Revisions: D6193, D7098 Reviewed by: Brecht Van Lommel, Jeroen Bakker
2020-03-17 20:20:55 +01:00
if(WITH_XR_OPENXR)
add_definitions(-DWITH_XR_OPENXR)
endif()
if(WITH_GMP)
list(APPEND INC ${GMP_INCLUDE_DIRS})
add_definitions(-DWITH_GMP)
endif()
# Setup the EXE sources and `buildinfo`.
set(SRC
creator.cc
creator_args.cc
creator_signals.cc
creator_intern.h
)
if(CMAKE_GENERATOR MATCHES "^Visual Studio.+")
# This helps visual studio find the debugger visualizers
list(APPEND SRC ${CMAKE_SOURCE_DIR}/tools/utils_ide/natvis/Blender.natvis)
endif()
# MSVC 2010 gives linking errors with the manifest.
if(WIN32 AND NOT UNIX)
add_definitions(
-DBLEN_VER_RC_STR="${BLENDER_VERSION}"
-DBLEN_VER_RC_1=${BLENDER_VERSION_MAJOR}
-DBLEN_VER_RC_2=${BLENDER_VERSION_MINOR}
-DBLEN_VER_RC_3=${BLENDER_VERSION_PATCH}
-DBLEN_VER_RC_4=0
)
list(APPEND SRC
2016-02-07 20:58:58 +11:00
${CMAKE_SOURCE_DIR}/release/windows/icons/winblender.rc
)
if(NOT WITH_WINDOWS_EXTERNAL_MANIFEST)
list(APPEND SRC
${CMAKE_BINARY_DIR}/blender.exe.manifest
)
endif()
endif()
if(WITH_BUILDINFO)
add_definitions(-DWITH_BUILDINFO)
# --------------------------------------------------------------------------
# These defines could all be moved into the header below
# Write strings into a separate header since we can escape C-strings
# in a way that's not practical when passing defines.
set(BUILD_PLATFORM "${CMAKE_SYSTEM_NAME}")
set(BUILD_TYPE "${CMAKE_BUILD_TYPE}")
set(BUILD_CFLAGS "${CMAKE_C_FLAGS}")
set(BUILD_CXXFLAGS "${CMAKE_CXX_FLAGS}")
set(BUILD_LINKFLAGS "${PLATFORM_LINKFLAGS}")
set(BUILD_SYSTEM "CMake")
if(WITH_COMPILER_SHORT_FILE_MACRO)
# It's not necessary to include path information
# about the system building Blender in the executable.
string(REPLACE "${PLATFORM_CFLAGS_FMACRO_PREFIX_MAP}" " " BUILD_CFLAGS "${BUILD_CFLAGS}")
string(REPLACE "${PLATFORM_CFLAGS_FMACRO_PREFIX_MAP}" " " BUILD_CXXFLAGS "${BUILD_CXXFLAGS}")
endif()
# Use `configure_file` instead of definitions since properly
# escaping the multiple command line arguments which themselves
# contain strings and spaces becomes overly error-prone & complicated.
configure_file(
"${CMAKE_SOURCE_DIR}/build_files/cmake/buildinfo_static.h.in"
"${CMAKE_CURRENT_BINARY_DIR}/buildinfo_static.h"
ESCAPE_QUOTES
@ONLY
)
unset(BUILD_PLATFORM)
unset(BUILD_TYPE)
unset(BUILD_CFLAGS)
unset(BUILD_CXXFLAGS)
unset(BUILD_LINKFLAGS)
unset(BUILD_SYSTEM)
# --------------------------------------------------------------------------
# Write header for values that change each build
#
# NOTE: generated file is in build directory `source/creator`
# except when used as an include path.
add_definitions(-DWITH_BUILDINFO_HEADER)
# Include the output directory, where the `buildinfo.h` file is generated.
include_directories(${CMAKE_CURRENT_BINARY_DIR})
# XXX: `${buildinfo_h_fake}` is used here,
# because we rely on that file being detected as missing
# every build so that the real header `buildinfo.h` is updated.
#
# Keep this until we find a better way to resolve!
set(buildinfo_h_real "${CMAKE_CURRENT_BINARY_DIR}/buildinfo.h")
set(buildinfo_h_fake "${CMAKE_CURRENT_BINARY_DIR}/buildinfo.h_fake")
if(EXISTS ${buildinfo_h_fake})
2022-09-09 11:52:14 +10:00
message(
FATAL_ERROR
"File \"${buildinfo_h_fake}\" found, this should never be created, remove!"
)
endif()
# From the CMAKE documentation "If the output of the custom command is not actually created as a
# file on disk it should be marked with the SYMBOLIC source file property."
#
# Not doing this leads to build warnings for the not generated file on
# MS-Windows when using `msbuild`.
set_source_files_properties(${buildinfo_h_fake} PROPERTIES SYMBOLIC TRUE)
# a custom target that is always built
2022-08-09 13:36:45 +10:00
add_custom_target(
buildinfo ALL
DEPENDS ${buildinfo_h_fake}
)
# Creates `buildinfo.h` using CMAKE script.
add_custom_command(
OUTPUT
${buildinfo_h_fake} # ensure we always run
${buildinfo_h_real}
2022-09-09 11:52:14 +10:00
COMMAND
${CMAKE_COMMAND}
-DSOURCE_DIR=${CMAKE_SOURCE_DIR}
# Overrides only used when non-empty strings.
-DBUILD_DATE=${BUILDINFO_OVERRIDE_DATE}
-DBUILD_TIME=${BUILDINFO_OVERRIDE_TIME}
-P ${CMAKE_SOURCE_DIR}/build_files/cmake/buildinfo.cmake
)
# `buildinfo.h` is a generated file.
set_source_files_properties(
${buildinfo_h_real}
PROPERTIES GENERATED TRUE
HEADER_FILE_ONLY TRUE)
unset(buildinfo_h_real)
unset(buildinfo_h_fake)
# Add dependencies below, after adding Blender
# -------------- done with header values.
list(APPEND SRC
buildinfo.c
)
# make an object library so can load with it in tests
add_library(buildinfoobj OBJECT buildinfo.c)
add_dependencies(buildinfoobj buildinfo)
endif()
add_cc_flags_custom_test(blender)
# message(STATUS "Configuring blender")
if(WITH_PYTHON_MODULE)
add_definitions(-DWITH_PYTHON_MODULE)
# Creates `./bpy/__init__.so` which can be imported as a Python module.
#
# Note that 'SHARED' works on Linux and Windows, but not MACOS which _must_ be 'MODULE'.
add_library(blender MODULE ${SRC})
get_property(GENERATOR_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
if(GENERATOR_IS_MULTI_CONFIG)
set(BPY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/$<CONFIG>/bpy)
else()
set(BPY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/bpy)
endif()
set_target_properties(
blender
PROPERTIES
PREFIX ""
OUTPUT_NAME __init__
LIBRARY_OUTPUT_DIRECTORY ${BPY_OUTPUT_DIRECTORY}
RUNTIME_OUTPUT_DIRECTORY ${BPY_OUTPUT_DIRECTORY}
)
unset(BPY_OUTPUT_DIRECTORY)
if(APPLE)
set_target_properties(blender PROPERTIES MACOSX_BUNDLE TRUE)
if(WITH_BLENDER_THUMBNAILER)
set_target_properties(blender-thumbnailer PROPERTIES MACOSX_BUNDLE TRUE)
endif()
endif()
if(WIN32)
# Python modules use this.
set_target_properties(
blender
PROPERTIES
2011-05-09 14:41:44 +00:00
SUFFIX ".pyd"
2011-09-30 15:51:58 +00:00
)
endif()
2011-09-30 15:51:58 +00:00
else()
add_executable(blender ${EXETYPE} ${SRC})
if(WITH_CPU_CHECK)
# blender_cpu_check *NEEDS* to be linked first, there can be no exceptions
# to this, this is to ensure this will be the first code to run once the
# blender binary has been loaded by the OS.
target_link_libraries(blender PRIVATE blender_cpu_check)
endif()
if(WIN32)
2022-08-09 13:36:45 +10:00
add_executable(blender-launcher WIN32
blender_launcher_win32.c
${CMAKE_SOURCE_DIR}/release/windows/icons/winblender.rc
)
if(NOT WITH_WINDOWS_EXTERNAL_MANIFEST)
target_sources(blender-launcher PRIVATE
${CMAKE_BINARY_DIR}/blender.exe.manifest
)
endif()
2024-08-21 23:20:34 +10:00
target_compile_definitions(blender-launcher PRIVATE -D_UNICODE -DUNICODE)
2022-08-09 13:36:45 +10:00
target_link_libraries(blender-launcher Pathcch.lib)
endif()
endif()
if(WITH_BUILDINFO)
# Explicitly say that the executable depends on the `buildinfo`.
add_dependencies(blender buildinfo)
endif()
set(BLENDER_TEXT_FILES
# Generate this file:
# `${CMAKE_SOURCE_DIR}/release/text/readme.html`
)
if(WITH_INSTALL_COPYRIGHT)
list(APPEND BLENDER_TEXT_FILES
${CMAKE_SOURCE_DIR}/release/text/copyright.txt
)
endif()
# -----------------------------------------------------------------------------
# Platform specific target destinations
#
# Setup version directory, libraries, `bpy` & text files.
if(UNIX AND NOT APPLE)
if(WITH_PYTHON_MODULE)
if(WITH_INSTALL_PORTABLE)
set(TARGETDIR_BPY "bpy")
set(TARGETDIR_VER "bpy/${BLENDER_VERSION}")
set(TARGETDIR_LIB "bpy/lib")
else()
set(TARGETDIR_BPY ${PYTHON_SITE_PACKAGES}/bpy)
set(TARGETDIR_VER ${PYTHON_SITE_PACKAGES}/bpy/${BLENDER_VERSION})
set(TARGETDIR_LIB ${PYTHON_SITE_PACKAGES}/bpy/lib)
endif()
else()
if(WITH_INSTALL_PORTABLE)
set(TARGETDIR_VER "${BLENDER_VERSION}")
set(TARGETDIR_TEXT ".")
set(TARGETDIR_LIB "lib")
else()
set(TARGETDIR_VER "share/blender/${BLENDER_VERSION}")
set(TARGETDIR_TEXT "share/doc/blender")
endif()
endif()
set(TARGETDIR_SITE_PACKAGES "${TARGETDIR_VER}/python/lib/python${PYTHON_VERSION}/site-packages")
elseif(WIN32)
if(WITH_PYTHON_MODULE)
set(TARGETDIR_BPY ${CMAKE_INSTALL_PREFIX_WITH_CONFIG}/bpy)
set(TARGETDIR_VER ${CMAKE_INSTALL_PREFIX_WITH_CONFIG}/bpy/${BLENDER_VERSION})
# Important the DLL's are next to `__init__.pyd` otherwise it won't load.
set(TARGETDIR_LIB ${CMAKE_INSTALL_PREFIX_WITH_CONFIG}/bpy)
set(TARGETDIR_EXE ${CMAKE_INSTALL_PREFIX_WITH_CONFIG}/bpy)
else()
set(TARGETDIR_VER "${BLENDER_VERSION}")
set(TARGETDIR_TEXT ".")
set(TARGETDIR_LIB "blender.shared")
set(TARGETDIR_EXE ".")
endif()
set(TARGETDIR_SITE_PACKAGES "${TARGETDIR_VER}/python/lib/site-packages")
elseif(APPLE)
if(WITH_PYTHON_MODULE)
if(WITH_INSTALL_PORTABLE)
set(TARGETDIR_BPY "bpy")
set(TARGETDIR_VER "bpy/${BLENDER_VERSION}")
set(TARGETDIR_LIB "bpy/lib")
else()
2024-09-20 13:14:57 +10:00
# Paths defined in terms of `site-packages` since the `site-packages`
# directory can be a symbolic-link (brew for example).
set(TARGETDIR_BPY ${PYTHON_SITE_PACKAGES}/bpy)
set(TARGETDIR_VER ${PYTHON_SITE_PACKAGES}/bpy/${BLENDER_VERSION})
set(TARGETDIR_LIB ${PYTHON_SITE_PACKAGES}/bpy/lib)
endif()
else()
set(TARGETDIR_VER "Blender.app/Contents/Resources/${BLENDER_VERSION}")
set(TARGETDIR_LIB "Blender.app/Contents/Resources/lib")
set(TARGETDIR_TEXT "Blender.app/Contents/Resources/text")
endif()
set(TARGETDIR_SITE_PACKAGES "${TARGETDIR_VER}/python/lib/python${PYTHON_VERSION}/site-packages")
# Skip re-linking on CPACK / install.
set_target_properties(blender PROPERTIES BUILD_WITH_INSTALL_RPATH true)
if(WITH_BLENDER_THUMBNAILER)
set_target_properties(blender-thumbnailer PROPERTIES BUILD_WITH_INSTALL_RPATH true)
endif()
endif()
# -----------------------------------------------------------------------------
# Install Targets (Generic, All Platforms)
if(WITH_PYTHON)
# install(CODE "message(\"copying blender scripts...\")")
# do not install freestyle dir if disabled
if(NOT WITH_FREESTYLE)
set(FREESTYLE_EXCLUDE_CONDITIONAL "freestyle/*")
else()
set(FREESTYLE_EXCLUDE_CONDITIONAL "_freestyle/*") # Dummy, won't do anything.
endif()
install(
DIRECTORY ${CMAKE_SOURCE_DIR}/scripts
DESTINATION ${TARGETDIR_VER}
PATTERN ".git" EXCLUDE
PATTERN ".gitignore" EXCLUDE
PATTERN ".gitea" EXCLUDE
PATTERN ".github" EXCLUDE
PATTERN ".arcconfig" EXCLUDE
PATTERN "__pycache__" EXCLUDE
PATTERN "site" EXCLUDE
PATTERN "${FREESTYLE_EXCLUDE_CONDITIONAL}" EXCLUDE
# Exclude extensions development files.
PATTERN "addons_core/bl_pkg/Makefile" EXCLUDE
PATTERN "addons_core/bl_pkg/tests" EXCLUDE
PATTERN "addons_core/bl_pkg/example_extension" EXCLUDE
)
if(WITH_PYTHON_MODULE)
install(
FILES ${CMAKE_SOURCE_DIR}/scripts/site/sitecustomize.py
DESTINATION ${TARGETDIR_VER}/scripts/startup
2025-01-20 11:19:23 +11:00
# Rename to avoid conflict with system `sitecustomize.py`.
RENAME bpy_site_customize.py
)
elseif(WITH_PYTHON_INSTALL)
install(
FILES ${CMAKE_SOURCE_DIR}/scripts/site/sitecustomize.py
DESTINATION ${TARGETDIR_SITE_PACKAGES}
)
endif()
unset(FREESTYLE_EXCLUDE_CONDITIONAL)
if(WITH_DRACO)
install(
PROGRAMS $<TARGET_FILE:extern_draco>
DESTINATION ${TARGETDIR_VER}/scripts/addons_core/io_scene_gltf2
)
endif()
endif()
# fonts
install(
DIRECTORY ${CMAKE_SOURCE_DIR}/release/datafiles/fonts
DESTINATION ${TARGETDIR_VER}/datafiles
)
# localization
if(WITH_INTERNATIONAL)
set(_locale_dir "${CMAKE_SOURCE_DIR}/locale")
set(_locale_target_dir ${TARGETDIR_VER}/datafiles/locale)
file(GLOB _po_files "${_locale_dir}/po/*.po")
foreach(_po_file ${_po_files})
msgfmt_simple(${_po_file} _all_mo_files)
endforeach()
# Create a custom target which will compile all `*.po` to `*.mo`.
add_custom_target(
locales
2022-08-09 13:36:45 +10:00
DEPENDS ${_all_mo_files}
)
add_dependencies(blender locales)
# Generate INSTALL rules.
install(
FILES ${_locale_dir}/languages
DESTINATION ${_locale_target_dir}
)
foreach(_mo_file ${_all_mo_files})
get_filename_component(_locale_name ${_mo_file} NAME_WE)
install(
FILES ${_mo_file}
DESTINATION ${_locale_target_dir}/${_locale_name}/LC_MESSAGES
RENAME blender.mo
)
unset(_locale_name)
endforeach()
unset(_all_mo_files)
unset(_po_files)
unset(_po_file)
unset(_mo_file)
unset(_locale_target_dir)
unset(_locale_dir)
endif()
# Color management.
Color Management, Stage 2: Switch color pipeline to use OpenColorIO Replace old color pipeline which was supporting linear/sRGB color spaces only with OpenColorIO-based pipeline. This introduces two configurable color spaces: - Input color space for images and movie clips. This space is used to convert images/movies from color space in which file is saved to Blender's linear space (for float images, byte images are not internally converted, only input space is stored for such images and used later). This setting could be found in image/clip data block settings. - Display color space which defines space in which particular display is working. This settings could be found in scene's Color Management panel. When render result is being displayed on the screen, apart from converting image to display space, some additional conversions could happen. This conversions are: - View, which defines tone curve applying before display transformation. These are different ways to view the image on the same display device. For example it could be used to emulate film view on sRGB display. - Exposure affects on image exposure before tone map is applied. - Gamma is post-display gamma correction, could be used to match particular display gamma. - RGB curves are user-defined curves which are applying before display transformation, could be used for different purposes. All this settings by default are only applying on render result and does not affect on other images. If some particular image needs to be affected by this transformation, "View as Render" setting of image data block should be set to truth. Movie clips are always affected by all display transformations. This commit also introduces configurable color space in which sequencer is working. This setting could be found in scene's Color Management panel and it should be used if such stuff as grading needs to be done in color space different from sRGB (i.e. when Film view on sRGB display is use, using VD16 space as sequencer's internal space would make grading working in space which is close to the space using for display). Some technical notes: - Image buffer's float buffer is now always in linear space, even if it was created from 16bit byte images. - Space of byte buffer is stored in image buffer's rect_colorspace property. - Profile of image buffer was removed since it's not longer meaningful. - OpenGL and GLSL is supposed to always work in sRGB space. It is possible to support other spaces, but it's quite large project which isn't so much important. - Legacy Color Management option disabled is emulated by using None display. It could have some regressions, but there's no clear way to avoid them. - If OpenColorIO is disabled on build time, it should make blender behaving in the same way as previous release with color management enabled. More details could be found at this page (more details would be added soon): http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.64/Color_Management -- Thanks to Xavier Thomas, Lukas Toene for initial work on OpenColorIO integration and to Brecht van Lommel for some further development and code/ usecase review!
2012-09-15 10:05:07 +00:00
if(WITH_OPENCOLORIO)
install(
DIRECTORY ${CMAKE_SOURCE_DIR}/release/datafiles/colormanagement
DESTINATION ${TARGETDIR_VER}/datafiles
)
endif()
if(WIN32)
if(EXISTS ${LIBDIR}/osl/lib/python${PYTHON_VERSION}/site-packages/oslquery) # 4.4+
install(
DIRECTORY ${LIBDIR}/osl/lib/python${PYTHON_VERSION}/site-packages/oslquery
DESTINATION ${TARGETDIR_SITE_PACKAGES}
CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
)
install(
DIRECTORY ${LIBDIR}/osl/lib/python${PYTHON_VERSION}_debug/site-packages/oslquery
DESTINATION ${TARGETDIR_SITE_PACKAGES}
CONFIGURATIONS Debug
)
endif()
if(EXISTS ${LIBDIR}/osl/bin/oslquery.dll) # 4.1+
windows_install_shared_manifest(
FILES
${LIBDIR}/osl/bin/oslquery.dll
${LIBDIR}/osl/bin/oslcomp.dll
${LIBDIR}/osl/bin/oslexec.dll
${LIBDIR}/osl/bin/oslnoise.dll
RELEASE
)
windows_install_shared_manifest(
FILES
${LIBDIR}/osl/bin/oslquery_d.dll
${LIBDIR}/osl/bin/oslcomp_d.dll
${LIBDIR}/osl/bin/oslexec_d.dll
${LIBDIR}/osl/bin/oslnoise_d.dll
DEBUG
)
endif()
if(EXISTS ${LIBDIR}/opencolorio/bin/opencolorio_2_4.dll) # 4.4
windows_install_shared_manifest(
FILES ${LIBDIR}/opencolorio/bin/opencolorio_2_4.dll
RELEASE
)
windows_install_shared_manifest(
FILES ${LIBDIR}/opencolorio/bin/opencolorio_d_2_4.dll
DEBUG
)
endif()
if(EXISTS ${LIBDIR}/opencolorio/bin/opencolorio_2_3.dll) # 4.1
windows_install_shared_manifest(
FILES ${LIBDIR}/opencolorio/bin/opencolorio_2_3.dll
RELEASE
)
windows_install_shared_manifest(
FILES ${LIBDIR}/opencolorio/bin/opencolorio_d_2_3.dll
DEBUG
)
endif()
install(
DIRECTORY ${LIBDIR}/opencolorio/lib/site-packages-debug/PyOpenColorIO
DESTINATION ${TARGETDIR_SITE_PACKAGES}
CONFIGURATIONS Debug
)
install(
DIRECTORY ${LIBDIR}/opencolorio/lib/site-packages/PyOpenColorIO
DESTINATION ${TARGETDIR_SITE_PACKAGES}
CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
)
if(EXISTS ${LIBDIR}/OpenImageDenoise/bin/openimagedenoise.dll) # 4.0
windows_install_shared_manifest(
FILES
${LIBDIR}/OpenImageDenoise/bin/OpenImageDenoise.dll
${LIBDIR}/OpenImageDenoise/bin/OpenImageDenoise_core.dll
${LIBDIR}/OpenImageDenoise/bin/OpenImageDenoise_device_cpu.dll
)
endif()
2024-04-19 15:50:26 +10:00
# Platforms that have SyCL support.
if(EXISTS ${LIBDIR}/OpenImageDenoise/bin/OpenImageDenoise_device_sycl.dll)
windows_install_shared_manifest(
FILES
${LIBDIR}/OpenImageDenoise/bin/OpenImageDenoise_device_sycl.dll
)
endif()
if(EXISTS ${LIBDIR}/OpenImageDenoise/bin/OpenImageDenoise_device_hip.dll) # 4.1
windows_install_shared_manifest(
FILES
${LIBDIR}/OpenImageDenoise/bin/OpenImageDenoise_device_hip.dll
)
endif()
if(EXISTS ${LIBDIR}/OpenImageDenoise/bin/OpenImageDenoise_device_cuda.dll) # 4.1
windows_install_shared_manifest(
FILES
${LIBDIR}/OpenImageDenoise/bin/OpenImageDenoise_device_cuda.dll
)
endif()
Color Management, Stage 2: Switch color pipeline to use OpenColorIO Replace old color pipeline which was supporting linear/sRGB color spaces only with OpenColorIO-based pipeline. This introduces two configurable color spaces: - Input color space for images and movie clips. This space is used to convert images/movies from color space in which file is saved to Blender's linear space (for float images, byte images are not internally converted, only input space is stored for such images and used later). This setting could be found in image/clip data block settings. - Display color space which defines space in which particular display is working. This settings could be found in scene's Color Management panel. When render result is being displayed on the screen, apart from converting image to display space, some additional conversions could happen. This conversions are: - View, which defines tone curve applying before display transformation. These are different ways to view the image on the same display device. For example it could be used to emulate film view on sRGB display. - Exposure affects on image exposure before tone map is applied. - Gamma is post-display gamma correction, could be used to match particular display gamma. - RGB curves are user-defined curves which are applying before display transformation, could be used for different purposes. All this settings by default are only applying on render result and does not affect on other images. If some particular image needs to be affected by this transformation, "View as Render" setting of image data block should be set to truth. Movie clips are always affected by all display transformations. This commit also introduces configurable color space in which sequencer is working. This setting could be found in scene's Color Management panel and it should be used if such stuff as grading needs to be done in color space different from sRGB (i.e. when Film view on sRGB display is use, using VD16 space as sequencer's internal space would make grading working in space which is close to the space using for display). Some technical notes: - Image buffer's float buffer is now always in linear space, even if it was created from 16bit byte images. - Space of byte buffer is stored in image buffer's rect_colorspace property. - Profile of image buffer was removed since it's not longer meaningful. - OpenGL and GLSL is supposed to always work in sRGB space. It is possible to support other spaces, but it's quite large project which isn't so much important. - Legacy Color Management option disabled is emulated by using None display. It could have some regressions, but there's no clear way to avoid them. - If OpenColorIO is disabled on build time, it should make blender behaving in the same way as previous release with color management enabled. More details could be found at this page (more details would be added soon): http://wiki.blender.org/index.php/Dev:Ref/Release_Notes/2.64/Color_Management -- Thanks to Xavier Thomas, Lukas Toene for initial work on OpenColorIO integration and to Brecht van Lommel for some further development and code/ usecase review!
2012-09-15 10:05:07 +00:00
endif()
# Show helpful tip.
set(_install_cmd "")
if("${CMAKE_GENERATOR}" MATCHES ".*Makefiles.*")
set(_install_cmd "make install")
elseif("${CMAKE_GENERATOR}" MATCHES "Ninja")
set(_install_cmd "ninja install")
endif()
if(NOT ("${_install_cmd}" STREQUAL ""))
# Message to display after building.
get_filename_component(_install_dst ${TARGETDIR_VER} ABSOLUTE BASE_DIR ${CMAKE_INSTALL_PREFIX})
add_custom_command(
TARGET blender POST_BUILD
COMMAND
${CMAKE_COMMAND} -E echo
"Run: \\\"${_install_cmd}\\\" to copy runtime files and scripts to: ${_install_dst}"
)
unset(_install_dst)
endif()
unset(_install_cmd)
# macro to help install files without dragging in unnecessary data.
macro(install_dir from to)
install(
DIRECTORY ${from}
DESTINATION ${to}
# Irrelevant files and caches.
PATTERN ".git" EXCLUDE
PATTERN ".gitignore" EXCLUDE
PATTERN ".gitea" EXCLUDE
PATTERN ".github" EXCLUDE
PATTERN "*.pyc" EXCLUDE
PATTERN "*.pyo" EXCLUDE
PATTERN "*.orig" EXCLUDE
PATTERN "*.rej" EXCLUDE
PATTERN "__pycache__" EXCLUDE
PATTERN "__MACOSX" EXCLUDE
PATTERN ".DS_Store" EXCLUDE
# Unneeded Python files.
PATTERN "config-${PYTHON_VERSION}/*.a" EXCLUDE # static lib
PATTERN "lib2to3" EXCLUDE # ./lib2to3
PATTERN "tkinter" EXCLUDE # ./tkinter
PATTERN "lib-dynload/_tkinter.*" EXCLUDE # ./lib-dynload/_tkinter.co
PATTERN "idlelib" EXCLUDE # ./idlelib
PATTERN "test" EXCLUDE # ./test
PATTERN "turtledemo" EXCLUDE # ./turtledemo
PATTERN "turtle.py" EXCLUDE # ./turtle.py
PATTERN "wininst*.exe" EXCLUDE # from distutils, avoid malware false positive
)
endmacro()
# -----------------------------------------------------------------------------
# Install Targets (Platform Specific)
if(UNIX AND NOT APPLE)
if(PLATFORM_BUNDLED_LIBRARIES AND TARGETDIR_LIB)
install(
FILES ${PLATFORM_BUNDLED_LIBRARIES}
DESTINATION ${TARGETDIR_LIB}
)
endif()
# There are a few differences between portable and system install.
if(WITH_PYTHON_MODULE)
if(WITH_INSTALL_PORTABLE)
install(
TARGETS blender
DESTINATION ${TARGETDIR_BPY}
)
else()
install(
TARGETS blender
LIBRARY DESTINATION ${TARGETDIR_BPY}
)
endif()
# none of the other files are needed currently
elseif(WITH_INSTALL_PORTABLE)
set(BLENDER_BIN "blender")
install(
TARGETS blender
DESTINATION "."
)
if(WITH_CPU_CHECK)
install(
TARGETS blender_cpu_check
DESTINATION "./lib"
)
endif()
install(
FILES
${CMAKE_SOURCE_DIR}/release/freedesktop/blender.desktop
${CMAKE_SOURCE_DIR}/release/freedesktop/icons/scalable/apps/blender.svg
${CMAKE_SOURCE_DIR}/release/freedesktop/icons/symbolic/apps/blender-symbolic.svg
DESTINATION "."
)
if(WITH_BLENDER_THUMBNAILER)
install(
TARGETS blender-thumbnailer
DESTINATION "."
)
endif()
# NOTE: there is a bug in CMake 3.25.1 where `LIBDIR` is reported as undefined.
if(NOT DEFINED LIBDIR)
# Pass.
elseif(EXISTS ${LIBDIR}/mesa)
install(
# Trailing slash is needed to install contents instead of directory itself.
DIRECTORY ${LIBDIR}/mesa/lib/
DESTINATION "./lib/mesa"
)
install(
PROGRAMS
${CMAKE_SOURCE_DIR}/release/bin/blender-launcher
${CMAKE_SOURCE_DIR}/release/bin/blender-softwaregl
DESTINATION "."
)
# Remove from old location, so existing builds don't start with software
# OpenGL now that the `./lib/` directory is used for other libraries.
install(
2023-01-19 17:07:17 +11:00
CODE "\
file(REMOVE ${CMAKE_BINARY_DIR}/bin/lib/libGL.so)\n
file(REMOVE ${CMAKE_BINARY_DIR}/bin/lib/libGL.so.1)\n
file(REMOVE ${CMAKE_BINARY_DIR}/bin/lib/libGL.so.1.5.0)\n
file(REMOVE ${CMAKE_BINARY_DIR}/bin/lib/libGLU.so)\n
file(REMOVE ${CMAKE_BINARY_DIR}/bin/lib/libGLU.so.1)\n
file(REMOVE ${CMAKE_BINARY_DIR}/bin/lib/libGLU.so.1.3.1)\n
file(REMOVE ${CMAKE_BINARY_DIR}/bin/lib/libglapi.so)\n
file(REMOVE ${CMAKE_BINARY_DIR}/bin/lib/libglapi.so.0)\n
file(REMOVE ${CMAKE_BINARY_DIR}/bin/lib/libglapi.so.0.0.0)\n
"
)
endif()
else()
# main blender binary
set(BLENDER_BIN "bin/blender")
install(
TARGETS blender
DESTINATION "./bin"
)
# Misc files.
install(
FILES ${CMAKE_SOURCE_DIR}/release/freedesktop/blender.desktop
DESTINATION "./share/applications"
)
install(
FILES ${CMAKE_SOURCE_DIR}/release/freedesktop/org.blender.Blender.metainfo.xml
DESTINATION "./share/metainfo"
)
install(
FILES ${CMAKE_SOURCE_DIR}/release/freedesktop/icons/scalable/apps/blender.svg
DESTINATION "./share/icons/hicolor/scalable/apps"
)
install(
FILES ${CMAKE_SOURCE_DIR}/release/freedesktop/icons/symbolic/apps/blender-symbolic.svg
DESTINATION "./share/icons/hicolor/symbolic/apps"
)
if(WITH_BLENDER_THUMBNAILER)
install(
TARGETS blender-thumbnailer
DESTINATION "./bin"
)
endif()
endif()
if(WITH_PYTHON AND WITH_PYTHON_INSTALL)
# Install executable
install(
PROGRAMS ${PYTHON_EXECUTABLE}
DESTINATION ${TARGETDIR_VER}/python/bin
)
if(DEFINED LIBDIR)
2024-09-20 13:14:57 +10:00
# Pre-compiled libraries, copy over complete lib directory.
install_dir(
${PYTHON_LIBPATH}
${TARGETDIR_VER}/python
)
else()
# System libraries.
install(
2016-02-15 18:45:32 +11:00
PROGRAMS ${PYTHON_EXECUTABLE}
DESTINATION ${TARGETDIR_VER}/python/bin
)
# On some platforms (like openSUSE) Python is linked to be used from `lib64` directory.
# determine this from Python's libraries path.
2024-09-20 13:14:57 +10:00
# Ugh, its possible `lib64` is just a symbolic-link to `lib`
# which causes incorrect use of `lib64`.
get_filename_component(_pypath_real ${PYTHON_LIBPATH} REALPATH)
if(${_pypath_real} MATCHES "lib64$")
set(_target_LIB "lib64")
else()
set(_target_LIB "lib")
endif()
unset(_pypath_real)
# Copy the systems python into the install directory:
# install(CODE "message(\"copying a subset of the systems python...\")")
install(
DIRECTORY ${PYTHON_LIBPATH}/python${PYTHON_VERSION}
DESTINATION ${TARGETDIR_VER}/python/${_target_LIB}
PATTERN "__pycache__" EXCLUDE # * any cache *
PATTERN "config-${PYTHON_VERSION}/*.a" EXCLUDE # static lib
PATTERN "lib2to3" EXCLUDE # ./lib2to3
PATTERN "site-packages/*" EXCLUDE # ./site-packages/*
PATTERN "tkinter" EXCLUDE # ./tkinter
PATTERN "lib-dynload/_tkinter.*" EXCLUDE # ./lib-dynload/_tkinter.co
PATTERN "idlelib" EXCLUDE # ./idlelib
PATTERN "test" EXCLUDE # ./test
PATTERN "turtledemo" EXCLUDE # ./turtledemo
PATTERN "turtle.py" EXCLUDE # ./turtle.py
PATTERN "wininst*.exe" EXCLUDE # from distutils, avoid malware false positive
)
# Needed for `distutils/pip`.
# Get the last part of the include dir, will be `python{version}{abiflag}`.
get_filename_component(_py_inc_suffix ${PYTHON_INCLUDE_DIR} NAME)
install(
FILES ${PYTHON_INCLUDE_DIR}/pyconfig.h
DESTINATION ${TARGETDIR_VER}/python/include/${_py_inc_suffix}
)
unset(_py_inc_suffix)
if(WITH_PYTHON_INSTALL_NUMPY)
# Install to the same directory as the source, so debian-like
# distributions are happy with their policy.
set(_suffix "site-packages")
if(${PYTHON_NUMPY_PATH} MATCHES "dist-packages")
set(_suffix "dist-packages")
endif()
install(
DIRECTORY ${PYTHON_NUMPY_PATH}/numpy
DESTINATION ${TARGETDIR_VER}/python/${_target_LIB}/python${PYTHON_VERSION}/${_suffix}
PATTERN "__pycache__" EXCLUDE # * any cache *
PATTERN "*.pyc" EXCLUDE # * any cache *
PATTERN "*.pyo" EXCLUDE # * any cache *
PATTERN "oldnumeric" EXCLUDE # ./oldnumeric
PATTERN "doc" EXCLUDE # ./doc
PATTERN "tests" EXCLUDE # ./tests
PATTERN "f2py" EXCLUDE # ./f2py - fortran/python interface code, not for blender.
PATTERN "include" EXCLUDE # include dirs all over, we won't use NumPy/CAPI
PATTERN "*.h" EXCLUDE # some includes are not in include dirs
PATTERN "*.a" EXCLUDE # ./core/lib/libnpymath.a - for linking, we don't need.
)
install(
DIRECTORY ${PYTHON_NUMPY_PATH}/Cython
DESTINATION ${TARGETDIR_VER}/python/${_target_LIB}/python${PYTHON_VERSION}/${_suffix}
PATTERN "__pycache__" EXCLUDE # * any cache *
PATTERN "*.pyc" EXCLUDE # * any cache *
PATTERN "*.pyo" EXCLUDE # * any cache *
)
install(
FILES ${PYTHON_NUMPY_PATH}/cython.py
DESTINATION ${TARGETDIR_VER}/python/${_target_LIB}/python${PYTHON_VERSION}/${_suffix}
)
unset(_suffix)
endif()
if(WITH_USD)
# Install to the same directory as the source, so debian-like
2024-09-20 13:14:57 +10:00
# distributions are happy with their policy.
set(_suffix "site-packages")
if(0) # TODO: `PYTHON_USD_PATH` isn't defined anywhere.
if(${PYTHON_USD_PATH} MATCHES "dist-packages")
set(_suffix "dist-packages")
endif()
endif()
install(
DIRECTORY ${USD_LIBRARY_DIR}/python/
DESTINATION ${TARGETDIR_VER}/python/${_target_LIB}/python${PYTHON_VERSION}/${_suffix}
PATTERN "__pycache__" EXCLUDE # * any cache *
PATTERN "*.pyc" EXCLUDE # * any cache *
PATTERN "*.pyo" EXCLUDE # * any cache *
)
unset(_suffix)
endif()
if(WITH_PYTHON_INSTALL_ZSTANDARD)
# Install to the same directory as the source, so debian-like
# distributions are happy with their policy.
set(_suffix "site-packages")
if(${PYTHON_ZSTANDARD_PATH} MATCHES "dist-packages")
set(_suffix "dist-packages")
endif()
install(
DIRECTORY ${PYTHON_ZSTANDARD_PATH}/zstandard
DESTINATION ${TARGETDIR_VER}/python/${_target_LIB}/python${PYTHON_VERSION}/${_suffix}
PATTERN "__pycache__" EXCLUDE # * any cache *
PATTERN "*.pyc" EXCLUDE # * any cache *
PATTERN "*.pyo" EXCLUDE # * any cache *
)
unset(_suffix)
endif()
# Copy requests, we need to generalize site-packages.
if(WITH_PYTHON_INSTALL_REQUESTS)
set(_suffix "site-packages")
if(${PYTHON_REQUESTS_PATH} MATCHES "dist-packages")
set(_suffix "dist-packages")
endif()
install(
DIRECTORY ${PYTHON_REQUESTS_PATH}/requests
DESTINATION ${TARGETDIR_VER}/python/${_target_LIB}/python${PYTHON_VERSION}/${_suffix}
PATTERN "__pycache__" EXCLUDE # * any cache *
PATTERN "*.pyc" EXCLUDE # * any cache *
PATTERN "*.pyo" EXCLUDE # * any cache *
)
# On some platforms requests does have extra dependencies.
#
# Either `chardet` or `charset_normalizer` is used, depending on the version of Python.
# The code below silently skips the one that's not available, so we can list both here.
set(_requests_deps "certifi" "chardet" "charset_normalizer" "idna" "urllib3")
foreach(_requests_dep ${_requests_deps})
if(EXISTS ${PYTHON_REQUESTS_PATH}/${_requests_dep})
install(
DIRECTORY ${PYTHON_REQUESTS_PATH}/${_requests_dep}
DESTINATION ${TARGETDIR_VER}/python/${_target_LIB}/python${PYTHON_VERSION}/${_suffix}
PATTERN "__pycache__" EXCLUDE # * any cache *
PATTERN "*.pyc" EXCLUDE # * any cache *
PATTERN "*.pyo" EXCLUDE # * any cache *
)
endif()
endforeach()
if(EXISTS ${PYTHON_REQUESTS_PATH}/six.py)
install(
FILES ${PYTHON_REQUESTS_PATH}/six.py
DESTINATION ${TARGETDIR_VER}/python/${_target_LIB}/python${PYTHON_VERSION}/${_suffix}
)
endif()
unset(_requests_dep)
unset(_requests_deps)
unset(_suffix)
endif()
unset(_target_LIB)
endif()
if(WITH_INSTALL_PORTABLE)
# The script uses the version of Python installed with Blender,
# so it must only be inside installed if `WITH_PYTHON AND WITH_PYTHON_INSTALL`
# are active.
get_filename_component(PYTHON_EXECUTABLE_NAME_ONLY ${PYTHON_EXECUTABLE} NAME)
configure_file(
${CMAKE_SOURCE_DIR}/release/freedesktop/scripts/blender-system-info.sh.in
${CMAKE_BINARY_DIR}/release/freedesktop/scripts/blender-system-info.sh
@ONLY
)
unset(PYTHON_EXECUTABLE_NAME_ONLY)
install(
PROGRAMS ${CMAKE_BINARY_DIR}/release/freedesktop/scripts/blender-system-info.sh
DESTINATION "."
)
endif()
endif()
elseif(WIN32)
if(WITH_WINDOWS_EXTERNAL_MANIFEST)
install(
FILES ${CMAKE_BINARY_DIR}/blender.exe.manifest
DESTINATION "."
)
install(
FILES ${CMAKE_BINARY_DIR}/blender.exe.manifest
DESTINATION "."
RENAME blender-launcher.exe.manifest
)
endif()
windows_install_shared_manifest(
FILES ${LIBDIR}/epoxy/bin/epoxy-0.dll
ALL
)
2024-08-21 23:20:34 +10:00
if(WITH_VULKAN_BACKEND)
Vulkan: Enable as Experimental Option This PR enables vulkan backend as experimental option. It will only be available in alpha builds on Linux and Windows. This option is highly experimental and enabled to get some insight on supported platforms. Don't expect a fully working Blender yet. Also don't expect it to have usable performance. **What is known to not work?** * OCIO textures are not supported on Intel and AMD GPUs. sRGB/Standard is supported on those platforms. * AMD Polaris based GPUs on Linux will generate a crash when drawing the 3d cursor as it doesn't support the needed vertex format. Comment out `DRW_draw_cursor` in `DRW_draw_region_info`. * The colors in the node editor and sequencer are of as sRGB viewports aren't detected correctly. * The image / UV editor isn't working as many texture formats haven't been tested yet. Some tweaks are also needed to do correct depth testing. * 3D Viewport is known to be flickering. Sometimes workbench doesn't display anything. * 3D Viewport wireframe will crash as it uses a framebuffer with gaps between color attachments, which isn't supported yet. (#113141) * Rotate the view widget is partially drawn due to incompatible depth clipping. * GPU Selection isn't working. It is expected to be solved when Overlay-Next will become the default engine. For now disable GPU depth picking in the preferences. * Cycles/EEVEE are known to not work with Vulkan yet. Cycles requires Vulkan Pixel Buffer. Cuda <-> Vulkan interop might require a different approach than OpenGL as Vulkan doesn't allow importing memory from a Cuda context. EEVEE uses features that aren't available yet in the backend * Workbench is working, except Workbench shadows. * EEVEE-Next basics are working. Shadows, lights are known to be not working. Materials/Shading works in simple scenes. Changes are expected in EEVEE-Next that will break Vulkan compatibility in the near future. * Systems with multiple GPUs is not expected to work. * Wayland support is in development and requires some iterations. You can start Blender, but the protocols are not aligned yet. * OpenXR hasn't been modified and is expected to fail. * The backend is very strict when mis-using the GPU module. In debug builds it may crash on asserts. * Older drivers/GPUs might not have all the features that we require. The workarounds for the missing features still need to be implemented. **A word about performance** In the project planning we focus first on stability and platform support. The performance of Vulkan is around 20% of what we want to achieve. The reason is that each command sent to the GPU is done one at a time. The implementation even waits until we have feedback that the GPU is idle again. Geometry is currently stored in System RAM. The GPU will read and cache the data when accessing geometry. This slows down when using objects with much geometry. Some performance features like MDI (Multi-Draw-Indirect) hasn't been implemented and falls back to Single Draw Indirect. **Why enable it is an experimental option?** * Ensures that new features are being tested with Vulkan * Ensure that building with Vulkan is possible on supported platforms * Get feedback from developers if Vulkan can run on their system or that there are special cases that we are not aware of. Main development environment has been Linux/X11 with occasionally testing using Windows. * Validate Add-ons that use the `gpu` module. * Possible to enable GLSL validation on the buildbot. (Needs more work). * Does it compile on all machines or does it require more changes to cmake config. We expect it to be able to compile without installing the Vulkan SDK. The Vulkan SDK is a very powerful tool, but only when actually doing GPU development. Otherwise it is an overhead which slows down other activities. **How can the backend be enabled?** Currently the Vulkan backend can be enabled per Blender session by starting using the command line argument `--gpu-backend vulkan`. In the future, when the backend is more mature, we will add a user preference to switch between OpenGL and Vulkan. Pull Request: https://projects.blender.org/blender/blender/pulls/113057
2023-10-06 15:24:21 +02:00
windows_install_shared_manifest(
FILES ${LIBDIR}/vulkan/bin/vulkan-1.dll
ALL
)
endif()
# 4.1 FFTW libs need to be installed, in 4.2 FFTW got turned into a static lib
# and the files below no longer exist.
if(EXISTS ${LIBDIR}/fftw3/lib/fftw3.dll)
windows_install_shared_manifest(
FILES
${LIBDIR}/fftw3/lib/fftw3.dll
${LIBDIR}/fftw3/lib/fftw3f.dll
ALL
)
endif()
if(MSVC_ASAN)
# The ASAN DLL's can be found in the same directory as the compiler,
# this is the easiest way to find these.
2023-08-10 11:28:25 +10:00
string(
REPLACE "cl.exe" "clang_rt.asan_dynamic-x86_64.dll"
ASAN_DLL ${CMAKE_C_COMPILER})
string(
REPLACE "cl.exe" "clang_rt.asan_dbg_dynamic-x86_64.dll"
ASAN_DEBUG_DLL ${CMAKE_C_COMPILER}
)
if(NOT EXISTS "${ASAN_DLL}")
2022-09-09 11:52:14 +10:00
message(
FATAL_ERROR
"ASAN is enabled, but the ASAN runtime is not detected, "
"this is an optional component during the MSVC install, please install it"
)
endif()
windows_install_shared_manifest(
2022-08-09 13:36:45 +10:00
FILES ${ASAN_DLL}
RELEASE
)
windows_install_shared_manifest(
2022-08-09 13:36:45 +10:00
FILES ${ASAN_DEBUG_DLL}
DEBUG
)
unset(ASAN_DLL)
unset(ASAN_DEBUG_DLL)
endif()
if(EXISTS ${LIBDIR}/openexr/bin/Iex.dll)
windows_install_shared_manifest(
FILES
${LIBDIR}/openexr/bin/Iex.dll
${LIBDIR}/openexr/bin/IlmThread.dll
${LIBDIR}/openexr/bin/OpenEXRCore.dll
${LIBDIR}/openexr/bin/OpenEXRUtil.dll
${LIBDIR}/openexr/bin/OpenEXR.dll
${LIBDIR}/imath/bin/imath.dll
RELEASE
)
windows_install_shared_manifest(
FILES
${LIBDIR}/openexr/bin/Iex_d.dll
${LIBDIR}/openexr/bin/IlmThread_d.dll
${LIBDIR}/openexr/bin/OpenEXRCore_d.dll
${LIBDIR}/openexr/bin/OpenEXRUtil_d.dll
${LIBDIR}/openexr/bin/OpenEXR_d.dll
${LIBDIR}/imath/bin/imath_d.dll
DEBUG
)
endif()
if(EXISTS ${LIBDIR}/openimageio/bin/openimageio.dll)
windows_install_shared_manifest(
FILES
${LIBDIR}/openimageio/bin/openimageio.dll
${LIBDIR}/openimageio/bin/openimageio_util.dll
RELEASE
)
windows_install_shared_manifest(
FILES
${LIBDIR}/openimageio/bin/openimageio_d.dll
${LIBDIR}/openimageio/bin/openimageio_util_d.dll
DEBUG
)
endif()
if(EXISTS ${LIBDIR}/gmp/lib/gmp-10.dll)
set(GMP_DLL ${LIBDIR}/gmp/lib/gmp-10.dll)
else()
set(GMP_DLL ${LIBDIR}/gmp/lib/libgmp-10.dll)
endif()
windows_install_shared_manifest(
FILES ${GMP_DLL}
ALL
)
unset(GMP_DLL)
windows_install_shared_manifest(
FILES ${LIBDIR}/gmp/lib/libgmpxx.dll
RELEASE
)
windows_install_shared_manifest(
FILES ${LIBDIR}/gmp/lib/libgmpxx_d.dll
DEBUG
)
if(WITH_WINDOWS_RELEASE_PDB)
2024-09-20 13:14:57 +10:00
# Skip install of stripped PDB if compiling with clang since there doesn't seem
# to be a PDB-stripped version for `clang-cl`.
if(WITH_WINDOWS_RELEASE_STRIPPED_PDB AND NOT MSVC_CLANG)
# Icky hack for older CMAKE from https://stackoverflow.com/a/21198501
# `$<CONFIG>` will work in newer CMAKE but the version currently (3.12)
# on the build-bot does not support this endeavor.
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}/blender_public.pdb
DESTINATION "."
RENAME blender.pdb
CONFIGURATIONS Release
)
else()
install(
FILES $<TARGET_PDB_FILE:blender>
DESTINATION "."
RENAME blender.pdb
CONFIGURATIONS Release
)
endif()
endif()
windows_install_shared_manifest(
FILES ${LIBDIR}/openvdb/bin/openvdb.dll
RELEASE
)
windows_install_shared_manifest(
FILES ${LIBDIR}/openvdb/bin/openvdb_d.dll
DEBUG
)
windows_install_shared_manifest(
FILES
${LIBDIR}/materialx/bin/MaterialXCore.dll
${LIBDIR}/materialx/bin/MaterialXFormat.dll
${LIBDIR}/materialx/bin/MaterialXGenGlsl.dll
${LIBDIR}/materialx/bin/MaterialXGenMdl.dll
${LIBDIR}/materialx/bin/MaterialXGenOsl.dll
${LIBDIR}/materialx/bin/MaterialXGenShader.dll
RELEASE
)
if(EXISTS ${LIBDIR}/materialx/bin/MaterialXRender.dll) # 3.6+
windows_install_shared_manifest(
FILES
${LIBDIR}/materialx/bin/MaterialXRender.dll
${LIBDIR}/materialx/bin/MaterialXRenderGlsl.dll
${LIBDIR}/materialx/bin/MaterialXRenderHw.dll
${LIBDIR}/materialx/bin/MaterialXRenderOsl.dll
RELEASE
)
windows_install_shared_manifest(
FILES
${LIBDIR}/materialx/bin/MaterialXRender_d.dll
${LIBDIR}/materialx/bin/MaterialXRenderGlsl_d.dll
${LIBDIR}/materialx/bin/MaterialXRenderHw_d.dll
${LIBDIR}/materialx/bin/MaterialXRenderOsl_d.dll
DEBUG
)
endif()
if(EXISTS ${LIBDIR}/materialx/bin/MaterialXGenMsl.dll) # 4.1+
windows_install_shared_manifest(
FILES
${LIBDIR}/materialx/bin/MaterialXGenMsl.dll
RELEASE
)
windows_install_shared_manifest(
FILES
${LIBDIR}/materialx/bin/MaterialXGenMsl_d.dll
DEBUG
)
endif()
windows_install_shared_manifest(
FILES
${LIBDIR}/materialx/bin/MaterialXCore_d.dll
${LIBDIR}/materialx/bin/MaterialXFormat_d.dll
${LIBDIR}/materialx/bin/MaterialXGenGlsl_d.dll
${LIBDIR}/materialx/bin/MaterialXGenMdl_d.dll
${LIBDIR}/materialx/bin/MaterialXGenOsl_d.dll
${LIBDIR}/materialx/bin/MaterialXGenShader_d.dll
DEBUG
)
if(WITH_PYTHON)
string(REPLACE "." "" _PYTHON_VERSION_NO_DOTS ${PYTHON_VERSION})
if(NOT WITH_PYTHON_MODULE)
if(NOT CMAKE_COMPILER_IS_GNUCC)
install(
FILES
${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/bin/python${_PYTHON_VERSION_NO_DOTS}.dll
${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/bin/python3.dll
DESTINATION ${TARGETDIR_EXE}
CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
)
install(
FILES
${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/bin/python${_PYTHON_VERSION_NO_DOTS}_d.dll
${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/bin/python3_d.dll
DESTINATION ${TARGETDIR_EXE}
CONFIGURATIONS Debug
)
endif()
endif()
# VFX libs are bundled with both Blender executable and Python module.
if(WITH_PYTHON_INSTALL OR WITH_PYTHON_MODULE)
# NOTE: as far as python is concerned `RelWithDebInfo`
# is not debug since its without debug flags.
install(DIRECTORY DESTINATION ${TARGETDIR_VER}/python)
install(DIRECTORY DESTINATION ${TARGETDIR_VER}/python/lib)
2014-12-01 14:53:12 +01:00
install(
DIRECTORY ${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/lib
DESTINATION ${BLENDER_VERSION}/python/
CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
PATTERN "*_d.*" EXCLUDE # * debug libraries *
PATTERN "__pycache__" EXCLUDE # * any cache *
PATTERN "*.pyc" EXCLUDE # * any cache *
PATTERN "*.pyo" EXCLUDE # * any cache *
2014-12-01 14:53:12 +01:00
)
install(
DIRECTORY ${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/lib
DESTINATION ${BLENDER_VERSION}/python/
CONFIGURATIONS Debug
2014-12-01 14:53:12 +01:00
PATTERN "__pycache__" EXCLUDE # * any cache *
PATTERN "*.pyc" EXCLUDE # * any cache *
PATTERN "*.pyo" EXCLUDE # * any cache *
2014-12-01 14:53:12 +01:00
)
install(
DIRECTORY ${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/DLLs
DESTINATION ${BLENDER_VERSION}/python
CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
PATTERN "*.pdb" EXCLUDE
PATTERN "*_d.*" EXCLUDE
)
install(
DIRECTORY ${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/DLLs
DESTINATION ${BLENDER_VERSION}/python
CONFIGURATIONS Debug
)
install(
FILES
${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/bin/python${_PYTHON_VERSION_NO_DOTS}.dll
${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/bin/python3.dll
${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/bin/python.exe
DESTINATION ${BLENDER_VERSION}/python/bin
CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
)
install(
FILES
${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/bin/python${_PYTHON_VERSION_NO_DOTS}_d.dll
${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/bin/python3_d.dll
${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/bin/python_d.exe
DESTINATION ${BLENDER_VERSION}/python/bin
CONFIGURATIONS Debug
)
# This will only exist for 3.5+.
if(EXISTS ${LIBDIR}/openimageio/lib/python${PYTHON_VERSION}/site-packages)
2023-01-19 17:07:17 +11:00
install(
DIRECTORY ${LIBDIR}/openimageio/lib/python${PYTHON_VERSION}/site-packages/
DESTINATION ${TARGETDIR_SITE_PACKAGES}/
CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
PATTERN "__pycache__" EXCLUDE # * any cache *
PATTERN "*.pyc" EXCLUDE # * any cache *
PATTERN "*.pyo" EXCLUDE # * any cache *
)
endif()
if(EXISTS ${LIBDIR}/openimageio/lib/python${PYTHON_VERSION}_debug/site-packages)
install(
DIRECTORY ${LIBDIR}/openimageio/lib/python${PYTHON_VERSION}_debug/site-packages/
DESTINATION ${TARGETDIR_SITE_PACKAGES}/
CONFIGURATIONS Debug
PATTERN "__pycache__" EXCLUDE # * any cache *
PATTERN "*.pyc" EXCLUDE # * any cache *
PATTERN "*.pyo" EXCLUDE # * any cache *
)
endif()
# This will not exist for 3.4 and earlier `./lib` directory
# to ease the transition, support both 3.4 and 3.5 `./lib` directories.
if(EXISTS ${USD_LIBRARY_DIR}/python/)
install(
DIRECTORY ${USD_LIBRARY_DIR}/python/
DESTINATION ${TARGETDIR_SITE_PACKAGES}
2022-12-16 23:47:35 +11:00
CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
PATTERN "__pycache__" EXCLUDE # * any cache *
PATTERN "*.pyc" EXCLUDE # * any cache *
PATTERN "*.pyo" EXCLUDE # * any cache *
)
endif()
if(EXISTS ${USD_LIBRARY_DIR}/debug/python/)
install(
DIRECTORY ${USD_LIBRARY_DIR}/debug/python/
DESTINATION ${TARGETDIR_SITE_PACKAGES}
2022-12-16 23:47:35 +11:00
CONFIGURATIONS Debug
PATTERN "__pycache__" EXCLUDE # * any cache *
PATTERN "*.pyc" EXCLUDE # * any cache *
PATTERN "*.pyo" EXCLUDE # * any cache *
)
endif()
# This will not exist for 3.4 and earlier `./lib` directories
# to ease the transition, support both 3.4 and 3.5 `./lib` directories.
if(EXISTS ${LIBDIR}/openvdb/python/pyopenvdb_d.pyd)
install(
FILES ${LIBDIR}/openvdb/python/pyopenvdb_d.pyd
DESTINATION ${TARGETDIR_SITE_PACKAGES}
CONFIGURATIONS Debug
)
install(
FILES ${LIBDIR}/openvdb/python/pyopenvdb.pyd
DESTINATION ${TARGETDIR_SITE_PACKAGES}
CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
)
endif()
# This will exist for 4.1 `./lib` directories.
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64")
set(_openvdb_arch arm64)
else()
set(_openvdb_arch amd64)
endif()
# 4.3
if(EXISTS ${LIBDIR}/openvdb/python/pyopenvdb_d.cp${_PYTHON_VERSION_NO_DOTS}-win_${_openvdb_arch}.pyd)
install(
FILES ${LIBDIR}/openvdb/python/pyopenvdb_d.cp${_PYTHON_VERSION_NO_DOTS}-win_${_openvdb_arch}.pyd
DESTINATION ${TARGETDIR_SITE_PACKAGES}
CONFIGURATIONS Debug
)
install(
FILES ${LIBDIR}/openvdb/python/pyopenvdb.cp${_PYTHON_VERSION_NO_DOTS}-win_${_openvdb_arch}.pyd
DESTINATION ${TARGETDIR_SITE_PACKAGES}
CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
)
endif()
# 4.4
if(EXISTS ${LIBDIR}/openvdb/python/openvdb_d.cp${_PYTHON_VERSION_NO_DOTS}-win_${_openvdb_arch}.pyd)
install(
FILES ${LIBDIR}/openvdb/python/openvdb_d.cp${_PYTHON_VERSION_NO_DOTS}-win_${_openvdb_arch}.pyd
DESTINATION ${TARGETDIR_SITE_PACKAGES}
CONFIGURATIONS Debug
)
install(
FILES ${LIBDIR}/openvdb/python/openvdb.cp${_PYTHON_VERSION_NO_DOTS}-win_${_openvdb_arch}.pyd
DESTINATION ${TARGETDIR_SITE_PACKAGES}
CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
)
endif()
# MaterialX python bindings.
# Check they exist so building against non `LIBDIR` Python works as expected.
if(EXISTS ${LIBDIR}/materialx/python/Release/MaterialX)
install(
DIRECTORY ${LIBDIR}/materialx/python/Release/MaterialX
DESTINATION ${TARGETDIR_SITE_PACKAGES}/
CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
PATTERN "__pycache__" EXCLUDE # * any cache *
PATTERN "*.pyc" EXCLUDE # * any cache *
PATTERN "*.pyo" EXCLUDE # * any cache *
)
endif()
if(EXISTS ${LIBDIR}/materialx/python/Debug/MaterialX)
install(
DIRECTORY ${LIBDIR}/materialx/python/Debug/MaterialX
DESTINATION ${TARGETDIR_SITE_PACKAGES}/
CONFIGURATIONS Debug
PATTERN "__pycache__" EXCLUDE # * any cache *
PATTERN "*.pyc" EXCLUDE # * any cache *
PATTERN "*.pyo" EXCLUDE # * any cache *
)
endif()
2010-09-15 14:36:32 +00:00
endif()
if(WITH_PYTHON_INSTALL)
if(WINDOWS_PYTHON_DEBUG)
install(
FILES
${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/libs/python${_PYTHON_VERSION_NO_DOTS}.pdb
DESTINATION "."
CONFIGURATIONS Release;RelWithDebInfo;MinSizeRel
)
install(
FILES
${LIBDIR}/python/${_PYTHON_VERSION_NO_DOTS}/libs/python${_PYTHON_VERSION_NO_DOTS}_d.pdb
DESTINATION "."
CONFIGURATIONS Debug
)
endif()
endif()
endif()
# Filenames change slightly between FFMPEG versions check both 6.0 and fallback to 5.0
# to ease the transition between versions.
if(EXISTS "${LIBDIR}/ffmpeg/lib/avfilter-10.dll")
windows_install_shared_manifest(
FILES
${LIBDIR}/ffmpeg/lib/avfilter-10.dll
ALL
2025-10-07 08:54:43 +11:00
)
endif()
if(EXISTS "${LIBDIR}/ffmpeg/lib/avcodec-61.dll")
windows_install_shared_manifest(
FILES
${LIBDIR}/ffmpeg/lib/avcodec-61.dll
${LIBDIR}/ffmpeg/lib/avformat-61.dll
${LIBDIR}/ffmpeg/lib/avdevice-61.dll
${LIBDIR}/ffmpeg/lib/avutil-59.dll
${LIBDIR}/ffmpeg/lib/swscale-8.dll
${LIBDIR}/ffmpeg/lib/swresample-5.dll
ALL
)
elseif(EXISTS "${LIBDIR}/ffmpeg/lib/avcodec-60.dll")
windows_install_shared_manifest(
FILES
${LIBDIR}/ffmpeg/lib/avcodec-60.dll
${LIBDIR}/ffmpeg/lib/avformat-60.dll
${LIBDIR}/ffmpeg/lib/avdevice-60.dll
${LIBDIR}/ffmpeg/lib/avutil-58.dll
${LIBDIR}/ffmpeg/lib/swscale-7.dll
${LIBDIR}/ffmpeg/lib/swresample-4.dll
ALL
)
else()
windows_install_shared_manifest(
FILES
${LIBDIR}/ffmpeg/lib/avcodec-59.dll
${LIBDIR}/ffmpeg/lib/avformat-59.dll
${LIBDIR}/ffmpeg/lib/avdevice-59.dll
${LIBDIR}/ffmpeg/lib/avutil-57.dll
${LIBDIR}/ffmpeg/lib/swscale-6.dll
${LIBDIR}/ffmpeg/lib/swresample-4.dll
ALL
)
endif()
if(EXISTS ${LIBDIR}/tbb/bin/tbb12.dll) # 4.4
windows_install_shared_manifest(
FILES
${LIBDIR}/tbb/bin/tbb12.dll
RELEASE
)
windows_install_shared_manifest(
FILES
${LIBDIR}/tbb/bin/tbb12_debug.dll
DEBUG
)
else()
windows_install_shared_manifest(
FILES
${LIBDIR}/tbb/bin/tbb.dll
RELEASE
)
windows_install_shared_manifest(
FILES
${LIBDIR}/tbb/bin/tbb_debug.dll
DEBUG
)
endif()
if(WITH_TBB_MALLOC_PROXY)
windows_install_shared_manifest(
FILES
${LIBDIR}/tbb/bin/tbbmalloc.dll
${LIBDIR}/tbb/bin/tbbmalloc_proxy.dll
RELEASE
)
windows_install_shared_manifest(
FILES
${LIBDIR}/tbb/bin/tbbmalloc_debug.dll
${LIBDIR}/tbb/bin/tbbmalloc_proxy_debug.dll
DEBUG
)
list(APPEND LIB ${TBB_MALLOC_LIBRARIES})
endif()
if(EXISTS ${LIBDIR}/sndfile/lib/sndfile.dll)
set(SNDFILE_DLL ${LIBDIR}/sndfile/lib/sndfile.dll)
else()
set(SNDFILE_DLL ${LIBDIR}/sndfile/lib/libsndfile-1.dll)
endif()
windows_install_shared_manifest(
FILES ${SNDFILE_DLL}
ALL
)
unset(SNDFILE_DLL)
windows_install_shared_manifest(
FILES ${LIBDIR}/shaderc/bin/shaderc_shared.dll
ALL
)
windows_install_shared_manifest(
FILES
${LIBDIR}/openal/lib/OpenAL32.dll
ALL
)
windows_install_shared_manifest(
FILES ${LIBDIR}/sdl/lib/SDL2.dll
ALL
)
if(WITH_SYSTEM_AUDASPACE)
install(
FILES
${LIBDIR}/audaspace/lib/audaspace.dll
${LIBDIR}/audaspace/lib/audaspace-c.dll
${LIBDIR}/audaspace/lib/audaspace-py.dll
DESTINATION "."
)
endif()
if(NOT WITH_PYTHON_MODULE)
get_filename_component(PYTHON_EXECUTABLE_NAME_ONLY ${PYTHON_EXECUTABLE} NAME)
# Configure then generate file. Note that this copies the literal generator
# for the Python executable name. So the file needs to be generated afterwards
# to get the correct name.
configure_file(
${CMAKE_SOURCE_DIR}/release/windows/batch/blender_system_info.cmd.in
${CMAKE_BINARY_DIR}/release/windows/batch/blender_system_info.with_vars.cmd.in
@ONLY
)
unset(PYTHON_EXECUTABLE_NAME_ONLY)
# Replace Python executable generator with actual executable name.
file(GENERATE
OUTPUT ${CMAKE_BINARY_DIR}/release/windows/batch/blender_system_info_$<CONFIG>.cmd
INPUT ${CMAKE_BINARY_DIR}/release/windows/batch/blender_system_info.with_vars.cmd.in
)
install(
FILES
${CMAKE_BINARY_DIR}/release/windows/batch/blender_system_info_$<CONFIG>.cmd
DESTINATION ${TARGETDIR_EXE}
RENAME blender_system_info.cmd
)
if(WITH_CYCLES)
install(
FILES
${CMAKE_SOURCE_DIR}/release/windows/batch/blender_debug_cycles.cmd
DESTINATION ${TARGETDIR_EXE}
)
endif()
install(
FILES
${CMAKE_SOURCE_DIR}/release/windows/batch/blender_debug_gpu.cmd
${CMAKE_SOURCE_DIR}/release/windows/batch/blender_debug_gpu_glitchworkaround.cmd
${CMAKE_SOURCE_DIR}/release/windows/batch/blender_debug_log.cmd
${CMAKE_SOURCE_DIR}/release/windows/batch/blender_factory_startup.cmd
${CMAKE_SOURCE_DIR}/release/windows/batch/blender_factory_startup_vulkan.cmd
${CMAKE_SOURCE_DIR}/release/windows/batch/blender_startup_opengl.cmd
${CMAKE_SOURCE_DIR}/release/windows/batch/blender_startup_vulkan.cmd
${CMAKE_SOURCE_DIR}/release/windows/batch/blender_oculus.cmd
${CMAKE_SOURCE_DIR}/release/windows/batch/oculus.json
DESTINATION ${TARGETDIR_EXE}
)
endif()
if(WITH_BLENDER_THUMBNAILER)
install(
TARGETS BlendThumb
DESTINATION "."
)
endif()
if(WITH_PYTHON_MODULE AND TARGETDIR_BPY)
install(
TARGETS blender
LIBRARY DESTINATION ${TARGETDIR_BPY}
)
endif()
if(PLATFORM_BUNDLED_LIBRARIES)
windows_process_platform_bundled_libraries("${PLATFORM_BUNDLED_LIBRARIES}")
endif()
elseif(APPLE)
2019-10-21 15:05:56 +11:00
if(NOT WITH_PYTHON_MODULE)
# Uppercase name for app bundle.
set_target_properties(blender PROPERTIES OUTPUT_NAME Blender)
endif()
set(OSX_APP_SOURCEDIR ${CMAKE_SOURCE_DIR}/release/darwin/Blender.app)
# Setup `Info.plist`.
2022-09-09 11:52:14 +10:00
execute_process(
COMMAND date "+%Y-%m-%d"
OUTPUT_VARIABLE BLENDER_DATE
OUTPUT_STRIP_TRAILING_WHITESPACE
)
set_target_properties(blender PROPERTIES
MACOSX_BUNDLE_INFO_PLIST ${OSX_APP_SOURCEDIR}/Contents/Info.plist
MACOSX_BUNDLE_SHORT_VERSION_STRING "${BLENDER_VERSION}.${BLENDER_VERSION_PATCH}"
2022-08-09 13:36:45 +10:00
MACOSX_BUNDLE_LONG_VERSION_STRING "${BLENDER_VERSION}.${BLENDER_VERSION_PATCH} ${BLENDER_DATE}"
)
# Xcode Archiving support for distributing the application (Testflight, App Store Connect, etc...)
set_target_properties(blender PROPERTIES
XCODE_ATTRIBUTE_SKIP_INSTALL "NO"
XCODE_ATTRIBUTE_INSTALL_PATH "$(LOCAL_APPS_DIR)"
)
if(WITH_BLENDER_THUMBNAILER)
set(OSX_THUMBNAILER_SOURCEDIR ${OSX_APP_SOURCEDIR}/Contents/PlugIns/blender-thumbnailer.appex)
set_target_properties(blender-thumbnailer PROPERTIES
BUNDLE_EXTENSION appex
MACOSX_BUNDLE_INFO_PLIST ${OSX_THUMBNAILER_SOURCEDIR}/Contents/Info.plist
MACOSX_BUNDLE_SHORT_VERSION_STRING "${BLENDER_VERSION}.${BLENDER_VERSION_PATCH}"
MACOSX_BUNDLE_LONG_VERSION_STRING "${BLENDER_VERSION}.${BLENDER_VERSION_PATCH} ${BLENDER_DATE}"
)
endif()
# Gather the date in finder-style.
2022-09-09 11:52:14 +10:00
execute_process(
COMMAND date "+%m/%d/%Y/%H:%M"
OUTPUT_VARIABLE SETFILE_DATE
OUTPUT_STRIP_TRAILING_WHITESPACE
)
# Give the bundle actual creation/modification date.
#
# Note that the directory might not yet exist, which happens when CMAKE is first run.
if(NOT EXISTS ${EXECUTABLE_OUTPUT_PATH}/Blender.app)
file(MAKE_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}/Blender.app)
endif()
2022-09-09 11:52:14 +10:00
execute_process(
COMMAND SetFile -d ${SETFILE_DATE} -m ${SETFILE_DATE} ${EXECUTABLE_OUTPUT_PATH}/Blender.app
)
set(BLENDER_BIN "bin/blender")
install(
TARGETS blender
DESTINATION "."
)
install(
FILES ${OSX_APP_SOURCEDIR}/Contents/PkgInfo
DESTINATION "Blender.app/Contents"
)
install_dir(
${OSX_APP_SOURCEDIR}/Contents/Resources
"Blender.app/Contents"
)
if(WITH_BLENDER_THUMBNAILER)
2022-09-29 12:00:18 +10:00
install(
TARGETS blender-thumbnailer
DESTINATION "./Blender.app/Contents/PlugIns"
2022-09-29 12:00:18 +10:00
)
endif()
if(PLATFORM_BUNDLED_LIBRARIES AND TARGETDIR_LIB)
install(
FILES ${PLATFORM_BUNDLED_LIBRARIES}
DESTINATION ${TARGETDIR_LIB}
)
endif()
if(WITH_VULKAN_BACKEND)
install(
FILES ${VULKAN_LIBRARY}
DESTINATION ${TARGETDIR_LIB}
)
endif()
# Python.
if(WITH_PYTHON AND NOT WITH_PYTHON_MODULE AND NOT WITH_PYTHON_FRAMEWORK)
# Copy the python libraries into the install directory.
install_dir(
${PYTHON_LIBPATH}/python${PYTHON_VERSION}
${TARGETDIR_VER}/python/lib
)
# Install Python executable.
install(
PROGRAMS ${PYTHON_EXECUTABLE}
DESTINATION ${TARGETDIR_VER}/python/bin
)
# Needed for `distutils/pip`.
# Get the last part of the include dir, will be `python{version}{abiflag}`.
get_filename_component(_py_inc_suffix ${PYTHON_INCLUDE_DIR} NAME)
install(
FILES ${PYTHON_INCLUDE_DIR}/pyconfig.h
DESTINATION ${TARGETDIR_VER}/python/include/${_py_inc_suffix}
)
unset(_py_inc_suffix)
endif()
if(WITH_PYTHON_MODULE AND TARGETDIR_BPY)
install(
TARGETS blender
LIBRARY DESTINATION ${TARGETDIR_BPY}
)
endif()
if(NOT WITH_PYTHON_MODULE AND WITH_PYTHON AND WITH_PYTHON_INSTALL)
get_filename_component(PYTHON_EXECUTABLE_NAME_ONLY ${PYTHON_EXECUTABLE} NAME)
configure_file(
${CMAKE_SOURCE_DIR}/release/darwin/scripts/blender-system-info.sh.in
${CMAKE_BINARY_DIR}/release/darwin/scripts/blender-system-info.sh
@ONLY
)
unset(PYTHON_EXECUTABLE_NAME_ONLY)
install(
PROGRAMS ${CMAKE_BINARY_DIR}/release/darwin/scripts/blender-system-info.sh
DESTINATION "Blender.app/Contents/Resources"
)
endif()
endif()
# Windows already installs these, for Unix we need to pick just the VFX libs from
# the site-packages directory.
if(WITH_PYTHON_MODULE AND LIBDIR AND NOT WIN32)
# It's possible for a build using LIBDIR to reference a non-standard Python installation.
path_is_prefix(LIBDIR PYTHON_INCLUDE_DIR _is_python_in_libdir)
if(_is_python_in_libdir)
install(
DIRECTORY ${LIBDIR}/python/lib/python${PYTHON_VERSION}/site-packages/MaterialX
DESTINATION ${TARGETDIR_SITE_PACKAGES}
)
install(
DIRECTORY ${LIBDIR}/python/lib/python${PYTHON_VERSION}/site-packages/OpenImageIO
DESTINATION ${TARGETDIR_SITE_PACKAGES}
)
install(
DIRECTORY ${LIBDIR}/python/lib/python${PYTHON_VERSION}/site-packages/PyOpenColorIO
DESTINATION ${TARGETDIR_SITE_PACKAGES}
)
install(
DIRECTORY ${LIBDIR}/python/lib/python${PYTHON_VERSION}/site-packages/oslquery
DESTINATION ${TARGETDIR_SITE_PACKAGES} OPTIONAL
)
install(
DIRECTORY ${LIBDIR}/python/lib/python${PYTHON_VERSION}/site-packages/pxr
DESTINATION ${TARGETDIR_SITE_PACKAGES}
)
if(APPLE)
set(_openvdb_filename openvdb.cpython-${PYTHON_VERSION_NO_DOTS}-darwin.so)
else()
set(_openvdb_filename openvdb.cpython-${PYTHON_VERSION_NO_DOTS}-${CMAKE_SYSTEM_PROCESSOR}-linux-gnu.so)
endif()
install(
FILES ${LIBDIR}/python/lib/python${PYTHON_VERSION}/site-packages/${_openvdb_filename}
DESTINATION ${TARGETDIR_SITE_PACKAGES}
)
endif()
unset(_is_python_in_libdir)
endif()
# -----------------------------------------------------------------------------
# Generic Install, for all targets
if(DEFINED TARGETDIR_TEXT)
2022-08-09 13:36:45 +10:00
configure_file(
${CMAKE_SOURCE_DIR}/release/text/readme.html
${CMAKE_BINARY_DIR}/release/text/readme.html
@ONLY
)
list(APPEND BLENDER_TEXT_FILES
${CMAKE_BINARY_DIR}/release/text/readme.html
)
install(
FILES ${BLENDER_TEXT_FILES}
DESTINATION "${TARGETDIR_TEXT}"
)
install(
DIRECTORY ${CMAKE_SOURCE_DIR}/release/license
DESTINATION "${TARGETDIR_TEXT}"
)
endif()
# Create a system extensions directory (users or administrators may populate this).
# This only contains a `readme.txt` explaining it's purpose.
install(
DIRECTORY ${CMAKE_SOURCE_DIR}/release/extensions
DESTINATION ${TARGETDIR_VER}
)
# Install more files specified elsewhere.
delayed_do_install(${TARGETDIR_VER})
unset(BLENDER_TEXT_FILES)
unset(TARGETDIR_TEXT)
# -----------------------------------------------------------------------------
# Geometry Icons
2018-04-24 09:19:28 +02:00
# Geometry icons.
get_property(_icon_names GLOBAL PROPERTY ICON_GEOM_NAMES)
set(_icon_files)
foreach(_f ${_icon_names})
list(APPEND _icon_files
"${CMAKE_SOURCE_DIR}/release/datafiles/icons/${_f}.dat"
)
endforeach()
2018-04-24 09:19:28 +02:00
install(
FILES ${_icon_files}
DESTINATION ${TARGETDIR_VER}/datafiles/icons
2018-04-24 09:19:28 +02:00
)
unset(_icon_names)
unset(_icon_files)
unset(_f)
# -----------------------------------------------------------------------------
# Studio Lights
install(
DIRECTORY ${CMAKE_SOURCE_DIR}/release/datafiles/studiolights
DESTINATION ${TARGETDIR_VER}/datafiles
)
# -----------------------------------------------------------------------------
# Bundle assets
set(ASSET_BUNDLE_DIR ${CMAKE_SOURCE_DIR}/assets/)
if(EXISTS "${ASSET_BUNDLE_DIR}")
install(
DIRECTORY ${ASSET_BUNDLE_DIR}
DESTINATION ${TARGETDIR_VER}/datafiles/assets
)
endif()
# -----------------------------------------------------------------------------
# Setup link libraries
add_dependencies(blender makesdna)
target_link_libraries(blender PRIVATE ${LIB})
unset(LIB)
setup_platform_linker_flags(blender)
setup_platform_linker_libs(blender)
if(DEFINED PLATFORM_SYMBOLS_MAP)
set_target_properties(blender PROPERTIES LINK_DEPENDS ${PLATFORM_SYMBOLS_MAP})
endif()
blender_target_include_dirs(blender ${INC})
USD: Introducing a simple USD Exporter This commit introduces the first version of an exporter to Pixar's Universal Scene Description (USD) format. Reviewed By: sergey, LazyDodo Differential Revision: https://developer.blender.org/D6287 - The USD libraries are built by `make deps`, but not yet built by install_deps.sh. - Only experimental support for instancing; by default all duplicated objects are made real in the USD file. This is fine for exporting a linked-in posed character, not so much for thousands of pebbles etc. - The way materials and UV coordinates and Normals are exported is going to change soon. - This patch contains LazyDodo's fixes for building on Windows in D5359. == Meshes == USD seems to support neither per-material nor per-face-group double-sidedness, so we just use the flag from the first non-empty material slot. If there is no material we default to double-sidedness. Each UV map is stored on the mesh in a separate primvar. Materials can refer to these UV maps, but this is not yet exported by Blender. The primvar name is the same as the UV Map name. This is to allow the standard name "st" for texture coordinates by naming the UV Map as such, without having to guess which UV Map is the "standard" one. Face-varying mesh normals are written to USD. When the mesh has custom loop normals those are written. Otherwise the poly flag `ME_SMOOTH` is inspected to determine the normals. The UV maps and mesh normals take up a significant amount of space, so exporting them is optional. They're still enabled by default, though. For comparison: a shot of Spring (03_035_A) is 1.2 GiB when exported with UVs and normals, and 262 MiB without. We probably have room for optimisation of written UVs and normals. The mesh subdivision scheme isn't using the default value 'Catmull Clark', but uses 'None', indicating we're exporting a polygonal mesh. This is necessary for USD to understand our normals; otherwise the mesh is always rendered smooth. In the future we may want to expose this choice of subdivision scheme to the user, or auto-detect it when we actually support exporting pre-subdivision meshes. A possible optimisation could be to inspect whether all polygons are smooth or flat, and mark the USD mesh as such. This can be added when needed. == Animation == Mesh and transform animation are now written when passing `animation=True` to the export operator. There is no inspection of whether an object is actually animated or not; USD can handle deduplication of static values for us. The administration of which timecode to use for the export is left to the file-format-specific concrete subclasses of `AbstractHierarchyIterator`; the abstract iterator itself doesn't know anything about the passage of time. This will allow subclasses for the frame-based USD format and time-based Alembic format. == Support for simple preview materials == Very simple versions of the materials are now exported, using only the viewport diffuse RGB, metallic, and roughness. When there are multiple materials, the mesh faces are stored as geometry subset and each material is assigned to the appropriate subset. If there is only one material this is skipped. The first material if any) is always applied to the mesh itself (regardless of the existence of geometry subsets), because the Hydra viewport doesn't support materials on subsets. See https://github.com/PixarAnimationStudios/USD/issues/542 for more info. Note that the geometry subsets are not yet time-sampled, so it may break when an animated mesh changes topology. Materials are exported as a flat list under a top-level '/_materials' namespace. This inhibits instancing of the objects using those materials, so this is subject to change. == Hair == Only the parent strands are exported, and only with a constant colour. No UV coordinates, no information about the normals. == Camera == Only perspective cameras are supported for now. == Particles == Particles are only written when they are alive, which means that they are always visible (there is currently no code that deals with marking them as invisible outside their lifespan). Particle-system-instanced objects are exported by suffixing the object name with the particle's persistent ID, giving each particle XForm a unique name. == Instancing/referencing == This exporter has experimental support for instancing/referencing. Dupli-object meshes are now written to USD as references to the original mesh. This is still very limited in correctness, as there are issues referencing to materials from a referenced mesh. I am still committing this, as it gives us a place to start when continuing the quest for proper instancing in USD. == Lights == USD does not directly support spot lights, so those aren't exported yet. It's possible to add this in the future via the UsdLuxShapingAPI. The units used for the light intensity are also still a bit of a mystery. == Fluid vertex velocities == Currently only fluid simulations (not meshes in general) have explicit vertex velocities. This is the most important case for exporting velocities, though, as the baked mesh changes topology all the time, and thus computing the velocities at import time in a post-processing step is hard. == The Building Process == - USD is built as monolithic library, instead of 25 smaller libraries. We were linking all of them as 'whole archive' anyway, so this doesn't affect the final file size. It does, however, make life easier with respect to linking order, and handling upstream changes. - The JSON files required by USD are installed into datafiles/usd; they are required on every platform. Set the `PXR_PATH_DEBUG` to any value to have the USD library print the paths it uses to find those files. - USD is patched so that it finds the aforementioned JSON files in a path that we pass to it from Blender. - USD is patched to have a `PXR_BUILD_USD_TOOLS` CMake option to disable building the tools in its `bin` directory. This is sent as a pull request at https://github.com/PixarAnimationStudios/USD/pull/1048
2019-12-13 10:27:40 +01:00
# -----------------------------------------------------------------------------
# USD registry.
# USD requires a set of JSON files that define the standard schemas.
# These files are required at runtime.
2019-12-16 13:49:11 +11:00
if(WITH_USD)
USD: Introducing a simple USD Exporter This commit introduces the first version of an exporter to Pixar's Universal Scene Description (USD) format. Reviewed By: sergey, LazyDodo Differential Revision: https://developer.blender.org/D6287 - The USD libraries are built by `make deps`, but not yet built by install_deps.sh. - Only experimental support for instancing; by default all duplicated objects are made real in the USD file. This is fine for exporting a linked-in posed character, not so much for thousands of pebbles etc. - The way materials and UV coordinates and Normals are exported is going to change soon. - This patch contains LazyDodo's fixes for building on Windows in D5359. == Meshes == USD seems to support neither per-material nor per-face-group double-sidedness, so we just use the flag from the first non-empty material slot. If there is no material we default to double-sidedness. Each UV map is stored on the mesh in a separate primvar. Materials can refer to these UV maps, but this is not yet exported by Blender. The primvar name is the same as the UV Map name. This is to allow the standard name "st" for texture coordinates by naming the UV Map as such, without having to guess which UV Map is the "standard" one. Face-varying mesh normals are written to USD. When the mesh has custom loop normals those are written. Otherwise the poly flag `ME_SMOOTH` is inspected to determine the normals. The UV maps and mesh normals take up a significant amount of space, so exporting them is optional. They're still enabled by default, though. For comparison: a shot of Spring (03_035_A) is 1.2 GiB when exported with UVs and normals, and 262 MiB without. We probably have room for optimisation of written UVs and normals. The mesh subdivision scheme isn't using the default value 'Catmull Clark', but uses 'None', indicating we're exporting a polygonal mesh. This is necessary for USD to understand our normals; otherwise the mesh is always rendered smooth. In the future we may want to expose this choice of subdivision scheme to the user, or auto-detect it when we actually support exporting pre-subdivision meshes. A possible optimisation could be to inspect whether all polygons are smooth or flat, and mark the USD mesh as such. This can be added when needed. == Animation == Mesh and transform animation are now written when passing `animation=True` to the export operator. There is no inspection of whether an object is actually animated or not; USD can handle deduplication of static values for us. The administration of which timecode to use for the export is left to the file-format-specific concrete subclasses of `AbstractHierarchyIterator`; the abstract iterator itself doesn't know anything about the passage of time. This will allow subclasses for the frame-based USD format and time-based Alembic format. == Support for simple preview materials == Very simple versions of the materials are now exported, using only the viewport diffuse RGB, metallic, and roughness. When there are multiple materials, the mesh faces are stored as geometry subset and each material is assigned to the appropriate subset. If there is only one material this is skipped. The first material if any) is always applied to the mesh itself (regardless of the existence of geometry subsets), because the Hydra viewport doesn't support materials on subsets. See https://github.com/PixarAnimationStudios/USD/issues/542 for more info. Note that the geometry subsets are not yet time-sampled, so it may break when an animated mesh changes topology. Materials are exported as a flat list under a top-level '/_materials' namespace. This inhibits instancing of the objects using those materials, so this is subject to change. == Hair == Only the parent strands are exported, and only with a constant colour. No UV coordinates, no information about the normals. == Camera == Only perspective cameras are supported for now. == Particles == Particles are only written when they are alive, which means that they are always visible (there is currently no code that deals with marking them as invisible outside their lifespan). Particle-system-instanced objects are exported by suffixing the object name with the particle's persistent ID, giving each particle XForm a unique name. == Instancing/referencing == This exporter has experimental support for instancing/referencing. Dupli-object meshes are now written to USD as references to the original mesh. This is still very limited in correctness, as there are issues referencing to materials from a referenced mesh. I am still committing this, as it gives us a place to start when continuing the quest for proper instancing in USD. == Lights == USD does not directly support spot lights, so those aren't exported yet. It's possible to add this in the future via the UsdLuxShapingAPI. The units used for the light intensity are also still a bit of a mystery. == Fluid vertex velocities == Currently only fluid simulations (not meshes in general) have explicit vertex velocities. This is the most important case for exporting velocities, though, as the baked mesh changes topology all the time, and thus computing the velocities at import time in a post-processing step is hard. == The Building Process == - USD is built as monolithic library, instead of 25 smaller libraries. We were linking all of them as 'whole archive' anyway, so this doesn't affect the final file size. It does, however, make life easier with respect to linking order, and handling upstream changes. - The JSON files required by USD are installed into datafiles/usd; they are required on every platform. Set the `PXR_PATH_DEBUG` to any value to have the USD library print the paths it uses to find those files. - USD is patched so that it finds the aforementioned JSON files in a path that we pass to it from Blender. - USD is patched to have a `PXR_BUILD_USD_TOOLS` CMake option to disable building the tools in its `bin` directory. This is sent as a pull request at https://github.com/PixarAnimationStudios/USD/pull/1048
2019-12-13 10:27:40 +01:00
add_definitions(-DWITH_USD)
absolute_include_dirs(../blender/io/usd)
endif()
2024-09-20 13:14:57 +10:00
# Always install USD shared library and `datafiles` regardless if Blender
# itself uses them, the bundled Python module still needs it.
if((DEFINED LIBDIR) AND TARGETDIR_LIB)
2024-09-20 13:14:57 +10:00
# On windows the USD library sits in `./blender.shared` copy the files
# relative to the location of the USD DLL, if the DLL does not exist
# assume we are linking against the static 3.5 lib.
if(WITH_USD)
if(WIN32 AND
(
EXISTS ${LIBDIR}/usd/lib/usd_usd_ms.dll OR # USD 22.03
EXISTS ${LIBDIR}/usd/lib/usd_ms.dll # USD 22.11
)
)
install(DIRECTORY
${USD_LIBRARY_DIR}/usd
DESTINATION ${TARGETDIR_LIB}
)
install(DIRECTORY
${LIBDIR}/usd/plugin/usd/hdStorm
${LIBDIR}/usd/plugin/usd/usdShaders
${LIBDIR}/usd/plugin/usd/hioOiio
DESTINATION "blender.shared/usd"
)
elseif(USD_PYTHON_SUPPORT)
install(DIRECTORY
${USD_LIBRARY_DIR}/usd
DESTINATION ${TARGETDIR_LIB}
)
install(DIRECTORY
${LIBDIR}/usd/plugin/usd/hdStorm
${LIBDIR}/usd/plugin/usd/usdShaders
DESTINATION ${TARGETDIR_LIB}/usd
)
else()
install(DIRECTORY
${USD_LIBRARY_DIR}/usd
DESTINATION "${TARGETDIR_VER}/datafiles"
)
install(DIRECTORY
${LIBDIR}/usd/plugin/usd/hdStorm
${LIBDIR}/usd/plugin/usd/usdShaders
DESTINATION "${TARGETDIR_VER}/datafiles/usd"
)
endif()
endif()
if(WIN32)
# If this file exists we are building against a 3.5 22.03 library directory
# that needs these DLL's installed.
if(EXISTS ${LIBDIR}/usd/lib/usd_usd_ms.dll)
windows_install_shared_manifest(FILES
${LIBDIR}/usd/lib/usd_usd_ms.dll
RELEASE
)
windows_install_shared_manifest(FILES
${LIBDIR}/usd/lib/usd_usd_ms_d.dll
DEBUG
)
endif()
# If this file exists we are building against a 3.5 22.11 library directory
# that needs these DLL's installed.
if(EXISTS ${LIBDIR}/usd/lib/usd_ms.dll)
windows_install_shared_manifest(FILES
${LIBDIR}/usd/lib/usd_ms.dll
RELEASE
)
windows_install_shared_manifest(FILES
${LIBDIR}/usd/lib/usd_ms_d.dll
DEBUG
)
endif()
endif()
endif()
# Always install MaterialX files regardless if Blender itself uses them, the
# bundled Python module still needs it.
2023-08-10 11:28:25 +10:00
if((DEFINED LIBDIR) AND TARGETDIR_LIB AND WITH_MATERIALX)
install(
DIRECTORY ${LIBDIR}/materialx/libraries
DESTINATION "${TARGETDIR_LIB}/materialx"
)
USD: Introducing a simple USD Exporter This commit introduces the first version of an exporter to Pixar's Universal Scene Description (USD) format. Reviewed By: sergey, LazyDodo Differential Revision: https://developer.blender.org/D6287 - The USD libraries are built by `make deps`, but not yet built by install_deps.sh. - Only experimental support for instancing; by default all duplicated objects are made real in the USD file. This is fine for exporting a linked-in posed character, not so much for thousands of pebbles etc. - The way materials and UV coordinates and Normals are exported is going to change soon. - This patch contains LazyDodo's fixes for building on Windows in D5359. == Meshes == USD seems to support neither per-material nor per-face-group double-sidedness, so we just use the flag from the first non-empty material slot. If there is no material we default to double-sidedness. Each UV map is stored on the mesh in a separate primvar. Materials can refer to these UV maps, but this is not yet exported by Blender. The primvar name is the same as the UV Map name. This is to allow the standard name "st" for texture coordinates by naming the UV Map as such, without having to guess which UV Map is the "standard" one. Face-varying mesh normals are written to USD. When the mesh has custom loop normals those are written. Otherwise the poly flag `ME_SMOOTH` is inspected to determine the normals. The UV maps and mesh normals take up a significant amount of space, so exporting them is optional. They're still enabled by default, though. For comparison: a shot of Spring (03_035_A) is 1.2 GiB when exported with UVs and normals, and 262 MiB without. We probably have room for optimisation of written UVs and normals. The mesh subdivision scheme isn't using the default value 'Catmull Clark', but uses 'None', indicating we're exporting a polygonal mesh. This is necessary for USD to understand our normals; otherwise the mesh is always rendered smooth. In the future we may want to expose this choice of subdivision scheme to the user, or auto-detect it when we actually support exporting pre-subdivision meshes. A possible optimisation could be to inspect whether all polygons are smooth or flat, and mark the USD mesh as such. This can be added when needed. == Animation == Mesh and transform animation are now written when passing `animation=True` to the export operator. There is no inspection of whether an object is actually animated or not; USD can handle deduplication of static values for us. The administration of which timecode to use for the export is left to the file-format-specific concrete subclasses of `AbstractHierarchyIterator`; the abstract iterator itself doesn't know anything about the passage of time. This will allow subclasses for the frame-based USD format and time-based Alembic format. == Support for simple preview materials == Very simple versions of the materials are now exported, using only the viewport diffuse RGB, metallic, and roughness. When there are multiple materials, the mesh faces are stored as geometry subset and each material is assigned to the appropriate subset. If there is only one material this is skipped. The first material if any) is always applied to the mesh itself (regardless of the existence of geometry subsets), because the Hydra viewport doesn't support materials on subsets. See https://github.com/PixarAnimationStudios/USD/issues/542 for more info. Note that the geometry subsets are not yet time-sampled, so it may break when an animated mesh changes topology. Materials are exported as a flat list under a top-level '/_materials' namespace. This inhibits instancing of the objects using those materials, so this is subject to change. == Hair == Only the parent strands are exported, and only with a constant colour. No UV coordinates, no information about the normals. == Camera == Only perspective cameras are supported for now. == Particles == Particles are only written when they are alive, which means that they are always visible (there is currently no code that deals with marking them as invisible outside their lifespan). Particle-system-instanced objects are exported by suffixing the object name with the particle's persistent ID, giving each particle XForm a unique name. == Instancing/referencing == This exporter has experimental support for instancing/referencing. Dupli-object meshes are now written to USD as references to the original mesh. This is still very limited in correctness, as there are issues referencing to materials from a referenced mesh. I am still committing this, as it gives us a place to start when continuing the quest for proper instancing in USD. == Lights == USD does not directly support spot lights, so those aren't exported yet. It's possible to add this in the future via the UsdLuxShapingAPI. The units used for the light intensity are also still a bit of a mystery. == Fluid vertex velocities == Currently only fluid simulations (not meshes in general) have explicit vertex velocities. This is the most important case for exporting velocities, though, as the baked mesh changes topology all the time, and thus computing the velocities at import time in a post-processing step is hard. == The Building Process == - USD is built as monolithic library, instead of 25 smaller libraries. We were linking all of them as 'whole archive' anyway, so this doesn't affect the final file size. It does, however, make life easier with respect to linking order, and handling upstream changes. - The JSON files required by USD are installed into datafiles/usd; they are required on every platform. Set the `PXR_PATH_DEBUG` to any value to have the USD library print the paths it uses to find those files. - USD is patched so that it finds the aforementioned JSON files in a path that we pass to it from Blender. - USD is patched to have a `PXR_BUILD_USD_TOOLS` CMake option to disable building the tools in its `bin` directory. This is sent as a pull request at https://github.com/PixarAnimationStudios/USD/pull/1048
2019-12-13 10:27:40 +01:00
endif()
if(WIN32 AND DEFINED BOOST_LIBPATH)
if(EXISTS ${BOOST_LIBPATH})
set(BOOST_COMPONENTS atomic chrono date_time filesystem
iostreams locale program_options regex
serialization system thread wave wserialization
python${_PYTHON_VERSION_NO_DOTS} numpy${_PYTHON_VERSION_NO_DOTS}
)
foreach(component ${BOOST_COMPONENTS})
if(EXISTS ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_${component}-${BOOST_POSTFIX}.dll)
windows_install_shared_manifest(
FILES ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_${component}-${BOOST_POSTFIX}.dll
RELEASE
)
windows_install_shared_manifest(
FILES ${BOOST_LIBPATH}/${BOOST_PREFIX}boost_${component}-${BOOST_DEBUG_POSTFIX}.dll
DEBUG
)
endif()
endforeach()
endif()
endif()
USD: Introducing a simple USD Exporter This commit introduces the first version of an exporter to Pixar's Universal Scene Description (USD) format. Reviewed By: sergey, LazyDodo Differential Revision: https://developer.blender.org/D6287 - The USD libraries are built by `make deps`, but not yet built by install_deps.sh. - Only experimental support for instancing; by default all duplicated objects are made real in the USD file. This is fine for exporting a linked-in posed character, not so much for thousands of pebbles etc. - The way materials and UV coordinates and Normals are exported is going to change soon. - This patch contains LazyDodo's fixes for building on Windows in D5359. == Meshes == USD seems to support neither per-material nor per-face-group double-sidedness, so we just use the flag from the first non-empty material slot. If there is no material we default to double-sidedness. Each UV map is stored on the mesh in a separate primvar. Materials can refer to these UV maps, but this is not yet exported by Blender. The primvar name is the same as the UV Map name. This is to allow the standard name "st" for texture coordinates by naming the UV Map as such, without having to guess which UV Map is the "standard" one. Face-varying mesh normals are written to USD. When the mesh has custom loop normals those are written. Otherwise the poly flag `ME_SMOOTH` is inspected to determine the normals. The UV maps and mesh normals take up a significant amount of space, so exporting them is optional. They're still enabled by default, though. For comparison: a shot of Spring (03_035_A) is 1.2 GiB when exported with UVs and normals, and 262 MiB without. We probably have room for optimisation of written UVs and normals. The mesh subdivision scheme isn't using the default value 'Catmull Clark', but uses 'None', indicating we're exporting a polygonal mesh. This is necessary for USD to understand our normals; otherwise the mesh is always rendered smooth. In the future we may want to expose this choice of subdivision scheme to the user, or auto-detect it when we actually support exporting pre-subdivision meshes. A possible optimisation could be to inspect whether all polygons are smooth or flat, and mark the USD mesh as such. This can be added when needed. == Animation == Mesh and transform animation are now written when passing `animation=True` to the export operator. There is no inspection of whether an object is actually animated or not; USD can handle deduplication of static values for us. The administration of which timecode to use for the export is left to the file-format-specific concrete subclasses of `AbstractHierarchyIterator`; the abstract iterator itself doesn't know anything about the passage of time. This will allow subclasses for the frame-based USD format and time-based Alembic format. == Support for simple preview materials == Very simple versions of the materials are now exported, using only the viewport diffuse RGB, metallic, and roughness. When there are multiple materials, the mesh faces are stored as geometry subset and each material is assigned to the appropriate subset. If there is only one material this is skipped. The first material if any) is always applied to the mesh itself (regardless of the existence of geometry subsets), because the Hydra viewport doesn't support materials on subsets. See https://github.com/PixarAnimationStudios/USD/issues/542 for more info. Note that the geometry subsets are not yet time-sampled, so it may break when an animated mesh changes topology. Materials are exported as a flat list under a top-level '/_materials' namespace. This inhibits instancing of the objects using those materials, so this is subject to change. == Hair == Only the parent strands are exported, and only with a constant colour. No UV coordinates, no information about the normals. == Camera == Only perspective cameras are supported for now. == Particles == Particles are only written when they are alive, which means that they are always visible (there is currently no code that deals with marking them as invisible outside their lifespan). Particle-system-instanced objects are exported by suffixing the object name with the particle's persistent ID, giving each particle XForm a unique name. == Instancing/referencing == This exporter has experimental support for instancing/referencing. Dupli-object meshes are now written to USD as references to the original mesh. This is still very limited in correctness, as there are issues referencing to materials from a referenced mesh. I am still committing this, as it gives us a place to start when continuing the quest for proper instancing in USD. == Lights == USD does not directly support spot lights, so those aren't exported yet. It's possible to add this in the future via the UsdLuxShapingAPI. The units used for the light intensity are also still a bit of a mystery. == Fluid vertex velocities == Currently only fluid simulations (not meshes in general) have explicit vertex velocities. This is the most important case for exporting velocities, though, as the baked mesh changes topology all the time, and thus computing the velocities at import time in a post-processing step is hard. == The Building Process == - USD is built as monolithic library, instead of 25 smaller libraries. We were linking all of them as 'whole archive' anyway, so this doesn't affect the final file size. It does, however, make life easier with respect to linking order, and handling upstream changes. - The JSON files required by USD are installed into datafiles/usd; they are required on every platform. Set the `PXR_PATH_DEBUG` to any value to have the USD library print the paths it uses to find those files. - USD is patched so that it finds the aforementioned JSON files in a path that we pass to it from Blender. - USD is patched to have a `PXR_BUILD_USD_TOOLS` CMake option to disable building the tools in its `bin` directory. This is sent as a pull request at https://github.com/PixarAnimationStudios/USD/pull/1048
2019-12-13 10:27:40 +01:00
Cycles: Linux Support for HIP-RT This change switches Cycles to an opensource HIP-RT library which implements hardware ray-tracing. This library is now used on both Windows and Linux. While there should be no noticeable changes on Windows, on Linux this adds support for hardware ray-tracing on AMD GPUs. The majority of the change is typical platform code to add new library to the dependency builder, and a change in the way how ahead-of-time (AoT) kernels are compiled. There are changes in Cycles itself, but they are rather straightforward: some APIs changed in the opensource version of the library. There are a couple of extra files which are needed for this to work: hiprt02003_6.1_amd.hipfb and oro_compiled_kernels.hipfb. There are some assumptions in the HIP-RT library about how they are available. Currently they follow the same rule as AoT kernels for oneAPI: - On Windows they are next to blender.exe - On Linux they are in the lib/ folder Performance comparison on Ubuntu 22.04.5: ``` GPU: AMD Radeon PRO W7800 Driver: amdgpu-install_6.1.60103-1_all.deb main hip-rt attic 0.1414s 0.0932s barbershop_interior 0.1563s 0.1258s bistro 0.2134s 0.1597s bmw27 0.0119s 0.0099s classroom 0.1006s 0.0803s fishy_cat 0.0248s 0.0178s junkshop 0.0916s 0.0713s koro 0.0589s 0.0720s monster 0.0435s 0.0385s pabellon 0.0543s 0.0391s sponza 0.0223s 0.0180s spring 0.1026s 1.5145s victor 0.1901s 0.1239s wdas_cloud 0.1153s 0.1125s ``` Co-authored-by: Brecht Van Lommel <brecht@blender.org> Co-authored-by: Ray Molenkamp <github@lazydodo.com> Co-authored-by: Sergey Sharybin <sergey@blender.org> Pull Request: https://projects.blender.org/blender/blender/pulls/121050
2024-09-24 14:35:24 +02:00
if(WIN32)
if(WITH_CYCLES_DEVICE_HIPRT)
if(EXISTS ${LIBDIR}/hiprt/bin/hiprt64.dll)
install(
FILES ${LIBDIR}/hiprt/bin/hiprt64.dll
DESTINATION "./"
)
endif()
endif()
endif()
2025-01-07 13:20:19 +11:00
# `vcpkg` substitutes our libraries with theirs, which will cause issues when you run
# these builds on other systems due to missing DLL's. So we opt out the use of `vcpkg`.
2019-10-21 15:05:56 +11:00
if(WIN32)
set_target_properties(blender PROPERTIES VS_GLOBAL_VcpkgEnabled "false")
set_target_properties(blender PROPERTIES
PDB_NAME "blender_private"
2022-08-09 13:36:45 +10:00
PDB_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>"
)
# If compiling with clang-cl we skip PDBSTRIPPED.
# There's doesn't seem to be a switch for it currently
if(WITH_WINDOWS_RELEASE_PDB AND WITH_WINDOWS_RELEASE_STRIPPED_PDB AND NOT MSVC_CLANG)
2022-08-09 13:36:45 +10:00
# This is slightly messy, but single target generators like ninja will not have the
# `CMAKE_CFG_INTDIR` variable and multi-target generators like `msbuild` will not have
# `CMAKE_BUILD_TYPE`. This can be simplified by `target_link_options` and the `$<CONFIG>`
2022-08-09 13:36:45 +10:00
# generator expression in newer CMAKE (2.13+) but until that time this fill have suffice.
if(CMAKE_BUILD_TYPE)
set_property(
TARGET blender APPEND_STRING PROPERTY LINK_FLAGS_RELEASE
" /PDBSTRIPPED:${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/blender_public.pdb"
)
2022-08-09 13:36:45 +10:00
else()
set_property(
TARGET blender APPEND_STRING PROPERTY LINK_FLAGS_RELEASE
" /PDBSTRIPPED:${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/blender_public.pdb"
)
2022-08-09 13:36:45 +10:00
endif()
endif()
endif()
# -----------------------------------------------------------------------------
# Setup launcher
if(WIN32 AND NOT WITH_PYTHON_MODULE)
set(BLENDER_BIN "blender.exe")
install(
TARGETS blender blender-launcher
COMPONENT Blender
DESTINATION "."
)
if(WITH_CPU_CHECK)
install(
TARGETS blender_cpu_check
COMPONENT Blender
DESTINATION "."
)
endif()
set_target_properties(
blender
PROPERTIES
VS_USER_PROPS "blender.Cpp.user.props"
)
endif()
# -----------------------------------------------------------------------------
# Windows shared library manifest
if(WIN32)
windows_generate_shared_manifest()
endif()
# -----------------------------------------------------------------------------
# Steps that Run Blender
#
# As executing Blender is needed - it's important this operation runs after the shared
# libraries have been installed to their destination.
if(UNIX AND NOT APPLE)
if(NOT WITH_PYTHON_MODULE)
if(WITH_DOC_MANPAGE)
# Only run the command to generate the man-page when it may be outdated.
# The `IS_NEWER_THAN` checks always run when files are missing.
# NOTE: While `${EXECUTABLE_OUTPUT_PATH}/blender` may work in some cases
# Blender's requirement of libraries mean the installation path must be used.
install(
CODE "\
set(BLENDER_BIN \"${CMAKE_INSTALL_PREFIX}/${BLENDER_BIN}\")\n\
if(DEFINED ENV\{DESTDIR\})\n\
set(BLENDER_BIN \"$ENV\{DESTDIR\}/$\{BLENDER_BIN\}\")\n\
endif()\n\
set(PYTHON_EXECUTABLE \"${PYTHON_EXECUTABLE}\")\n\
set(MANPAGE_GEN \"${CMAKE_SOURCE_DIR}/doc/manpage/blender.1.py\")\n\
set(MANPAGE_OUT \"${CMAKE_CURRENT_BINARY_DIR}/blender.1\")\n\
if(\n\
($\{BLENDER_BIN\} IS_NEWER_THAN $\{MANPAGE_OUT\}) OR\n\
($\{MANPAGE_GEN\} IS_NEWER_THAN $\{MANPAGE_OUT\})\n\
)\n\
set(ENV{ASAN_OPTIONS} \"$ENV{ASAN_OPTIONS}:\
exitcode=0:\
check_initialization_order=0:\
strict_init_order=0:\
detect_leaks=0\"\n\
)\n\
execute_process(\n\
COMMAND\n\
$\{PYTHON_EXECUTABLE\} $\{MANPAGE_GEN\}\n\
--blender $\{BLENDER_BIN\}\n\
--output $\{MANPAGE_OUT\}\n\
)\n\
endif()\n\
"
DEPENDS blender
)
if(WITH_INSTALL_PORTABLE)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/blender.1
DESTINATION "."
)
else()
# Manual page (only with `blender` binary).
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/blender.1
DESTINATION "./share/man/man1"
)
endif()
endif()
endif()
endif()
# -----------------------------------------------------------------------------
# Post-install script
if(POSTINSTALL_SCRIPT)
install(SCRIPT ${POSTINSTALL_SCRIPT})
endif()