Add Chromium-only Blender WebEngine parity work

This commit is contained in:
mes123456
2026-08-12 04:47:48 -04:00
commit 9fd26010f6
18225 changed files with 11622124 additions and 0 deletions

View File

@@ -0,0 +1,196 @@
# SPDX-FileCopyrightText: 2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
##################################################################################################
#
# This is a build system used by platform maintainers to build library dependencies.
# For users building Blender, we recommend using the pre-compiled libraries from `lib/`
# on all platforms.
#
# This CMake project is usually built through wrappers:
# * Windows: `build_files/build_environment/windows/build_deps.cmd`.
# * macOS and Linux: `make deps` from the blender directory.
#
##################################################################################################
cmake_minimum_required(VERSION 3.10)
project("BlenderDependencies")
if(POLICY CMP0135)
cmake_policy(SET CMP0135 NEW) # CMake 3.24+ Set the date/time for extracted files to time of extraction
endif()
include(ExternalProject)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/../cmake/Modules")
include(cmake/check_software.cmake)
include(cmake/options.cmake)
# `versions.cmake` needs to be included after `options.cmake`
# due to the `BLENDER_PLATFORM_ARM` variable being needed.
include(cmake/versions.cmake)
include(cmake/download.cmake)
include(cmake/macros.cmake)
# `setup_msys2.cmake` to install `perl`,
# which HIP needs to function for the compiler detection to work properly,
# hence needs to be included before `check_compilers.cmake`.
if(ENABLE_MSYS2)
include(cmake/setup_msys2.cmake)
else()
set(mingw_LIBDIR ${LIBDIR})
endif()
include(cmake/check_compilers.cmake)
include(cmake/harvest.cmake)
include(cmake/ssl.cmake)
include(cmake/zlib.cmake)
include(cmake/zstd.cmake)
include(cmake/openal.cmake)
include(cmake/png.cmake)
include(cmake/jpeg.cmake)
include(cmake/blosc.cmake)
include(cmake/pthreads.cmake)
include(cmake/deflate.cmake)
include(cmake/imath.cmake)
include(cmake/openexr.cmake)
include(cmake/brotli.cmake)
include(cmake/freetype.cmake)
include(cmake/epoxy.cmake)
include(cmake/alembic.cmake)
include(cmake/opensubdiv.cmake)
include(cmake/sdl.cmake)
if(UNIX)
include(cmake/nasm.cmake)
endif()
include(cmake/tiff.cmake)
if(WIN32)
include(cmake/flexbison.cmake)
elseif(UNIX AND NOT APPLE)
include(cmake/flex.cmake)
endif()
include(cmake/tbb.cmake)
include(cmake/python.cmake)
include(cmake/llvm.cmake)
include(cmake/osl.cmake)
include(cmake/cython.cmake)
include(cmake/numpy.cmake)
include(cmake/zstandard.cmake)
include(cmake/python_site_packages.cmake)
include(cmake/package_python.cmake)
include(cmake/openimageio.cmake)
include(cmake/usd.cmake)
include(cmake/materialx.cmake)
include(cmake/openvdb.cmake)
include(cmake/potrace.cmake)
include(cmake/haru.cmake)
include(cmake/pugixml.cmake)
include(cmake/fribidi.cmake)
include(cmake/harfbuzz.cmake)
include(cmake/xr_openxr.cmake)
if(NOT APPLE)
if(NOT BLENDER_PLATFORM_ARM)
include(cmake/hiprt.cmake)
include(cmake/dpcpp.cmake)
include(cmake/dpcpp_deps.cmake)
include(cmake/emhash.cmake)
include(cmake/parallelhashmap.cmake)
if(NOT WIN32)
include(cmake/igc.cmake)
include(cmake/gmmlib.cmake)
include(cmake/ocloc.cmake)
endif()
endif()
endif()
include(cmake/ispc.cmake)
include(cmake/openpgl.cmake)
# EMBREE needs to be included after `dpcpp` as it uses it for compiling with GPU support
if(BLENDER_PLATFORM_WINDOWS_ARM)
# WoA needs EMBREE to be built with the VS Generator + LLVM,
# put it in its own file to avoid clutter.
include(cmake/embree_windows_arm.cmake)
else()
include(cmake/embree.cmake)
endif()
include(cmake/fmt.cmake)
include(cmake/robinmap.cmake)
include(cmake/xml2.cmake)
# OpenColorIO and dependencies.
include(cmake/expat.cmake)
include(cmake/pystring.cmake)
include(cmake/yamlcpp.cmake)
include(cmake/minizipng.cmake)
include(cmake/opencolorio.cmake)
include(cmake/openjph.cmake)
include(cmake/thorvg.cmake)
include(cmake/libheif.cmake)
include(cmake/ffi.cmake)
if(BLENDER_PLATFORM_ARM)
include(cmake/sse2neon.cmake)
endif()
include(cmake/webp.cmake)
if(NOT APPLE)
include(cmake/level-zero.cmake)
endif()
if(NOT WIN32 OR ENABLE_MSYS2)
include(cmake/gmp.cmake)
include(cmake/openjpeg.cmake)
include(cmake/sqlite.cmake)
include(cmake/fftw.cmake)
include(cmake/aom.cmake)
if(NOT WIN32 OR BUILD_MODE STREQUAL Release)
include(cmake/openimagedenoise.cmake)
include(cmake/lame.cmake)
include(cmake/ogg.cmake)
include(cmake/vorbis.cmake)
include(cmake/theora.cmake)
include(cmake/opus.cmake)
include(cmake/vpx.cmake)
include(cmake/x264.cmake)
include(cmake/x265.cmake)
include(cmake/ffmpeg.cmake)
include(cmake/flac.cmake)
include(cmake/sndfile.cmake)
if(UNIX)
if(NOT APPLE)
include(cmake/spnav.cmake)
endif()
endif()
endif()
endif()
if(UNIX)
include(cmake/bzip2.cmake)
include(cmake/lzma.cmake)
endif()
if(UNIX AND NOT APPLE)
include(cmake/wayland_protocols.cmake)
# Can be removed when the build-bot upgrades to v1.20.x or newer.
include(cmake/wayland.cmake)
include(cmake/wayland_weston.cmake)
endif()
include(cmake/shaderc_deps.cmake)
include(cmake/shaderc.cmake)
include(cmake/vulkan.cmake)
include(cmake/vulkan-memory-allocator.cmake)
include(cmake/spirv-reflect.cmake)
include(cmake/pybind11.cmake)
include(cmake/nanobind.cmake)
include(cmake/manifold.cmake)
include(cmake/rubberband.cmake)
include(cmake/abseil.cmake)
include(cmake/eigen.cmake)
include(cmake/ceres.cmake)
include(cmake/draco.cmake)
include(cmake/meshoptimizer.cmake)
include(cmake/tracy.cmake)
# Keep these last.
include(cmake/deps_md.cmake)
include(cmake/cve_check.cmake)
if(UNIX)
# Strip all installed libraries.
harvest_strip_all_libraries()
endif()

View File

@@ -0,0 +1,478 @@
# Blender Library Dependencies
This file contains a table with all the libraries Blender uses to build its library dependencies.
Some of the libraries might not be shipped in the library directory as some of them are only used at build time.
NOTE: Some libraries listed here might not be relevant for your platform.
## Library List
| Library Name | Version | Homepage |
|--------------|---------|----------|
| `ABSEIL` | `20250814.1` | <https://abseil.io/> |
| `ALEMBIC` | `1.8.3` | <https://www.alembic.io/> |
| `AOM` | `3.13.1` | <https://aomedia.googlesource.com/aom/> |
| `BLOSC` | `1.21.1` | <https://www.blosc.org/> |
| `BROTLI` | `1.0.9` | <https://github.com/google/brotli> |
| `BZIP2` | `1.0.8` | <https://sourceware.org/bzip2/> |
| `CERES` | `0c70ed3a1a2d6ba47c06c7e8b3b040880bc474db` | <http://ceres-solver.org/> |
| `CYTHON` | `3.0.11` | <https://cython.org/> |
| `DEFLATE` | `1.18` | <https://github.com/ebiggers/libdeflate> |
| `DPCPP_SPIRV_HEADERS` | `c9aad99f9276817f18f72a4696239237c83cb775` | <https://github.com/KhronosGroup/SPIRV-Headers> |
| `DPCPP` | `v6.3.0` | <https://github.com/intel/llvm#oneapi-dpc-compiler> |
| `DRACO` | `1.5.7` | <https://google.github.io/draco/> |
| `EIGEN` | `8a1083e9bf41b91fdea6546681f806154efdc25a` | <http://eigen.tuxfamily.org> |
| `EMBREE` | `4.4.1` | <https://github.com/RenderKit/embree> |
| `EMHASH` | `3ba9abdfdc2e0430fcc2fd8993cad31945b6a02b` | <https://github.com/ktprime/emhash> |
| `EPOXY` | `1.5.10` | <https://github.com/anholt/libepoxy> |
| `EXPAT` | `2_7_5` | <https://github.com/libexpat/libexpat/> |
| `FFI` | `3.5.2` | <https://github.com/libffi/libffi/> |
| `FFMPEG` | `8.1` | <https://ffmpeg.org/> |
| `FFTW` | `3.3.10` | <https://www.fftw.org/> |
| `FLAC` | `1.4.2` | <https://xiph.org/flac/> |
| `FLEXBISON` | `2.5.24` | <https://github.com/lexxmark/winflexbison> |
| `FLEX` | `2.6.4` | <https://www.github.com/westes/flex> |
| `FMT` | `12.1.0` | <https://github.com/fmtlib/fmt> |
| `FREETYPE` | `2.13.3` | <https://freetype.org/> |
| `FRIBIDI` | `v1.0.12` | <https://github.com/fribidi/fribidi> |
| `GMMLIB` | `intel-gmmlib-22.8.1` | <https://github.com/intel/gmmlib> |
| `GMP` | `6.3.0` | <https://gmplib.org/> |
| `HARFBUZZ` | `10.0.1` | <https://github.com/harfbuzz/harfbuzz> |
| `HARU` | `2.4.5` | <http://libharu.org/> |
| `HIPRT` | `606b4886efabce918dd0634ef71c06615a47c83b` | <https://github.com/GPUOpen-LibrariesAndSDKs/HIPRT> |
| `ICDLOADER` | `ddf6c70230a79cdb8fcccfd3c775b09e6820f42e` | <https://github.com/KhronosGroup/OpenCL-ICD-Loader> |
| `ICONV` | `1.16` | <https://www.gnu.org/software/libiconv/> |
| `IGC_LLVM` | `llvmorg-16.0.6` | <https://github.com/llvm/llvm-project/> |
| `IGC_OPENCL_CLANG` | `v16.0.10` | <https://github.com/intel/opencl-clang/> |
| `IGC_SPIRV_HEADERS` | `9268f3057354a2cb65991ba5f38b16d81e803692` | <https://github.com/KhronosGroup/SPIRV-Headers> |
| `IGC_SPIRV_TOOLS` | `28a883ba4c67f58a9540fb0651c647bb02883622` | <https://github.com/KhronosGroup/SPIRV-Tools/> |
| `IGC_SPIRV_TRANSLATOR` | `v16.0.10` | <https://github.com/KhronosGroup/SPIRV-LLVM-Translator> |
| `IGC` | `2.30.1` | <https://github.com/intel/intel-graphics-compiler> |
| `IGC_VCINTRINSICS` | `0.25.0` | <https://github.com/intel/vc-intrinsics> |
| `IMATH` | `3.2.2` | <https://github.com/AcademySoftwareFoundation/Imath> |
| `ISPC` | `v1.30.0` | <https://www.github.com/ispc/ispc> |
| `JPEG` | `2.1.3` | <https://github.com/libjpeg-turbo/libjpeg-turbo/> |
| `LAME` | `3.100` | <https://lame.sourceforge.io/> |
| `LEVEL_ZERO` | `35c037cdf4aa9a2e6df34b6f1ce1bdc86ac5422f` | <https://github.com/oneapi-src/level-zero> |
| `LIBHEIF` | `1.20.2` | <https://github.com/strukturag/libheif> |
| `LLVM` | `20.1.8` | <https://github.com/llvm/llvm-project/> |
| `LZMA` | `5.2.5` | <https://tukaani.org/lzma/> |
| `MANIFOLD` | `v3.5.2` | <https://github.com/elalish/manifold> |
| `MATERIALX` | `1.39.4` | <https://github.com/AcademySoftwareFoundation/MaterialX> |
| `MESHOPTIMIZER` | `1.1` | <https://meshoptimizer.org> |
| `MINIZIPNG` | `4.0.10` | <https://github.com/zlib-ng/minizip-ng> |
| `NANOBIND` | `v2.1.0` | <https://github.com/wjakob/nanobind> |
| `NASM` | `2.15.02` | <https://www.github.com/netwide-assembler/nasm> |
| `NUMPY` | `2.3.4` | <https://numpy.org/> |
| `OCLOC` | `25.31.34666.3` | <https://github.com/intel/compute-runtime> |
| `OGG` | `1.3.5` | <https://xiph.org/ogg/> |
| `OIDN` | `2.5.0` | <https://www.openimagedenoise.org/> |
| `OPENAL` | `1.23.1` | <https://openal-soft.org/> |
| `OPENCLHEADERS` | `6eabe90aa7b6cff9c67800a2fe25a0cd88d8b749` | <https://github.com/KhronosGroup/OpenCL-Headers> |
| `OPENCOLORIO` | `2.5.0` | <https://github.com/AcademySoftwareFoundation/OpenColorIO> |
| `OPENEXR` | `3.4.10` | <https://github.com/AcademySoftwareFoundation/openexr> |
| `OPENIMAGEIO` | `v3.1.13.1` | <https://github.com/AcademySoftwareFoundation/OpenImageIO> |
| `OPENJPEG` | `2.5.3` | <https://github.com/uclouvain/openjpeg> |
| `OPENJPH` | `0.25.2` | <https://github.com/aous72/OpenJPH> |
| `OPENPGL` | `v0.7.1` | <http://www.openpgl.org/> |
| `OPENSUBDIV` | `v3_7_0` | <https://graphics.pixar.com/opensubdiv/docs/intro.html> |
| `OPENVDB` | `13.0.0` | <http://www.openvdb.org/> |
| `OPUS` | `1.3.1` | <https://opus-codec.org/> |
| `OSL` | `1.15.3.0` | <https://github.com/AcademySoftwareFoundation/OpenShadingLanguage/> |
| `PARALLEL_HASHMAP` | `8a889d3699b3c09ade435641fb034427f3fd12b6` | <https://github.com/greg7mdp/parallel-hashmap> |
| `PNG` | `1.6.58` | <http://www.libpng.org/pub/png/libpng.html> |
| `POTRACE` | `1.16` | <https://potrace.sourceforge.net/> |
| `PTHREADS` | `3.0.0` | <https://github.com/fwbuilder/pthreads4w> |
| `PUGIXML` | `1.10` | <https://pugixml.org/> |
| `PYBIND11` | `3.0.1` | <https://github.com/pybind/pybind11> |
| `PYSTRING` | `v1.1.3` | <https://github.com/imageworks/pystring> |
| `PYTHON` | `3.13.13` | <https://www.python.org/> |
| `ROBINMAP` | `v1.3.0` | <https://github.com/Tessil/robin-map> |
| `RUBBERBAND` | `4.0.0` | <https://breakfastquay.com/rubberband/> |
| `SDL` | `3.4.2` | <https://www.libsdl.org> |
| `SHADERC_GLSLANG` | `d213562e35573012b6348b2d584457c3704ac09b` | <https://github.com/KhronosGroup/glslang> |
| `SHADERC` | `v2025.4` | <https://github.com/google/shaderc> |
| `SNDFILE` | `1.2.2` | <http://libsndfile.github.io/libsndfile/> |
| `SPIRV_HEADERS` | `1.4.341` | <https://github.com/KhronosGroup/SPIRV-Headers/> |
| `SPIRV_REFLECT` | `1.4.341` | <https://github.com/KhronosGroup/SPIRV-Reflect> |
| `SPIRV_TOOLS` | `v2026.1` | <https://github.com/KhronosGroup/SPIRV-Tools/> |
| `SPNAV` | `1.1` | <https://github.com/FreeSpacenav/libspnav> |
| `SQLITE` | `3.51.3` | <https://www.sqlite.org> |
| `SSE2NEON` | `227cc413fb2d50b2a10073087be96b59d5364aea` | <https://github.com/DLTcollab/sse2neon> |
| `SSL` | `3.5.6` | <https://www.openssl.org> |
| `TBB` | `v2022.3.0` | <https://software.intel.com/en-us/oneapi/onetbb> |
| `THEORA` | `1.1.1` | <https://xiph.org/theora/> |
| `THORVG` | `v1.0.3` | <https://www.thorvg.org/> |
| `TIFF` | `4.7.1` | <http://www.simplesystems.org/libtiff/> |
| `TRACY` | `a64b9a20294d59421a2f57aeca3c6383d8c48169` | <https://github.com/wolfpld/tracy> |
| `UNIFIED_MEMORY_FRAMEWORK` | `v1.0.0-rc2` | <https://github.com/oneapi-src/unified-memory-framework> |
| `USD` | `26.03` | <https://openusd.org/> |
| `VCINTRINSICS` | `60cea7590bd022d95f5cf336ee765033bd114d69` | <https://github.com/intel/vc-intrinsics> |
| `VORBIS` | `1.3.7` | <https://xiph.org/vorbis/> |
| `VPX` | `1.15.2` | <https://github.com/webmproject/libvpx> |
| `VULKAN_HEADERS` | `1.4.341` | <https://github.com/KhronosGroup/Vulkan-Headers> |
| `VULKAN_LOADER` | `1.4.341` | <https://github.com/KhronosGroup/Vulkan-Loader> |
| `VULKAN_MEMORY_ALLOCATOR` | `3.2.1` | <https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator> |
| `VULKAN_UTILITY_LIBRARIES` | `1.4.341` | <https://github.com/KhronosGroup/Vulkan-Utility-Libraries> |
| `WAYLAND` | `1.24.0` | <https://gitlab.freedesktop.org/wayland/wayland> |
| `WAYLAND_WESTON` | `14.0.2` | <https://gitlab.freedesktop.org/wayland/weston> |
| `WEBP` | `1.6.0` | <https://developers.google.com/speed/webp> |
| `WL_PROTOCOLS` | `1.44` | <https://gitlab.freedesktop.org/wayland/wayland-protocols> |
| `X264` | `35fe20d1ba49918ec739a5b068c208ca82f977f7` | <https://www.videolan.org/developers/x264.html> |
| `X265` | `4.1` | <https://www.videolan.org/developers/x265.html> |
| `XML2` | `2.14.6` | <https://gitlab.gnome.org/GNOME/libxml2> |
| `XR_OPENXR_SDK` | `1.1.53` | <https://khronos.org/openxr/> |
| `YAMLCPP` | `0.8.0` | <https://www.github.com/jbeder/yaml-cpp> |
| `ZLIB` | `1.3.1` | <https://zlib.net> |
| `ZSTANDARD` | `0.25.0` | <https://github.com/indygreg/python-zstandard/> |
| `ZSTD` | `1.5.7` | <https://github.com/facebook/zstd> |
## Basic Dependency Lists
These are auto generated basic dependency lists for each library.
```
└── png
└── zlib
```
```
└── openexr
├── deflate
├── imath
└── openjph
```
```
└── freetype
├── brotli
└── zlib
```
```
└── epoxy
└── python_site_packages
```
```
└── alembic
└── imath
```
```
└── opensubdiv
└── tbb
```
```
└── tiff
├── jpeg
└── zlib
```
```
└── python
├── bzip2
├── ffi
├── lzma
├── sqlite
├── ssl
└── zlib
```
```
└── llvm
├── python
└── xml2
```
```
└── osl
├── flex
├── llvm
├── openexr
├── openimageio
├── pugixml
├── pybind11
├── python
└── zlib
```
```
└── cython
├── python
└── python_site_packages
```
```
└── numpy
├── cython
├── python
└── python_site_packages
```
```
└── zstandard
├── python
└── zstd
```
```
└── python_site_packages
└── python
```
```
└── openimageio
├── fmt
├── imath
├── jpeg
├── libheif
├── opencolorio
├── openexr
├── openjpeg
├── png
├── pugixml
├── pybind11
├── python
├── robinmap
├── tbb
├── tiff
├── webp
└── zlib
```
```
└── usd
├── materialx
├── openimageio
├── opensubdiv
├── openvdb
├── python
├── shaderc
├── spirv_reflect
├── tbb
├── vulkan_headers
├── vulkan_loader
├── vulkan_memory_allocator
└── vulkan_utility_libraries
```
```
└── materialx
├── pybind11
└── python
```
```
└── openvdb
├── blosc
├── tbb
└── zlib
```
```
└── fribidi
├── python
└── python_site_packages
```
```
└── harfbuzz
├── freetype
├── python
└── python_site_packages
```
```
└── dpcpp
├── dpcpp_spirvheaders
├── emhash
├── icdloader
├── level-zero
├── openclheaders
├── parallelhashmap
├── python
├── python_site_packages
├── unifiedmemoryframework
├── vcintrinsics
└── zstd
```
```
└── igc_llvm
└── igc_opencl_clang
```
```
└── igc_spirv_translator
└── igc_opencl_clang
```
```
└── igc
├── flex
├── igc_llvm
├── igc_opencl_clang
├── igc_spirv_headers
├── igc_spirv_tools
├── igc_spirv_translator
└── igc_vcintrinsics
```
```
└── ocloc
├── gmmlib
└── igc
```
```
└── ispc
├── flex
├── llvm
└── python
```
```
└── openpgl
└── tbb
```
```
└── embree
├── dpcpp
└── tbb
```
```
└── minizipng
└── zlib
```
```
└── opencolorio
├── expat
├── imath
├── minizipng
├── pybind11
├── pystring
├── python
├── yamlcpp
└── zlib
```
```
└── thorvg
├── python
└── python_site_packages
```
```
└── libheif
└── aom
```
```
└── fftw
├── fftw3_double
└── fftw3_float
```
```
└── openimagedenoise
├── dpcpp
├── ispc
├── level-zero
├── ocloc
├── python
└── tbb
```
```
└── vorbis
└── ogg
```
```
└── theora
├── ogg
└── vorbis
```
```
└── x264
└── nasm
```
```
└── x265
├── x265_10
└── x265_12
```
```
└── ffmpeg
├── aom
├── flac
├── lame
├── nasm
├── ogg
├── openjpeg
├── opus
├── sndfile
├── theora
├── vorbis
├── vpx
├── x264
├── x265
└── zlib
```
```
└── sndfile
├── flac
├── lame
├── ogg
├── opus
└── vorbis
```
```
└── wayland_protocols
├── python_site_packages
└── wayland
```
```
└── wayland
├── expat
├── ffi
├── python_site_packages
└── xml2
```
```
└── wayland_weston
├── python_site_packages
├── wayland
└── wayland_protocols
```
```
└── shaderc
├── python
├── shaderc_glslang
├── spirv_headers
└── spirv_tools
```
```
└── vulkan_utility_libraries
└── vulkan_headers
```
```
└── spirv_tools
└── spirv_headers
```
```
└── vulkan_loader
├── vulkan_headers
└── wayland
```
```
└── spirv_reflect
└── spirv_headers
```
```
└── pybind11
└── python
```
```
└── nanobind
└── robinmap
```
```
└── manifold
└── tbb
```
```
└── rubberband
├── fftw
└── python_site_packages
```
```
└── ceres
├── abseil
└── eigen
```
Libraries without any dependencies and not used by any other library:
```
openal
sdl
potrace
haru
xr_openxr_sdk
gmp
spnav
draco
meshoptimizer
tracy
```

View File

@@ -0,0 +1,43 @@
# SPDX-FileCopyrightText: 2025 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(ABSEIL_EXTRA_ARGS
)
if(WIN32)
set(ABSEIL_EXTRA_ARGS
${ABSEIL_EXTRA_ARGS}
-DCMAKE_DEBUG_POSTFIX=_d
)
endif()
ExternalProject_Add(external_abseil
URL file://${PACKAGE_DIR}/${ABSEIL_FILE}
URL_HASH ${ABSEIL_HASH_TYPE}=${ABSEIL_HASH}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
PREFIX ${BUILD_DIR}/abseil
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/abseil
${DEFAULT_CMAKE_FLAGS}
${ABSEIL_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/abseil
)
if(WIN32)
ExternalProject_Add_Step(external_abseil after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/abseil/
${HARVEST_TARGET}/abseil
COMMAND ${CMAKE_COMMAND} -E remove_directory
${HARVEST_TARGET}/abseil/lib/pkgconfig
DEPENDEES install
)
else()
harvest(external_abseil abseil/include abseil/include "*.h")
harvest(external_abseil abseil/lib/cmake/absl abseil/lib/cmake/absl "*.cmake")
harvest(external_abseil abseil/lib abseil/lib "*.a")
endif()

View File

@@ -0,0 +1,64 @@
# SPDX-FileCopyrightText: 2017-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(ALEMBIC_EXTRA_ARGS
-DImath_ROOT=${LIBDIR}/imath
-DUSE_PYALEMBIC=OFF
-DUSE_ARNOLD=OFF
-DUSE_MAYA=OFF
-DUSE_PRMAN=OFF
-DUSE_HDF5=OFF
-DUSE_TESTS=OFF
-DUSE_BINARIES=ON
-DALEMBIC_ILMBASE_LINK_STATIC=OFF
-DALEMBIC_SHARED_LIBS=OFF
)
ExternalProject_Add(external_alembic
URL file://${PACKAGE_DIR}/${ALEMBIC_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${ALEMBIC_HASH_TYPE}=${ALEMBIC_HASH}
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PREFIX ${BUILD_DIR}/alembic
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/alembic
-Wno-dev
${DEFAULT_CMAKE_FLAGS}
${ALEMBIC_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/alembic
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_alembic after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/alembic
${HARVEST_TARGET}/alembic
DEPENDEES install
)
endif()
if(BUILD_MODE STREQUAL Debug)
ExternalProject_Add_Step(external_alembic after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/alembic/lib/alembic.lib
${HARVEST_TARGET}/alembic/lib/alembic_d.lib
DEPENDEES install
)
endif()
else()
harvest(external_alembic alembic/include alembic/include "*.h")
harvest(external_alembic alembic/lib/libAlembic.a alembic/lib/libAlembic.a)
harvest_rpath_bin(external_alembic alembic/bin alembic/bin "*")
endif()
add_dependencies(
external_alembic
external_imath
)

View File

@@ -0,0 +1,98 @@
# SPDX-FileCopyrightText: 2022-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(BLENDER_PLATFORM_WINDOWS_ARM)
set(AOM_EXTRA_ARGS_WIN32 ${DEFAULT_CMAKE_FLAGS} -DAOM_TARGET_CPU=generic)
else()
set(AOM_CMAKE_FLAGS ${DEFAULT_CMAKE_FLAGS})
endif()
set(AOM_EXTRA_ARGS
-DENABLE_TESTDATA=OFF
-DENABLE_TESTS=OFF
-DENABLE_TOOLS=OFF
-DENABLE_EXAMPLES=OFF
-DBUILD_SHARED_LIBS=ON
${AOM_EXTRA_ARGS_WIN32}
)
if(WIN32 AND NOT BLENDER_PLATFORM_WINDOWS_ARM)
set(AOM_EXTRA_ARGS ${AOM_EXTRA_ARGS}-DCMAKE_ASM_NASM_COMPILER=)
endif()
if(WIN32)
# This is slightly different from all other deps in the way that
# aom uses cmake as a build system, but still needs the environment setup
# to include perl so we manually setup the environment and call
# cmake directly for the configure, build and install commands.
ExternalProject_Add(external_aom
URL file://${PACKAGE_DIR}/${AOM_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${AOM_HASH_TYPE}=${AOM_HASH}
PREFIX ${BUILD_DIR}/aom
PATCH_COMMAND ${PATCH_CMD} --verbose -p 1 -N -d
${BUILD_DIR}/aom/src/external_aom <
${PATCH_DIR}/aom_6d2b7f71b98bfa28e372b1f2d85f137280bdb3de.diff
CONFIGURE_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/aom/src/external_aom-build/ &&
${CMAKE_COMMAND}
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/aom
-G "${PLATFORM_ALT_GENERATOR}"
${AOM_CMAKE_FLAGS}
${AOM_EXTRA_ARGS}
${BUILD_DIR}/aom/src/external_aom/
BUILD_COMMAND ${CMAKE_COMMAND} --build .
INSTALL_COMMAND ${CMAKE_COMMAND} --build . --target install
INSTALL_DIR ${LIBDIR}/aom
)
else()
ExternalProject_Add(external_aom
URL file://${PACKAGE_DIR}/${AOM_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${AOM_HASH_TYPE}=${AOM_HASH}
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PREFIX ${BUILD_DIR}/aom
PATCH_COMMAND ${PATCH_CMD} --verbose -p 1 -N -d
${BUILD_DIR}/aom/src/external_aom <
${PATCH_DIR}/aom_6d2b7f71b98bfa28e372b1f2d85f137280bdb3de.diff
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/aom
${AOM_CMAKE_FLAGS}
${AOM_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/aom
)
endif()
if(NOT WIN32)
harvest(external_aom aom/lib ffmpeg/lib "*.a")
else()
if(BUILD_MODE STREQUAL Release)
# aom insists on building a static version even if you
# do not want it, get rid of it by copying the import lib
# on top of it, so other projects don't accidentally link
# the static library.
ExternalProject_Add_Step(external_aom after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/aom/lib/aom_dll.lib
${LIBDIR}/aom/lib/aom.lib
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/aom/
${HARVEST_TARGET}/aom/
DEPENDEES install
)
else()
ExternalProject_Add_Step(external_aom after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/aom/lib/aom_dll.lib
${LIBDIR}/aom/lib/aom.lib
DEPENDEES install
)
endif()
endif()

View File

@@ -0,0 +1,45 @@
# SPDX-FileCopyrightText: 2012-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(BLOSC_EXTRA_ARGS
-DBUILD_TESTS=OFF
-DBUILD_BENCHMARKS=OFF
-DCMAKE_DEBUG_POSTFIX=_d
-DThreads_FOUND=1
-DPTHREAD_LIBS=${LIBDIR}/pthreads/lib/pthreadVC3.lib
-DPTHREAD_INCLUDE_DIR=${LIBDIR}/pthreads/inc
-DDEACTIVATE_SNAPPY=ON
-DDEACTIVATE_ZLIB=ON
-DDEACTIVATE_ZSTD=ON
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
# Fix for building with GCC 15, which defaults to C23. Fixed in main in the c-blosc repo, remove on upgrade.
# See commit: https://github.com/Blosc/c-blosc/commit/774f6a0ebaa0c617f7f13ccf6bc89d17eba04654
-DCMAKE_C_STANDARD=17
)
ExternalProject_Add(external_blosc
URL file://${PACKAGE_DIR}/${BLOSC_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${BLOSC_HASH_TYPE}=${BLOSC_HASH}
PREFIX ${BUILD_DIR}/blosc
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/blosc
${DEFAULT_CMAKE_FLAGS}
${BLOSC_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/blosc
)
if(WIN32)
add_dependencies(
external_blosc
external_pthreads
)
endif()
if(APPLE)
harvest(external_blosc blosc/lib openvdb/lib "*.a")
endif()

View File

@@ -0,0 +1,42 @@
# SPDX-FileCopyrightText: 2002-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(BROTLI_EXTRA_ARGS
)
ExternalProject_Add(external_brotli
URL file://${PACKAGE_DIR}/${BROTLI_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${BROTLI_HASH_TYPE}=${BROTLI_HASH}
PREFIX ${BUILD_DIR}/brotli
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/brotli
${DEFAULT_CMAKE_FLAGS}
${BROTLI_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/brotli
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_brotli after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/brotli/include
${HARVEST_TARGET}/brotli/include
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/brotli/lib/brotlidec-static${LIBEXT}
${HARVEST_TARGET}/brotli/lib/brotlidec-static${LIBEXT}
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/brotli/lib/brotlicommon-static${LIBEXT}
${HARVEST_TARGET}/brotli/lib/brotlicommon-static${LIBEXT}
DEPENDEES install
)
endif()
else()
harvest(external_brotli brotli/include brotli/include "*.h")
harvest(external_brotli brotli/lib brotli/lib "*.a")
endif()

View File

@@ -0,0 +1,38 @@
# SPDX-FileCopyrightText: 2002-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(BZIP2_PREFIX "${LIBDIR}/bzip2")
set(BZIP2_CONFIGURE_ENV echo .)
set(BZIP2_CONFIGURATION_ARGS "")
if(UNIX AND NOT APPLE)
set(BZIP2_LDFLAGS "-Wl,--as-needed")
set(BZIP2_CFLAGS "-fPIC -Wall -Winline -O2 -g -D_FILE_OFFSET_BITS=64")
set(BZIP2_CONFIGURE_ENV
${BZIP2_CONFIGURE_ENV} &&
export LDFLAGS=${BZIP2_LDFLAGS} &&
export CFLAGS=${BZIP2_CFLAGS} &&
export PREFIX=${BZIP2_PREFIX}
)
else()
set(BZIP2_CONFIGURE_ENV ${CONFIGURE_ENV})
endif()
ExternalProject_Add(external_bzip2
URL file://${PACKAGE_DIR}/${BZIP2_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${BZIP2_HASH_TYPE}=${BZIP2_HASH}
PREFIX ${BUILD_DIR}/bzip2
CONFIGURE_COMMAND echo .
BUILD_COMMAND ${BZIP2_CONFIGURE_ENV} &&
cd ${BUILD_DIR}/bzip2/src/external_bzip2/ &&
make CFLAGS=${BZIP2_CFLAGS} LDFLAGS=${BZIP2_LDFLAGS} -j${MAKE_THREADS}
INSTALL_COMMAND ${BZIP2_CONFIGURE_ENV} &&
cd ${BUILD_DIR}/bzip2/src/external_bzip2/ &&
make CFLAGS=${BZIP2_CFLAGS} LDFLAGS=${BZIP2_LDFLAGS} PREFIX=${BZIP2_PREFIX} install
INSTALL_DIR ${LIBDIR}/bzip2
)

View File

@@ -0,0 +1,48 @@
# SPDX-FileCopyrightText: 2025 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(CERES_EXTRA_ARGS
-Dabsl_DIR=${LIBDIR}/abseil/lib/cmake/absl/
-DEigen3_DIR=${LIBDIR}/eigen/share/eigen3/cmake/
-DTBB_DIR=${LIBDIR}/tbb/lib/cmake/TBB
-DBUILD_TESTING=OFF
-DBUILD_BENCHMARKS=OFF
-DUSE_CUDA=OFF
-DBUILD_EXAMPLES=OFF
-DBUILD_SHARED_LIBS=ON
)
ExternalProject_Add(external_ceres
URL file://${PACKAGE_DIR}/${CERES_FILE}
URL_HASH ${CERES_HASH_TYPE}=${CERES_HASH}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
PREFIX ${BUILD_DIR}/ceres
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/ceres
${DEFAULT_CMAKE_FLAGS}
${CERES_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/ceres
)
add_dependencies(
external_ceres
external_abseil
external_eigen
)
if(WIN32)
ExternalProject_Add_Step(external_ceres after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/ceres
${HARVEST_TARGET}/ceres
DEPENDEES install
)
else()
harvest(external_ceres ceres/include ceres/include "*.h")
harvest(external_ceres ceres/lib/cmake/Ceres ceres/lib/cmake/Ceres "*.cmake")
harvest_rpath_lib(external_ceres ceres/lib ceres/lib "*${SHAREDLIBEXT}*")
endif()

View File

@@ -0,0 +1,49 @@
# SPDX-FileCopyrightText: 2019-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
# Check against installed versions.
message(STATUS "Found C Compiler: ${CMAKE_C_COMPILER_ID} ${CMAKE_C_COMPILER_VERSION}")
if(UNIX AND NOT APPLE)
if(NOT (CMAKE_C_COMPILER_ID STREQUAL "GNU" AND CMAKE_C_COMPILER_VERSION MATCHES "${RELEASE_GCC_VERSION}.*"))
message(STATUS " NOTE: Official releases use GCC ${RELEASE_GCC_VERSION}")
endif()
endif()
message(STATUS "Found C++ Compiler: ${CMAKE_CXX_COMPILER_ID} ${CMAKE_CXX_COMPILER_VERSION}")
if(UNIX AND NOT APPLE)
if(NOT (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION MATCHES "${RELEASE_GCC_VERSION}.*"))
message(STATUS " NOTE: Official releases use GCC ${RELEASE_GCC_VERSION}")
endif()
endif()
if(NOT APPLE)
find_package(CUDAToolkit)
if(NOT CUDAToolkit_NVCC_EXECUTABLE)
message(STATUS "Missing CUDA compiler")
else()
message(STATUS "Found CUDA Compiler: ${CUDAToolkit_NVCC_EXECUTABLE} ${CUDAToolkit_VERSION}")
if(NOT CUDAToolkit_VERSION MATCHES "${RELEASE_CUDA_VERSION}.*")
message(STATUS " NOTE: Official releases use CUDA ${RELEASE_CUDA_VERSION}")
endif()
get_filename_component(CUDAToolkit_ROOT ${CUDAToolkit_BIN_DIR} DIRECTORY ABSOLUTE)
endif()
unset(HIP_VERSION)
find_package(HIP QUIET)
if(NOT HIP_FOUND)
message(STATUS "Missing HIP compiler")
else()
message(STATUS "Found HIP Compiler: ${HIP_HIPCC_EXECUTABLE} ${HIP_VERSION}")
if(WIN32)
if(NOT HIP_VERSION MATCHES "${RELEASE_HIP_WINDOWS_VERSION}.*")
message(STATUS " NOTE: Official releases use HIP ${RELEASE_HIP_WINDOWS_VERSION}")
endif()
else()
if(NOT HIP_VERSION MATCHES "${RELEASE_HIP_UNIX_VERSION}.*")
message(STATUS " NOTE: Official releases use HIP ${RELEASE_HIP_UNIX_VERSION}")
endif()
endif()
endif()
endif()

View File

@@ -0,0 +1,69 @@
# SPDX-FileCopyrightText: 2019-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(UNIX)
if(APPLE)
set(_libtoolize_name glibtoolize)
else()
set(_libtoolize_name libtoolize)
endif()
set(_required_software
autoconf
automake
bison
${_libtoolize_name}
flex
ninja
pkg-config
tclsh
yasm
)
if(APPLE)
list(APPEND _required_software dos2unix)
else()
list(APPEND _required_software autopoint)
list(APPEND _required_software patchelf)
list(APPEND _required_software help2man)
list(APPEND _required_software makeinfo)
endif()
foreach(_software ${_required_software})
find_program(_software_find NAMES ${_software})
if(NOT _software_find)
set(_software_missing "${_software_missing}${_software} ")
endif()
unset(_software_find CACHE)
endforeach()
if(APPLE)
# Homebrew has different default locations for ARM and Intel macOS.
if("${CMAKE_HOST_SYSTEM_PROCESSOR}" STREQUAL "arm64")
set(HOMEBREW_LOCATION "/opt/homebrew")
else()
set(HOMEBREW_LOCATION "/usr/local")
endif()
if(NOT EXISTS "${HOMEBREW_LOCATION}/opt/bison/bin/bison")
string(APPEND _software_missing " bison")
endif()
endif()
if(_software_missing)
message(WARNING
"\n"
"Missing software for building Blender dependencies:\n"
" ${_software_missing}\n"
"\n"
"On Debian and Ubuntu:\n"
" apt install autoconf automake autopoint flex help2man gettext texinfo bison libtool yasm tcl ninja-build meson python3-mako patchelf pkg-config\n"
"\n"
"On macOS (with homebrew):\n"
" brew install autoconf automake bison dos2unix flex libtool meson ninja pkg-config yasm\n"
"\n"
"Other platforms:\n"
" Install equivalent packages.\n")
message(FATAL_ERROR "Install missing software before continuing")
endif()
endif()

View File

@@ -0,0 +1,64 @@
# SPDX-FileCopyrightText: 2026 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
# Grype requirements
#
# - A working installation grype [1] has to be available in your path
#
# Bill of Materials construction
#
# This constructs a json cyclone-dx sbom grype can read and process.
#
# [1] https://github.com/anchore/grype
# Because not all deps are downloaded (ie python packages) but can still have a
# xxx_CPE declared loop over all variables and look for variables ending in CPE.
set(SBOMCONTENTS "")
set(SBOM_FIRST_ENTRY TRUE)
get_cmake_property(_variableNames VARIABLES)
foreach(_variableName ${_variableNames})
if(_variableName MATCHES "CPE$")
string(REPLACE ":" ";" CPE_LIST ${${_variableName}})
list(GET CPE_LIST 3 CPE_VENDOR)
list(GET CPE_LIST 4 CPE_NAME)
list(GET CPE_LIST 5 CPE_VERSION)
if(SBOM_FIRST_ENTRY)
set(SBOM_SEPARATOR "")
set(SBOM_FIRST_ENTRY FALSE)
else()
set(SBOM_SEPARATOR ",\n")
endif()
set(SBOM_ENTRY " {\n")
string(APPEND SBOM_ENTRY " \"type\": \"library\",\n")
string(APPEND SBOM_ENTRY " \"name\": \"${CPE_NAME}\",\n")
string(APPEND SBOM_ENTRY " \"version\": \"${CPE_VERSION}\",\n")
string(APPEND SBOM_ENTRY " \"cpe\": \"${${_variableName}}\"\n")
string(APPEND SBOM_ENTRY " }")
string(APPEND SBOMCONTENTS "${SBOM_SEPARATOR}${SBOM_ENTRY}")
endif()
endforeach()
configure_file(${CMAKE_SOURCE_DIR}/cmake/sbom.json.in ${CMAKE_CURRENT_BINARY_DIR}/sbom.json @ONLY)
# This will just report to the console
add_custom_target(cve_check
COMMAND grype
sbom:${CMAKE_CURRENT_BINARY_DIR}/sbom.json
-o table
-v
--sort-by package
--config ${CMAKE_SOURCE_DIR}/cmake/grype.yaml
SOURCES ${CMAKE_CURRENT_BINARY_DIR}/sbom.json
)
# This will write out grype_results.txt
add_custom_target(cve_check_txt
COMMAND grype
sbom:${CMAKE_CURRENT_BINARY_DIR}/sbom.json
-o table
--sort-by package
--file ${CMAKE_CURRENT_BINARY_DIR}/grype_results.txt
--config ${CMAKE_SOURCE_DIR}/cmake/grype.yaml
SOURCES ${CMAKE_CURRENT_BINARY_DIR}/sbom.json
)

View File

@@ -0,0 +1,42 @@
# SPDX-FileCopyrightText: 2017-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(MSVC)
if(BUILD_MODE STREQUAL Debug)
set(CYTHON_DIR_POSTFIX -pydebug)
set(CYTHON_ARCHIVE_POSTFIX d)
set(CYTHON_BUILD_OPTION --debug)
else()
set(CYTHON_DIR_POSTFIX "")
set(CYTHON_ARCHIVE_POSTFIX "")
set(CYTHON_BUILD_OPTION "")
endif()
endif()
set(CYTHON_POSTFIX "")
ExternalProject_Add(external_cython
URL file://${PACKAGE_DIR}/${CYTHON_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${CYTHON_HASH_TYPE}=${CYTHON_HASH}
PREFIX ${BUILD_DIR}/cython
PATCH_COMMAND ${CYTHON_PATCH}
CONFIGURE_COMMAND ""
LOG_BUILD 1
BUILD_IN_SOURCE 1
BUILD_COMMAND
${PYTHON_BINARY} setup.py
build ${CYTHON_BUILD_OPTION} -j${PYTHON_MAKE_THREADS}
install
--old-and-unmanageable
INSTALL_COMMAND ""
)
add_dependencies(
external_cython
external_python
external_python_site_packages
)

View File

@@ -0,0 +1,25 @@
# SPDX-FileCopyrightText: 2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(DEFLATE_EXTRA_ARGS
-DCMAKE_POSITION_INDEPENDENT_CODE=ON
-DLIBDEFLATE_BUILD_STATIC_LIB=ON
-DLIBDEFLATE_BUILD_SHARED_LIB=OFF
)
ExternalProject_Add(external_deflate
URL file://${PACKAGE_DIR}/${DEFLATE_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${DEFLATE_HASH_TYPE}=${DEFLATE_HASH}
PREFIX ${BUILD_DIR}/deflate
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/deflate
${DEFAULT_CMAKE_FLAGS}
${DEFLATE_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/deflate
)

View File

@@ -0,0 +1,18 @@
# Blender Library Dependencies
This file contains a table with all the libraries Blender uses to build its library dependencies.
Some of the libraries might not be shipped in the library directory as some of them are only used at build time.
NOTE: Some libraries listed here might not be relevant for your platform.
## Library List
| Library Name | Version | Homepage |
|--------------|---------|----------|
@TABLE_CONTENTS@
## Basic Dependency Lists
These are auto generated basic dependency lists for each library.
@DEPS_CONTENTS@

View File

@@ -0,0 +1,70 @@
# SPDX-FileCopyrightText: 2026 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
#
# This outputs an markdown file with the name, version and homepage for
# every dependency we have, this is used by the release manager to
# update the licensing document.
# Create a table with name, version and url for each library.
set(TABLE_CONTENTS "")
get_cmake_property(_variableNames VARIABLES)
foreach(_variableName ${_variableNames})
if(_variableName MATCHES "_URI$")
string(REPLACE "_URI" "" DEP_NAME ${_variableName})
set(DEP_VERSION "${${DEP_NAME}_VERSION}")
# First see if DEP_HOMEPAGE is set, if it is use that.
set(DEP_HOMEPAGE ${${DEP_NAME}_HOMEPAGE})
if(NOT DEP_HOMEPAGE)
# If the xxx_HOMEPAGE is not set but the URI for the archive is a known github format
# extract the repository/project from the URI.
string(REGEX MATCH "https:\/\/(.*)github\.com\/(.+)\/(archive|releases|release|tar.gz)\/(.*)" DEP_PROJECT "${${_variableName}}")
if(CMAKE_MATCH_2)
set(DEP_HOMEPAGE "https://www.github.com/${CMAKE_MATCH_2}")
else() # If that is also not set, error out to ensure this information is supplied
message(FATAL_ERROR "${DEP_NAME} No homepage set, please set ${DEP_NAME}_HOMEPAGE in versions.cmake")
endif()
endif()
set(TABLE_CONTENTS "${TABLE_CONTENTS}| `${DEP_NAME}` | `${DEP_VERSION}` | <${DEP_HOMEPAGE}> |\n")
endif()
endforeach()
# Create a list of dependencies for each library
set(DEPS_CONTENTS "")
get_property(targets DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY BUILDSYSTEM_TARGETS)
foreach(target ${targets})
string(REPLACE "external_" "" target_name ${target})
get_target_property(deps ${target} MANUALLY_ADDED_DEPENDENCIES)
if(NOT deps)
list(APPEND NO_DEP_LIBS ${target_name})
continue()
endif()
set(DEPS_CONTENTS "${DEPS_CONTENTS}```\n")
set(DEPS_CONTENTS "${DEPS_CONTENTS}└── ${target_name}\n")
list(LENGTH deps nr_of_deps)
foreach(dep ${deps})
string(REPLACE "external_" "" dep_name ${dep})
math(EXPR nr_of_deps "${nr_of_deps} - 1")
if(nr_of_deps)
set(DEPS_CONTENTS "${DEPS_CONTENTS} ├── ${dep_name}\n")
else()
set(DEPS_CONTENTS "${DEPS_CONTENTS} └── ${dep_name}\n")
endif()
list(APPEND USED_DEPS ${dep_name})
endforeach()
set(DEPS_CONTENTS "${DEPS_CONTENTS}```\n")
endforeach()
set(DEPS_CONTENTS "${DEPS_CONTENTS}Libraries without any dependencies and not used by any other library:\n```\n")
list(REMOVE_DUPLICATES USED_DEPS)
foreach(no_dep_target ${NO_DEP_LIBS})
if(NOT ${no_dep_target} IN_LIST USED_DEPS)
set(DEPS_CONTENTS "${DEPS_CONTENTS}${no_dep_target}\n")
endif()
endforeach()
set(DEPS_CONTENTS "${DEPS_CONTENTS}```\n")
configure_file(${CMAKE_SOURCE_DIR}/cmake/deps.md.in ${HARVEST_TARGET}/deps.md @ONLY)

View File

@@ -0,0 +1,196 @@
# SPDX-FileCopyrightText: 2021-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
## Update and uncomment this in the release branch
set(BLENDER_VERSION 5.2)
function(download_source dep)
set(TARGET_FILE ${${dep}_FILE})
set(TARGET_HASH_TYPE ${${dep}_HASH_TYPE})
set(TARGET_HASH ${${dep}_HASH})
if(PACKAGE_USE_UPSTREAM_SOURCES)
set(TARGET_URI ${${dep}_URI})
elseif(BLENDER_VERSION)
set(TARGET_URI https://projects.blender.org/blender/lib-source/media/branch/blender-v${BLENDER_VERSION}-release/${TARGET_FILE})
else()
set(TARGET_URI https://projects.blender.org/blender/lib-source/media/branch/main/${TARGET_FILE})
endif()
# Validate all required variables are set and give an explicit error message
# rather than CMake erroring out later on with a more ambiguous error.
if(NOT DEFINED TARGET_FILE)
message(FATAL_ERROR "${dep}_FILE variable not set")
endif()
if(NOT DEFINED TARGET_HASH)
message(FATAL_ERROR "${dep}_HASH variable not set")
endif()
if(NOT DEFINED TARGET_HASH_TYPE)
message(FATAL_ERROR "${dep}_HASH_TYPE variable not set")
endif()
if(NOT DEFINED TARGET_URI)
message(FATAL_ERROR "${dep}_URI variable not set")
endif()
set(TARGET_FILE ${PACKAGE_DIR}/${TARGET_FILE})
message(STATUS "Checking source : ${dep} (${TARGET_FILE})")
if(NOT EXISTS ${TARGET_FILE})
message(STATUS "Checking source : ${dep} - source not found downloading from ${TARGET_URI}")
file(
DOWNLOAD ${TARGET_URI} ${TARGET_FILE}
TIMEOUT 1800 # seconds
EXPECTED_HASH ${TARGET_HASH_TYPE}=${TARGET_HASH}
TLS_VERIFY ON
SHOW_PROGRESS
)
endif()
if(EXISTS ${TARGET_FILE})
# Sometimes the download fails, but that is not a
# fail condition for "file(DOWNLOAD" it will warn about
# a CRC mismatch and just carry on, we need to explicitly
# catch this and remove the bogus 0 byte file so we can
# retry without having to go find the file and manually
# delete it.
file(SIZE ${TARGET_FILE} TARGET_SIZE)
if(${TARGET_SIZE} EQUAL 0)
file(REMOVE ${TARGET_FILE})
message(FATAL_ERROR "for ${TARGET_FILE} file size 0, download likely failed, deleted...")
endif()
# If we are using sources from the blender repo also
# validate that the hashes match, this takes a
# little more time, but protects us when we are
# building a release package and one of the packages
# is missing or incorrect.
#
# For regular platform maintenance this is not needed
# since the actual build of the dep will notify the
# platform maintainer if there is a problem with the
# source package and refuse to build.
if(NOT PACKAGE_USE_UPSTREAM_SOURCES OR FORCE_CHECK_HASH)
file(${TARGET_HASH_TYPE} ${TARGET_FILE} LOCAL_HASH)
if(NOT ${TARGET_HASH} STREQUAL ${LOCAL_HASH})
message(FATAL_ERROR
"${TARGET_FILE} ${TARGET_HASH_TYPE} mismatch\n"
"Expected\t: ${TARGET_HASH}\nActual\t: ${LOCAL_HASH}"
)
endif()
endif()
endif()
endfunction(download_source)
download_source(ZLIB)
download_source(OPENAL)
download_source(PNG)
download_source(JPEG)
download_source(BLOSC)
download_source(PTHREADS)
download_source(OPENEXR)
download_source(FREETYPE)
download_source(EPOXY)
download_source(ALEMBIC)
download_source(OPENSUBDIV)
download_source(SDL)
download_source(OPENCOLORIO)
download_source(MINIZIPNG)
download_source(LLVM)
download_source(OPENIMAGEIO)
download_source(TIFF)
download_source(OSL)
download_source(PYTHON)
download_source(TBB)
download_source(OPENVDB)
download_source(CYTHON)
download_source(ZSTANDARD)
download_source(NUMPY)
download_source(LAME)
download_source(OGG)
download_source(VORBIS)
download_source(THEORA)
download_source(FLAC)
download_source(VPX)
download_source(OPUS)
download_source(X264)
download_source(X265)
download_source(OPENJPEG)
download_source(FFMPEG)
download_source(FFTW)
download_source(ICONV)
download_source(SNDFILE)
download_source(WEBP)
download_source(SPNAV)
download_source(XML2)
download_source(YAMLCPP)
download_source(EXPAT)
download_source(PUGIXML)
download_source(FLEXBISON)
download_source(BZIP2)
download_source(FFI)
download_source(LZMA)
download_source(SSL)
download_source(SQLITE)
download_source(EMBREE)
download_source(USD)
download_source(MATERIALX)
download_source(OIDN)
download_source(NASM)
download_source(XR_OPENXR_SDK)
download_source(WL_PROTOCOLS)
download_source(WAYLAND)
download_source(WAYLAND_WESTON)
download_source(ISPC)
download_source(GMP)
download_source(POTRACE)
download_source(HARU)
download_source(ZSTD)
download_source(SSE2NEON)
download_source(FLEX)
download_source(BROTLI)
download_source(FMT)
download_source(ROBINMAP)
download_source(IMATH)
download_source(PYSTRING)
download_source(OPENPGL)
download_source(LEVEL_ZERO)
download_source(DPCPP)
download_source(VCINTRINSICS)
download_source(OPENCLHEADERS)
download_source(ICDLOADER)
download_source(EMHASH)
download_source(DPCPP_SPIRV_HEADERS)
download_source(UNIFIED_MEMORY_FRAMEWORK)
download_source(PARALLEL_HASHMAP)
download_source(IGC)
download_source(IGC_LLVM)
download_source(IGC_OPENCL_CLANG)
download_source(IGC_VCINTRINSICS)
download_source(IGC_SPIRV_HEADERS)
download_source(IGC_SPIRV_TOOLS)
download_source(IGC_SPIRV_TRANSLATOR)
download_source(GMMLIB)
download_source(OCLOC)
download_source(AOM)
download_source(FRIBIDI)
download_source(HARFBUZZ)
download_source(SHADERC)
download_source(SHADERC_GLSLANG)
download_source(VULKAN_HEADERS)
download_source(VULKAN_LOADER)
download_source(VULKAN_UTILITY_LIBRARIES)
download_source(SPIRV_HEADERS)
download_source(SPIRV_REFLECT)
download_source(SPIRV_TOOLS)
download_source(VULKAN_MEMORY_ALLOCATOR)
download_source(PYBIND11)
download_source(DEFLATE)
download_source(HIPRT)
download_source(NANOBIND)
download_source(MANIFOLD)
download_source(RUBBERBAND)
download_source(OPENJPH)
download_source(THORVG)
download_source(LIBHEIF)
download_source(ABSEIL)
download_source(EIGEN)
download_source(CERES)
download_source(DRACO)
download_source(MESHOPTIMIZER)
download_source(TRACY)

View File

@@ -0,0 +1,253 @@
# SPDX-FileCopyrightText: 2022-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
string(REPLACE "-DCMAKE_CXX_STANDARD=20" " " DPCPP_CMAKE_FLAGS "${DEFAULT_CMAKE_FLAGS}")
# DPCPP already generates debug libs, there isn't much point in compiling it in debug mode itself.
string(REPLACE "-DCMAKE_BUILD_TYPE=Debug" "-DCMAKE_BUILD_TYPE=Release" DPCPP_CMAKE_FLAGS "${DPCPP_CMAKE_FLAGS}")
if(WIN32)
set(LLVM_GENERATOR "Ninja")
else()
set(LLVM_GENERATOR "Unix Makefiles")
endif()
set(DPCPP_CONFIGURE_ARGS
# When external deps dpcpp needs are not found it will automatically
# download them during the configure stage using FetchContent. Given
# we need to keep an archive of all source used during build for compliance
# reasons it CANNOT download anything we do not know about. By setting
# this property to ON, all downloads are disabled, and we will have to
# provide the missing deps some other way, a build error beats a compliance
# violation
--cmake-opt FETCHCONTENT_FULLY_DISCONNECTED=ON
)
set(DPCPP_SOURCE_ROOT ${BUILD_DIR}/dpcpp/src/external_dpcpp/)
set(DPCPP_EXTRA_ARGS
# When external deps dpcpp needs are not found it will automatically
# download them during the configure stage using FetchContent. Given
# we need to keep an archive of all source used during build for compliance
# reasons it CANNOT download anything we do not know about. By setting
# this property to ON, all downloads are disabled, and we will have to
# provide the missing deps some other way, a build or configure error
# beats a compliance violation
-DFETCHCONTENT_FULLY_DISCONNECTED=ON
# Pre-built dependency paths (project-specific, not from configure.py)
# In addition to this, we are setting some additional parameters,
# which are not covered by configure.py, but which we plan to use
# in order to meet some Blender needs, for example, disabling
# HWLOC dependency/library from being used. Some of these variables
# are even connected to our dpcpp.patch changes and require them
# to work properly.
-DLLVMGenXIntrinsics_SOURCE_DIR=${BUILD_DIR}/vcintrinsics/src/external_vcintrinsics/
-DOpenCL_HEADERS=file://${PACKAGE_DIR}/${OPENCLHEADERS_FILE}
-DOpenCL_LIBRARY_SRC=file://${PACKAGE_DIR}/${ICDLOADER_FILE}
-DSYCL_EMHASH_DIR=${LIBDIR}/emhash/include
-DEMHASH_SYS_LOC=${LIBDIR}/emhash/include/emhash
-DLEVEL_ZERO_LIBRARY=${LIBDIR}/level-zero/lib/${LIBPREFIX}ze_loader${SHAREDLIBEXT}
-DLEVEL_ZERO_INCLUDE_DIR=${LIBDIR}/level-zero/include/level_zero
-DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=${BUILD_DIR}/dpcpp_spirvheaders/src/external_dpcpp_spirvheaders/
# See an explanation above about compliance for the two following cmake arguments
-DSYCL_UR_USE_FETCH_CONTENT=OFF
-DUR_COMPUTE_RUNTIME_FETCH_REPO=OFF
-DFETCHCONTENT_SOURCE_DIR_UNIFIED-MEMORY-FRAMEWORK=${BUILD_DIR}/unifiedmemoryframework/src/external_unifiedmemoryframework/
-DSYCL_UMF_DISABLE_HWLOC=ON
-DUMF_DISABLE_HWLOC=ON
-DUMF_BUILD_SHARED_LIBRARY=OFF
# These two options are from configure.py, but they are left here for now for the better
# readability of the changes - they would be moved downward in the future refactoring.
-DSYCL_ENABLE_XPTI_TRACING=ON
# [CHANGED] We do not need to build tests for our purposes
-DSYCL_INCLUDE_TESTS=OFF
-DUR_ENABLE_TRACING=ON
-DXPTIFW_PARALLEL_HASHMAP_HEADERS=${LIBDIR}/parallelhashmap/include
# Below here is copied from an invocation of buildbot/configure.py with
# arguments "--use-zstd --disable-preview-lib --host-target=x86"
# Note: --print-cmake-variables is not a real cmake flag, it was just used
# to cause all parameters to be printed and then cause exit prematurely.
#
# The original generated arguments were this:
# >"C:\db\build\output\Win64_vc15\python\313\bin\python.exe" buildbot\configure.py --use-zstd --disable-preview-lib --disable-jit --host-target=x86 --print-cmake-variables
# args:Namespace(build_number=None, branch=None, base_branch=None, pr_number=None, builder_dir=None, src_dir=None, obj_dir=None, l0_headers=None, l0_loader=None, build_type='Release', cuda=False, native_cpu=False, hip=False, hip_platform='AMD', level_zero_adapter_version='ALL', host_target='x86', enable_all_llvm_targets=False, no_assertions=False, docs=False, werror=False, shared_libs=False, cmake_opt=None, cmake_gen='Ninja', use_libcxx=False, libcxx_include=None, libcxx_library=None, use_lld=False, llvm_external_projects=None, ci_defaults=False, enable_backends=None, disable_preview_lib=True, disable_jit=True, add_security_flags=None, native_cpu_libclc_targets=None, use_zstd=True)
# [Cmake Command]:
# cmake
# -G Ninja
# -DCMAKE_BUILD_TYPE=Release
# -DLLVM_ENABLE_ASSERTIONS=ON
# -DLLVM_TARGETS_TO_BUILD=x86
# '-DLLVM_EXTERNAL_PROJECTS=sycl;llvm-spirv;opencl;xpti;xptifw;libdevice'
# '-DLLVM_EXTERNAL_SYCL_SOURCE_DIR=C:\Repos\llvm-6.3.0\sycl'
# '-DLLVM_EXTERNAL_LLVM_SPIRV_SOURCE_DIR=C:\Repos\llvm-6.3.0\llvm-spirv'
# '-DLLVM_EXTERNAL_XPTI_SOURCE_DIR=C:\Repos\llvm-6.3.0\xpti'
# '-DXPTI_SOURCE_DIR=C:\Repos\llvm-6.3.0\xpti'
# '-DLLVM_EXTERNAL_XPTIFW_SOURCE_DIR=C:\Repos\llvm-6.3.0\xptifw'
# '-DLLVM_EXTERNAL_LIBDEVICE_SOURCE_DIR=C:\Repos\llvm-6.3.0\libdevice'
# '-DLLVM_EXTERNAL_SYCL_JIT_SOURCE_DIR=C:\Repos\llvm-6.3.0\sycl-jit'
# '-DLLVM_ENABLE_PROJECTS=clang;sycl;llvm-spirv;opencl;xpti;xptifw;libdevice;lld'
# -DSYCL_BUILD_PI_HIP_PLATFORM=AMD
# -DLLVM_BUILD_TOOLS=ON
# -DLLVM_ENABLE_ZSTD=FORCE_ON
# -DLLVM_USE_STATIC_ZSTD=ON
# -DSYCL_ENABLE_WERROR=OFF
# '-DCMAKE_INSTALL_PREFIX=C:\Repos\llvm-6.3.0\build\install'
# -DSYCL_INCLUDE_TESTS=ON
# -DLLVM_ENABLE_DOXYGEN=OFF
# -DLLVM_ENABLE_SPHINX=OFF
# -DBUILD_SHARED_LIBS=OFF
# -DSYCL_ENABLE_XPTI_TRACING=ON
# -DLLVM_ENABLE_LLD=OFF
# -DLLVM_SPIRV_ENABLE_LIBSPIRV_DIS=OFF
# -DXPTI_ENABLE_WERROR=OFF
# -DSYCL_CLANG_EXTRA_FLAGS=
# '-DSYCL_ENABLE_BACKENDS=level_zero_v2;level_zero;opencl'
# -DSYCL_ENABLE_EXTENSION_JIT=OFF
# -DSYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB=OFF
# -DBUG_REPORT_URL=https://github.com/intel/llvm/issues
# 'C:\Repos\llvm-6.3.0\llvm'
# --print-cmake-variables
# CMake Error: Unknown argument --print-cmake-variables
# CMake Error: Run 'cmake --help' for all supported options.
# >
#
# All cmake parameters from the list above, which we set with
# non-default options are marked as [CHANGED]. Other parameters,
# not from the list above do not have this mark regardless of
# their values.
# -DCMAKE_BUILD_TYPE=Release # set by ExternalProject_Add
-DLLVM_ENABLE_ASSERTIONS=ON
-DLLVM_TARGETS_TO_BUILD=X86
# Note: lld/clang are in-tree LLVM projects, only listed in ENABLE_PROJECTS.
-DLLVM_EXTERNAL_PROJECTS=sycl^^llvm-spirv^^opencl^^libdevice^^xpti^^xptifw
-DLLVM_EXTERNAL_SYCL_SOURCE_DIR=${DPCPP_SOURCE_ROOT}/sycl
-DLLVM_EXTERNAL_LLVM_SPIRV_SOURCE_DIR=${DPCPP_SOURCE_ROOT}/llvm-spirv
-DLLVM_EXTERNAL_XPTI_SOURCE_DIR=${DPCPP_SOURCE_ROOT}/xpti
-DXPTI_SOURCE_DIR=${DPCPP_SOURCE_ROOT}/xpti
-DLLVM_EXTERNAL_XPTIFW_SOURCE_DIR=${DPCPP_SOURCE_ROOT}/xptifw
-DLLVM_EXTERNAL_LIBDEVICE_SOURCE_DIR=${DPCPP_SOURCE_ROOT}/libdevice
-DLLVM_ENABLE_PROJECTS=clang^^sycl^^llvm-spirv^^opencl^^libdevice^^xpti^^xptifw^^lld
# [ADDED] Not from configure.py. These arguments disable libclc (not needed for Level Zero)
# and will be moved downward in future refactoring.
-DLIBCLC_TARGETS_TO_BUILD=
-DLIBCLC_GENERATE_REMANGLED_VARIANTS=OFF
-DSYCL_BUILD_PI_HIP_PLATFORM=AMD
-DLLVM_BUILD_TOOLS=ON
-DSYCL_ENABLE_WERROR=OFF
# -DCMAKE_INSTALL_PREFIX=... # set by ExternalProject_Add
# [CHANGED] Tests disabled (configure.py default: ON)
-DLLVM_ENABLE_DOXYGEN=OFF
-DLLVM_ENABLE_SPHINX=OFF
-DBUILD_SHARED_LIBS=OFF
-DLLVM_ENABLE_LLD=OFF
-DLLVM_SPIRV_ENABLE_LIBSPIRV_DIS=OFF
-DXPTI_ENABLE_WERROR=OFF
-DSYCL_CLANG_EXTRA_FLAGS=
# [CHANGED] Removed opencl backend; we only target Level Zero.
# configure.py default: level_zero;opencl;level_zero_v2
# Previously this option was called SYCL_ENABLE_PLUGINS
-DSYCL_ENABLE_BACKENDS=level_zero_v2^^level_zero
-DSYCL_ENABLE_EXTENSION_JIT=OFF
-DSYCL_ENABLE_MAJOR_RELEASE_PREVIEW_LIB=OFF
# -DBUG_REPORT_URL=... # omitted, cosmetic
# Additional project-specific flags (not from configure.py)
-DCMAKE_INSTALL_RPATH=\$ORIGIN
-DPython3_ROOT_DIR=${LIBDIR}/python/
-DPython3_EXECUTABLE=${PYTHON_BINARY}
-DPYTHON_EXECUTABLE=${PYTHON_BINARY}
-DLLDB_ENABLE_CURSES=OFF
-DLLVM_ENABLE_TERMINFO=OFF
-DLLVM_ENABLE_ZLIB=OFF
# The following two are from configure.py, but left here for now for better
# readability of the changes - they will be moved upward in future refactoring.
-DLLVM_ENABLE_ZSTD=FORCE_ON
-DLLVM_USE_STATIC_ZSTD=ON
-Dzstd_INCLUDE_DIR=${LIBDIR}/zstd/include
)
if(WIN32)
list(APPEND DPCPP_EXTRA_ARGS
-DPython3_FIND_REGISTRY=NEVER
-Dzstd_LIBRARY=${LIBDIR}/zstd/lib/zstd_static.lib
)
else()
list(APPEND DPCPP_EXTRA_ARGS
-Dzstd_LIBRARY=${LIBDIR}/zstd/lib/libzstd.a
)
endif()
ExternalProject_Add(external_dpcpp
URL file://${PACKAGE_DIR}/${DPCPP_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${DPCPP_HASH_TYPE}=${DPCPP_HASH}
PREFIX ${BUILD_DIR}/dpcpp
CMAKE_GENERATOR ${LLVM_GENERATOR}
SOURCE_SUBDIR llvm
LIST_SEPARATOR ^^
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/dpcpp
${DPCPP_CMAKE_FLAGS}
${DPCPP_EXTRA_ARGS}
# CONFIGURE_COMMAND
# ${PYTHON_BINARY}
# ${BUILD_DIR}/dpcpp/src/external_dpcpp/buildbot/configure.py ${DPCPP_CONFIGURE_ARGS}
# BUILD_COMMAND
# echo "." # ${PYTHON_BINARY} ${BUILD_DIR}/dpcpp/src/external_dpcpp/buildbot/compile.py
INSTALL_COMMAND ${CMAKE_COMMAND} --build . -- deploy-sycl-toolchain
PATCH_COMMAND
${PATCH_CMD} -p 1 -d
${BUILD_DIR}/dpcpp/src/external_dpcpp <
${PATCH_DIR}/dpcpp.diff &&
${PATCH_CMD} -p 1 -d
${BUILD_DIR}/dpcpp/src/external_dpcpp <
${PATCH_DIR}/dpcpp_backport_21050.diff &&
${PATCH_CMD} -p 1 -d
${BUILD_DIR}/dpcpp/src/external_dpcpp <
${PATCH_DIR}/dpcpp_backport_21490.diff
INSTALL_DIR ${LIBDIR}/dpcpp
)
add_dependencies(
external_dpcpp
external_python
external_python_site_packages
external_vcintrinsics
external_openclheaders
external_icdloader
external_emhash
external_level-zero
external_dpcpp_spirvheaders
external_unifiedmemoryframework
external_zstd
external_parallelhashmap
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_dpcpp after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/dpcpp ${HARVEST_TARGET}/dpcpp
COMMAND ${CMAKE_COMMAND} -E rm -f ${HARVEST_TARGET}/dpcpp/bin/clang-cl.exe
COMMAND ${CMAKE_COMMAND} -E rm -f ${HARVEST_TARGET}/dpcpp/bin/clang-cpp.exe
COMMAND ${CMAKE_COMMAND} -E rm -f ${HARVEST_TARGET}/dpcpp/bin/ld.lld.exe
COMMAND ${CMAKE_COMMAND} -E rm -f ${HARVEST_TARGET}/dpcpp/bin/ld64.lld.exe
COMMAND ${CMAKE_COMMAND} -E rm -f ${HARVEST_TARGET}/dpcpp/bin/lld.exe
COMMAND ${CMAKE_COMMAND} -E rm -f ${HARVEST_TARGET}/dpcpp/bin/lld-link.exe
COMMAND ${CMAKE_COMMAND} -E rm -f ${HARVEST_TARGET}/dpcpp/bin/wasm-ld.exe
DEPENDEES install
)
endif()
else()
harvest(external_dpcpp dpcpp/bin dpcpp/bin "*")
harvest(external_dpcpp dpcpp/include dpcpp/include "*")
harvest(external_dpcpp dpcpp/lib dpcpp/lib "libsycl*")
harvest(external_dpcpp dpcpp/lib dpcpp/lib "libxpti*")
harvest(external_dpcpp dpcpp/lib dpcpp/lib "libur*")
harvest(external_dpcpp dpcpp/lib/clang dpcpp/lib/clang "*")
endif()

View File

@@ -0,0 +1,66 @@
# SPDX-FileCopyrightText: 2022-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
# These are build time requirements for dpcpp
# We only have to unpack these dpcpp will build
# them.
ExternalProject_Add(external_vcintrinsics
URL file://${PACKAGE_DIR}/${VCINTRINSICS_FILE}
URL_HASH ${VCINTRINSICS_HASH_TYPE}=${VCINTRINSICS_HASH}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
PREFIX ${BUILD_DIR}/vcintrinsics
CONFIGURE_COMMAND echo .
BUILD_COMMAND echo .
INSTALL_COMMAND echo .
)
# opencl headers do not have to be unpacked, dpcpp will do it
# but it wouldn't hurt to do it anyway as an opportunity to validate
# the hash is correct.
ExternalProject_Add(external_openclheaders
URL file://${PACKAGE_DIR}/${OPENCLHEADERS_FILE}
URL_HASH ${OPENCLHEADERS_HASH_TYPE}=${OPENCLHEADERS_HASH}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
PREFIX ${BUILD_DIR}/openclheaders
CONFIGURE_COMMAND echo .
BUILD_COMMAND echo .
INSTALL_COMMAND echo .
)
# icdloader does not have to be unpacked, dpcpp will do it
# but it wouldn't hurt to do it anyway as an opportunity to validate
# the hash is correct.
ExternalProject_Add(external_icdloader
URL file://${PACKAGE_DIR}/${ICDLOADER_FILE}
URL_HASH ${ICDLOADER_HASH_TYPE}=${ICDLOADER_HASH}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
PREFIX ${BUILD_DIR}/icdloader
CONFIGURE_COMMAND echo .
BUILD_COMMAND echo .
INSTALL_COMMAND echo .
)
ExternalProject_Add(external_dpcpp_spirvheaders
URL file://${PACKAGE_DIR}/${DPCPP_SPIRV_HEADERS_FILE}
URL_HASH ${DPCPP_SPIRV_HEADERS_HASH_TYPE}=${DPCPP_SPIRV_HEADERS_HASH}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
PREFIX ${BUILD_DIR}/dpcpp_spirvheaders
CONFIGURE_COMMAND echo .
BUILD_COMMAND echo .
INSTALL_COMMAND echo .
)
ExternalProject_Add(external_unifiedmemoryframework
URL file://${PACKAGE_DIR}/${UNIFIED_MEMORY_FRAMEWORK_FILE}
URL_HASH ${UNIFIED_MEMORY_FRAMEWORK_HASH_TYPE}=${UNIFIED_MEMORY_FRAMEWORK_HASH}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
PREFIX ${BUILD_DIR}/unifiedmemoryframework
PATCH_COMMAND ${PATCH_CMD} -p 1 -d
${BUILD_DIR}/unifiedmemoryframework/src/external_unifiedmemoryframework <
${PATCH_DIR}/unifiedmemoryframework.diff
CONFIGURE_COMMAND echo .
BUILD_COMMAND echo .
INSTALL_COMMAND echo .
)

View File

@@ -0,0 +1,46 @@
# SPDX-FileCopyrightText: 2026 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(DRACO_EXTRA_ARGS
-DBUILD_SHARED_LIBS=ON
)
if(WIN32)
set(DRACO_EXTRA_ARGS
${DRACO_EXTRA_ARGS}
-DCMAKE_DEBUG_POSTFIX=_d
)
endif()
ExternalProject_Add(external_draco
URL file://${PACKAGE_DIR}/${DRACO_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${DRACO_HASH_TYPE}=${DRACO_HASH}
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PREFIX ${BUILD_DIR}/draco
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/draco
${DEFAULT_CMAKE_FLAGS}
${DRACO_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/draco
)
if(WIN32)
ExternalProject_Add_Step(external_draco after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/draco/
${HARVEST_TARGET}/draco
DEPENDEES install
)
else()
harvest(external_draco draco/include draco/include "*.h")
# CMake files first because harvest_rpath_lib edits them. Move from share/cmake to lib/cmake for set_rpath.py to find them.
harvest(external_draco draco/share/cmake/draco draco/lib/cmake/draco "*.cmake")
harvest_rpath_lib(external_draco draco/lib draco/lib "*${SHAREDLIBEXT}*")
# Draco unconditionally builds as a static library, harvest it to satisfy the CMake config target.
harvest(external_draco draco/lib draco/lib "*.a")
endif()

View File

@@ -0,0 +1,45 @@
# SPDX-FileCopyrightText: 2025 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(EIGEN_EXTRA_ARGS
-DBUILD_TESTING=OFF
-DEIGEN_BUILD_DOC=OFF
-DTBB_DIR=${LIBDIR}/tbb/lib/cmake/TBB
)
ExternalProject_Add(external_eigen
URL file://${PACKAGE_DIR}/${EIGEN_FILE}
URL_HASH ${EIGEN_HASH_TYPE}=${EIGEN_HASH}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
PREFIX ${BUILD_DIR}/eigen
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PATCH_COMMAND ${PATCH_CMD} -p 1 -d
${BUILD_DIR}/eigen/src/external_eigen <
${PATCH_DIR}/eigen_tbb_support.diff
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/eigen
${DEFAULT_CMAKE_FLAGS}
${EIGEN_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/eigen
)
if(WIN32)
# While C++ eigen is a header only library
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_eigen after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/eigen
${HARVEST_TARGET}/eigen
DEPENDEES install
)
endif()
else()
# Eigen has files without extensions in the include directory that it needs so no *.h wildcard
harvest(external_eigen eigen/include eigen/include "*")
# Extra / at the end to ensure that harvest doesn't ignore the cmake directory
harvest(external_eigen eigen/share/eigen3/cmake/ eigen/share/eigen3/cmake/ "*.cmake")
endif()

View File

@@ -0,0 +1,154 @@
# SPDX-FileCopyrightText: 2017-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
# Note the utility apps may use png/tiff/gif system libraries, but the
# library itself does not depend on them, so should give no problems.
set(EMBREE_CMAKE_FLAGS ${DEFAULT_CMAKE_FLAGS})
set(EMBREE_EXTRA_ARGS
-DEMBREE_ISPC_SUPPORT=OFF
-DEMBREE_TUTORIALS=OFF
-DEMBREE_STATIC_LIB=OFF
-DEMBREE_RAY_MASK=ON
-DEMBREE_FILTER_FUNCTION=ON
-DEMBREE_BACKFACE_CULLING=OFF
-DEMBREE_BACKFACE_CULLING_CURVES=ON
-DEMBREE_BACKFACE_CULLING_SPHERES=ON
-DEMBREE_TASKING_SYSTEM=TBB
-DEMBREE_TBB_ROOT=${LIBDIR}/tbb
-DTBB_ROOT=${LIBDIR}/tbb
)
if(WIN32)
set(EMBREE_EXTRA_ARGS
${EMBREE_EXTRA_ARGS}
-DCMAKE_DEBUG_POSTFIX=_d
)
endif()
if(NOT BLENDER_PLATFORM_ARM)
set(EMBREE_EXTRA_ARGS
${EMBREE_EXTRA_ARGS}
-DEMBREE_MAX_ISA=AVX2
)
endif()
if(NOT APPLE AND NOT BLENDER_PLATFORM_ARM)
if(WIN32)
# Levels below -O2 don't work well for Embree+SYCL.
string(REGEX REPLACE "-O[A-Za-z0-9]" "" EMBREE_CLANG_CMAKE_CXX_FLAGS_DEBUG ${BLENDER_CLANG_CMAKE_CXX_FLAGS_DEBUG})
string(APPEND EMBREE_CLANG_CMAKE_CXX_FLAGS_DEBUG " -O2")
string(REGEX REPLACE "-O[A-Za-z0-9]" "" EMBREE_CLANG_CMAKE_C_FLAGS_DEBUG ${BLENDER_CLANG_CMAKE_C_FLAGS_DEBUG})
string(APPEND EMBREE_CLANG_CMAKE_C_FLAGS_DEBUG " -O2")
set(EMBREE_CMAKE_FLAGS
-DCMAKE_BUILD_TYPE=${BUILD_MODE}
-DCMAKE_CXX_FLAGS_RELEASE=${BLENDER_CLANG_CMAKE_CXX_FLAGS_RELEASE}
-DCMAKE_CXX_FLAGS_MINSIZEREL=${BLENDER_CLANG_CMAKE_CXX_FLAGS_MINSIZEREL}
-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=${BLENDER_CLANG_CMAKE_CXX_FLAGS_RELWITHDEBINFO}
-DCMAKE_CXX_FLAGS_DEBUG=${EMBREE_CLANG_CMAKE_CXX_FLAGS_DEBUG}
-DCMAKE_C_FLAGS_RELEASE=${BLENDER_CLANG_CMAKE_C_FLAGS_RELEASE}
-DCMAKE_C_FLAGS_MINSIZEREL=${BLENDER_CLANG_CMAKE_C_FLAGS_MINSIZEREL}
-DCMAKE_C_FLAGS_RELWITHDEBINFO=${BLENDER_CLANG_CMAKE_C_FLAGS_RELWITHDEBINFO}
-DCMAKE_C_FLAGS_DEBUG=${EMBREE_CLANG_CMAKE_C_FLAGS_DEBUG}
-DCMAKE_CXX_STANDARD=17
)
set(EMBREE_EXTRA_ARGS
-DCMAKE_CXX_COMPILER=${LIBDIR}/dpcpp/bin/clang++.exe
-DCMAKE_C_COMPILER=${LIBDIR}/dpcpp/bin/clang.exe
-DCMAKE_SHARED_LINKER_FLAGS=-L"${LIBDIR}/dpcpp/lib"
-DEMBREE_SYCL_SUPPORT=ON
${EMBREE_EXTRA_ARGS}
)
else()
string(REPLACE "-DCMAKE_CXX_STANDARD=20" " " EMBREE_CMAKE_FLAGS "${EMBREE_CMAKE_FLAGS}")
set(EMBREE_EXTRA_ARGS
-DCMAKE_CXX_COMPILER=${LIBDIR}/dpcpp/bin/clang++
-DCMAKE_C_COMPILER=${LIBDIR}/dpcpp/bin/clang
-DCMAKE_SHARED_LINKER_FLAGS=-L"${LIBDIR}/dpcpp/lib"
-DEMBREE_SYCL_SUPPORT=ON
${EMBREE_EXTRA_ARGS}
)
endif()
endif()
if(TBB_STATIC_LIBRARY)
set(EMBREE_EXTRA_ARGS
${EMBREE_EXTRA_ARGS}
-DEMBREE_TBB_COMPONENT=tbb_static
)
endif()
ExternalProject_Add(external_embree
URL file://${PACKAGE_DIR}/${EMBREE_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${EMBREE_HASH_TYPE}=${EMBREE_HASH}
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PREFIX ${BUILD_DIR}/embree
PATCH_COMMAND
${PATCH_CMD} -p 1 -d
${BUILD_DIR}/embree/src/external_embree <
${PATCH_DIR}/embree.diff
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/embree
${EMBREE_CMAKE_FLAGS}
${EMBREE_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/embree
)
if(NOT APPLE AND NOT BLENDER_PLATFORM_ARM)
add_dependencies(
external_embree
external_tbb
external_dpcpp
)
else()
add_dependencies(
external_embree
external_tbb
)
endif()
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_embree after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/embree/include
${HARVEST_TARGET}/embree/include
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/embree/lib
${HARVEST_TARGET}/embree/lib
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/embree/share
${HARVEST_TARGET}/embree/share
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/embree/bin/embree4.dll
${HARVEST_TARGET}/embree/bin/embree4.dll
DEPENDEES install
)
else()
ExternalProject_Add_Step(external_embree after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/embree/bin/embree4_d.dll
${HARVEST_TARGET}/embree/bin/embree4_d.dll
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/embree/lib/embree4_d.lib
${HARVEST_TARGET}/embree/lib/embree4_d.lib
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/embree/lib/embree4_sycl_d.lib
${HARVEST_TARGET}/embree/lib/embree4_sycl_d.lib
DEPENDEES install
)
endif()
else()
harvest(external_embree embree/include embree/include "*.h")
harvest(external_embree embree/lib embree/lib "*.a")
harvest_rpath_lib(external_embree embree/lib embree/lib "*${SHAREDLIBEXT}*")
endif()

View File

@@ -0,0 +1,146 @@
# SPDX-FileCopyrightText: 2017-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
# Note the utility apps may use png/tiff/gif system libraries, but the
# library itself does not depend on them, so should give no problems.
set(EMBREE_CMAKE_FLAGS ${DEFAULT_CMAKE_FLAGS})
set(EMBREE_EXTRA_ARGS
-DEMBREE_ISPC_SUPPORT=OFF
-DEMBREE_TUTORIALS=OFF
-DEMBREE_STATIC_LIB=OFF
-DEMBREE_RAY_MASK=ON
-DEMBREE_FILTER_FUNCTION=ON
-DEMBREE_BACKFACE_CULLING=OFF
-DEMBREE_BACKFACE_CULLING_CURVES=ON
-DEMBREE_BACKFACE_CULLING_SPHERES=ON
-DEMBREE_NO_SPLASH=ON
-DEMBREE_TASKING_SYSTEM=TBB
-DEMBREE_TBB_ROOT=${LIBDIR}/tbb
-DTBB_ROOT=${LIBDIR}/tbb
-DCOMPILER_HAS_SYCL_SUPPORT=OFF
)
set(EMBREE_EXTRA_ARGS
${EMBREE_EXTRA_ARGS}
-DCMAKE_DEBUG_POSTFIX=_d
)
set(EMBREE_LLVM_INSTALL_PATH ${LIBDIR}/llvm)
set(EMBREE_CMAKE_FLAGS
-DCMAKE_BUILD_TYPE=${BUILD_MODE}
)
set(EMBREE_EXTRA_ARGS
-DCMAKE_CXX_COMPILER=${EMBREE_LLVM_INSTALL_PATH}/bin/clang-cl.exe
-DCMAKE_C_COMPILER=${EMBREE_LLVM_INSTALL_PATH}/bin/clang-cl.exe
-DCMAKE_C_FLAGS_INIT="--target=arm64-pc-windows-msvc"
-DCMAKE_CXX_FLAGS_INIT="--target=arm64-pc-windows-msvc"
-DCMAKE_SHARED_LINKER_FLAGS=-L"${LIBDIR}/llvm/lib"
${EMBREE_EXTRA_ARGS}
)
# We want the VS2019 tools for embree, as they are stable.
# We cannot use VS2022 easily, unless we specify an older (unsupported) toolset such as 17.35,
# as the newer toolsets mandate LLVM 16, which we cannot use currently,
# due to lack of support in OSL and ISPC.
set(EMBREE_VCTOOLS_REQUIRED_VERSION 14.29)
# Extract the list of installed tools that match the required version from the
# `VCToolsInstallDir` env var
file(TO_CMAKE_PATH $ENV{VCToolsInstallDir} EMBREE_VCTOOLSINSTALLDIR_PATH)
cmake_path(GET EMBREE_VCTOOLSINSTALLDIR_PATH PARENT_PATH EMBREE_VCTOOLSDIR_PATH)
file(GLOB EMBREE_INSTALLED_VCTOOLS RELATIVE ${EMBREE_VCTOOLSDIR_PATH} ${EMBREE_VCTOOLSDIR_PATH}/${EMBREE_VCTOOLS_REQUIRED_VERSION}*)
# Check that at least one of the installed tool versions
# (there may be different subversions) is present.
if(NOT EMBREE_INSTALLED_VCTOOLS)
message(FATAL_ERROR
"When building for Windows ARM64 platforms, embree requires VC Tools "
"${EMBREE_VCTOOLS_REQUIRED_VERSION} to be installed alongside the current version."
)
endif()
# Get the last item in the list (latest, when list is sorted)
list(SORT EMBREE_INSTALLED_VCTOOLS)
list(GET EMBREE_INSTALLED_VCTOOLS -1 EMBREE_VCTOOLS_VERSION)
# Configure our in file and temporarily store it in the build dir
# (with modified extension so nothing else picks it up)
# This feels icky, but we haven't called `ExternalProject_Add` yet,
# so the embree dir does not yet exist.
configure_file(
${PATCH_DIR}/embree_Directory.Build.Props.in
${BUILD_DIR}/embree_Directory.Build.Props_temp
)
# Update the patch command to copy the configured build props file in
set(EMBREE_PATCH_COMMAND
COMMAND ${CMAKE_COMMAND} -E copy
${BUILD_DIR}/embree_Directory.Build.Props_temp
${BUILD_DIR}/embree/src/external_embree-build/Directory.Build.Props &&
${PATCH_CMD} -p 1 -d ${BUILD_DIR}/embree/src/external_embree < ${PATCH_DIR}/embree.diff
)
# This all only works if we use the VS generator (with `clangcl` toolset), so switch back to that
# Note: there is literally no way to get ninja to use a different toolset other than manually
# overwriting every env var, or calling a nested `vcvarsall`, both of which are *messy*.
set(EMBREE_GENERATOR ${CMAKE_GENERATOR})
set(EMBREE_GENERATOR_TOOLSET ClangCL)
if(TBB_STATIC_LIBRARY)
set(EMBREE_EXTRA_ARGS
${EMBREE_EXTRA_ARGS}
-DEMBREE_TBB_COMPONENT=tbb_static
)
endif()
ExternalProject_Add(external_embree
URL file://${PACKAGE_DIR}/${EMBREE_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${EMBREE_HASH_TYPE}=${EMBREE_HASH}
CMAKE_GENERATOR ${EMBREE_GENERATOR}
CMAKE_GENERATOR_TOOLSET ${EMBREE_GENERATOR_TOOLSET}
PREFIX ${BUILD_DIR}/embree
PATCH_COMMAND ${EMBREE_PATCH_COMMAND}
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/embree ${EMBREE_CMAKE_FLAGS} ${EMBREE_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/embree
)
add_dependencies(
external_embree
external_tbb
external_llvm
)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_embree after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/embree/include
${HARVEST_TARGET}/embree/include
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/embree/lib
${HARVEST_TARGET}/embree/lib
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/embree/share
${HARVEST_TARGET}/embree/share
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/embree/bin/embree4.dll
${HARVEST_TARGET}/embree/bin/embree4.dll
DEPENDEES install
)
else()
ExternalProject_Add_Step(external_embree after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/embree/bin/embree4_d.dll
${HARVEST_TARGET}/embree/bin/embree4_d.dll
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/embree/lib/embree4_d.lib
${HARVEST_TARGET}/embree/lib/embree4_d.lib
DEPENDEES install
)
endif()

View File

@@ -0,0 +1,24 @@
# SPDX-FileCopyrightText: 2022-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(EMHASH_EXTRA_ARGS
-DWITH_BENCHMARKS=OFF
)
ExternalProject_Add(external_emhash
URL file://${PACKAGE_DIR}/${EMHASH_FILE}
URL_HASH ${EMHASH_HASH_TYPE}=${EMHASH_HASH}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
PREFIX ${BUILD_DIR}/emhash
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PATCH_COMMAND ${PATCH_CMD} -p 1 -d
${BUILD_DIR}/emhash/src/external_emhash <
${PATCH_DIR}/emhash.diff
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/emhash
${DEFAULT_CMAKE_FLAGS}
${EMHASH_EXTRA_ARGS}
)

View File

@@ -0,0 +1,63 @@
# SPDX-FileCopyrightText: 2022-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(WIN32)
set(EPOXY_LIB_TYPE shared)
else()
set(EPOXY_LIB_TYPE static)
endif()
set(EPOXY_EXTRA_OPTIONS
-Dtests=false
)
ExternalProject_Add(external_epoxy
URL file://${PACKAGE_DIR}/${EPOXY_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${EPOXY_HASH_TYPE}=${EPOXY_HASH}
PREFIX ${BUILD_DIR}/epoxy
PATCH_COMMAND ${PATCH_CMD} -p 1 -N -d
${BUILD_DIR}/epoxy/src/external_epoxy/ <
${PATCH_DIR}/epoxy.diff
CONFIGURE_COMMAND ${CONFIGURE_ENV} &&
${MESON} setup
--prefix ${LIBDIR}/epoxy
--libdir lib
--default-library ${EPOXY_LIB_TYPE}
${MESON_BUILD_TYPE}
${EPOXY_EXTRA_OPTIONS}
${BUILD_DIR}/epoxy/src/external_epoxy-build
${BUILD_DIR}/epoxy/src/external_epoxy
BUILD_COMMAND ninja
INSTALL_COMMAND ninja install
)
add_dependencies(
external_epoxy
# Needed for `MESON`.
external_python_site_packages
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_epoxy after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/epoxy/include
${HARVEST_TARGET}/epoxy/include
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/epoxy/bin/epoxy-0.dll
${HARVEST_TARGET}/epoxy/bin/epoxy-0.dll
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/epoxy/lib/epoxy.lib
${HARVEST_TARGET}/epoxy/lib/epoxy.lib
DEPENDEES install
)
endif()
else()
harvest(external_epoxy epoxy/include epoxy/include "*.h")
harvest(external_epoxy epoxy/lib epoxy/lib "*.a")
endif()

View File

@@ -0,0 +1,27 @@
# SPDX-FileCopyrightText: 2002-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(EXPAT_EXTRA_ARGS
-DEXPAT_BUILD_DOCS=OFF
-DEXPAT_BUILD_EXAMPLES=OFF
-DEXPAT_BUILD_TESTS=OFF
-DEXPAT_BUILD_TOOLS=OFF
-DEXPAT_SHARED_LIBS=OFF
)
ExternalProject_Add(external_expat
URL file://${PACKAGE_DIR}/${EXPAT_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${EXPAT_HASH_TYPE}=${EXPAT_HASH}
PREFIX ${BUILD_DIR}/expat
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/expat
${DEFAULT_CMAKE_FLAGS}
${EXPAT_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/expat
SOURCE_SUBDIR expat
)

View File

@@ -0,0 +1,100 @@
# SPDX-FileCopyrightText: 2002-2025 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(WIN32)
if(BLENDER_PLATFORM_WINDOWS_ARM)
set(FFI_TARGET_HOST aarch64-w64-mingw32)
set(FFI_PYTHON_TARGET_ARCH arm64)
set(FFI_MSVC_SH_FLAGS -marm64)
else()
set(FFI_TARGET_HOST x86_64-w64-mingw32)
set(FFI_PYTHON_TARGET_ARCH amd64)
set(FFI_MSVC_SH_FLAGS -m64)
endif()
set(CONFIGURE_ENV_FFI ${CONFIGURE_ENV} &&
set CC=${BUILD_DIR}/ffi/src/external_ffi/msvcc.sh ${FFI_MSVC_SH_FLAGS} &&
set CXX=${BUILD_DIR}/ffi/src/external_ffi/msvcc.sh ${FFI_MSVC_SH_FLAGS} &&
set LD=link &&
set CPP=cl -nologo -EP &&
set CXXCPP=cl -nologo -EP &&
set CPPFLAGS=-DFFI_BUILDING_DLL
)
# `make install` just refuses to do its job without erroring
# out, "fine ,then don't". We'll pick the files we need ourselves
# from the build folder in the after install cmake step.
set(FFI_INSTALL echo .)
set(FFI_EXTRA_ARGS
--disable-docs
--disable-multi-os-directory
--enable-shared=yes
--enable-static=no
--build=${FFI_TARGET_HOST}
--host=${FFI_TARGET_HOST}
)
else()
set(CONFIGURE_ENV_FFI ${CONFIGURE_ENV})
set(FFI_INSTALL make install)
set(FFI_EXTRA_ARGS
--disable-multi-os-directory
--enable-shared=no
--enable-static=yes
--with-pic
)
endif()
ExternalProject_Add(external_ffi
URL file://${PACKAGE_DIR}/${FFI_FILE}
URL_HASH ${FFI_HASH_TYPE}=${FFI_HASH}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
PREFIX ${BUILD_DIR}/ffi
CONFIGURE_COMMAND ${CONFIGURE_ENV_FFI} &&
cd ${BUILD_DIR}/ffi/src/external_ffi/ &&
${CONFIGURE_COMMAND} --prefix=${LIBDIR}/ffi
--libdir=${LIBDIR}/ffi/lib/
${FFI_EXTRA_ARGS}
BUILD_COMMAND ${CONFIGURE_ENV_FFI} &&
cd ${BUILD_DIR}/ffi/src/external_ffi/ &&
make -j${MAKE_THREADS}
INSTALL_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/ffi/src/external_ffi/ &&
${FFI_INSTALL}
INSTALL_DIR ${LIBDIR}/ffi
)
if(UNIX AND NOT APPLE)
ExternalProject_Add_Step(external_ffi after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/ffi/lib/libffi.a
${LIBDIR}/ffi/lib/libffi_pic.a
DEPENDEES install
)
elseif(WIN32)
# Since there are currently no other consumers of ffi
# we populate the libdir in the way python wants to see
# it so we don't have to do this later on in the build
ExternalProject_Add_Step(external_ffi after_install
COMMAND ${CMAKE_COMMAND} -E copy
${BUILD_DIR}/ffi/src/external_ffi/${FFI_TARGET_HOST}/.libs/libffi-8.dll
${LIBDIR}/ffi/${FFI_PYTHON_TARGET_ARCH}/libffi-8.dll
COMMAND ${CMAKE_COMMAND} -E copy
${BUILD_DIR}/ffi/src/external_ffi/${FFI_TARGET_HOST}/.libs/libffi-8.lib
${LIBDIR}/ffi/${FFI_PYTHON_TARGET_ARCH}/libffi-8.lib
COMMAND ${CMAKE_COMMAND} -E copy
${BUILD_DIR}/ffi/src/external_ffi/${FFI_TARGET_HOST}/include/ffi.h
${LIBDIR}/ffi/${FFI_PYTHON_TARGET_ARCH}/include/ffi.h
COMMAND ${CMAKE_COMMAND} -E copy
${BUILD_DIR}/ffi/src/external_ffi/${FFI_TARGET_HOST}/include/ffitarget.h
${LIBDIR}/ffi/${FFI_PYTHON_TARGET_ARCH}/include/ffitarget.h
COMMAND ${CMAKE_COMMAND} -E copy
${BUILD_DIR}/ffi/src/external_ffi/${FFI_TARGET_HOST}/fficonfig.h
${LIBDIR}/ffi/${FFI_PYTHON_TARGET_ARCH}/include/fficonfig.h
DEPENDEES install
)
endif()

View File

@@ -0,0 +1,283 @@
# SPDX-FileCopyrightText: 2017-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(NOT WIN32)
set(temp_LIBDIR ${LIBDIR})
set(LIBDIR_FLAG "-L")
else()
set(temp_LIBDIR ${msys2_LIBDIR})
set(LIBDIR_FLAG "-LIBPATH:")
endif()
set(FFMPEG_CFLAGS "\
-I${temp_LIBDIR}/lame/include \
-I${temp_LIBDIR}/openjpeg/include/ \
-I${temp_LIBDIR}/ogg/include \
-I${temp_LIBDIR}/vorbis/include \
-I${temp_LIBDIR}/theora/include \
-I${temp_LIBDIR}/opus/include \
-I${temp_LIBDIR}/vpx/include \
-I${temp_LIBDIR}/x264/include \
-I${temp_LIBDIR}/zlib/include \
-I${temp_LIBDIR}/aom/include \
-I${temp_LIBDIR}/x265/include"
)
set(FFMPEG_LDFLAGS "\
${LIBDIR_FLAG}${temp_LIBDIR}/lame/lib \
${LIBDIR_FLAG}${temp_LIBDIR}/openjpeg/lib \
${LIBDIR_FLAG}${temp_LIBDIR}/ogg/lib \
${LIBDIR_FLAG}${temp_LIBDIR}/vorbis/lib \
${LIBDIR_FLAG}${temp_LIBDIR}/theora/lib \
${LIBDIR_FLAG}${temp_LIBDIR}/opus/lib \
${LIBDIR_FLAG}${temp_LIBDIR}/vpx/lib \
${LIBDIR_FLAG}${temp_LIBDIR}/x264/lib \
${LIBDIR_FLAG}${temp_LIBDIR}/x265/lib \
${LIBDIR_FLAG}${temp_LIBDIR}/zlib/lib \
${LIBDIR_FLAG}${temp_LIBDIR}/aom/lib"
)
set(FFMPEG_PATCH_FILE "")
if(WIN32)
set(FFMPEG_CFLAGS "\
${FFMPEG_CFLAGS} \
-I${temp_LIBDIR}/openjpeg_msvc/include/openjpeg-2.5 \
-I${temp_LIBDIR}/opus/include/opus \
-DOPJ_STATIC \
-MD \
-UHAVE_UNISTD_H"
)
set(FFMPEG_LDFLAGS "\
${FFMPEG_LDFLAGS} \
${LIBDIR_FLAG}${temp_LIBDIR}/openjpeg_msvc/lib \
ucrt.lib"
)
# As we now use MSVC on windows, pkgconfig is not really a viable option for many packages
# so this patch removes those checks in favour of looking for the libs directly.
set(FFMPEG_PATCH_FILE ${PATCH_DIR}/ffmpeg_windows.diff)
else()
# OpenJpeg is compiled with pthread support on Linux, which is all fine and is what we
# want for maximum runtime performance, but due to static nature of that library we
# need to force ffmpeg to link against pthread, otherwise test program used by autoconf
# will fail. This patch does that in a way that is compatible with multiple distributions.
set(FFMPEG_PATCH_FILE ${PATCH_DIR}/ffmpeg.diff)
endif()
set(FFMPEG_EXTRA_FLAGS
--pkg-config-flags=--static
--extra-cflags=${FFMPEG_CFLAGS}
--extra-ldflags=${FFMPEG_LDFLAGS}
)
set(FFMPEG_ENV "")
if(NOT WIN32)
set(FFMPEG_ENV "PKG_CONFIG_PATH=\
${temp_LIBDIR}/openjpeg/lib/pkgconfig:\
${temp_LIBDIR}/x264/lib/pkgconfig:\
${temp_LIBDIR}/vorbis/lib/pkgconfig:\
${temp_LIBDIR}/ogg/lib/pkgconfig:\
${temp_LIBDIR}/vpx/lib/pkgconfig:\
${temp_LIBDIR}/theora/lib/pkgconfig:\
${temp_LIBDIR}/openjpeg/lib/pkgconfig:\
${temp_LIBDIR}/opus/lib/pkgconfig:\
${temp_LIBDIR}/aom/lib/pkgconfig:\
${temp_LIBDIR}/x265/lib/pkgconfig:"
)
endif()
unset(temp_LIBDIR)
if(WIN32)
set(FFMPEG_EXTRA_FLAGS
${FFMPEG_EXTRA_FLAGS}
--disable-static
--enable-shared
--enable-w32threads
--disable-pthreads
--enable-libopenjpeg
--disable-mediafoundation
--toolchain=msvc
--target-os=win32
)
if(BLENDER_PLATFORM_ARM)
set(FFMPEG_EXTRA_FLAGS
${FFMPEG_EXTRA_FLAGS}
--arch=aarch64
"--as=${DOWNLOAD_DIR}/msys2/msys64/usr/bin/gas-preprocessor.pl -arch aarch64 -as-type armasm -- armasm64 -nologo"
--cc=${LIBDIR}/llvm/bin/clang-cl.exe
--cxx=${LIBDIR}/llvm/bin/clang-cl.exe
--windres=${LIBDIR}/llvm/bin/llvm-rc.exe
--nm=${LIBDIR}/llvm/bin/llvm-nm.exe
--ar='${LIBDIR}/llvm/bin/llvm-ar.exe'
--ranlib=${LIBDIR}/llvm/bin/llvm-ranlib.exe
)
else()
set(FFMPEG_EXTRA_FLAGS
${FFMPEG_EXTRA_FLAGS}
--disable-inline-asm
--arch=x86_64
)
endif()
set(FFMPEG_CONFIGURE_COMMAND ${CONFIGURE_ENV_MSVC})
else()
set(FFMPEG_EXTRA_FLAGS
${FFMPEG_EXTRA_FLAGS}
--enable-static
--disable-shared
--enable-libopenjpeg
)
set(FFMPEG_CONFIGURE_COMMAND ${CONFIGURE_ENV_NO_PERL})
endif()
if(APPLE)
set(FFMPEG_EXTRA_FLAGS
${FFMPEG_EXTRA_FLAGS}
--target-os=darwin
--x86asmexe=${LIBDIR}/nasm/bin/nasm
)
elseif(UNIX)
set(FFMPEG_EXTRA_FLAGS
${FFMPEG_EXTRA_FLAGS}
--x86asmexe=${LIBDIR}/nasm/bin/nasm
)
endif()
ExternalProject_Add(external_ffmpeg
URL file://${PACKAGE_DIR}/${FFMPEG_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${FFMPEG_HASH_TYPE}=${FFMPEG_HASH}
PATCH_COMMAND ${PATCH_CMD} --verbose -p 1 -N -d
${BUILD_DIR}/ffmpeg/src/external_ffmpeg <
${FFMPEG_PATCH_FILE}
PREFIX ${BUILD_DIR}/ffmpeg
CONFIGURE_COMMAND ${FFMPEG_CONFIGURE_COMMAND} &&
cd ${BUILD_DIR}/ffmpeg/src/external_ffmpeg/ &&
${FFMPEG_ENV} ${CONFIGURE_COMMAND_NO_TARGET} ${FFMPEG_EXTRA_FLAGS}
--disable-lzma
--disable-vdpau
--disable-bzlib
--disable-libgsm
--disable-libspeex
--enable-libvpx
--enable-libopus
--prefix=${LIBDIR}/ffmpeg
--enable-libtheora
--enable-libvorbis
--enable-zlib
--enable-stripping
--enable-runtime-cpudetect
--disable-vaapi
--disable-nonfree
--enable-gpl
--enable-libmp3lame
--disable-librtmp
--enable-libx264
--enable-libx265
--enable-libaom
--disable-libopencore-amrnb
--disable-libopencore-amrwb
--disable-libdc1394
--disable-version3
--disable-debug
--enable-optimizations
--enable-ffplay
--disable-openssl
--disable-securetransport
--disable-indev=avfoundation
--disable-indev=qtkit
--disable-sdl2
--disable-gnutls
--disable-videotoolbox
--disable-libxcb
--disable-xlib
--disable-audiotoolbox
--disable-cuvid
--disable-nvenc
--disable-indev=jack
--disable-indev=alsa
--disable-outdev=alsa
--disable-sndio
--disable-doc
BUILD_COMMAND ${FFMPEG_CONFIGURE_COMMAND} &&
cd ${BUILD_DIR}/ffmpeg/src/external_ffmpeg/ &&
make -j${MAKE_THREADS}
INSTALL_COMMAND ${FFMPEG_CONFIGURE_COMMAND} &&
cd ${BUILD_DIR}/ffmpeg/src/external_ffmpeg/ &&
make install
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/ffmpeg
${DEFAULT_CMAKE_FLAGS}
INSTALL_DIR ${LIBDIR}/ffmpeg
)
if(MSVC)
set_target_properties(external_ffmpeg PROPERTIES FOLDER Mingw)
endif()
add_dependencies(
external_ffmpeg
external_zlib
external_x264
external_x265
external_opus
external_vpx
external_theora
external_vorbis
external_ogg
external_lame
external_aom
external_sndfile
external_flac
)
if(WIN32)
add_dependencies(
external_ffmpeg
external_zlib
external_openjpeg_msvc
)
if(BLENDER_PLATFORM_ARM)
add_dependencies(
external_ffmpeg
external_llvm
)
endif()
endif()
if(UNIX)
add_dependencies(
external_ffmpeg
external_nasm
external_openjpeg
)
endif()
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_ffmpeg after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/ffmpeg/include
${HARVEST_TARGET}/ffmpeg/include
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/ffmpeg/bin
${HARVEST_TARGET}/ffmpeg/lib
DEPENDEES install
)
endif()
else()
harvest(external_ffmpeg ffmpeg/include ffmpeg/include "*.h")
harvest(external_ffmpeg ffmpeg/lib ffmpeg/lib "*.a")
endif()

View File

@@ -0,0 +1,93 @@
# SPDX-FileCopyrightText: 2017-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(FFTW_EXTRA_ARGS "")
function(fftw_build FFTW_POSTFIX)
if(WIN32)
if("${FFTW_POSTFIX}" STREQUAL "float")
set(FFTW_EXTRA_ARGS -DENABLE_FLOAT=ON)
endif()
ExternalProject_Add(external_fftw3_${FFTW_POSTFIX}
URL file://${PACKAGE_DIR}/${FFTW_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${FFTW_HASH_TYPE}=${FFTW_HASH}
PREFIX ${BUILD_DIR}/fftw3
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/fftw3
-DENABLE_THREADS=ON
-DWITH_COMBINED_THREADS=OFF
-DBUILD_SHARED_LIBS=OFF
-DBUILD_TESTS=OFF
${FFTW_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/fftw3
)
else()
set(FFTW_EXTRA_ARGS --enable-static --enable-threads)
set(FFTW_INSTALL install)
ExternalProject_Add(external_fftw3_${FFTW_POSTFIX}
URL file://${PACKAGE_DIR}/${FFTW_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${FFTW_HASH_TYPE}=${FFTW_HASH}
PREFIX ${BUILD_DIR}/fftw3
CONFIGURE_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/fftw3/src/external_fftw3_${FFTW_POSTFIX}/ &&
${CONFIGURE_COMMAND} ${FFTW_EXTRA_ARGS} ${ARGN} --prefix=${mingw_LIBDIR}/fftw3
BUILD_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/fftw3/src/external_fftw3_${FFTW_POSTFIX}/ &&
make -j${MAKE_THREADS}
INSTALL_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/fftw3/src/external_fftw3_${FFTW_POSTFIX}/ &&
make ${FFTW_INSTALL}
INSTALL_DIR ${LIBDIR}/fftw3
)
endif()
endfunction()
fftw_build(double)
fftw_build(float --enable-float)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_fftw3_double after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/fftw3/lib/fftw3.lib
${HARVEST_TARGET}/fftw3/lib/fftw3.lib
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/fftw3/include/fftw3.h
${HARVEST_TARGET}/fftw3/include/fftw3.h
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/fftw3/lib/fftw3_threads.lib
${HARVEST_TARGET}/fftw3/lib/fftw3_threads.lib
DEPENDEES install
)
ExternalProject_Add_Step(external_fftw3_float after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/fftw3/lib/fftw3f.lib
${HARVEST_TARGET}/fftw3/lib/fftw3f.lib
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/fftw3/lib/fftw3f_threads.lib
${HARVEST_TARGET}/fftw3/lib/fftw3f_threads.lib
DEPENDEES install
)
endif()
endif()
add_custom_target(external_fftw)
add_dependencies(
external_fftw
external_fftw3_double
external_fftw3_float)
if(NOT WIN32)
harvest(external_fftw3 fftw3/include fftw3/include "*.h")
harvest(external_fftw3 fftw3/lib fftw3/lib "*.a")
endif()

View File

@@ -0,0 +1,62 @@
# SPDX-FileCopyrightText: 2002-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(NOT WIN32)
ExternalProject_Add(external_flac
URL file://${PACKAGE_DIR}/${FLAC_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${FLAC_HASH_TYPE}=${FLAC_HASH}
PREFIX ${BUILD_DIR}/flac
CONFIGURE_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/flac/src/external_flac/ &&
${CONFIGURE_COMMAND} --prefix=${LIBDIR}/flac --disable-shared --enable-static
BUILD_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/flac/src/external_flac/ &&
make -j${MAKE_THREADS}
INSTALL_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/flac/src/external_flac/ &&
make install
INSTALL_DIR ${LIBDIR}/flac
)
harvest(external_flac flac/lib sndfile/lib "libFLAC.a")
else()
set(FLAC_CXX_FLAGS "-DFLAC__NO_DLL=ON")
set(FLAC_EXTRA_ARGS
-DCMAKE_POLICY_DEFAULT_CMP0074=NEW
-DBUILD_PROGRAMS=OFF
-DBUILD_EXAMPLES=OFF
-DBUILD_DOCS=OFF
-DBUILD_TESTING=OFF
-DINSTALL_MANPAGES=OFF
-DOgg_ROOT=${LIBDIR}/ogg
-DBUILD_SHARED_LIBS=OFF
-DCMAKE_C_FLAGS_RELEASE=${FLAC_CXX_FLAGS}
)
ExternalProject_Add(external_flac
URL file://${PACKAGE_DIR}/${FLAC_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${FLAC_HASH_TYPE}=${FLAC_HASH}
PREFIX ${BUILD_DIR}/flac
CMAKE_GENERATOR "Ninja"
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/flac
${DEFAULT_CMAKE_FLAGS}
${FLAC_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/flac
)
add_dependencies(
external_flac
external_ogg
)
endif()

View File

@@ -0,0 +1,38 @@
# SPDX-FileCopyrightText: 2002-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
# Generated configuration files use an old `aclocal-1.15` on RockyLinux8.
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
set(_autoconf_cmd_optional ./autogen.sh &&)
else()
set(_autoconf_cmd_optional "")
endif()
ExternalProject_Add(external_flex
URL file://${PACKAGE_DIR}/${FLEX_FILE}
URL_HASH ${FLEX_HASH_TYPE}=${FLEX_HASH}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
PREFIX ${BUILD_DIR}/flex
PATCH_COMMAND ${PATCH_CMD} --verbose -p1 -d
${BUILD_DIR}/flex/src/external_flex <
${PATCH_DIR}/flex_gcc14.diff
CONFIGURE_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/flex/src/external_flex/ &&
${_autoconf_cmd_optional} ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/flex
BUILD_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/flex/src/external_flex/ &&
make -j${MAKE_THREADS}
INSTALL_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/flex/src/external_flex/ &&
make install
INSTALL_DIR ${LIBDIR}/flex
)
unset(_autoconf_cmd_optional)

View File

@@ -0,0 +1,27 @@
# SPDX-FileCopyrightText: 2002-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(FLEXBISON_EXTRA_ARGS "")
ExternalProject_Add(external_flexbison
URL file://${PACKAGE_DIR}/${FLEXBISON_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${FLEXBISON_HASH_TYPE}=${FLEXBISON_HASH}
PREFIX ${BUILD_DIR}/flexbison
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/flexbison
${DEFAULT_CMAKE_FLAGS}
${FLEXBISON_EXTRA_ARGS}
CONFIGURE_COMMAND echo .
BUILD_COMMAND echo .
INSTALL_COMMAND
COMMAND ${CMAKE_COMMAND} -E copy_directory
${BUILD_DIR}/flexbison/src/external_flexbison/
${LIBDIR}/flexbison/
INSTALL_DIR ${LIBDIR}/flexbison
)

View File

@@ -0,0 +1,37 @@
# SPDX-FileCopyrightText: 2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(FMT_EXTRA_ARGS
-DFMT_TEST=OFF
-DFMT_DOC=OFF
)
ExternalProject_Add(external_fmt
URL file://${PACKAGE_DIR}/${FMT_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${FMT_HASH_TYPE}=${FMT_HASH}
PREFIX ${BUILD_DIR}/fmt
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/fmt
${DEFAULT_CMAKE_FLAGS}
${FMT_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/fmt
)
if(WIN32)
ExternalProject_Add_Step(external_fmt after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/fmt/
${HARVEST_TARGET}/fmt
DEPENDEES install
)
else()
harvest(external_fmt fmt/include fmt/include "*.h")
harvest(external_fmt fmt/lib/cmake/fmt fmt/lib/cmake/fmt "*.cmake")
harvest(external_fmt fmt/lib fmt/lib "*.a")
endif()

View File

@@ -0,0 +1,65 @@
# SPDX-FileCopyrightText: 2002-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(WIN32)
set(FREETYPE_LIB_PREFIX "")
else()
set(FREETYPE_LIB_PREFIX "lib")
endif()
set(FREETYPE_EXTRA_ARGS
-DCMAKE_RELEASE_POSTFIX:STRING=2ST
-DCMAKE_DEBUG_POSTFIX:STRING=2ST_d
-DFT_DISABLE_BZIP2=ON
-DFT_DISABLE_HARFBUZZ=ON
-DFT_DISABLE_PNG=ON
-DFT_REQUIRE_BROTLI=ON
-DFT_REQUIRE_ZLIB=ON
-DBROTLIDEC_INCLUDE_DIRS=${LIBDIR}/brotli/include
-DBROTLIDEC_LIBRARIES=${LIBDIR}/brotli/lib/${FREETYPE_LIB_PREFIX}brotlicommon-static${LIBEXT}
-DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY}
-DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include
)
ExternalProject_Add(external_freetype
URL file://${PACKAGE_DIR}/${FREETYPE_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${FREETYPE_HASH_TYPE}=${FREETYPE_HASH}
PREFIX ${BUILD_DIR}/freetype
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/freetype
${DEFAULT_CMAKE_FLAGS}
${FREETYPE_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/freetype
)
add_dependencies(
external_freetype
external_brotli
external_zlib
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_freetype after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/freetype
${HARVEST_TARGET}/freetype
# `harfbuzz` *NEEDS* to find `freetype.lib` and will not be convinced to take
# alternative names so just give it what it wants.
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/freetype/lib/freetype2st.lib
${LIBDIR}/freetype/lib/freetype.lib
DEPENDEES install
)
endif()
else()
harvest(external_freetype freetype/include freetype/include "*.h")
harvest(external_freetype freetype/lib/libfreetype2ST.a freetype/lib/libfreetype.a)
endif()

View File

@@ -0,0 +1,59 @@
# SPDX-FileCopyrightText: 2022-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(WIN32)
set(FRIBIDI_CONFIGURE_ENV ${CONFIGURE_ENV_MSVC})
else()
set(FRIBIDI_CONFIGURE_ENV ${CONFIGURE_ENV})
endif()
set(FRIBIDI_EXTRA_OPTIONS
-Ddocs=false
)
ExternalProject_Add(external_fribidi
URL file://${PACKAGE_DIR}/${FRIBIDI_FILE}
URL_HASH ${FRIBIDI_HASH_TYPE}=${FRIBIDI_HASH}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
PREFIX ${BUILD_DIR}/fribidi
CONFIGURE_COMMAND ${FRIBIDI_CONFIGURE_ENV} &&
${MESON} setup
--prefix ${LIBDIR}/fribidi
--libdir lib
--default-library static
${MESON_BUILD_TYPE}
${FRIBIDI_EXTRA_OPTIONS}
${BUILD_DIR}/fribidi/src/external_fribidi-build
${BUILD_DIR}/fribidi/src/external_fribidi
BUILD_COMMAND ninja
INSTALL_COMMAND ninja install
INSTALL_DIR ${LIBDIR}/fribidi
)
add_dependencies(
external_fribidi
external_python
# Needed for `MESON`.
external_python_site_packages
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_fribidi after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/fribidi/include
${HARVEST_TARGET}/fribidi/include
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/fribidi/lib/libfribidi.a
${HARVEST_TARGET}/fribidi/lib/libfribidi.lib
DEPENDEES install
)
endif()
else()
harvest(external_fribidi fribidi/include fribidi/include "*.h")
harvest(external_fribidi fribidi/lib fribidi/lib "*.a")
endif()

View File

@@ -0,0 +1,20 @@
# SPDX-FileCopyrightText: 2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(GMMLIB_EXTRA_ARGS
)
ExternalProject_Add(external_gmmlib
URL file://${PACKAGE_DIR}/${GMMLIB_FILE}
URL_HASH ${GMMLIB_HASH_TYPE}=${GMMLIB_HASH}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
PREFIX ${BUILD_DIR}/gmmlib
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/gmmlib
${DEFAULT_CMAKE_FLAGS}
${GMMLIB_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/gmmlib
)

View File

@@ -0,0 +1,164 @@
# SPDX-FileCopyrightText: 2020-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(GMP_EXTRA_ARGS -enable-cxx)
if(WIN32)
cmake_to_msys_path("${BUILD_DIR}/gmp/src/external_gmp/compile" compilescript_path)
set(arlib_joint_path "ar-lib lib.exe")
set(GMP_CFLAGS "-nologo -W3 -utf-8 -MP -MD -Z7 -Ob0 -Od -Xcompiler -RTC1 -DWIN32 -D_WINDOWS")
set(GMP_CC_CXX "${compilescript_path} cl")
set(GMP_NM "dumpbin.exe -symbols -headers")
set(GMP_CONFIGURE_ENV
set AR=${arlib_joint_path} &&
set NM=${GMP_NM} &&
${CONFIGURE_ENV_NO_PERL} &&
set CC=${GMP_CC_CXX} &&
set CXX=${GMP_CC_CXX} &&
set CFLAGS=${GMP_CFLAGS} &&
set AS=:
)
set(GMP_OPTIONS
--disable-static
--enable-shared
--enable-cxx
--verbose
gmp_cv_check_libm_for_build=no
ac_cv_prog_LEX=:
ac_cv_prog_YACC=:
ac_cv_prog_ac_ct_STRIP=:
ac_cv_prog_RANLIB=:
lt_cv_to_host_file_cmd=func_convert_file_noop
lt_cv_to_tool_file_cmd=func_convert_file_noop
)
if(BLENDER_PLATFORM_ARM)
set(GMP_OPTIONS
${GMP_OPTIONS}
--enable-assembly=no
--build=aarch64-pc-mingw32
)
else()
set(GMP_OPTIONS
${GMP_OPTIONS}
--enable-assembly=no
--build=x86_64-pc-mingw32
ac_cv_func_memset=yes
gmp_cv_asm_w32=.word
)
endif()
else()
set(GMP_CONFIGURE_ENV ${CONFIGURE_ENV_NO_PERL})
set(GMP_OPTIONS --enable-static --disable-shared )
endif()
if(UNIX)
if(NOT (APPLE AND BLENDER_PLATFORM_ARM))
set(GMP_OPTIONS ${GMP_OPTIONS} --with-pic)
endif()
if(NOT (APPLE OR BLENDER_PLATFORM_ARM))
set(GMP_OPTIONS ${GMP_OPTIONS} --enable-fat)
endif()
endif()
# Boolean crashes with Arm assembly, see #103423.
if(BLENDER_PLATFORM_ARM)
set(GMP_OPTIONS
${GMP_OPTIONS}
--disable-assembly
)
endif()
ExternalProject_Add(external_gmp
URL file://${PACKAGE_DIR}/${GMP_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${GMP_HASH_TYPE}=${GMP_HASH}
PREFIX ${BUILD_DIR}/gmp
PATCH_COMMAND ${PATCH_CMD} -p 1 -d
${BUILD_DIR}/gmp/src/external_gmp <
${PATCH_DIR}/gmp.diff
CONFIGURE_COMMAND ${GMP_CONFIGURE_ENV} &&
cd ${BUILD_DIR}/gmp/src/external_gmp/ &&
${CONFIGURE_COMMAND} --prefix=${LIBDIR}/gmp ${GMP_OPTIONS} ${GMP_EXTRA_ARGS}
BUILD_COMMAND ${CONFIGURE_ENV_NO_PERL} &&
cd ${BUILD_DIR}/gmp/src/external_gmp/ &&
make -j${MAKE_THREADS}
INSTALL_COMMAND ${CONFIGURE_ENV_NO_PERL} &&
cd ${BUILD_DIR}/gmp/src/external_gmp/ &&
make install
INSTALL_DIR ${LIBDIR}/gmp
)
if(BUILD_MODE STREQUAL Release AND WIN32)
ExternalProject_Add_Step(external_gmp after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/gmp/bin/gmp-10.dll
${HARVEST_TARGET}/gmp/lib/gmp-10.dll
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/gmp/lib/gmp.dll.lib
${HARVEST_TARGET}/gmp/lib/gmp.dll.lib
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/gmp/include
${HARVEST_TARGET}/gmp/include
DEPENDEES install
)
endif()
if(WIN32)
# gmpxx is somewhat special, it builds on top of the C style gmp library but exposes C++ bindings
# given the C++ ABI between MSVC and mingw is not compatible, we need to build the bindings
# with MSVC, while GMP can only be built with mingw.
ExternalProject_Add(external_gmpxx
URL file://${PACKAGE_DIR}/${GMP_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${GMP_HASH_TYPE}=${GMP_HASH}
PREFIX ${BUILD_DIR}/gmpxx
# Intentionally empty, COMMAND is used but it must follow a PATCH_COMMAND.
PATCH_COMMAND
COMMAND
${CMAKE_COMMAND} -E copy
${PATCH_DIR}/cmakelists_gmpxx.txt
${BUILD_DIR}/gmpxx/src/external_gmpxx/CMakeLists.txt &&
${CMAKE_COMMAND} -E copy
${PATCH_DIR}/config_gmpxx.h
${BUILD_DIR}/gmpxx/src/external_gmpxx/config.h
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/gmpxx
${DEFAULT_CMAKE_FLAGS}
-DGMP_LIBRARY=${BUILD_DIR}/gmp/src/external_gmp/.libs/gmp.dll.lib
-DGMP_INCLUDE_DIR=${BUILD_DIR}/gmp/src/external_gmp
-DCMAKE_DEBUG_POSTFIX=_d
INSTALL_DIR ${LIBDIR}/gmpxx
)
add_dependencies(
external_gmpxx
external_gmp
)
ExternalProject_Add_Step(external_gmpxx after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/gmpxx/
${HARVEST_TARGET}/gmp
DEPENDEES install
)
else()
harvest(external_gmp gmp/include gmp/include "*.h")
harvest(external_gmp gmp/lib gmp/lib "*.a")
endif()

View File

@@ -0,0 +1,85 @@
# Remarks: NotAffected / FalsePositive / Mitigated
ignore:
# [NotAffected] issue in convert command line tool not used by blender
- vulnerability: CVE-2016-9675
# [NotAffected] issue in pygresql not used by blender
- vulnerability: CVE-2009-2940
# [NotAffected] issue in odoo not used by blender
- vulnerability: CVE-2020-29396
# [NotAffected] issue in django not used by blender
- vulnerability: CVE-2021-32052
# [NotAffected] already fixed in libexpat version used
- vulnerability: CVE-2009-3720
# [NotAffected] not used in blender and not considered a bug upstream
- vulnerability: CVE-2023-36632
# [NotAffected] not used in blender
- vulnerability: CVE-2023-27043
# [FalsePositive] fixed in 3.11.10 upstream fix gh-121285
- vulnerability: CVE-2024-6232
# [FalsePositive] fixed in 3.11.10 upstream fix gh-123067
- vulnerability: CVE-2024-7592
# [NotAffected] not a blender specific issue and pip is inherently affected by malicious packages
- vulnerability: CVE-2018-20225
# [NotAffected] issue in mutt not used by blender
- vulnerability: CVE-2009-1390
# [NotAffected] issue in mutt not used by blender
- vulnerability: CVE-2009-3765
# [NotAffected] issue in mutt not used by blender
- vulnerability: CVE-2009-3766
# [NotAffected] issue in ldap not used by blender
- vulnerability: CVE-2009-3767
# [NotAffected] issue in apache not used by blender
- vulnerability: CVE-2019-0190
# [NotAffected] issue in tiff command line tool not used by blender
- vulnerability: CVE-2022-2056
# [NotAffected] issue in tiff command line tool not used by blender
- vulnerability: CVE-2022-2057
# [NotAffected] issue in tiff command line tool not used by blender
- vulnerability: CVE-2022-2058
# [NotAffected] issue in tiff command line tool not used by blender
- vulnerability: CVE-2022-2519
# [NotAffected] issue in tiff command line tool not used by blender
- vulnerability: CVE-2022-2520
# [NotAffected] issue in tiff command line tool not used by blender
- vulnerability: CVE-2022-2521
# [NotAffected] issue in tiff command line tool not used by blender
- vulnerability: CVE-2022-2953
# [NotAffected] issue in tiff command line tool not used by blender
- vulnerability: CVE-2022-34526
# [NotAffected] issue in tiff command line tool not used by blender
- vulnerability: CVE-2022-3570
# [NotAffected] issue in tiff command line tool not used by blender
- vulnerability: CVE-2022-3597
# [NotAffected] issue in tiff command line tool not used by blender
- vulnerability: CVE-2022-3598
# [NotAffected] issue in tiff command line tool not used by blender
- vulnerability: CVE-2022-3599
# [NotAffected] issue in tiff command line tool not used by blender
- vulnerability: CVE-2022-3626
# [NotAffected] issue in tiff command line tool not used by blender
- vulnerability: CVE-2022-3627
# [NotAffected] issue in tiff command line tool not used by blender
- vulnerability: CVE-2023-40745
# [NotAffected] issue in tiff command line tool not used by blender
- vulnerability: CVE-2023-41175
# [NotAffected] not affecting blender and not considered a security issue upstream
- vulnerability: CVE-2016-3709
# [NotAffected] not affecting blender and not considered a security issue upstream
- vulnerability: CVE-2023-39615
# [NotAffected] already fixed in the libxml2 version used
- vulnerability: CVE-2020-7595
# [Mitigated] patched using upstream commit 561a9c25298e
- vulnerability: CVE-2021-43618
# [NotAffected] only affects SQLITE_ENABLE_STAT4 compile option not used by blender or python
- vulnerability: CVE-2022-35737
# [NotAffected] does not affect blender use of sqlite
- vulnerability: CVE-2023-7104
# [NotAffected] does not affect blender use of sqlite
- vulnerability: CVE-2024-0232
# [NotAffected] only affects minizip not used by blender
- vulnerability: CVE-2023-45853
# [Mitigated] patched using upstream PR 1045
- vulnerability: CVE-2024-50612
# [NotAffected] all mp3 handling in blender goes through ffmpeg
- vulnerability: CVE-2024-50613

View File

@@ -0,0 +1,82 @@
# SPDX-FileCopyrightText: 2022-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(WIN32)
set(HARFBUZZ_CONFIGURE_ENV ${CONFIGURE_ENV_MSVC})
set(HARFBUZZ_PKG_ENV FREETYPE_DIR=${LIBDIR}/freetype)
else()
set(HARFBUZZ_CONFIGURE_ENV ${CONFIGURE_ENV})
set(HARFBUZZ_PKG_ENV "PKG_CONFIG_PATH=\
${LIBDIR}/freetype/lib/pkgconfig:\
${LIBDIR}/brotli/lib/pkgconfig:\
${LIBDIR}/lib/python3.10/pkgconfig:\
$PKG_CONFIG_PATH"
)
endif()
set(HARFBUZZ_EXTRA_OPTIONS
-Dtests=disabled
-Dfreetype=enabled
-Dglib=disabled
-Dgobject=disabled
# Only used for command line utilities,
# disable as this would add an additional & unnecessary build-dependency.
-Dcairo=disabled
)
ExternalProject_Add(external_harfbuzz
URL file://${PACKAGE_DIR}/${HARFBUZZ_FILE}
URL_HASH ${HARFBUZZ_HASH_TYPE}=${HARFBUZZ_HASH}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
PREFIX ${BUILD_DIR}/harfbuzz
CONFIGURE_COMMAND ${HARFBUZZ_CONFIGURE_ENV} &&
${CMAKE_COMMAND} -E env ${HARFBUZZ_PKG_ENV} ${MESON} setup
--prefix ${LIBDIR}/harfbuzz
--libdir lib
--default-library static
${MESON_BUILD_TYPE}
${HARFBUZZ_EXTRA_OPTIONS}
${BUILD_DIR}/harfbuzz/src/external_harfbuzz-build
${BUILD_DIR}/harfbuzz/src/external_harfbuzz
BUILD_COMMAND ninja
INSTALL_COMMAND ninja install
INSTALL_DIR ${LIBDIR}/harfbuzz
)
add_dependencies(
external_harfbuzz
external_python
external_freetype
# Needed for `MESON`.
external_python_site_packages
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_harfbuzz after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/harfbuzz/include
${HARVEST_TARGET}/harfbuzz/include
# We do not use the subset API currently, so copying only the main library will suffice for now
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/harfbuzz/lib/libharfbuzz.a
${HARVEST_TARGET}/harfbuzz/lib/libharfbuzz.lib
DEPENDEES install
)
endif()
if(BUILD_MODE STREQUAL Debug)
ExternalProject_Add_Step(external_harfbuzz after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/harfbuzz/lib/libharfbuzz.a
${HARVEST_TARGET}/harfbuzz/lib/libharfbuzz_d.lib
DEPENDEES install
)
endif()
else()
harvest(external_harfbuzz harfbuzz/include harfbuzz/include "*.h")
harvest(external_harfbuzz harfbuzz/lib harfbuzz/lib "*.a")
endif()

View File

@@ -0,0 +1,40 @@
# SPDX-FileCopyrightText: 2017-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(HARU_EXTRA_ARGS
-DBUILD_SHARED_LIBS=OFF
-DLIBHPDF_EXAMPLES=OFF
-DLIBHPDF_ENABLE_EXCEPTIONS=ON
)
ExternalProject_Add(external_haru
URL file://${PACKAGE_DIR}/${HARU_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${HARU_HASH_TYPE}=${HARU_HASH}
PREFIX ${BUILD_DIR}/haru
CMAKE_ARGS
-DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_INSTALL_PREFIX=${LIBDIR}/haru
${DEFAULT_CMAKE_FLAGS} ${HARU_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/haru
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_haru after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/haru/include
${HARVEST_TARGET}/haru/include
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/haru/lib/hpdf.lib
${HARVEST_TARGET}/haru/lib/hpdf.lib
DEPENDEES install
)
endif()
else()
harvest(external_haru haru/include haru/include "*.h")
harvest(external_haru haru/lib haru/lib "*.a")
endif()

View File

@@ -0,0 +1,129 @@
# SPDX-FileCopyrightText: 2017-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
########################################################################
# Copy all generated files to the proper structure as blender prefers
########################################################################
if(NOT DEFINED HARVEST_TARGET)
set(HARVEST_TARGET ${CMAKE_CURRENT_SOURCE_DIR}/Harvest)
endif()
message(STATUS "HARVEST_TARGET = ${HARVEST_TARGET}")
if(WIN32)
if(BUILD_MODE STREQUAL Release)
add_custom_target(Harvest_Release_Results
COMMAND # JPEG rename lib-file + copy include.
${CMAKE_COMMAND} -E copy
${LIBDIR}/jpeg/lib/jpeg-static.lib
${HARVEST_TARGET}/jpeg/lib/libjpeg.lib &&
${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/jpeg/include/
${HARVEST_TARGET}/jpeg/include/ &&
# PNG.
${CMAKE_COMMAND} -E copy
${LIBDIR}/png/lib/libpng16_static.lib
${HARVEST_TARGET}/png/lib/libpng.lib &&
${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/png/include/
${HARVEST_TARGET}/png/include/
)
endif()
else()
function(harvest project from to)
set(pattern "")
foreach(f ${ARGN})
set(pattern ${f})
endforeach()
if(pattern STREQUAL "")
get_filename_component(dirpath ${to} DIRECTORY)
get_filename_component(filename ${to} NAME)
install(
FILES ${LIBDIR}/${from}
DESTINATION ${HARVEST_TARGET}/${dirpath}
RENAME ${filename}
)
else()
install(
DIRECTORY ${LIBDIR}/${from}/
DESTINATION ${HARVEST_TARGET}/${to}
USE_SOURCE_PERMISSIONS
FILES_MATCHING PATTERN ${pattern}
PATTERN "pkgconfig" EXCLUDE
PATTERN "cmake" EXCLUDE
PATTERN "__pycache__" EXCLUDE
PATTERN "tests" EXCLUDE
PATTERN "meson*" EXCLUDE
)
endif()
endfunction()
# Set rpath on shared libraries to $ORIGIN since all will be installed in the same
# lib folder, and remove any absolute paths.
#
# Ideally this would be done as part of the Blender build since it makes assumptions
# about where the files will be installed. However it would add patchelf as a new
# dependency for building.
#
# Also removes versioned symlinks, which give errors with macOS notarization.
if(APPLE)
set(set_rpath_cmd python3 ${CMAKE_CURRENT_SOURCE_DIR}/utils/set_rpath.py @loader_path)
else()
set(set_rpath_cmd patchelf --set-rpath $ORIGIN)
endif()
function(harvest_rpath_lib project from to pattern)
harvest(project ${from} ${to} ${pattern})
install(CODE "\
cmake_policy(SET CMP0009 NEW)\n
file(GLOB_RECURSE shared_libs ${HARVEST_TARGET}/${to}/${pattern}) \n
foreach(f \${shared_libs}) \n
if((NOT IS_SYMLINK \${f}) OR APPLE)\n
execute_process(COMMAND ${set_rpath_cmd} \${f}) \n
endif()\n
endforeach()")
endfunction()
# Set rpath on utility binaries assuming they are run from their install location.
function(harvest_rpath_bin project from to pattern)
harvest(project ${from} ${to} ${pattern})
install(CODE "\
file(GLOB_RECURSE shared_libs ${HARVEST_TARGET}/${to}/${pattern}) \n
foreach(f \${shared_libs}) \n
execute_process(COMMAND ${set_rpath_cmd}/../lib \${f}) \n
endforeach()")
endfunction()
# Set rpath on Python module to point to the shared libraries folder in the Blender
# installation.
function(harvest_rpath_python project from to pattern)
harvest(project ${from} ${to} ${pattern})
install(CODE "\
file(GLOB_RECURSE shared_libs ${HARVEST_TARGET}/${to}/${pattern}\.so*) \n
foreach(f \${shared_libs}) \n
if(IS_SYMLINK \${f})\n
if(APPLE)\n
file(REMOVE_RECURSE \${f})
endif()\n
else()\n
get_filename_component(f_dir \${f} DIRECTORY) \n
file(RELATIVE_PATH relative_dir \${f_dir} ${HARVEST_TARGET}) \n
execute_process(COMMAND ${set_rpath_cmd}/\${relative_dir}../lib \${f}) \n
endif()\n
endforeach()")
endfunction()
# Strip all shared/static libraries in the HARVEST_TARGET location.
function(harvest_strip_all_libraries)
install(CODE "execute_process(COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/utils/strip_libraries.py ${HARVEST_TARGET})")
endfunction()
endif()

View File

@@ -0,0 +1,69 @@
# SPDX-FileCopyrightText: 2017-2024 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(NOT HIP_FOUND)
message(STATUS "Missing HIP compiler, skipping HIPRT build")
return()
endif()
# Note the utility apps may use png/tiff/gif system libraries, but the
# library itself does not depend on them, so should give no problems.
get_filename_component(_hip_bin_path ${HIP_HIPCC_EXECUTABLE} DIRECTORY)
get_filename_component(_hip_path ${_hip_bin_path} DIRECTORY)
set(HIPRT_EXTRA_ARGS
-DCMAKE_BUILD_TYPE=Release
-DHIP_PATH=${_hip_path}
-DBITCODE=OFF
-DGENERATE_BAKE_KERNEL=OFF
-DNO_UNITTEST=ON
-DBAKE_COMPILED_KERNEL=ON
-DPRECOMPILE=ON
-DPYTHON_EXECUTABLE=${PYTHON_BINARY}
-DFORCE_DISABLE_CUDA=ON
)
set(HIPRT_SOURCE_DIR ${BUILD_DIR}/hiprt/src/external_hiprt)
set(HIPRT_BUILD_DIR ${BUILD_DIR}/hiprt/src/external_hiprt-build)
ExternalProject_Add(external_hiprt
URL file://${PACKAGE_DIR}/${HIPRT_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${HIPRT_HASH_TYPE}=${HIPRT_HASH}
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PREFIX ${BUILD_DIR}/hiprt
PATCH_COMMAND
${PATCH_CMD} -p 1 -d
${BUILD_DIR}/hiprt/src/external_hiprt <
${PATCH_DIR}/hiprt_rocm7_support.diff
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/hiprt
${HIPRT_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/hiprt
)
add_dependencies(
external_hiprt
external_python
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_hiprt after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/hiprt
${HARVEST_TARGET}/hiprt
DEPENDEES install
)
endif()
else()
harvest(external_hiprt hiprt/include hiprt/include "*.h")
harvest(external_hiprt hiprt/bin hiprt/lib "*${SHAREDLIBEXT}*")
harvest(external_hiprt hiprt/bin hiprt/lib "*.hipfb")
endif()

View File

@@ -0,0 +1,41 @@
# SPDX-FileCopyrightText: 2002-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(ICONV_EXTRA_ARGS "")
ExternalProject_Add(external_iconv
URL file://${PACKAGE_DIR}/${ICONV_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${ICONV_HASH_TYPE}=${ICONV_HASH}
PREFIX ${BUILD_DIR}/iconv
CONFIGURE_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/iconv/src/external_iconv/ &&
${CONFIGURE_COMMAND} --enable-static --prefix=${mingw_LIBDIR}/iconv
BUILD_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/iconv/src/external_iconv/ &&
make -j${MAKE_THREADS}
INSTALL_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/iconv/src/external_iconv/ &&
make install
INSTALL_DIR ${LIBDIR}/iconv
)
if(MSVC)
set_target_properties(external_iconv PROPERTIES FOLDER Mingw)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_iconv after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/iconv/lib/libiconv.a
${HARVEST_TARGET}/iconv/lib/iconv.lib
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/iconv/include/iconv.h
${HARVEST_TARGET}/iconv/include/iconv.h
DEPENDEES install
)
endif()
endif()

View File

@@ -0,0 +1,145 @@
# SPDX-FileCopyrightText: 2022-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
unpack_only(igc_vcintrinsics)
unpack_only(igc_spirv_headers)
unpack_only(igc_spirv_tools)
#
# igc_opencl_clang contains patches that need to be applied
# to external_igc_llvm and igc_spirv_translator, we unpack
# igc_opencl_clang first, then have the patch stages of
# external_igc_llvm and igc_spirv_translator apply them.
#
ExternalProject_Add(external_igc_opencl_clang
URL file://${PACKAGE_DIR}/${IGC_OPENCL_CLANG_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${IGC_OPENCL_CLANG_HASH_TYPE}=${IGC_OPENCL_CLANG_HASH}
PREFIX ${BUILD_DIR}/igc_opencl_clang
CONFIGURE_COMMAND echo .
BUILD_COMMAND echo .
INSTALL_COMMAND echo .
)
set(IGC_OPENCL_CLANG_PATCH_DIR ${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/patches)
set(IGC_LLVM_SOURCE_DIR ${BUILD_DIR}/igc_llvm/src/external_igc_llvm)
set(IGC_SPIRV_TRANSLATOR_SOURCE_DIR ${BUILD_DIR}/igc_spirv_translator/src/external_igc_spirv_translator)
ExternalProject_Add(external_igc_llvm
URL file://${PACKAGE_DIR}/${IGC_LLVM_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${IGC_LLVM_HASH_TYPE}=${IGC_LLVM_HASH}
PREFIX ${BUILD_DIR}/igc_llvm
CONFIGURE_COMMAND echo .
BUILD_COMMAND echo .
INSTALL_COMMAND echo .
PATCH_COMMAND
${PATCH_CMD} -p 1 -d
${IGC_LLVM_SOURCE_DIR} <
${IGC_OPENCL_CLANG_PATCH_DIR}/clang/0001-Remove-__IMAGE_SUPPORT__-macro-for-SPIR.patch &&
${PATCH_CMD} -p 1 -d
${IGC_LLVM_SOURCE_DIR} <
${IGC_OPENCL_CLANG_PATCH_DIR}/clang/0002-Remove-wrong-check-of-__opencl_c_images-feature-macr.patch &&
${PATCH_CMD} -p 1 -d
${IGC_LLVM_SOURCE_DIR} <
${IGC_OPENCL_CLANG_PATCH_DIR}/clang/0003-Fix-checking-mechanism-for-read_write-Image-type.patch &&
${PATCH_CMD} -p 1 -d
${IGC_LLVM_SOURCE_DIR} <
${IGC_OPENCL_CLANG_PATCH_DIR}/clang/0004-OpenCL-Allow-undefining-header-only-macros.patch &&
${PATCH_CMD} -p 1 -d
${IGC_LLVM_SOURCE_DIR} <
${IGC_OPENCL_CLANG_PATCH_DIR}/clang/0005-Enable-use-of-GNU-C-extension.patch
)
add_dependencies(
external_igc_llvm
external_igc_opencl_clang
)
ExternalProject_Add(external_igc_spirv_translator
URL file://${PACKAGE_DIR}/${IGC_SPIRV_TRANSLATOR_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${IGC_SPIRV_TRANSLATOR_HASH_TYPE}=${IGC_SPIRV_TRANSLATOR_HASH}
PREFIX ${BUILD_DIR}/igc_spirv_translator
CONFIGURE_COMMAND echo .
BUILD_COMMAND echo .
INSTALL_COMMAND echo .
)
add_dependencies(
external_igc_spirv_translator
external_igc_opencl_clang
)
if(WIN32)
set(IGC_GENERATOR "Ninja")
set(IGC_TARGET Windows64)
else()
set(IGC_GENERATOR "Unix Makefiles")
set(IGC_TARGET Linux64)
endif()
string(REPLACE "-DCMAKE_CXX_STANDARD=20" " " IGC_CMAKE_FLAGS "${DEFAULT_CMAKE_FLAGS}")
set(IGC_EXTRA_ARGS
-DIGC_OPTION__ARCHITECTURE_TARGET=${IGC_TARGET}
-DIGC_OPTION__ARCHITECTURE_HOST=${IGC_TARGET}
)
list(APPEND IGC_EXTRA_ARGS
-DFLEX_EXECUTABLE=${LIBDIR}/flex/bin/flex
-DFLEX_INCLUDE_DIR=${LIBDIR}/flex/include
)
ExternalProject_Add(external_igc
URL file://${PACKAGE_DIR}/${IGC_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${IGC_HASH_TYPE}=${IGC_HASH}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/igc
${IGC_CMAKE_FLAGS}
${IGC_EXTRA_ARGS}
# IGC is pretty set in its way where sub projects ought to live, for some it offers
# hooks to supply alternative folders, other are just hard-coded with no way to configure
# we symlink everything here, since it's less work than trying to convince the cmake
# scripts to accept alternative locations.
PATCH_COMMAND
${CMAKE_COMMAND} -E create_symlink
${BUILD_DIR}/igc_llvm/src/external_igc_llvm/
${BUILD_DIR}/igc/src/llvm-project &&
${CMAKE_COMMAND} -E create_symlink
${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/
${BUILD_DIR}/igc/src/llvm-project/llvm/projects/opencl-clang &&
${CMAKE_COMMAND} -E create_symlink
${BUILD_DIR}/igc_spirv_translator/src/external_igc_spirv_translator/
${BUILD_DIR}/igc/src/llvm-project/llvm/projects/llvm-spirv &&
${CMAKE_COMMAND} -E create_symlink
${BUILD_DIR}/igc_spirv_tools/src/external_igc_spirv_tools/
${BUILD_DIR}/igc/src/SPIRV-Tools &&
${CMAKE_COMMAND} -E create_symlink
${BUILD_DIR}/igc_spirv_headers/src/external_igc_spirv_headers/
${BUILD_DIR}/igc/src/SPIRV-Headers &&
${CMAKE_COMMAND} -E create_symlink
${BUILD_DIR}/igc_vcintrinsics/src/external_igc_vcintrinsics/
${BUILD_DIR}/igc/src/vc-intrinsics
PREFIX ${BUILD_DIR}/igc
INSTALL_DIR ${LIBDIR}/igc
INSTALL_COMMAND ${CMAKE_COMMAND} --install . --strip
CMAKE_GENERATOR ${IGC_GENERATOR}
)
add_dependencies(
external_igc
external_igc_vcintrinsics
external_igc_llvm
external_igc_opencl_clang
external_igc_spirv_headers
external_igc_spirv_tools
external_igc_spirv_translator
external_flex
)
harvest(external_igc igc dpcpp/lib/igc "*")

View File

@@ -0,0 +1,44 @@
# SPDX-FileCopyrightText: 2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(IMATH_EXTRA_ARGS
-DBUILD_SHARED_LIBS=ON
-DBUILD_TESTING=OFF
-DIMATH_LIB_SUFFIX=${OPENEXR_VERSION_BUILD_POSTFIX}
)
ExternalProject_Add(external_imath
URL file://${PACKAGE_DIR}/${IMATH_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${IMATH_HASH_TYPE}=${IMATH_HASH}
PREFIX ${BUILD_DIR}/imath
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/imath
${DEFAULT_CMAKE_FLAGS}
${IMATH_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/imath
)
if(WIN32)
ExternalProject_Add_Step(external_imath after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/imath/lib
${HARVEST_TARGET}/imath/lib
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/imath/include
${HARVEST_TARGET}/imath/include
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/imath/bin/imath${OPENEXR_VERSION_POSTFIX}.dll
${HARVEST_TARGET}/imath/bin/imath${OPENEXR_VERSION_POSTFIX}.dll
DEPENDEES install
)
else()
harvest(external_imath imath/include imath/include "*.h")
harvest(external_imath imath/lib/cmake/Imath imath/lib/cmake/Imath "*.cmake")
harvest_rpath_lib(external_imath imath/lib imath/lib "*${SHAREDLIBEXT}*")
endif()

View File

@@ -0,0 +1,99 @@
# SPDX-FileCopyrightText: 2020-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(WIN32)
set(ISPC_EXTRA_ARGS_WIN
-DFLEX_EXECUTABLE=${LIBDIR}/flexbison/win_flex.exe
-DBISON_EXECUTABLE=${LIBDIR}/flexbison/win_bison.exe
-DM4_EXECUTABLE=${DOWNLOAD_DIR}/msys2/msys64/usr/bin/m4.exe
-DPython3_FIND_REGISTRY=NEVER
)
if(BLENDER_PLATFORM_ARM)
set(ISPC_EXTRA_ARGS_WIN ${ISPC_EXTRA_ARGS_WIN} -DARM_ENABLED=On)
else()
set(ISPC_EXTRA_ARGS_WIN ${ISPC_EXTRA_ARGS_WIN} -DARM_ENABLED=Off)
endif()
elseif(APPLE)
# Use bison and flex installed via Homebrew.
# The ones that come with Xcode toolset are too old.
if(BLENDER_PLATFORM_ARM)
set(ISPC_EXTRA_ARGS_APPLE
-DBISON_EXECUTABLE=/opt/homebrew/opt/bison/bin/bison
-DFLEX_EXECUTABLE=/opt/homebrew/opt/flex/bin/flex
-DARM_ENABLED=On
)
else()
set(ISPC_EXTRA_ARGS_APPLE
-DBISON_EXECUTABLE=/usr/local/opt/bison/bin/bison
-DFLEX_EXECUTABLE=/usr/local/opt/flex/bin/flex
-DARM_ENABLED=Off
)
endif()
elseif(UNIX)
set(ISPC_EXTRA_ARGS_UNIX
-DCMAKE_C_COMPILER=gcc
-DCMAKE_CXX_COMPILER=g++
-DARM_ENABLED=${BLENDER_PLATFORM_ARM}
-DFLEX_EXECUTABLE=${LIBDIR}/flex/bin/flex
)
endif()
set(ISPC_EXTRA_ARGS
-DISPC_INCLUDE_EXAMPLES=Off
-DISPC_INCLUDE_TESTS=Off
-DISPC_INCLUDE_RT=Off
-DISPC_INCLUDE_UTILS=Off
-DISPC_LIBRARY=Off
-DLLVM_CONFIG_EXECUTABLE=${LIBDIR}/llvm/bin/llvm-config
-DLLVM_DIR=${LIBDIR}/llvm/lib/cmake/llvm/
-DCLANG_EXECUTABLE=${LIBDIR}/llvm/bin/clang
-DCLANGPP_EXECUTABLE=${LIBDIR}/llvm/bin/clang++
-DISPC_INCLUDE_TESTS=Off
-DPython3_ROOT_DIR=${LIBDIR}/python/
-DPython3_EXECUTABLE=${PYTHON_BINARY}
-DGIT_BINARY=GIT_BINARY-NOTFOUND # Prevent any git checks
${ISPC_EXTRA_ARGS_WIN}
${ISPC_EXTRA_ARGS_APPLE}
${ISPC_EXTRA_ARGS_UNIX}
)
ExternalProject_Add(external_ispc
URL file://${PACKAGE_DIR}/${ISPC_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${ISPC_HASH_TYPE}=${ISPC_HASH}
PREFIX ${BUILD_DIR}/ispc
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PATCH_COMMAND ${PATCH_CMD} -p 1 -d
${BUILD_DIR}/ispc/src/external_ispc <
${PATCH_DIR}/ispc.diff
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/ispc
-Wno-dev
${DEFAULT_CMAKE_FLAGS}
${ISPC_EXTRA_ARGS}
${BUILD_DIR}/ispc/src/external_ispc
INSTALL_DIR ${LIBDIR}/ispc
)
add_dependencies(
external_ispc
external_llvm
external_python
)
if(WIN32)
add_dependencies(
external_ispc
external_flexbison
)
elseif(UNIX AND NOT APPLE)
add_dependencies(
external_ispc
external_flex
)
endif()

View File

@@ -0,0 +1,67 @@
# SPDX-FileCopyrightText: 2017-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(WIN32)
# CMAKE for MS-Windows.
set(JPEG_EXTRA_ARGS
-DNASM=${NASM_PATH}
-DWITH_JPEG8=ON
-DCMAKE_DEBUG_POSTFIX=d
-DWITH_CRT_DLL=On
-DENABLE_SHARED=OFF
-DENABLE_STATIC=ON
)
ExternalProject_Add(external_jpeg
URL file://${PACKAGE_DIR}/${JPEG_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${JPEG_HASH_TYPE}=${JPEG_HASH}
PREFIX ${BUILD_DIR}/jpeg
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/jpeg ${DEFAULT_CMAKE_FLAGS} ${JPEG_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/jpeg
)
if(BUILD_MODE STREQUAL Release)
set(JPEG_LIBRARY jpeg-static${LIBEXT})
else()
set(JPEG_LIBRARY jpeg-staticd${LIBEXT})
endif()
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_jpeg after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/jpeg/lib/${JPEG_LIBRARY}
${LIBDIR}/jpeg/lib/jpeg${LIBEXT}
DEPENDEES install
)
endif()
else()
# CMAKE for UNIX.
set(JPEG_EXTRA_ARGS
-DWITH_JPEG8=ON
-DENABLE_STATIC=ON
-DENABLE_SHARED=OFF
-DCMAKE_INSTALL_LIBDIR=${LIBDIR}/jpeg/lib)
ExternalProject_Add(external_jpeg
URL file://${PACKAGE_DIR}/${JPEG_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${JPEG_HASH_TYPE}=${JPEG_HASH}
PREFIX ${BUILD_DIR}/jpeg
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/jpeg
${DEFAULT_CMAKE_FLAGS}
${JPEG_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/jpeg
)
set(JPEG_LIBRARY libjpeg${LIBEXT})
harvest(external_jpeg jpeg/include jpeg/include "*.h")
harvest(external_jpeg jpeg/lib jpeg/lib "libjpeg.a")
endif()

View File

@@ -0,0 +1,71 @@
# SPDX-FileCopyrightText: 2017-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(LAME_EXTRA_ARGS "")
if(MSVC)
if(BLENDER_PLATFORM_ARM)
set(LAME_ARCH ARM64)
else()
set(LAME_ARCH Win64)
endif()
set(LAME_CONFIGURE echo .)
set(LAME_BUILD
cd ${BUILD_DIR}/lame/src/external_lame/ &&
nmake /F MakeFile.msvc MSVCVER=${LAME_ARCH} all
)
set(LAME_INSTALL
cd ${BUILD_DIR}/lame/src/external_lame/ &&
${CMAKE_COMMAND} -E copy
include/lame.h
${LIBDIR}/lame/include/lame/lame.h &&
${CMAKE_COMMAND} -E copy
output/libmp3lame-static.lib
${LIBDIR}/lame/lib/mp3lame.lib
)
else()
set(LAME_CONFIGURE
${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/lame/src/external_lame/ &&
${CONFIGURE_COMMAND}
--prefix=${LIBDIR}/lame
--disable-shared
--enable-static
${LAME_EXTRA_ARGS}
--enable-export=full
--with-fileio=sndfile
--without-vorbis
--with-pic
--disable-mp3x
--disable-mp3rtp
--disable-gtktest
--disable-frontend)
set(LAME_BUILD ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/lame/src/external_lame/ &&
make -j${MAKE_THREADS}
)
set(LAME_INSTALL ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/lame/src/external_lame/ &&
make install
)
endif()
ExternalProject_Add(external_lame
URL file://${PACKAGE_DIR}/${LAME_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${LAME_HASH_TYPE}=${LAME_HASH}
PREFIX ${BUILD_DIR}/lame
PATCH_COMMAND COMMAND ${PATCH_CMD} -p 1 -d
${BUILD_DIR}/lame/src/external_lame <
${PATCH_DIR}/lame.diff
CONFIGURE_COMMAND ${LAME_CONFIGURE}
BUILD_COMMAND ${LAME_BUILD}
INSTALL_COMMAND ${LAME_INSTALL}
INSTALL_DIR ${LIBDIR}/lame
)
if(NOT WIN32)
harvest(external_lame lame/lib ffmpeg/lib "*.a")
endif()

View File

@@ -0,0 +1,39 @@
# SPDX-FileCopyrightText: 2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(LEVEL_ZERO_EXTRA_ARGS
)
ExternalProject_Add(external_level-zero
URL file://${PACKAGE_DIR}/${LEVEL_ZERO_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${LEVEL_ZERO_HASH_TYPE}=${LEVEL_ZERO_HASH}
PREFIX ${BUILD_DIR}/level-zero
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PATCH_COMMAND ${PATCH_CMD} -p 1 -d
${BUILD_DIR}/level-zero/src/external_level-zero <
${PATCH_DIR}/level-zero.diff
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/level-zero
${DEFAULT_CMAKE_FLAGS}
${LEVEL_ZERO_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/level-zero
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_level-zero after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/level-zero
${HARVEST_TARGET}/level-zero
DEPENDEES install
)
endif()
else()
harvest(external_level-zero level-zero/include/level_zero level-zero/include/level_zero "*.h")
harvest(external_level-zero level-zero/lib level-zero/lib "*${SHAREDLIBEXT}*")
endif()

View File

@@ -0,0 +1,56 @@
# SPDX-FileCopyrightText: 2025 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(WIN32)
set(AOM_LIBRARY aom${LIBEXT})
else()
set(AOM_LIBRARY libaom${LIBEXT})
endif()
set(LIBHEIF_EXTRA_ARGS
-DWITH_AOM_ENCODER=ON
-DWITH_AOM_DECODER=ON
-DWITH_DAV1D=OFF
-DWITH_FFMPEG_DECODER=OFF
-DWITH_JPEG_ENCODER=OFF
-DWITH_KVAZAAR=OFF
-DWITH_LIBDE265=OFF
-DWITH_LIBSHARPYUV=OFF
-DWITH_OPENJPH_ENCODER=OFF
-DWITH_OpenH264_DECODER=OFF
-DWITH_OpenJPEG_DECODER=OFF
-DWITH_OpenJPEG_ENCODER=OFF
-DWITH_RAV1E=OFF
-DWITH_SvtEnc=OFF
-DWITH_UVG266=OFF
-DWITH_VVDEC=OFF
-DWITH_VVENC=OFF
-DWITH_X265=OFF
-DAOM_INCLUDE_DIR=${LIBDIR}/aom/include/
-DAOM_LIBRARY=${LIBDIR}/aom/lib/${AOM_LIBRARY}
-DBUILD_SHARED_LIBS=OFF
-DWITH_EXAMPLES=OFF
-DWITH_EXAMPLE_HEIF_VIEW=OFF
-DWITH_GDK_PIXBUF=OFF
)
ExternalProject_Add(external_libheif
URL file://${PACKAGE_DIR}/${LIBHEIF_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${LIBHEIF_HASH_TYPE}=${LIBHEIF_HASH}
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PREFIX ${BUILD_DIR}/libheif
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/libheif
${DEFAULT_CMAKE_FLAGS}
${LIBHEIF_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/libheif
)
add_dependencies(
external_libheif
external_aom
)

View File

@@ -0,0 +1,140 @@
# SPDX-FileCopyrightText: 2012-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(BLENDER_PLATFORM_ARM)
set(LLVM_TARGETS AArch64$<SEMICOLON>ARM)
else()
set(LLVM_TARGETS X86)
endif()
if(UNIX AND NOT APPLE)
# Make llvm's pkgconfig pick up our static xml2 lib
set(LLVM_XML2_ARGS
-DCMAKE_PREFIX_PATH=${LIBDIR}/xml2
)
endif()
if(APPLE)
set(LLVM_XML2_ARGS
-DLIBXML2_LIBRARY=${LIBDIR}/xml2/lib/libxml2.a
-DLIBXML2_INCLUDE_DIR=${LIBDIR}/xml2/include/libxml2
)
set(LLVM_EXTRA_PROJECTS ^^clang-tools-extra)
set(BUILD_CLANG_TOOLS ON)
elseif(MSVC AND BLENDER_PLATFORM_ARM)
set(LLVM_EXTRA_PROJECTS ^^lld)
else()
# NVIDIA PTX for OSL on Windows and Linux.
set(LLVM_TARGETS ${LLVM_TARGETS}$<SEMICOLON>NVPTX)
endif()
set(LLVM_EXTRA_ARGS
-DLLVM_USE_CRT_RELEASE=MD
-DLLVM_USE_CRT_DEBUG=MDd
-DLLVM_INCLUDE_TESTS=OFF
-DLLVM_TARGETS_TO_BUILD=${LLVM_TARGETS}
-DLLVM_INCLUDE_EXAMPLES=OFF
-DLLVM_ENABLE_TERMINFO=OFF
-DLLVM_BUILD_LLVM_C_DYLIB=OFF
-DLLVM_ENABLE_UNWIND_TABLES=OFF
-DLLVM_ENABLE_ZSTD=OFF
-DLLVM_ENABLE_ZLIB=OFF
-DLLVM_ENABLE_PROJECTS=clang${LLVM_EXTRA_PROJECTS}
-DPython3_ROOT_DIR=${LIBDIR}/python/
-DPython3_EXECUTABLE=${PYTHON_BINARY}
# Enforce C++17 as C++20 cause compilation errors on recent GCC versions, fixed in LLVM 22.1.0 (GH PR #169772), remove on upgrade.
-DCMAKE_CXX_STANDARD=17
${LLVM_XML2_ARGS}
)
set(LLVM_PATCH
${PATCH_CMD} -p 1 -d
${BUILD_DIR}/llvm/src/external_llvm <
${PATCH_DIR}/llvm.diff
)
if(WIN32)
set(LLVM_GENERATOR "Ninja")
list(APPEND LLVM_EXTRA_ARGS -DPython3_FIND_REGISTRY=NEVER)
set(LLVM_PATCH
${LLVM_PATCH} &&
${PATCH_CMD} -p 1 -d
${BUILD_DIR}/llvm/src/external_llvm <
${PATCH_DIR}/llvm_clang_cuda_msvc_header_fix.diff
)
else()
set(LLVM_GENERATOR "Unix Makefiles")
endif()
ExternalProject_Add(external_llvm
URL file://${PACKAGE_DIR}/${LLVM_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${LLVM_HASH_TYPE}=${LLVM_HASH}
CMAKE_GENERATOR ${LLVM_GENERATOR}
LIST_SEPARATOR ^^
PREFIX ${BUILD_DIR}/llvm
SOURCE_SUBDIR llvm
PATCH_COMMAND ${LLVM_PATCH}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/llvm
${DEFAULT_CMAKE_FLAGS}
${LLVM_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/llvm
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
set(LLVM_HARVEST_COMMAND
${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/llvm/lib
${HARVEST_TARGET}/llvm/lib &&
${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/llvm/include
${HARVEST_TARGET}/llvm/include &&
${CMAKE_COMMAND} -E copy
${LIBDIR}/llvm/bin/clang-format.exe
${HARVEST_TARGET}/llvm/bin/clang-format.exe
)
else()
set(LLVM_HARVEST_COMMAND
${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/llvm/lib/
${HARVEST_TARGET}/llvm/debug/lib/ &&
${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/llvm/include/
${HARVEST_TARGET}/llvm/debug/include/
)
endif()
ExternalProject_Add_Step(external_llvm after_install
COMMAND ${LLVM_HARVEST_COMMAND}
DEPENDEES mkdir update patch download configure build install
)
else()
harvest(external_llvm llvm/bin llvm/bin "clang-format")
if(BUILD_CLANG_TOOLS)
harvest(external_llvm llvm/bin llvm/bin "clang-tidy")
harvest(external_llvm llvm/share/clang llvm/share "run-clang-tidy.py")
endif()
harvest(external_llvm llvm/include llvm/include "*")
harvest(external_llvm llvm/bin llvm/bin "llvm-config")
harvest(external_llvm llvm/lib llvm/lib "libLLVM*.a")
harvest(external_llvm llvm/lib llvm/lib "libclang*.a")
harvest(external_llvm llvm/lib/clang llvm/lib/clang "*.h")
endif()
# We currently do not build libxml2 on Windows.
if(UNIX)
add_dependencies(
external_llvm
external_xml2
)
endif()
add_dependencies(
external_llvm
external_python
)

View File

@@ -0,0 +1,27 @@
# SPDX-FileCopyrightText: 2002-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(LZMA_PATCH_CMD echo .)
ExternalProject_Add(external_lzma
URL file://${PACKAGE_DIR}/${LZMA_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${LZMA_HASH_TYPE}=${LZMA_HASH}
PREFIX ${BUILD_DIR}/lzma
PATCH_COMMAND ${LZMA_PATCH_CMD}
CONFIGURE_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/lzma/src/external_lzma/ &&
${CONFIGURE_COMMAND} --prefix=${LIBDIR}/lzma --disable-shared
BUILD_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/lzma/src/external_lzma/ &&
make -j${MAKE_THREADS}
INSTALL_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/lzma/src/external_lzma/ &&
make install
INSTALL_DIR ${LIBDIR}/lzma
)

View File

@@ -0,0 +1,20 @@
# SPDX-FileCopyrightText: 2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
# shorthand to only unpack a certain dependency
function(unpack_only name)
string(TOUPPER ${name} UPPER_NAME)
set(TARGET_FILE ${${UPPER_NAME}_FILE})
set(TARGET_HASH_TYPE ${${UPPER_NAME}_HASH_TYPE})
set(TARGET_HASH ${${UPPER_NAME}_HASH})
ExternalProject_Add(external_${name}
URL file://${PACKAGE_DIR}/${TARGET_FILE}
URL_HASH ${TARGET_HASH_TYPE}=${TARGET_HASH}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
PREFIX ${BUILD_DIR}/${name}
CONFIGURE_COMMAND echo .
BUILD_COMMAND echo .
INSTALL_COMMAND echo .
)
endfunction()

View File

@@ -0,0 +1,51 @@
# SPDX-FileCopyrightText: 2002-2025 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(MANIFOLD_EXTRA_ARGS
-DMANIFOLD_JSBIND=OFF
-DMANIFOLD_CBIND=OFF
-DMANIFOLD_PYBIND=OFF
-DMANIFOLD_PAR=ON
-DMANIFOLD_CROSS_SECTION=OFF
-DMANIFOLD_EXPORT=OFF
-DMANIFOLD_DEBUG=OFF
-DMANIFOLD_TEST=OFF
-DMANIFOLD_DOWNLOADS=OFF
-DTBB_ROOT=${LIBDIR}/tbb/
-DTRACY_ENABLE=OFF
-DBUILD_SHARED_LIBS=OFF
-DCMAKE_DEBUG_POSTFIX=_d
)
ExternalProject_Add(external_manifold
URL file://${PACKAGE_DIR}/${MANIFOLD_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${MANIFOLD_HASH_TYPE}=${MANIFOLD_HASH}
PREFIX ${BUILD_DIR}/manifold
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/manifold
${DEFAULT_CMAKE_FLAGS}
${MANIFOLD_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/manifold
)
add_dependencies(
external_manifold
external_tbb
)
if(WIN32)
ExternalProject_Add_Step(external_manifold after_install
COMMAND
${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/manifold/
${HARVEST_TARGET}/manifold/
DEPENDEES install
)
else()
harvest(external_manifold manifold/include manifold/include "*.h")
harvest(external_manifold manifold/lib manifold/lib "*.a")
harvest(external_manifold manifold/lib/cmake/manifold manifold/lib/cmake/manifold "*.cmake")
endif()

View File

@@ -0,0 +1,119 @@
# SPDX-FileCopyrightText: 2022-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(MATERIALX_EXTRA_ARGS
-DMATERIALX_BUILD_PYTHON=ON
-DMATERIALX_BUILD_RENDER=ON
-DMATERIALX_INSTALL_PYTHON=OFF
-DMATERIALX_PYTHON_EXECUTABLE=${PYTHON_BINARY}
-DMATERIALX_PYTHON_VERSION=${PYTHON_SHORT_VERSION}
-DMATERIALX_BUILD_SHARED_LIBS=ON
-DMATERIALX_BUILD_TESTS=OFF
-DCMAKE_DEBUG_POSTFIX=_d
# This policy makes pybind11_ROOT work.
-DCMAKE_POLICY_DEFAULT_CMP0074=NEW
-Dpybind11_ROOT=${LIBDIR}/pybind11
-DPython_EXECUTABLE=${PYTHON_BINARY}
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
list(APPEND MATERIALX_EXTRA_ARGS -DPYTHON_MODULE_EXTENSION=.pyd)
else()
list(APPEND MATERIALX_EXTRA_ARGS -DPYTHON_MODULE_EXTENSION=_d.pyd)
endif()
list(APPEND MATERIALX_EXTRA_ARGS -DPYTHON_LIBRARIES=${LIBDIR}/python/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.lib)
endif()
if(UNIX AND NOT APPLE)
list(APPEND MATERIALX_EXTRA_ARGS
-DCMAKE_SHARED_LINKER_FLAGS=-Wl,--version-script="${CMAKE_SOURCE_DIR}/linux/materialx_symbols_unix.map"
)
endif()
ExternalProject_Add(external_materialx
URL file://${PACKAGE_DIR}/${MATERIALX_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${MATERIALX_HASH_TYPE}=${MATERIALX_HASH}
PREFIX ${BUILD_DIR}/materialx
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PATCH_COMMAND
${PATCH_CMD} -p 1 -d
${BUILD_DIR}/materialx/src/external_materialx
-i ${PATCH_DIR}/materialx_2866.diff
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/materialx
${DEFAULT_CMAKE_FLAGS}
${MATERIALX_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/materialx
)
if(WIN32)
set(MATERIALX_PYTHON_TARGET ${HARVEST_TARGET}/materialx/python/${BUILD_MODE})
string(REPLACE "/" "\\" MATERIALX_PYTHON_TARGET_DOS "${MATERIALX_PYTHON_TARGET}")
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_materialx after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/materialx/include
${HARVEST_TARGET}/materialx/include
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/materialx/libraries
${HARVEST_TARGET}/materialx/libraries
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/materialx/lib/
${HARVEST_TARGET}/materialx/lib/
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/materialx/bin/
${HARVEST_TARGET}/materialx/bin/
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/materialx/python/
${MATERIALX_PYTHON_TARGET}
COMMAND del ${MATERIALX_PYTHON_TARGET_DOS}\\MaterialX\\*.lib
DEPENDEES install
)
endif()
if(BUILD_MODE STREQUAL Debug)
ExternalProject_Add_Step(external_materialx after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/materialx/lib/
${HARVEST_TARGET}/materialx/lib/
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/materialx/bin/
${HARVEST_TARGET}/materialx/bin/
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/materialx/python/
${MATERIALX_PYTHON_TARGET}
COMMAND del ${MATERIALX_PYTHON_TARGET_DOS}\\MaterialX\\*.lib
DEPENDEES install
)
endif()
unset(MATERIALX_PYTHON_TARGET)
unset(MATERIALX_PYTHON_TARGET_DOS)
else()
harvest(external_materialx materialx/include materialx/include "*.h")
# CMake files first because harvest_rpath_lib edits them.
harvest(external_materialx materialx/lib/cmake/MaterialX materialx/lib/cmake/MaterialX "*.cmake")
harvest_rpath_lib(external_materialx materialx/lib materialx/lib "*${SHAREDLIBEXT}*")
harvest(external_materialx materialx/libraries materialx/libraries "*")
harvest_rpath_python(external_materialx
materialx/python/MaterialX
python/lib/python${PYTHON_SHORT_VERSION}/site-packages/MaterialX
"*"
)
# We do not need anything from the resources folder, but the MaterialX config
# file will complain if the folder does not exist, so just copy the readme.md
# files to ensure the folder will exist.
harvest(external_materialx materialx/resources materialx/resources "README.md")
endif()
add_dependencies(
external_materialx
external_python
external_pybind11
)

View File

@@ -0,0 +1,43 @@
# SPDX-FileCopyrightText: 2026 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(MESHOPTIMIZER_EXTRA_ARGS
-DMESHOPT_BUILD_SHARED_LIBS=ON
)
if(WIN32)
set(MESHOPTIMIZER_EXTRA_ARGS
${MESHOPTIMIZER_EXTRA_ARGS}
-DCMAKE_DEBUG_POSTFIX=_d
)
endif()
ExternalProject_Add(external_meshoptimizer
URL file://${PACKAGE_DIR}/${MESHOPTIMIZER_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${MESHOPTIMIZER_HASH_TYPE}=${MESHOPTIMIZER_HASH}
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PREFIX ${BUILD_DIR}/meshoptimizer
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/meshoptimizer
${DEFAULT_CMAKE_FLAGS}
${MESHOPTIMIZER_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/meshoptimizer
)
if(WIN32)
ExternalProject_Add_Step(external_meshoptimizer after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/meshoptimizer/
${HARVEST_TARGET}/meshoptimizer
DEPENDEES install
)
else()
harvest(external_meshoptimizer meshoptimizer/include meshoptimizer/include "*.h")
# CMake files first because harvest_rpath_lib edits them.
harvest(external_meshoptimizer meshoptimizer/lib/cmake/meshoptimizer meshoptimizer/lib/cmake/meshoptimizer "*.cmake")
harvest_rpath_lib(external_meshoptimizer meshoptimizer/lib meshoptimizer/lib "*${SHAREDLIBEXT}*")
endif()

View File

@@ -0,0 +1,43 @@
# SPDX-FileCopyrightText: 2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(MINIZIPNG_EXTRA_ARGS
# Disable most compression methods like OpenColorIO does, enabling
# more is not needed and will give link errors.
-DMZ_FETCH_LIBS=OFF
-DMZ_LIBCOMP=OFF
-DMZ_PKCRYPT=OFF
-DMZ_WZAES=OFF
-DMZ_OPENSSL=OFF
-DMZ_SIGNING=OFF
-DMZ_LZMA=OFF
-DMZ_ZSTD=OFF
-DMZ_BZIP2=OFF
-DMZ_ICONV=OFF
-DMZ_ZLIB=ON
-DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY}
-DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include/
# Because OCIO hardcodes a non standard include path
-DCMAKE_INSTALL_INCLUDEDIR=${LIBDIR}/minizipng/include/minizip-ng
)
ExternalProject_Add(external_minizipng
URL file://${PACKAGE_DIR}/${MINIZIPNG_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${MINIZIPNG_HASH_TYPE}=${MINIZIPNG_HASH}
PREFIX ${BUILD_DIR}/minizipng
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/minizipng
${DEFAULT_CMAKE_FLAGS}
${MINIZIPNG_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/minizipng
)
add_dependencies(
external_minizipng
external_zlib
)

View File

@@ -0,0 +1,35 @@
# SPDX-FileCopyrightText: 2024 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(NANOBIND_EXTRA_ARGS
-DNB_TEST=OFF
-DPython_EXECUTABLE=${PYTHON_BINARY}
)
set(NANOBIND_PATCH
${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/robinmap/include/
${BUILD_DIR}/nanobind/src/external_nanobind/ext/robin_map/include/
)
ExternalProject_Add(external_nanobind
URL file://${PACKAGE_DIR}/${NANOBIND_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${NANOBIND_HASH_TYPE}=${NANOBIND_HASH}
PREFIX ${BUILD_DIR}/nanobind
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PATCH_COMMAND ${NANOBIND_PATCH}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/nanobind
${DEFAULT_CMAKE_FLAGS}
${NANOBIND_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/nanobind
)
add_dependencies(
external_nanobind
external_robinmap
)

View File

@@ -0,0 +1,39 @@
# SPDX-FileCopyrightText: 2002-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
ExternalProject_Add(external_nasm
URL file://${PACKAGE_DIR}/${NASM_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${NASM_HASH_TYPE}=${NASM_HASH}
PREFIX ${BUILD_DIR}/nasm
PATCH_COMMAND ${PATCH_CMD} --verbose -p 1 -N -d
${BUILD_DIR}/nasm/src/external_nasm <
${PATCH_DIR}/nasm.diff
CONFIGURE_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/nasm/src/external_nasm/ &&
./autogen.sh &&
${CONFIGURE_COMMAND} --prefix=${LIBDIR}/nasm
BUILD_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/nasm/src/external_nasm/ &&
make -j${MAKE_THREADS} &&
make manpages
INSTALL_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/nasm/src/external_nasm/ &&
make install
INSTALL_DIR ${LIBDIR}/nasm
)
if(UNIX)
# `touch nasm.1 ndisasm.1` helps to create the manual pages files, even when
# local `asciidoc` and `xmlto` packages are not installed.
ExternalProject_Add_Step(external_nasm after_configure
COMMAND ${CMAKE_COMMAND} -E touch ${BUILD_DIR}/nasm/src/external_nasm/nasm.1 ${BUILD_DIR}/nasm/src/external_nasm/ndisasm.1
DEPENDEES configure
)
endif()

View File

@@ -0,0 +1,47 @@
# SPDX-FileCopyrightText: 2017-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(MSVC)
if(BUILD_MODE STREQUAL Debug)
set(NUMPY_DIR_POSTFIX -pydebug)
set(NUMPY_ARCHIVE_POSTFIX d)
set(NUMPY_BUILD_OPTION --debug)
else()
set(NUMPY_DIR_POSTFIX "")
set(NUMPY_ARCHIVE_POSTFIX "")
set(NUMPY_BUILD_OPTION "")
endif()
endif()
set(NUMPY_POSTFIX "")
if(WIN32)
file(WRITE ${CMAKE_BINARY_DIR}/fix_path.bat
"set PATH=${LIBDIR}/python;${LIBDIR}/python/scripts;%PATH%\n"
)
set(NUMPY_CONF ${CMAKE_BINARY_DIR}/fix_path.bat)
else()
set(NUMPY_CONF export CYTHON=${LIBDIR}/python/bin/cython)
endif()
ExternalProject_Add(external_numpy
URL file://${PACKAGE_DIR}/${NUMPY_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${NUMPY_HASH_TYPE}=${NUMPY_HASH}
PREFIX ${BUILD_DIR}/numpy
PATCH_COMMAND ${NUMPY_PATCH}
CONFIGURE_COMMAND ""
BUILD_IN_SOURCE 1
BUILD_COMMAND ${NUMPY_CONF} && ${PYTHON_BINARY} -m pip install --no-build-isolation .
INSTALL_COMMAND ""
)
add_dependencies(
external_numpy
external_python
external_python_site_packages
external_cython
)

View File

@@ -0,0 +1,36 @@
# SPDX-FileCopyrightText: 2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(OCLOC_EXTRA_ARGS
-DNEO_SKIP_UNIT_TESTS=1
-DNEO_BUILD_WITH_OCL=0
-DNEO_CURRENT_PLATFORMS_SUPPORT=1
-DNEO_LEGACY_PLATFORMS_SUPPORT=0
-DBUILD_WITH_L0=0
-DNEO_BUILD_UNVERSIONED_OCLOC=TRUE
-DIGC_DIR=${LIBDIR}/igc
-DGMM_DIR=${LIBDIR}/gmmlib
)
ExternalProject_Add(external_ocloc
URL file://${PACKAGE_DIR}/${OCLOC_FILE}
URL_HASH ${OCLOC_HASH_TYPE}=${OCLOC_HASH}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
PREFIX ${BUILD_DIR}/ocloc
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/ocloc
${DEFAULT_CMAKE_FLAGS}
${OCLOC_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/ocloc
)
add_dependencies(
external_ocloc
external_igc
external_gmmlib
)
harvest(external_ocloc ocloc dpcpp/lib/ocloc "*")

View File

@@ -0,0 +1,20 @@
# SPDX-FileCopyrightText: 2002-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
ExternalProject_Add(external_ogg
URL file://${PACKAGE_DIR}/${OGG_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${OGG_HASH_TYPE}=${OGG_HASH}
PREFIX ${BUILD_DIR}/ogg
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/ogg
${DEFAULT_CMAKE_FLAGS}
INSTALL_DIR ${LIBDIR}/ogg
)
if(NOT WIN32)
harvest(external_ogg ogg/lib ffmpeg/lib "*.a")
endif()

View File

@@ -0,0 +1,68 @@
# SPDX-FileCopyrightText: 2002-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(BUILD_MODE STREQUAL Release)
set(OPENAL_EXTRA_ARGS
-DALSOFT_UTILS=OFF
-DALSOFT_NO_CONFIG_UTIL=ON
-DALSOFT_EXAMPLES=OFF
-DALSOFT_TESTS=OFF
-DALSOFT_INSTALL_CONFIG=OFF
-DALSOFT_INSTALL_HRTF_DATA=OFF
-DALSOFT_INSTALL=ON
-DALSOFT_BACKEND_SNDIO=OFF
)
if(UNIX)
set(OPENAL_EXTRA_ARGS
${OPENAL_EXTRA_ARGS}
-DLIBTYPE=STATIC
)
endif()
if(UNIX AND NOT APPLE)
# Ensure we have backends for playback.
set(OPENAL_EXTRA_ARGS
${OPENAL_EXTRA_ARGS}
-DALSOFT_REQUIRE_ALSA=ON
-DALSOFT_REQUIRE_OSS=ON
-DALSOFT_REQUIRE_PULSEAUDIO=ON
)
endif()
ExternalProject_Add(external_openal
URL file://${PACKAGE_DIR}/${OPENAL_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${OPENAL_HASH_TYPE}=${OPENAL_HASH}
PREFIX ${BUILD_DIR}/openal
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/openal
${DEFAULT_CMAKE_FLAGS}
${OPENAL_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/openal
)
if(WIN32)
ExternalProject_Add_Step(external_openal after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/openal/lib/openal32.lib
${HARVEST_TARGET}/openal/lib/openal32.lib
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/openal/bin/openal32.dll
${HARVEST_TARGET}/openal/lib/openal32.dll
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/openal/include/
${HARVEST_TARGET}/openal/include/
DEPENDEES install
)
else()
harvest(external_openal openal/include openal/include "*.h")
if(UNIX AND NOT APPLE)
harvest(external_openal openal/lib openal/lib "*.a")
endif()
endif()
endif()

View File

@@ -0,0 +1,161 @@
# SPDX-FileCopyrightText: 2017-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(OCIO_PATCH echo .)
if(WIN32)
set(MINIZIP_LIBRARY minizip${LIBEXT})
else()
set(MINIZIP_LIBRARY libminizip${LIBEXT})
endif()
set(OPENCOLORIO_EXTRA_ARGS
-DOCIO_BUILD_APPS=OFF
-DOCIO_BUILD_PYTHON=ON
-DOCIO_BUILD_NUKE=OFF
-DOCIO_BUILD_JAVA=OFF
-DBUILD_SHARED_LIBS=ON
-DOCIO_BUILD_DOCS=OFF
-DOCIO_BUILD_TESTS=OFF
-DOCIO_BUILD_GPU_TESTS=OFF
-DOCIO_USE_SIMD=ON
-DOCIO_INSTALL_EXT_PACKAGES=NONE
-Dexpat_ROOT=${LIBDIR}/expat
-Dyaml-cpp_DIR=${LIBDIR}/yamlcpp/lib/cmake/yaml-cpp
-Dyaml-cpp_VERSION=${YAMLCPP_VERSION}
-Dpystring_ROOT=${LIBDIR}/pystring
-DImath_ROOT=${LIBDIR}/imath
-Dminizip-ng_ROOT=${LIBDIR}/minizipng
-Dminizip-ng_INCLUDE_DIR=${LIBDIR}/minizipng/include/minizip-ng/minizip
-Dminizip-ng_LIBRARY=${LIBDIR}/minizipng/lib/${MINIZIP_LIBRARY}
-DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY}
-DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include/
-DPython_EXECUTABLE=${PYTHON_BINARY}
-Dpybind11_ROOT=${LIBDIR}/pybind11
)
if(APPLE)
set(OPENCOLORIO_EXTRA_ARGS
${OPENCOLORIO_EXTRA_ARGS}
# Work around issue where minizip-ng_LIBRARY assumes -ng in file name.
-Dminizip_LIBRARY=${LIBDIR}/minizipng/lib/libminizip${LIBEXT}
# Work around issue where homebrew Imath's can be prioritized over our own dependency during linking if installed.
-DImath_LIBRARY=${LIBDIR}/imath/lib/libImath${SHAREDLIBEXT}
)
endif()
if(BLENDER_PLATFORM_ARM AND NOT WIN32)
set(OPENCOLORIO_EXTRA_ARGS
${OPENCOLORIO_EXTRA_ARGS}
-DOCIO_USE_SSE=OFF
)
endif()
if(WIN32)
set(OPENCOLORIO_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DIMATH_DLL")
if(BUILD_MODE STREQUAL Debug)
set(OPENCOLORIO_CXX_FLAGS "${OPENCOLORIO_CXX_FLAGS} -DPy_DEBUG")
endif()
set(OPENCOLORIO_EXTRA_ARGS
${OPENCOLORIO_EXTRA_ARGS}
-DCMAKE_DEBUG_POSTFIX=_d
-Dexpat_LIBRARY=${LIBDIR}/expat/lib/libexpat$<$<STREQUAL:${BUILD_MODE},Debug>:d>MD${LIBEXT}
-DImath_LIBRARY=${LIBDIR}/imath/lib/imath${OPENEXR_VERSION_POSTFIX}${LIBEXT}
-DCMAKE_CXX_FLAGS=${OPENCOLORIO_CXX_FLAGS}
)
else()
set(OPENCOLORIO_EXTRA_ARGS
${OPENCOLORIO_EXTRA_ARGS}
)
endif()
ExternalProject_Add(external_opencolorio
URL file://${PACKAGE_DIR}/${OPENCOLORIO_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${OPENCOLORIO_HASH_TYPE}=${OPENCOLORIO_HASH}
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PREFIX ${BUILD_DIR}/opencolorio
PATCH_COMMAND ${OCIO_PATCH}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/opencolorio
${DEFAULT_CMAKE_FLAGS}
${OPENCOLORIO_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/opencolorio
)
add_dependencies(
external_opencolorio
external_yamlcpp
external_expat
external_imath
external_pystring
external_zlib
external_minizipng
external_python
external_pybind11
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_opencolorio after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/opencolorio/include
${HARVEST_TARGET}/opencolorio/include
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/opencolorio/bin/OpenColorIO_2_5.dll
${HARVEST_TARGET}/opencolorio/bin/OpenColorIO_2_5.dll
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/opencolorio/lib
${HARVEST_TARGET}/opencolorio/lib
DEPENDEES install
)
endif()
if(BUILD_MODE STREQUAL Debug)
ExternalProject_Add_Step(external_opencolorio after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/opencolorio/bin/OpenColorIO_d_2_5.dll
${HARVEST_TARGET}/opencolorio/bin/OpenColorIO_d_2_5.dll
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/opencolorio/lib/OpenColorIO_d.lib
${HARVEST_TARGET}/opencolorio/lib/OpenColorIO_d.lib
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/opencolorio/lib/site-packages
${HARVEST_TARGET}/opencolorio/lib/site-packages-debug
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/opencolorio/lib/cmake/OpenColorIO/OpenColorIOTargets-debug.cmake
${HARVEST_TARGET}/opencolorio/lib/cmake/OpenColorIO/OpenColorIOTargets-debug.cmake
DEPENDEES install
)
endif()
else()
ExternalProject_Add_Step(external_opencolorio after_install
COMMAND cp
${LIBDIR}/yamlcpp/lib/libyaml-cpp.a
${LIBDIR}/opencolorio/lib/
COMMAND cp
${LIBDIR}/expat/lib/libexpat.a
${LIBDIR}/opencolorio/lib/
COMMAND cp
${LIBDIR}/pystring/lib/libpystring.a
${LIBDIR}/opencolorio/lib/
DEPENDEES install
)
harvest(external_opencolorio opencolorio/include opencolorio/include "*.h")
# Cmake files first because harvest_rpath_lib edits them.
harvest(external_opencolorio opencolorio/lib/cmake/OpenColorIO opencolorio/lib/cmake/OpenColorIO "*.cmake")
harvest_rpath_lib(external_opencolorio opencolorio/lib opencolorio/lib "*${SHAREDLIBEXT}*")
harvest_rpath_python(
external_opencolorio
opencolorio/lib/python${PYTHON_SHORT_VERSION}
python/lib/python${PYTHON_SHORT_VERSION}
"*"
)
endif()

View File

@@ -0,0 +1,84 @@
# SPDX-FileCopyrightText: 2017-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(WIN32)
set(OPENEXR_CMAKE_CXX_STANDARD_LIBRARIES "kernel32${LIBEXT} user32${LIBEXT} gdi32${LIBEXT} winspool${LIBEXT} shell32${LIBEXT} ole32${LIBEXT} oleaut32${LIBEXT} uuid${LIBEXT} comdlg32${LIBEXT} advapi32${LIBEXT} psapi${LIBEXT}")
set(OPENEXR_EXTRA_ARGS
-DCMAKE_CXX_STANDARD_LIBRARIES=${OPENEXR_CMAKE_CXX_STANDARD_LIBRARIES}
)
else()
set(OPENEXR_EXTRA_ARGS
)
endif()
set(OPENEXR_EXTRA_ARGS
${OPENEXR_EXTRA_ARGS}
-DBUILD_TESTING=OFF
-DOPENEXR_BUILD_BOTH_STATIC_SHARED=OFF
-DBUILD_SHARED_LIBS=ON
-DOPENEXR_INSTALL_TOOLS=OFF
-DImath_DIR=${LIBDIR}/imath/lib/cmake/Imath
-DOPENEXR_LIB_SUFFIX=${OPENEXR_VERSION_BUILD_POSTFIX}
-Dlibdeflate_DIR=${LIBDIR}/deflate/lib/cmake/libdeflate
-Dopenjph_DIR=${LIBDIR}/openjph/lib/cmake/openjph
)
ExternalProject_Add(external_openexr
URL file://${PACKAGE_DIR}/${OPENEXR_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${OPENEXR_HASH_TYPE}=${OPENEXR_HASH}
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PREFIX ${BUILD_DIR}/openexr
PATCH_COMMAND ${PATCH_CMD} -p 1 -d
${BUILD_DIR}/openexr/src/external_openexr <
${PATCH_DIR}/openexr_deflate_cmake.diff
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/openexr
${DEFAULT_CMAKE_FLAGS}
${OPENEXR_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/openexr
)
if(WIN32)
ExternalProject_Add_Step(external_openexr after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/openexr/lib
${HARVEST_TARGET}/openexr/lib
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/openexr/include
${HARVEST_TARGET}/openexr/include
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/openexr/bin/Iex${OPENEXR_VERSION_POSTFIX}.dll
${HARVEST_TARGET}/openexr/bin/Iex${OPENEXR_VERSION_POSTFIX}.dll
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/openexr/bin/IlmThread${OPENEXR_VERSION_POSTFIX}.dll
${HARVEST_TARGET}/openexr/bin/IlmThread${OPENEXR_VERSION_POSTFIX}.dll
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/openexr/bin/OpenEXRCore${OPENEXR_VERSION_POSTFIX}.dll
${HARVEST_TARGET}/openexr/bin/OpenEXRCore${OPENEXR_VERSION_POSTFIX}.dll
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/openexr/bin/OpenEXRUtil${OPENEXR_VERSION_POSTFIX}.dll
${HARVEST_TARGET}/openexr/bin/OpenEXRUtil${OPENEXR_VERSION_POSTFIX}.dll
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/openexr/bin/OpenEXR${OPENEXR_VERSION_POSTFIX}.dll
${HARVEST_TARGET}/openexr/bin/OpenEXR${OPENEXR_VERSION_POSTFIX}.dll
DEPENDEES install
)
else()
harvest(external_openexr openexr/include openexr/include "*.h")
harvest(external_openexr openexr/lib/cmake/OpenEXR openexr/lib/cmake/OpenEXR "*.cmake")
harvest_rpath_lib(external_openexr openexr/lib openexr/lib "*${SHAREDLIBEXT}*")
endif()
add_dependencies(
external_openexr
external_imath
external_deflate
external_openjph
)

View File

@@ -0,0 +1,163 @@
# SPDX-FileCopyrightText: 2019-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(OIDN_EXTRA_ARGS
-DCMAKE_BUILD_TYPE=Release
-DOIDN_APPS=OFF
-DTBB_ROOT=${LIBDIR}/tbb
-DISPC_EXECUTABLE=${LIBDIR}/ispc/bin/ispc
-DOIDN_FILTER_RTLIGHTMAP=OFF
-DPython_EXECUTABLE=${PYTHON_BINARY}
)
if(APPLE)
set(OIDN_EXTRA_ARGS
${OIDN_EXTRA_ARGS}
-DOIDN_DEVICE_METAL=ON
)
else()
set(OIDN_EXTRA_ARGS
${OIDN_EXTRA_ARGS}
-DOIDN_DEVICE_CPU=ON
-DLEVEL_ZERO_ROOT=${LIBDIR}/level-zero
)
# x64 platforms support SyCL and HIP, ARM64 doesn't
if(NOT BLENDER_PLATFORM_ARM)
set(OIDN_EXTRA_ARGS
${OIDN_EXTRA_ARGS}
-DOIDN_DEVICE_SYCL=ON
-DOIDN_DEVICE_SYCL_AOT=OFF
-DOIDN_DEVICE_CUDA=ON
-DOIDN_DEVICE_HIP=ON)
elseif(UNIX)
set(OIDN_EXTRA_ARGS
${OIDN_EXTRA_ARGS}
-DOIDN_DEVICE_CUDA=ON)
endif()
if(BLENDER_PLATFORM_ARM AND UNIX)
# Target ARMv8.2-A with dot product and half float.
# There is no -march=armv8.2-a+dotprod+fp16+lse flag for ISPC, so we target
# a CPU with the same features. Otherwise ISPC will do something similar to
# -march=native and results depend on the current processor.
set(OIDN_EXTRA_ARGS
${OIDN_EXTRA_ARGS}
"-DISPC_FLAGS_RELEASE:STRING=-O3 --cpu=cortex-a78"
)
endif()
endif()
if(WIN32 AND NOT BLENDER_PLATFORM_ARM)
set(OIDN_EXTRA_ARGS
${OIDN_EXTRA_ARGS}
-DTBB_DEBUG_LIBRARY=${LIBDIR}/tbb/lib/tbb.lib
-DTBB_DEBUG_LIBRARY_MALLOC=${LIBDIR}/tbb/lib/tbbmalloc.lib
-DCMAKE_CXX_COMPILER=${LIBDIR}/dpcpp/bin/clang++.exe
-DCMAKE_C_COMPILER=${LIBDIR}/dpcpp/bin/clang.exe
-DCMAKE_DEBUG_POSTFIX=_d
)
if(DEFINED ENV{ROCM_PATH})
# Older ROCM shipped a /bin/hipconfig (no extension) and oidn
# uses it to validate a valid rocm folder, given this file
# is no longer shipped work around it for now by passing the
# path ourselves, so we don't have to rely on their find rocm
# functionality.
cmake_path(CONVERT $ENV{ROCM_PATH} TO_CMAKE_PATH_LIST ROCM_PATH NORMALIZE)
list(APPEND OIDN_EXTRA_ARGS -DROCM_PATH=${ROCM_PATH})
endif()
set(OIDN_CMAKE_FLAGS ${DEFAULT_CLANG_CMAKE_FLAGS}
-DCMAKE_CXX_COMPILER=${LIBDIR}/dpcpp/bin/clang++.exe
-DCMAKE_C_COMPILER=${LIBDIR}/dpcpp/bin/clang.exe
-DCMAKE_SHARED_LINKER_FLAGS=-L"${LIBDIR}/dpcpp/lib"
-DCMAKE_EXE_LINKER_FLAGS=-L"${LIBDIR}/dpcpp/lib"
)
else()
if(NOT (APPLE OR WIN32 OR BLENDER_PLATFORM_ARM))
set(OIDN_EXTRA_ARGS
${OIDN_EXTRA_ARGS}
-DCMAKE_CXX_COMPILER=${LIBDIR}/dpcpp/bin/clang++
-DCMAKE_C_COMPILER=${LIBDIR}/dpcpp/bin/clang
-DCMAKE_FIND_ROOT_PATH=${LIBDIR}/ocloc
)
endif()
set(OIDN_CMAKE_FLAGS ${DEFAULT_CMAKE_FLAGS})
endif()
set(OIDN_PATCH_COMMAND
${PATCH_CMD} --verbose -p 1 -N -d
${BUILD_DIR}/openimagedenoise/src/external_openimagedenoise <
${PATCH_DIR}/oidn.diff
)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
# Replace `attrib.memoryType` with `attrib.type`.
# See: https://github.com/ROCm/HIP/pull/2164
set(OIDN_PATCH_COMMAND ${OIDN_PATCH_COMMAND} &&
sed -i "s/(attrib\\.memoryType)/(attrib.type)/g"
${BUILD_DIR}/openimagedenoise/src/external_openimagedenoise/devices/hip/hip_device.cpp
)
endif()
ExternalProject_Add(external_openimagedenoise
URL file://${PACKAGE_DIR}/${OIDN_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${OIDN_HASH_TYPE}=${OIDN_HASH}
PREFIX ${BUILD_DIR}/openimagedenoise
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/openimagedenoise
${OIDN_CMAKE_FLAGS}
${OIDN_EXTRA_ARGS}
PATCH_COMMAND ${OIDN_PATCH_COMMAND}
INSTALL_DIR ${LIBDIR}/openimagedenoise
)
unset(OIDN_PATCH_COMMAND)
add_dependencies(
external_openimagedenoise
external_tbb
external_ispc
external_python
)
if(NOT (APPLE OR WIN32 OR BLENDER_PLATFORM_ARM))
add_dependencies(
external_openimagedenoise
external_dpcpp
external_ocloc
)
endif()
if(NOT (APPLE OR BLENDER_PLATFORM_ARM))
add_dependencies(
external_openimagedenoise
external_level-zero
)
endif()
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_openimagedenoise after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/openimagedenoise/bin
${HARVEST_TARGET}/openimagedenoise/bin
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/openimagedenoise/lib
${HARVEST_TARGET}/openimagedenoise/lib
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/openimagedenoise/include
${HARVEST_TARGET}/openimagedenoise/include
DEPENDEES install
)
endif()
else()
harvest(external_openimagedenoise openimagedenoise/include openimagedenoise/include "*")
harvest_rpath_lib(external_openimagedenoise openimagedenoise/lib openimagedenoise/lib "*${SHAREDLIBEXT}*")
harvest(external_openimagedenoise openimagedenoise/lib/cmake/OpenImageDenoise-${OIDN_VERSION} openimagedenoise/lib/cmake/OpenImageDenoise "*.cmake")
endif()

View File

@@ -0,0 +1,238 @@
# SPDX-FileCopyrightText: 2017-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(BUILD_MODE STREQUAL Release)
set(OIIO_TOOLS ON)
else()
set(OIIO_TOOLS OFF)
endif()
if(UNIX AND NOT APPLE)
# This causes linking to static pthread libraries which gives link errors.
# Since we manually specify library paths it should static link other libs.
set(OPENIMAGEIO_LINKSTATIC -DLINKSTATIC=OFF)
set(OIIO_SIMD_FLAGS -DUSE_SIMD=sse4.2)
else()
set(OPENIMAGEIO_LINKSTATIC -DLINKSTATIC=ON)
endif()
if(WIN32)
if(BLENDER_PLATFORM_ARM)
set(OIIO_SIMD_FLAGS -DUSE_SIMD=0)
else()
set(OIIO_SIMD_FLAGS -DUSE_SIMD=sse4.2)
endif()
set(OPENJPEG_POSTFIX _msvc)
if(BUILD_MODE STREQUAL Debug)
set(TIFF_POSTFIX d)
set(PNG_POSTFIX d)
else()
set(TIFF_POSTFIX "")
set(PNG_POSTFIX "")
endif()
set(PNG_LIBNAME libpng16_static${PNG_POSTFIX}${LIBEXT})
else()
set(PNG_LIBNAME libpng${LIBEXT})
set(OIIO_SIMD_FLAGS "")
set(TIFF_POSTFIX "")
endif()
if(MSVC)
set(OPENJPEG_FLAGS
-DOpenJPEG_ROOT=${LIBDIR}/openjpeg_msvc
)
else()
set(OPENJPEG_FLAGS
-DOpenJPEG_ROOT=${LIBDIR}/openjpeg
)
endif()
set(OPENIMAGEIO_EXTRA_ARGS
-DBUILD_SHARED_LIBS=ON
${OPENIMAGEIO_LINKSTATIC}
-DOpenImageIO_REQUIRED_DEPS=WebP$<SEMICOLON>libjpeg-turbo$<SEMICOLON>TIFF$<SEMICOLON>OpenEXR$<SEMICOLON>PNG$<SEMICOLON>OpenJPEG$<SEMICOLON>fmt$<SEMICOLON>Robinmap$<SEMICOLON>ZLIB$<SEMICOLON>pugixml$<SEMICOLON>Python$<SEMICOLON>openjph$<SEMICOLON>TBB$<SEMICOLON>Libheif
-DUSE_NUKE=OFF
-DUSE_OPENVDB=OFF
-DUSE_FREETYPE=OFF
-DUSE_DCMTK=OFF
-DUSE_TBB=ON
-DUSE_QT=OFF
-DUSE_PYTHON=ON
-DUSE_GIF=OFF
-DUSE_OPENCV=OFF
-DUSE_OPENJPEG=ON
-DUSE_FFMPEG=OFF
-DUSE_PTEX=OFF
-DUSE_LIBHEIF=ON
-DUSE_LIBRAW=OFF
-DUSE_JXL=OFF
-DUSE_OPENCOLORIO=ON
-DUSE_WEBP=ON
-DOIIO_BUILD_TOOLS=${OIIO_TOOLS}
-DOIIO_BUILD_TESTS=OFF
-DBUILD_TESTING=OFF
-DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY}
-DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include
-DPNG_LIBRARY=${LIBDIR}/png/lib/${PNG_LIBNAME}
-DPNG_PNG_INCLUDE_DIR=${LIBDIR}/png/include
-DTIFF_LIBRARY=${LIBDIR}/tiff/lib/${LIBPREFIX}tiff${TIFF_POSTFIX}${LIBEXT}
-DTIFF_INCLUDE_DIR=${LIBDIR}/tiff/include
-DJPEG_ROOT=${LIBDIR}/jpeg/
-Dlibjpeg-turbo_ROOT=${LIBDIR}/jpeg/
${OPENJPEG_FLAGS}
-DOPENEXR_ILMTHREAD_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}IlmThread${OPENEXR_VERSION_POSTFIX}${SHAREDLIBEXT}
-DOPENEXR_IEX_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}Iex${OPENEXR_VERSION_POSTFIX}${SHAREDLIBEXT}
-DOPENEXR_ILMIMF_LIBRARY=${LIBDIR}/openexr/lib/${LIBPREFIX}IlmImf${OPENEXR_VERSION_POSTFIX}${SHAREDLIBEXT}
-DSTOP_ON_WARNING=OFF
-DUSE_EXTERNAL_PUGIXML=ON
-DPUGIXML_LIBRARY=${LIBDIR}/pugixml/lib/${LIBPREFIX}pugixml${LIBEXT}
-DPUGIXML_INCLUDE_DIR=${LIBDIR}/pugixml/include/
-Dpugixml_DIR=${LIBDIR}/pugixml/lib/cmake/pugixml
-DOpenColorIO_DIR=${LIBDIR}/opencolorio/lib/cmake/OpenColorIO
-DOpenImageIO_BUILD_MISSING_DEPS=""
-DFMT_INCLUDE_DIR=${LIBDIR}/fmt/include/
-DRobinmap_ROOT=${LIBDIR}/robinmap
-DWebP_ROOT=${LIBDIR}/webp
${OIIO_SIMD_FLAGS}
-DOpenEXR_ROOT=${LIBDIR}/openexr
-DImath_ROOT=${LIBDIR}/imath
-Dpybind11_ROOT=${LIBDIR}/pybind11
-DPython_EXECUTABLE=${PYTHON_BINARY}
-DPython3_EXECUTABLE=${PYTHON_BINARY}
-DTBB_ROOT=${LIBDIR}/tbb
-Dlibdeflate_ROOT=${LIBDIR}/deflate
-Dfmt_ROOT=${LIBDIR}/fmt
-Dopenjph_DIR=${LIBDIR}/openjph/lib/cmake/openjph
-DLibheif_DIR=${LIBDIR}/libheif/lib/cmake/libheif
)
if(WIN32)
# We don't want the SOABI tags in the final filename since it gets the debug
# tags wrong and the final .pyd won't be found by python, pybind11 will try to
# get the tags and dump them into PYTHON_MODULE_EXTENSION every time the current
# python interpreter doesn't match the old one, overwriting our preference.
# To side step this behavior we set PYBIND11_PYTHON_EXECUTABLE_LAST so it'll
# leave the PYTHON_MODULE_EXTENSION value we set alone.
list(APPEND OPENIMAGEIO_EXTRA_ARGS -DPYBIND11_PYTHON_EXECUTABLE_LAST=${PYTHON_BINARY})
if(BUILD_MODE STREQUAL Release)
list(APPEND OPENIMAGEIO_EXTRA_ARGS -DPYTHON_MODULE_EXTENSION=.pyd)
else()
list(APPEND OPENIMAGEIO_EXTRA_ARGS -DPYTHON_MODULE_EXTENSION=_d.pyd)
endif()
endif()
ExternalProject_Add(external_openimageio
URL file://${PACKAGE_DIR}/${OPENIMAGEIO_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${OPENIMAGEIO_HASH_TYPE}=${OPENIMAGEIO_HASH}
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PREFIX ${BUILD_DIR}/openimageio
PATCH_COMMAND
${PATCH_CMD} -p 1 -N -d
${BUILD_DIR}/openimageio/src/external_openimageio/ <
${PATCH_DIR}/openimageio.diff &&
${PATCH_CMD} -p 1 -N -d
${BUILD_DIR}/openimageio/src/external_openimageio/ <
${PATCH_DIR}/openimageio_dds_3d_5133.diff
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/openimageio
${DEFAULT_CMAKE_FLAGS}
${OPENIMAGEIO_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/openimageio
)
add_dependencies(
external_openimageio
external_opencolorio
external_png
external_zlib
external_openexr
external_imath
external_jpeg
external_tiff
external_pugixml
external_fmt
external_robinmap
external_openjpeg${OPENJPEG_POSTFIX}
external_webp
external_python
external_pybind11
external_tbb
external_libheif
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_openimageio after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/OpenImageIO/include
${HARVEST_TARGET}/OpenImageIO/include
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/OpenImageIO/lib
${HARVEST_TARGET}/OpenImageIO/lib
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/OpenImageIO/bin/iconvert.exe
${HARVEST_TARGET}/OpenImageIO/bin/iconvert.exe
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/OpenImageIO/bin/idiff.exe
${HARVEST_TARGET}/OpenImageIO/bin/idiff.exe
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/OpenImageIO/bin/igrep.exe
${HARVEST_TARGET}/OpenImageIO/bin/igrep.exe
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/OpenImageIO/bin/iinfo.exe
${HARVEST_TARGET}/OpenImageIO/bin/iinfo.exe
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/OpenImageIO/bin/maketx.exe
${HARVEST_TARGET}/OpenImageIO/bin/maketx.exe
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/OpenImageIO/bin/oiiotool.exe
${HARVEST_TARGET}/OpenImageIO/bin/oiiotool.exe
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/OpenImageIO/bin/OpenImageIO.dll
${HARVEST_TARGET}/OpenImageIO/bin/OpenImageIO.dll
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/OpenImageIO/bin/OpenImageIO_Util.dll
${HARVEST_TARGET}/OpenImageIO/bin/OpenImageIO_Util.dll
DEPENDEES install
)
endif()
if(BUILD_MODE STREQUAL Debug)
ExternalProject_Add_Step(external_openimageio after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/openimageio/lib/cmake/OpenImageIO/OpenImageIOTargets-debug.cmake
${HARVEST_TARGET}/openimageio/lib/cmake/OpenImageIO/OpenImageIOTargets-debug.cmake
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/openimageio/lib/OpenImageIO_d.lib
${HARVEST_TARGET}/openimageio/lib/OpenImageIO_d.lib
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/openimageio/lib/OpenImageIO_Util_d.lib
${HARVEST_TARGET}/openimageio/lib/OpenImageIO_Util_d.lib
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/OpenImageIO/bin/OpenImageIO_d.dll
${HARVEST_TARGET}/OpenImageIO/bin/OpenImageIO_d.dll
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/OpenImageIO/bin/OpenImageIO_Util_d.dll
${HARVEST_TARGET}/OpenImageIO/bin/OpenImageIO_Util_d.dll
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/OpenImageIO/lib/python${PYTHON_SHORT_VERSION}/
${HARVEST_TARGET}/OpenImageIO/lib/python${PYTHON_SHORT_VERSION}_debug/
DEPENDEES install
)
endif()
else()
harvest_rpath_bin(external_openimageio openimageio/bin openimageio/bin "*")
harvest(external_openimageio openimageio/include openimageio/include "*")
harvest(external_openimageio openimageio/lib/cmake/OpenImageIO openimageio/lib/cmake/OpenImageIO "*.cmake")
harvest_rpath_lib(external_openimageio openimageio/lib openimageio/lib "*${SHAREDLIBEXT}*")
harvest_rpath_python(external_openimageio
openimageio/lib/python${PYTHON_SHORT_VERSION}
python/lib/python${PYTHON_SHORT_VERSION}
"*"
)
endif()

View File

@@ -0,0 +1,75 @@
# SPDX-FileCopyrightText: 2017-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
# Note the encoder/decoder may use png/tiff/lcms system libraries, but the
# library itself does not depend on them, so should give no problems.
if(NOT WIN32)
set(OPENJPEG_EXTRA_ARGS ${DEFAULT_CMAKE_FLAGS})
set(OPENJPEG_EXTRA_ARGS
${OPENJPEG_EXTRA_ARGS}
-DBUILD_SHARED_LIBS=OFF
-DBUILD_CODEC=OFF
)
ExternalProject_Add(external_openjpeg
URL file://${PACKAGE_DIR}/${OPENJPEG_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${OPENJPEG_HASH_TYPE}=${OPENJPEG_HASH}
PREFIX ${BUILD_DIR}/openjpeg
CONFIGURE_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/openjpeg/src/external_openjpeg-build &&
${CMAKE_COMMAND}
${OPENJPEG_EXTRA_ARGS}
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/openjpeg
${BUILD_DIR}/openjpeg/src/external_openjpeg
BUILD_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/openjpeg/src/external_openjpeg-build/ &&
make -j${MAKE_THREADS}
INSTALL_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/openjpeg/src/external_openjpeg-build/ &&
make install
INSTALL_DIR ${LIBDIR}/openjpeg
)
harvest(external_openjpeg openjpeg/include/openjpeg-${OPENJPEG_SHORT_VERSION} openjpeg/include "*.h")
harvest(external_openjpeg openjpeg/lib openjpeg/lib "*.a")
else()
set(OPENJPEG_EXTRA_ARGS ${DEFAULT_CMAKE_FLAGS})
ExternalProject_Add(external_openjpeg_msvc
URL file://${PACKAGE_DIR}/${OPENJPEG_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${OPENJPEG_HASH_TYPE}=${OPENJPEG_HASH}
PREFIX ${BUILD_DIR}/openjpeg_msvc
CMAKE_ARGS
${OPENJPEG_EXTRA_ARGS}
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/openjpeg_msvc
-DBUILD_SHARED_LIBS=Off
-DBUILD_THIRDPARTY=OFF
INSTALL_DIR ${LIBDIR}/openjpeg_msvc
)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_openjpeg_msvc after_install
COMMAND
${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/openjpeg_msvc/lib
${HARVEST_TARGET}/openjpeg/lib &&
${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/openjpeg_msvc/include
${HARVEST_TARGET}/openjpeg/include
DEPENDEES install
)
endif()
endif()
set(OPENJPEG_LIBRARY libopenjp2${LIBEXT})

View File

@@ -0,0 +1,46 @@
# SPDX-FileCopyrightText: 2025 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(OPENJPH_EXTRA_ARGS
-DOJPH_BUILD_TESTS=OFF
-DOJPH_ENABLE_TIFF_SUPPORT=OFF
-DOJPH_BUILD_EXECUTABLES=OFF
-DBUILD_SHARED_LIBS=ON
)
ExternalProject_Add(external_openjph
URL file://${PACKAGE_DIR}/${OPENJPH_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${OPENJPH_HASH_TYPE}=${OPENJPH_HASH}
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PREFIX ${BUILD_DIR}/openjph
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/openjph
${DEFAULT_CMAKE_FLAGS}
${OPENJPH_EXTRA_ARGS}
PATCH_COMMAND
${PATCH_CMD} -p 1 -N -d
${BUILD_DIR}/openjph/src/external_openjph/ <
${PATCH_DIR}/openjph_table_init_243.diff
INSTALL_DIR ${LIBDIR}/openjph
)
if(WIN32)
ExternalProject_Add_Step(external_openjph after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/openjph
${HARVEST_TARGET}/openjph
DEPENDEES install
)
else()
harvest(external_openjph openjph/include openjph/include "*.h")
# Cmake files first because harvest_rpath_lib edits them.
harvest(external_openjph openjph/lib/cmake/openjph openjph/lib/cmake/openjph "*.cmake")
harvest_rpath_lib(external_openjph openjph/lib openjph/lib "*${SHAREDLIBEXT}*")
endif()

View File

@@ -0,0 +1,79 @@
# SPDX-FileCopyrightText: 2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
# Note the utility apps may use png/tiff/gif system libraries, but the
# library itself does not depend on them, so should give no problems.
set(OPENPGL_EXTRA_ARGS
-DOPENPGL_BUILD_STATIC=ON
-DOPENPGL_TBB_ROOT=${LIBDIR}/tbb
-DTBB_ROOT=${LIBDIR}/tbb
-DCMAKE_DEBUG_POSTFIX=_d
)
if(BLENDER_PLATFORM_WINDOWS_ARM)
set(OPENPGL_LLVM_INSTALL_PATH ${LIBDIR}/llvm)
set(OPENPGL_EXTRA_ARGS
${OPENPGL_EXTRA_ARGS}
-DCMAKE_CXX_COMPILER=${OPENPGL_LLVM_INSTALL_PATH}/bin/clang-cl.exe
-DCMAKE_C_COMPILER=${OPENPGL_LLVM_INSTALL_PATH}/bin/clang-cl.exe
-DCMAKE_C_FLAGS_INIT="--target=arm64-pc-windows-msvc"
-DCMAKE_CXX_FLAGS_INIT="--target=arm64-pc-windows-msvc"
-DCMAKE_SHARED_LINKER_FLAGS=-L"${LIBDIR}/../../VS1564R/Release/llvm/lib"
)
endif()
if(TBB_STATIC_LIBRARY)
set(OPENPGL_EXTRA_ARGS
${OPENPGL_EXTRA_ARGS}
-DOPENPGL_TBB_COMPONENT=tbb_static
)
endif()
ExternalProject_Add(external_openpgl
URL file://${PACKAGE_DIR}/${OPENPGL_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${OPENPGL_HASH_TYPE}=${OPENPGL_HASH}
PREFIX ${BUILD_DIR}/openpgl
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/openpgl
${DEFAULT_CMAKE_FLAGS}
${OPENPGL_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/openpgl
)
add_dependencies(
external_openpgl
external_tbb
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_openpgl after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/openpgl
${HARVEST_TARGET}/openpgl
DEPENDEES install
)
else()
ExternalProject_Add_Step(external_openpgl after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/openpgl/lib/openpgl_d.lib
${HARVEST_TARGET}/openpgl/lib/openpgl_d.lib
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/openpgl/lib/cmake/openpgl-${OPENPGL_SHORT_VERSION}/openpgl_Exports-debug.cmake
${HARVEST_TARGET}/openpgl/lib/cmake/openpgl-${OPENPGL_SHORT_VERSION}/openpgl_Exports-debug.cmake
DEPENDEES install
)
endif()
else()
harvest(external_openpgl openpgl/include openpgl/include "*.h")
harvest(external_openpgl openpgl/lib openpgl/lib "*.a")
harvest(external_openpgl openpgl/lib/cmake/openpgl-${OPENPGL_SHORT_VERSION} openpgl/lib/cmake/openpgl "*.cmake")
endif()

View File

@@ -0,0 +1,77 @@
# SPDX-FileCopyrightText: 2017-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(OPENSUBDIV_EXTRA_ARGS
-DNO_LIB=OFF
-DNO_EXAMPLES=ON
-DNO_TUTORIALS=ON
-DNO_REGRESSION=ON
-DNO_PTEX=ON
-DNO_DOC=ON
-DNO_OMP=ON
-DNO_TBB=OFF
-DNO_CUDA=ON
-DNO_OPENCL=ON
-DNO_CLEW=ON
-DNO_OPENGL=OFF
-DNO_METAL=OFF
-DNO_DX=ON
-DNO_TESTS=ON
-DNO_GLTESTS=ON
-DNO_GLEW=ON
-DNO_GLFW=ON
-DNO_GLFW_X11=ON
-DTBB_DIR=${LIBDIR}/tbb/lib/cmake/tbb
)
ExternalProject_Add(external_opensubdiv
URL file://${PACKAGE_DIR}/${OPENSUBDIV_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${OPENSUBDIV_HASH_TYPE}=${OPENSUBDIV_HASH}
PREFIX ${BUILD_DIR}/opensubdiv
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/opensubdiv
-Wno-dev
${DEFAULT_CMAKE_FLAGS}
${OPENSUBDIV_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/opensubdiv
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_opensubdiv after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/opensubdiv/lib
${HARVEST_TARGET}/opensubdiv/lib
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/opensubdiv/include
${HARVEST_TARGET}/opensubdiv/include
DEPENDEES install
)
endif()
if(BUILD_MODE STREQUAL Debug)
ExternalProject_Add_Step(external_opensubdiv after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/opensubdiv/lib/osdCPU.lib
${HARVEST_TARGET}/opensubdiv/lib/osdCPU_d.lib
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/opensubdiv/lib/osdGPU.lib
${HARVEST_TARGET}/opensubdiv/lib/osdGPU_d.lib
DEPENDEES install
)
endif()
else()
harvest(external_opensubdiv opensubdiv/include opensubdiv/include "*.h")
harvest_rpath_lib(external_opensubdiv opensubdiv/lib opensubdiv/lib "*${SHAREDLIBEXT}*")
endif()
add_dependencies(
external_opensubdiv
external_tbb
)

View File

@@ -0,0 +1,125 @@
# SPDX-FileCopyrightText: 2017-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(BUILD_MODE STREQUAL Debug)
set(BLOSC_POST _d)
endif()
set(OPENVDB_EXTRA_ARGS
-DUSE_STATIC_DEPENDENCIES=OFF # This is the global toggle for static libs
# Once the above switch is off, you can set it
# for each individual library below.
-DBLOSC_USE_STATIC_LIBS=ON
-DTBB_USE_STATIC_LIBS=OFF
-DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY}
-DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include/
-DBlosc_INCLUDE_DIR=${LIBDIR}/blosc/include/
-DBlosc_LIBRARY=${LIBDIR}/blosc/lib/libblosc${BLOSC_POST}${LIBEXT}
-DBlosc_LIBRARY_RELEASE=${LIBDIR}/blosc/lib/libblosc${BLOSC_POST}${LIBEXT}
-DBlosc_LIBRARY_DEBUG=${LIBDIR}/blosc/lib/libblosc${BLOSC_POST}${LIBEXT}
-DOPENVDB_BUILD_UNITTESTS=OFF
-DOPENVDB_BUILD_NANOVDB=ON
-DNANOVDB_BUILD_TOOLS=OFF
-DBlosc_ROOT=${LIBDIR}/blosc/
-DTBB_ROOT=${LIBDIR}/tbb/
-DOPENVDB_CORE_SHARED=ON
-DOPENVDB_CORE_STATIC=OFF
-DOPENVDB_BUILD_BINARIES=OFF
-DCMAKE_DEBUG_POSTFIX=_d
-DUSE_NANOVDB=ON
-DOPENVDB_BUILD_PYTHON_MODULE=OFF
-DOPENVDB_PYTHON_WRAP_ALL_GRID_TYPES=OFF
-DPython_EXECUTABLE=${PYTHON_BINARY}
-Dnanobind_DIR=${LIBDIR}/nanobind/nanobind/cmake/
# Needed to still build with VS2019
-DDISABLE_DEPENDENCY_VERSION_CHECKS=ON
# Not used by Blender (see e4f9c50), and removes the Boost dependency.
-DOPENVDB_USE_DELAYED_LOADING=OFF
# OPENVDB_AX Disabled for now as it adds ~25MB distribution wise
# with no blender code depending on it, seems wasteful.
# -DOPENVDB_BUILD_AX=ON
# -DOPENVDB_AX_SHARED=ON
# -DOPENVDB_AX_STATIC=OFF
# -DLLVM_DIR=${LIBDIR}/llvm/lib/cmake/llvm
)
set(OPENVDB_PATCH
${PATCH_CMD} -p 1 -d
${BUILD_DIR}/openvdb/src/external_openvdb <
${PATCH_DIR}/openvdb.diff
)
ExternalProject_Add(external_openvdb
URL file://${PACKAGE_DIR}/${OPENVDB_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${OPENVDB_HASH_TYPE}=${OPENVDB_HASH}
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PREFIX ${BUILD_DIR}/openvdb
PATCH_COMMAND ${OPENVDB_PATCH}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/openvdb
${DEFAULT_CMAKE_FLAGS}
${OPENVDB_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/openvdb
)
add_dependencies(
external_openvdb
external_tbb
external_zlib
external_blosc
)
if(WIN32)
if(BLENDER_PLATFORM_ARM)
set(OPENVDB_ARCH arm64)
else()
set(OPENVDB_ARCH amd64)
endif()
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_openvdb after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/openvdb/include
${HARVEST_TARGET}/openvdb/include
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/openvdb/lib/openvdb.lib
${HARVEST_TARGET}/openvdb/lib/openvdb.lib
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/openvdb/bin/openvdb.dll
${HARVEST_TARGET}/openvdb/bin/openvdb.dll
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/openvdb/lib/python${PYTHON_SHORT_VERSION}/site-packages/openvdb.cp${PYTHON_SHORT_VERSION_NO_DOTS}-win_${OPENVDB_ARCH}.pyd
${HARVEST_TARGET}/openvdb/python/openvdb.cp${PYTHON_SHORT_VERSION_NO_DOTS}-win_${OPENVDB_ARCH}.pyd
DEPENDEES install
)
endif()
if(BUILD_MODE STREQUAL Debug)
ExternalProject_Add_Step(external_openvdb after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/openvdb/lib/openvdb_d.lib
${HARVEST_TARGET}/openvdb/lib/openvdb_d.lib
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/openvdb/bin/openvdb_d.dll
${HARVEST_TARGET}/openvdb/bin/openvdb_d.dll
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/openvdb/lib/python${PYTHON_SHORT_VERSION}/site-packages/openvdb_d.cp${PYTHON_SHORT_VERSION_NO_DOTS}-win_${OPENVDB_ARCH}.pyd
${HARVEST_TARGET}/openvdb/python/openvdb_d.cp${PYTHON_SHORT_VERSION_NO_DOTS}-win_${OPENVDB_ARCH}.pyd
DEPENDEES install
)
endif()
else()
harvest(external_openvdb openvdb/include/openvdb openvdb/include/openvdb "*.h")
harvest(external_openvdb openvdb/include/nanovdb openvdb/include/nanovdb "*.h")
harvest_rpath_lib(external_openvdb openvdb/lib openvdb/lib "lib*${SHAREDLIBEXT}*")
harvest_rpath_python(
external_openvdb
openvdb/lib/python${PYTHON_SHORT_VERSION}
python/lib/python${PYTHON_SHORT_VERSION}
"openvdb*"
)
endif()

View File

@@ -0,0 +1,324 @@
# SPDX-FileCopyrightText: 2017-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(WIN32)
option(ENABLE_MSYS2 "Enable building of ffmpeg/libsndfile/fftw3/gmp by installing msys2" ON)
option(MSYS2_USE_UPSTREAM_PACKAGES "Use upstream packages to bootstrap msys2, when OFF the blender mirror will be used" OFF)
endif()
option(FORCE_CHECK_HASH "Force a check of all hashes during CMake the configure phase" OFF)
cmake_host_system_information(RESULT NUM_CORES QUERY NUMBER_OF_LOGICAL_CORES)
set(MAKE_THREADS ${NUM_CORES} CACHE STRING "Number of threads to run make with")
# Any python module building with setup.py cannot use multiple threads on windows
# as they will try to write to the same .pdb file simultaneously which causes
# build errors.
if(WIN32)
set(PYTHON_MAKE_THREADS 1)
else()
set(PYTHON_MAKE_THREADS ${MAKE_THREADS})
endif()
if(NOT BUILD_MODE)
set(BUILD_MODE "Release")
message(STATUS "Build type not specified: defaulting to a release build.")
endif()
message(STATUS "BuildMode = ${BUILD_MODE}")
if(BUILD_MODE STREQUAL "Debug")
set(LIBDIR ${CMAKE_CURRENT_BINARY_DIR}/Debug)
set(MESON_BUILD_TYPE -Dbuildtype=debug)
else()
set(LIBDIR ${CMAKE_CURRENT_BINARY_DIR}/Release)
set(MESON_BUILD_TYPE -Dbuildtype=release)
endif()
set(DOWNLOAD_DIR "${CMAKE_CURRENT_BINARY_DIR}/downloads" CACHE STRING "Path for downloaded files")
set(PACKAGE_DIR "${CMAKE_CURRENT_BINARY_DIR}/packages" CACHE PATH "default path for downloaded packages")
option(PACKAGE_USE_UPSTREAM_SOURCES "Use sources upstream to download the package sources, when OFF the blender mirror will be used" ON)
file(TO_CMAKE_PATH ${DOWNLOAD_DIR} DOWNLOAD_DIR)
file(TO_CMAKE_PATH ${PACKAGE_DIR} PACKAGE_DIR)
set(PATCH_DIR ${CMAKE_CURRENT_SOURCE_DIR}/patches)
set(BUILD_DIR ${CMAKE_CURRENT_BINARY_DIR}/build)
message(STATUS "LIBDIR = ${LIBDIR}")
message(STATUS "DOWNLOAD_DIR = ${DOWNLOAD_DIR}")
message(STATUS "PACKAGE_DIR = ${PACKAGE_DIR}")
message(STATUS "PATCH_DIR = ${PATCH_DIR}")
message(STATUS "BUILD_DIR = ${BUILD_DIR}")
if(WIN32)
if(CMAKE_SYSTEM_PROCESSOR STREQUAL "ARM64")
set(BLENDER_PLATFORM_ARM ON)
set(BLENDER_PLATFORM_WINDOWS_ARM ON)
endif()
set(PATCH_CMD ${DOWNLOAD_DIR}/msys2/msys64/usr/bin/patch.exe)
set(LIBEXT ".lib")
set(SHAREDLIBEXT ".lib")
set(LIBPREFIX "")
set(MESON ${LIBDIR}/python/Scripts/meson)
# For OIIO and OSL
set(COMMON_DEFINES /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS)
if(MSVC_VERSION GREATER 1909)
# Some deps with warnings as error aren't quite ready for dealing with the new 2017 warnings.
set(COMMON_MSVC_FLAGS "/Wv:18")
endif()
string(APPEND COMMON_MSVC_FLAGS " /bigobj /experimental:deterministic /utf-8")
if(NOT BLENDER_PLATFORM_WINDOWS_ARM) #x64
string(APPEND COMMON_MSVC_FLAGS " /arch:SSE4.2")
endif()
# To keep MSVC from oversubscribing the CPU, force it to single threaded mode
# msbuild/ninja will queue as many compile units as there are cores, no need for
# MSVC to be internally threading as well.
string(APPEND COMMON_MSVC_FLAGS " /cgthreads1 ")
if(WITH_OPTIMIZED_DEBUG)
set(BLENDER_CMAKE_C_FLAGS_DEBUG "/MDd ${COMMON_MSVC_FLAGS} /O2 /Ob2 /D_DEBUG /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
else()
set(BLENDER_CMAKE_C_FLAGS_DEBUG "/MDd ${COMMON_MSVC_FLAGS} /Zi /Ob0 /Od /RTC1 /D_DEBUG /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
endif()
set(BLENDER_CMAKE_C_FLAGS_MINSIZEREL "/MD ${COMMON_MSVC_FLAGS} /O1 /Ob1 /D NDEBUG /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
set(BLENDER_CMAKE_C_FLAGS_RELEASE "/MD ${COMMON_MSVC_FLAGS} /O2 /Ob2 /DNDEBUG /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
set(BLENDER_CMAKE_C_FLAGS_RELWITHDEBINFO "/MD ${COMMON_MSVC_FLAGS} /Zi /O2 /Ob1 /D NDEBUG /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
if(WITH_OPTIMIZED_DEBUG)
set(BLENDER_CMAKE_CXX_FLAGS_DEBUG "/MDd ${COMMON_MSVC_FLAGS} /D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS /O2 /Ob2 /D_DEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
else()
set(BLENDER_CMAKE_CXX_FLAGS_DEBUG "/D_DEBUG /D PLATFORM_WINDOWS /D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS /MTd ${COMMON_MSVC_FLAGS} /Zi /Ob0 /Od /RTC1 /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
endif()
set(BLENDER_CMAKE_CXX_FLAGS_MINSIZEREL "/MD ${COMMON_MSVC_FLAGS} /D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS /O1 /Ob1 /D NDEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
set(BLENDER_CMAKE_CXX_FLAGS_RELEASE "/MD ${COMMON_MSVC_FLAGS} /D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS /O2 /Ob2 /D NDEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
set(BLENDER_CMAKE_CXX_FLAGS_RELWITHDEBINFO "/MD ${COMMON_MSVC_FLAGS} /D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS /Zi /O2 /Ob1 /D NDEBUG /D PLATFORM_WINDOWS /DPSAPI_VERSION=2 /DTINYFORMAT_ALLOW_WCHAR_STRINGS")
# Set similar flags for CLANG compilation.
set(COMMON_CLANG_FLAGS "-D_DLL -D_MT") # Equivalent to MSVC /MD
if(WITH_OPTIMIZED_DEBUG)
set(BLENDER_CLANG_CMAKE_C_FLAGS_DEBUG "${COMMON_CLANG_FLAGS} -Xclang --dependent-lib=msvcrtd -O2 -D_DEBUG -DPSAPI_VERSION=2 -DTINYFORMAT_ALLOW_WCHAR_STRINGS")
else()
set(BLENDER_CLANG_CMAKE_C_FLAGS_DEBUG "${COMMON_CLANG_FLAGS} -Xclang --dependent-lib=msvcrtd -g -D_DEBUG -DPSAPI_VERSION=2 -DTINYFORMAT_ALLOW_WCHAR_STRINGS")
endif()
set(BLENDER_CLANG_CMAKE_C_FLAGS_MINSIZEREL "${COMMON_CLANG_FLAGS} -Xclang --dependent-lib=msvcrt -Os -DNDEBUG -DPSAPI_VERSION=2 -DTINYFORMAT_ALLOW_WCHAR_STRINGS")
set(BLENDER_CLANG_CMAKE_C_FLAGS_RELEASE "${COMMON_CLANG_FLAGS} -Xclang --dependent-lib=msvcrt -O2 -DNDEBUG -DPSAPI_VERSION=2 -DTINYFORMAT_ALLOW_WCHAR_STRINGS")
set(BLENDER_CLANG_CMAKE_C_FLAGS_RELWITHDEBINFO "${COMMON_CLANG_FLAGS} -Xclang --dependent-lib=msvcrt -g -O2 -DNDEBUG -DPSAPI_VERSION=2 -DTINYFORMAT_ALLOW_WCHAR_STRINGS")
if(WITH_OPTIMIZED_DEBUG)
set(BLENDER_CLANG_CMAKE_CXX_FLAGS_DEBUG "${COMMON_CLANG_FLAGS} -Xclang --dependent-lib=msvcrtd -D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS -O2 -D_DEBUG -DPLATFORM_WINDOWS -DPSAPI_VERSION=2 -DTINYFORMAT_ALLOW_WCHAR_STRINGS")
else()
set(BLENDER_CLANG_CMAKE_CXX_FLAGS_DEBUG "${COMMON_CLANG_FLAGS} -Xclang --dependent-lib=msvcrtd -D_DEBUG -DPLATFORM_WINDOWS -D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS -g -DPSAPI_VERSION=2 -DTINYFORMAT_ALLOW_WCHAR_STRINGS")
endif()
set(BLENDER_CLANG_CMAKE_CXX_FLAGS_MINSIZEREL "${COMMON_CLANG_FLAGS} -Xclang --dependent-lib=msvcrt -D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS -O2 -DNDEBUG -DPLATFORM_WINDOWS -DPSAPI_VERSION=2 -DTINYFORMAT_ALLOW_WCHAR_STRINGS")
set(BLENDER_CLANG_CMAKE_CXX_FLAGS_RELEASE "${COMMON_CLANG_FLAGS} -Xclang --dependent-lib=msvcrt -D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS -O2 -DNDEBUG -DPLATFORM_WINDOWS -DPSAPI_VERSION=2 -DTINYFORMAT_ALLOW_WCHAR_STRINGS")
set(BLENDER_CLANG_CMAKE_CXX_FLAGS_RELWITHDEBINFO "${COMMON_CLANG_FLAGS} -Xclang --dependent-lib=msvcrt -D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS -g -O2 -DNDEBUG -DPLATFORM_WINDOWS -DPSAPI_VERSION=2 -DTINYFORMAT_ALLOW_WCHAR_STRINGS")
set(DEFAULT_CLANG_CMAKE_FLAGS
-DCMAKE_BUILD_TYPE=${BUILD_MODE}
-DCMAKE_C_FLAGS_DEBUG=${BLENDER_CLANG_CMAKE_C_FLAGS_DEBUG}
-DCMAKE_C_FLAGS_MINSIZEREL=${BLENDER_CLANG_CMAKE_C_FLAGS_MINSIZEREL}
-DCMAKE_C_FLAGS_RELEASE=${BLENDER_CLANG_CMAKE_C_FLAGS_RELEASE}
-DCMAKE_C_FLAGS_RELWITHDEBINFO=${BLENDER_CLANG_CMAKE_C_FLAGS_RELWITHDEBINFO}
-DCMAKE_CXX_FLAGS_DEBUG=${BLENDER_CLANG_CMAKE_CXX_FLAGS_DEBUG}
-DCMAKE_CXX_FLAGS_MINSIZEREL=${BLENDER_CLANG_CMAKE_CXX_FLAGS_MINSIZEREL}
-DCMAKE_CXX_FLAGS_RELEASE=${BLENDER_CLANG_CMAKE_CXX_FLAGS_RELEASE}
-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=${BLENDER_CLANG_CMAKE_CXX_FLAGS_RELWITHDEBINFO}
-DCMAKE_CXX_STANDARD=20
)
set(PLATFORM_FLAGS "")
if(BLENDER_PLATFORM_ARM)
# In some cases on ARM64 (unsure why), dep builds using the "Ninja" generator appear to use
# the x86 host tools (ie, x86 cl.exe producing ARM64 binaries). This is problematic when
# building things like LLVM, as memory is limited to 3GB, giving internal compiler errors.
# Here, we set CMAKE_C_COMPILER et al via PLATFORM_CMAKE_FLAGS to point to the ARM64 native
# binary, which doesn't have this issue.
# We make an assumption that the tools (ie, right now in the code) are the ones we want
set(PLATFORM_CMAKE_FLAGS
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_AR=${CMAKE_AR}
-DCMAKE_LINKER=${CMAKE_LINKER}
-DCMAKE_MT=${CMAKE_MT}
-DCMAKE_RC_COMPILER=${CMAKE_RC_COMPILER}
)
else()
set(PLATFORM_CMAKE_FLAGS "")
endif()
set(MINGW_PATH ${DOWNLOAD_DIR}/msys2/msys64/)
set(MINGW_SHELL ming64sh.cmd)
set(PERL_SHELL ${DOWNLOAD_DIR}/perl/portableshell.bat)
set(MINGW_HOST x86_64-w64-mingw32)
set(MINGW_CFLAGS "")
set(MINGW_LDFLAGS "")
# some build systems like meson will respect the *nix like environment vars
# like CFLAGS and LDFlags but will still build with the MSVC compiler, so for
# those we need to empty out the gcc style flags that are normally in there.
set(CONFIGURE_ENV_MSVC
cd ${MINGW_PATH} &&
call ${PERL_SHELL} &&
call ${MINGW_SHELL} &&
set path &&
set CFLAGS= &&
set LDFLAGS=
)
set(CONFIGURE_ENV
cd ${MINGW_PATH} &&
call ${PERL_SHELL} &&
call ${MINGW_SHELL} &&
set path &&
set CC=cl &&
set CXX=cl &&
set CFLAGS=${MINGW_CFLAGS} &&
set LDFLAGS=${MINGW_LDFLAGS}
)
set(CONFIGURE_ENV_NO_PERL
cd ${MINGW_PATH} &&
call ${MINGW_SHELL} &&
set path &&
set CC=cl &&
set CXX=cl &&
set LD=link &&
set CFLAGS=${MINGW_CFLAGS} &&
set LDFLAGS=${MINGW_LDFLAGS}
)
set(CONFIGURE_ENV_CLANG_CL_NO_PERL
cd ${MINGW_PATH} &&
call ${MINGW_SHELL} &&
set path &&
set CC=${LIBDIR}/llvm/bin/clang-cl.exe &&
set CXX=${LIBDIR}/llvm/bin/clang-cl.exe &&
set RANLIB=${LIBDIR}/llvm/bin/llvm-ranlib.exe &&
set RC=${LIBDIR}/llvm/bin/llvm-rc.exe &&
set AR=${LIBDIR}/llvm/bin/llvm-ar.exe &&
set CFLAGS=${MINGW_CFLAGS} &&
set LDFLAGS=${MINGW_LDFLAGS}
)
set(CONFIGURE_COMMAND sh ./configure)
set(CONFIGURE_COMMAND_NO_TARGET ${CONFIGURE_COMMAND})
else()
set(PATCH_CMD patch)
set(LIBEXT ".a")
set(LIBPREFIX "lib")
set(MESON ${LIBDIR}/python/bin/meson)
if(APPLE)
set(SHAREDLIBEXT ".dylib")
# Use same Xcode detection as Blender itself.
include(../cmake/platform/platform_apple_xcode.cmake)
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
set(BLENDER_PLATFORM_ARM ON)
endif()
set(PLATFORM_CFLAGS "-isysroot ${CMAKE_OSX_SYSROOT} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -arch ${CMAKE_OSX_ARCHITECTURES}")
set(PLATFORM_CXXFLAGS "-isysroot ${CMAKE_OSX_SYSROOT} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -std=c++20 -stdlib=libc++ -arch ${CMAKE_OSX_ARCHITECTURES}")
set(PLATFORM_LDFLAGS "-isysroot ${CMAKE_OSX_SYSROOT} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET} -arch ${CMAKE_OSX_ARCHITECTURES} -headerpad_max_install_names")
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "x86_64")
set(PLATFORM_BUILD_TARGET --build=x86_64-apple-darwin19.0.0) # OS X 10.15
else()
set(PLATFORM_BUILD_TARGET --build=aarch64-apple-darwin20.0.0) # macOS 11.00
endif()
set(PLATFORM_CMAKE_FLAGS
-DCMAKE_OSX_ARCHITECTURES:STRING=${CMAKE_OSX_ARCHITECTURES}
-DCMAKE_OSX_DEPLOYMENT_TARGET:STRING=${CMAKE_OSX_DEPLOYMENT_TARGET}
-DCMAKE_OSX_SYSROOT:PATH=${CMAKE_OSX_SYSROOT}
)
else()
set(SHAREDLIBEXT ".so")
if("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")
set(BLENDER_PLATFORM_ARM ON)
endif()
set(PLATFORM_CFLAGS "-fPIC")
set(PLATFORM_CXXFLAGS "-std=c++20 -fPIC")
set(PLATFORM_LDFLAGS "")
set(PLATFORM_BUILD_TARGET "")
set(PLATFORM_CMAKE_FLAGS -DCMAKE_INSTALL_LIBDIR=lib)
# Target ARMv8.2-A with dot product and half float.
if(BLENDER_PLATFORM_ARM)
set(PLATFORM_CFLAGS "${PLATFORM_CFLAGS} -march=armv8.2-a+dotprod+fp16+lse")
set(PLATFORM_CXXFLAGS "${PLATFORM_CXXFLAGS} -fPIC -march=armv8.2-a+dotprod+fp16+lse")
endif()
endif()
if(WITH_OPTIMIZED_DEBUG)
set(BLENDER_CMAKE_C_FLAGS_DEBUG "-O2 -DNDEBUG ${PLATFORM_CFLAGS}")
else()
set(BLENDER_CMAKE_C_FLAGS_DEBUG "-g ${PLATFORM_CFLAGS}")
endif()
set(BLENDER_CMAKE_C_FLAGS_MINSIZEREL "-Os -DNDEBUG ${PLATFORM_CFLAGS}")
set(BLENDER_CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG ${PLATFORM_CFLAGS}")
set(BLENDER_CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g -DNDEBUG ${PLATFORM_CFLAGS}")
if(WITH_OPTIMIZED_DEBUG)
set(BLENDER_CMAKE_CXX_FLAGS_DEBUG "-O2 -DNDEBUG ${PLATFORM_CXXFLAGS}")
else()
set(BLENDER_CMAKE_CXX_FLAGS_DEBUG "-g ${PLATFORM_CXXFLAGS}")
endif()
set(BLENDER_CMAKE_CXX_FLAGS_MINSIZEREL "-Os -DNDEBUG ${PLATFORM_CXXFLAGS}")
set(BLENDER_CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG ${PLATFORM_CXXFLAGS}")
set(BLENDER_CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DNDEBUG ${PLATFORM_CXXFLAGS}")
set(CONFIGURE_ENV
export MACOSX_DEPLOYMENT_TARGET=${CMAKE_OSX_DEPLOYMENT_TARGET} &&
export MACOSX_SDK_VERSION=${CMAKE_OSX_DEPLOYMENT_TARGET} &&
export CFLAGS=${PLATFORM_CFLAGS} &&
export CXXFLAGS=${PLATFORM_CXXFLAGS} &&
export LDFLAGS=${PLATFORM_LDFLAGS}
)
set(CONFIGURE_ENV_NO_PERL ${CONFIGURE_ENV})
set(CONFIGURE_COMMAND ./configure ${PLATFORM_BUILD_TARGET})
set(CONFIGURE_COMMAND_NO_TARGET ./configure)
endif()
set(DEFAULT_CMAKE_FLAGS
-DCMAKE_BUILD_TYPE=${BUILD_MODE}
-DCMAKE_C_FLAGS_DEBUG=${BLENDER_CMAKE_C_FLAGS_DEBUG}
-DCMAKE_C_FLAGS_MINSIZEREL=${BLENDER_CMAKE_C_FLAGS_MINSIZEREL}
-DCMAKE_C_FLAGS_RELEASE=${BLENDER_CMAKE_C_FLAGS_RELEASE}
-DCMAKE_C_FLAGS_RELWITHDEBINFO=${BLENDER_CMAKE_C_FLAGS_RELWITHDEBINFO}
-DCMAKE_CXX_FLAGS_DEBUG=${BLENDER_CMAKE_CXX_FLAGS_DEBUG}
-DCMAKE_CXX_FLAGS_MINSIZEREL=${BLENDER_CMAKE_CXX_FLAGS_MINSIZEREL}
-DCMAKE_CXX_FLAGS_RELEASE=${BLENDER_CMAKE_CXX_FLAGS_RELEASE}
-DCMAKE_CXX_FLAGS_RELWITHDEBINFO=${BLENDER_CMAKE_CXX_FLAGS_RELWITHDEBINFO}
-DCMAKE_CXX_STANDARD=20
${PLATFORM_CMAKE_FLAGS}
)
if(WIN32)
if(BUILD_MODE STREQUAL Debug)
set(ZLIB_LIBRARY zlibstaticd${LIBEXT})
else()
set(ZLIB_LIBRARY zlibstatic${LIBEXT})
endif()
else()
set(ZLIB_LIBRARY libz${LIBEXT})
endif()
if(MSVC)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
endif()
set(CMAKE_INSTALL_MESSAGE LAZY)
# On windows we sometimes want to build with ninja, but not all projects quite
# yet, so for select project we pass PLATFORM_ALT_GENERATOR as the generator
if(WIN32)
set(PLATFORM_ALT_GENERATOR "Ninja")
else()
set(PLATFORM_ALT_GENERATOR "Unix Makefiles")
endif()

View File

@@ -0,0 +1,59 @@
# SPDX-FileCopyrightText: 2002-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(MSVC)
set(OPUS_CMAKE_ARGS
-DPACKAGE_VERSION=${OPUS_VERSION}
-DOPUS_BUILD_PROGRAMS=OFF
-DOPUS_BUILD_TESTING=OFF
)
endif()
if(NOT WIN32)
ExternalProject_Add(external_opus
URL file://${PACKAGE_DIR}/${OPUS_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${OPUS_HASH_TYPE}=${OPUS_HASH}
PREFIX ${BUILD_DIR}/opus
CONFIGURE_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/opus/src/external_opus/ &&
${CONFIGURE_COMMAND}
--prefix=${LIBDIR}/opus
--disable-shared
--enable-static
--with-pic
--disable-maintainer-mode
BUILD_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/opus/src/external_opus/ &&
make -j${MAKE_THREADS}
INSTALL_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/opus/src/external_opus/ &&
make install
INSTALL_DIR ${LIBDIR}/opus
)
harvest(external_opus opus/lib ffmpeg/lib "*.a")
else()
ExternalProject_Add(external_opus
URL file://${PACKAGE_DIR}/${OPUS_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${OPUS_HASH_TYPE}=${OPUS_HASH}
PREFIX ${BUILD_DIR}/opus
PATCH_COMMAND COMMAND
${PATCH_CMD} -p 1 -d
${BUILD_DIR}/opus/src/external_opus <
${PATCH_DIR}/opus_windows.diff
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/opus
${OPUS_CMAKE_ARGS}
INSTALL_DIR ${LIBDIR}/opus
)
endif()

View File

@@ -0,0 +1,176 @@
# SPDX-FileCopyrightText: 2017-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
string(REPLACE "-DCMAKE_CXX_STANDARD=20" " " OSL_CMAKE_FLAGS "${DEFAULT_CMAKE_FLAGS}")
if(WIN32)
set(OSL_CMAKE_CXX_STANDARD_LIBRARIES "kernel32${LIBEXT} user32${LIBEXT} gdi32${LIBEXT} winspool${LIBEXT} shell32${LIBEXT} ole32${LIBEXT} oleaut32${LIBEXT} uuid${LIBEXT} comdlg32${LIBEXT} advapi32${LIBEXT} psapi${LIBEXT}")
set(OSL_CMAKE_LINKER_FLAGS "")
set(OSL_FLEX_BISON -DFLEX_EXECUTABLE=${LIBDIR}/flexbison/win_flex.exe -DBISON_EXECUTABLE=${LIBDIR}/flexbison/win_bison.exe)
else()
set(OSL_CMAKE_CXX_STANDARD_LIBRARIES "")
# llvm-config will add -lxml2. Make sure it can be found and that no system
# library is used instead.
set(OSL_CMAKE_LINKER_FLAGS "-L${LIBDIR}/xml2/lib")
set(OSL_OPENIMAGEIO_LIBRARY "${LIBDIR}/openimageio/lib/OpenImageIO${SHAREDLIBEXT};${LIBDIR}/openexr/lib/IlmImf${OPENEXR_VERSION_POSTFIX}${SHAREDLIBEXT}")
if(APPLE)
# Explicitly specify Homebrew path, so we don't use the old system one.
if(BLENDER_PLATFORM_ARM)
set(OSL_FLEX_BISON -DBISON_EXECUTABLE=/opt/homebrew/opt/bison/bin/bison)
else()
set(OSL_FLEX_BISON -DBISON_EXECUTABLE=/usr/local/opt/bison/bin/bison)
endif()
else()
set(OSL_FLEX_BISON "")
endif()
endif()
set(OSL_EXTRA_ARGS
-DOpenImageIO_ROOT=${LIBDIR}/openimageio/
-DOSL_BUILD_TESTS=OFF
-DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY}
-DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include/
${OSL_FLEX_BISON}
-DCMAKE_CXX_STANDARD_LIBRARIES=${OSL_CMAKE_CXX_STANDARD_LIBRARIES}
-DCMAKE_EXE_LINKER_FLAGS=${OSL_CMAKE_LINKER_FLAGS}
-DCMAKE_SHARED_LINKER_FLAGS=${OSL_CMAKE_LINKER_FLAGS}
-DBUILD_SHARED_LIBS=ON
-DLINKSTATIC=OFF
-DOSL_BUILD_PLUGINS=OFF
-DSTOP_ON_WARNING=OFF
-DUSE_LLVM_BITCODE=ON
-DLLVM_ROOT=${LIBDIR}/llvm/
-DLLVM_STATIC=ON
-DUSE_PARTIO=OFF
-DUSE_QT=OFF
-DINSTALL_DOCS=OFF
-Dpugixml_ROOT=${LIBDIR}/pugixml
-DUSE_PYTHON=ON
-DImath_ROOT=${LIBDIR}/imath
-DCMAKE_DEBUG_POSTFIX=_d
-Dpybind11_ROOT=${LIBDIR}/pybind11
-DPython_ROOT=${LIBDIR}/python
-DPython_EXECUTABLE=${PYTHON_BINARY}
-DPython3_EXECUTABLE=${PYTHON_BINARY}
-Dlibdeflate_DIR=${LIBDIR}/deflate/lib/cmake/libdeflate
)
if(NOT (APPLE OR BLENDER_PLATFORM_WINDOWS_ARM))
list(APPEND OSL_EXTRA_ARGS
-DOSL_USE_OPTIX=ON
-DCUDA_TARGET_ARCH=sm_50
-DCUDA_TOOLKIT_ROOT_DIR=${CUDAToolkit_ROOT}
)
endif()
ExternalProject_Add(external_osl
URL file://${PACKAGE_DIR}/${OSL_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
LIST_SEPARATOR ^^
URL_HASH ${OSL_HASH_TYPE}=${OSL_HASH}
PREFIX ${BUILD_DIR}/osl
PATCH_COMMAND
${PATCH_CMD} -p 1 -d
${BUILD_DIR}/osl/src/external_osl <
${PATCH_DIR}/osl.diff &&
${PATCH_CMD} -p 1 -d
${BUILD_DIR}/osl/src/external_osl <
${PATCH_DIR}/osl_ptx_version.diff &&
${PATCH_CMD} -p 1 -d
${BUILD_DIR}/osl/src/external_osl <
${PATCH_DIR}/osl_relative_inc_cmake.diff
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/osl
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
${OSL_CMAKE_FLAGS}
${OSL_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/osl
)
add_dependencies(
external_osl
external_llvm
external_openexr
external_zlib
external_openimageio
external_pugixml
external_python
external_pybind11
)
if(WIN32)
add_dependencies(
external_osl
external_flexbison
)
elseif(UNIX AND NOT APPLE)
add_dependencies(
external_osl
external_flex
)
endif()
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_osl after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/osl/
${HARVEST_TARGET}/osl
DEPENDEES install
)
endif()
if(BUILD_MODE STREQUAL Debug)
ExternalProject_Add_Step(external_osl after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/osl/lib/cmake/OSL/OSLTargets-debug.cmake
${HARVEST_TARGET}/osl/lib/cmake/OSL/OSLTargets-debug.cmake
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/osl/lib/oslcomp_d.lib
${HARVEST_TARGET}/osl/lib/oslcomp_d.lib
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/osl/lib/oslexec_d.lib
${HARVEST_TARGET}/osl/lib/oslexec_d.lib
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/osl/lib/oslquery_d.lib
${HARVEST_TARGET}/osl/lib/oslquery_d.lib
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/osl/lib/oslnoise_d.lib
${HARVEST_TARGET}/osl/lib/oslnoise_d.lib
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/osl/bin/oslcomp_d.dll
${HARVEST_TARGET}/osl/bin/oslcomp_d.dll
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/osl/bin/oslexec_d.dll
${HARVEST_TARGET}/osl/bin/oslexec_d.dll
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/osl/bin/oslquery_d.dll
${HARVEST_TARGET}/osl/bin/oslquery_d.dll
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/osl/bin/oslnoise_d.dll
${HARVEST_TARGET}/osl/bin/oslnoise_d.dll
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/osl/lib/python${PYTHON_SHORT_VERSION}/
${HARVEST_TARGET}/osl/lib/python${PYTHON_SHORT_VERSION}_debug/
DEPENDEES install
)
endif()
else()
harvest_rpath_bin(external_osl osl/bin osl/bin "*")
harvest(external_osl osl/include osl/include "*.h")
# Cmake files first because harvest_rpath_lib edits them.
harvest(external_osl osl/lib/cmake/OSL osl/lib/cmake/OSL "*.cmake")
harvest_rpath_lib(external_osl osl/lib osl/lib "*${SHAREDLIBEXT}*")
harvest(external_osl osl/share/OSL/shaders osl/share/OSL/shaders "*.h")
harvest_rpath_python(external_osl
osl/lib/python${PYTHON_SHORT_VERSION}
python/lib/python${PYTHON_SHORT_VERSION}
"*"
)
endif()

View File

@@ -0,0 +1,106 @@
# SPDX-FileCopyrightText: 2019-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(MSVC)
set(PYTARGET ${HARVEST_TARGET}/python/${PYTHON_SHORT_VERSION_NO_DOTS})
set(PYSRC ${LIBDIR}/python/)
if(BUILD_MODE STREQUAL Release)
add_custom_command(
OUTPUT ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
COMMAND echo packaging python
COMMAND echo this should output at ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
COMMAND ${CMAKE_COMMAND} -E make_directory ${PYTARGET}/libs
COMMAND ${CMAKE_COMMAND} -E copy
${PYSRC}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}.lib
${PYTARGET}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}.lib
COMMAND ${CMAKE_COMMAND} -E copy
${PYSRC}/python.exe
${PYTARGET}/bin/python.exe
COMMAND ${CMAKE_COMMAND} -E copy
${PYSRC}/python${PYTHON_SHORT_VERSION_NO_DOTS}.dll
${PYTARGET}/bin/python${PYTHON_SHORT_VERSION_NO_DOTS}.dll
COMMAND ${CMAKE_COMMAND} -E copy
${PYSRC}/python3${PYTHON_POSTFIX}.dll
${PYTARGET}/bin/python3${PYTHON_POSTFIX}.dll
COMMAND ${CMAKE_COMMAND} -E copy
${PYSRC}/python${PYTHON_SHORT_VERSION_NO_DOTS}.pdb
${PYTARGET}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}.pdb
COMMAND ${CMAKE_COMMAND} -E copy_directory
${PYSRC}/include/
${PYTARGET}/include/
COMMAND ${CMAKE_COMMAND} -E copy_directory
${PYSRC}/lib/
${PYTARGET}/lib/
COMMAND ${CMAKE_COMMAND} -E copy_directory
${PYSRC}/DLLs/
${PYTARGET}/DLLs/
COMMAND cd ${PYTARGET}/lib/ &&
for /d /r . %%d in (__pycache__) do @if exist "%%d" echo "%%d" &&
rd /s/q "%%d"
)
add_custom_target(Package_Python
ALL
DEPENDS
external_python
external_numpy
external_python_site_packages
external_zstandard
external_cython
OUTPUT
${HARVEST_TARGET}/python/${PYTHON_SHORT_VERSION_NO_DOTS}/bin/python${PYTHON_POSTFIX}.exe
)
endif()
if(BUILD_MODE STREQUAL Debug)
add_custom_command(
OUTPUT ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
COMMAND echo packaging python
COMMAND echo this should output at ${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
COMMAND ${CMAKE_COMMAND} -E make_directory ${PYTARGET}/libs
COMMAND ${CMAKE_COMMAND} -E copy
${PYSRC}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.lib
${PYTARGET}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.lib
COMMAND ${CMAKE_COMMAND} -E copy
${PYSRC}/python${PYTHON_POSTFIX}.exe
${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
COMMAND ${CMAKE_COMMAND} -E copy
${PYSRC}/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.dll
${PYTARGET}/bin/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.dll
COMMAND ${CMAKE_COMMAND} -E copy
${PYSRC}/python3${PYTHON_POSTFIX}.dll
${PYTARGET}/bin/python3${PYTHON_POSTFIX}.dll
COMMAND ${CMAKE_COMMAND} -E copy
${PYSRC}/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.pdb
${PYTARGET}/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.pdb
COMMAND ${CMAKE_COMMAND} -E copy_directory
${PYSRC}/include/
${PYTARGET}/include/
COMMAND ${CMAKE_COMMAND} -E copy_directory
${PYSRC}/lib/
${PYTARGET}/lib/
COMMAND ${CMAKE_COMMAND} -E copy_directory
${PYSRC}/DLLs/
${PYTARGET}/DLLs/
COMMAND cd ${PYTARGET}/lib/ &&
for /d /r . %%d in (__pycache__) do @if exist "%%d" echo "%%d" &&
rd /s/q "%%d"
)
add_custom_target(Package_Python
ALL
DEPENDS
external_python
external_numpy
external_python_site_packages
external_zstandard
external_cython
OUTPUT
${PYTARGET}/bin/python${PYTHON_POSTFIX}.exe
)
endif()
endif()

View File

@@ -0,0 +1,19 @@
# SPDX-FileCopyrightText: 2022-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(PARALLELHASHMAP_EXTRA_ARGS
-DPHMAP_BUILD_TESTS=OFF
-DPHMAP_BUILD_EXAMPLES=OFF
)
ExternalProject_Add(external_parallelhashmap
URL file://${PACKAGE_DIR}/${PARALLEL_HASHMAP_FILE}
URL_HASH ${PARALLEL_HASHMAP_HASH_TYPE}=${PARALLEL_HASHMAP_HASH}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
PREFIX ${BUILD_DIR}/parallelhashmap
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/parallelhashmap
${DEFAULT_CMAKE_FLAGS}
${PARALLELHASHMAP_EXTRA_ARGS}
)

View File

@@ -0,0 +1,65 @@
# SPDX-FileCopyrightText: 2002-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(PNG_EXTRA_ARGS
-DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY}
-DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include/
-DPNG_STATIC=ON
)
if(BLENDER_PLATFORM_ARM)
set(PNG_EXTRA_ARGS
${PNG_EXTRA_ARGS}
-DPNG_HARDWARE_OPTIMIZATIONS=ON
-DPNG_ARM_NEON=on
-DCMAKE_SYSTEM_PROCESSOR="aarch64"
)
endif()
ExternalProject_Add(external_png
URL file://${PACKAGE_DIR}/${PNG_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${PNG_HASH_TYPE}=${PNG_HASH}
PREFIX ${BUILD_DIR}/png
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/png
${DEFAULT_CMAKE_FLAGS}
${PNG_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/png
)
add_dependencies(
external_png
external_zlib
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_png after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/png/include/
${HARVEST_TARGET}/png/include/
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/png/lib/libpng16_static${LIBEXT}
${HARVEST_TARGET}/png/lib/libpng${LIBEXT}
DEPENDEES install
)
endif()
if(BUILD_MODE STREQUAL Debug)
ExternalProject_Add_Step(external_png after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/png/lib/libpng16_staticd${LIBEXT}
${LIBDIR}/png/lib/libpng16${LIBEXT}
DEPENDEES install
)
endif()
else()
harvest(external_png png/include png/include "*.h")
harvest(external_png png/lib png/lib "*.a")
endif()

View File

@@ -0,0 +1,38 @@
# SPDX-FileCopyrightText: 2012-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(POTRACE_EXTRA_ARGS
)
if((WIN32 AND BUILD_MODE STREQUAL Release) OR UNIX)
ExternalProject_Add(external_potrace
URL file://${PACKAGE_DIR}/${POTRACE_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${POTRACE_HASH_TYPE}=${POTRACE_HASH}
PREFIX ${BUILD_DIR}/potrace
PATCH_COMMAND ${CMAKE_COMMAND} -E copy
${PATCH_DIR}/cmakelists_potrace.txt
${BUILD_DIR}/potrace/src/external_potrace/CMakeLists.txt
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/potrace
${DEFAULT_CMAKE_FLAGS}
${POTRACE_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/potrace
)
if(WIN32)
ExternalProject_Add_Step(external_potrace after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/potrace
${HARVEST_TARGET}/potrace
DEPENDEES install
)
else()
harvest(external_potrace potrace/include potrace/include "*.h")
harvest(external_potrace potrace/lib potrace/lib "*.a")
endif()
endif()

View File

@@ -0,0 +1,64 @@
# SPDX-FileCopyrightText: 2017-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(WIN32)
if(MSVC14) # vs2015 has timespec
set(PTHREAD_CPPFLAGS "/I. /DHAVE_CONFIG_H /D_TIMESPEC_DEFINED ")
else() # everything before doesn't
set(PTHREAD_CPPFLAGS "/I. /DHAVE_CONFIG_H ")
endif()
set(PTHREADS_BUILD
cd ${BUILD_DIR}/pthreads/src/external_pthreads/ &&
cd &&
nmake VC-static /e CPPFLAGS=${PTHREAD_CPPFLAGS}
)
ExternalProject_Add(external_pthreads
URL file://${PACKAGE_DIR}/${PTHREADS_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${PTHREADS_HASH_TYPE}=${PTHREADS_HASH}
PREFIX ${BUILD_DIR}/pthreads
CONFIGURE_COMMAND echo .
PATCH_COMMAND COMMAND ${PATCH_CMD} -p 1 -d
${BUILD_DIR}/pthreads/src/external_pthreads <
${PATCH_DIR}/pthreads.diff
BUILD_COMMAND ${PTHREADS_BUILD}
INSTALL_COMMAND COMMAND
${CMAKE_COMMAND} -E copy
${BUILD_DIR}/pthreads/src/external_pthreads/libpthreadVC3${LIBEXT}
${LIBDIR}/pthreads/lib/pthreadVC3${LIBEXT} &&
${CMAKE_COMMAND} -E copy
${BUILD_DIR}/pthreads/src/external_pthreads/pthread.h
${LIBDIR}/pthreads/inc/pthread.h &&
${CMAKE_COMMAND} -E copy
${BUILD_DIR}/pthreads/src/external_pthreads/sched.h
${LIBDIR}/pthreads/inc/sched.h &&
${CMAKE_COMMAND} -E copy
${BUILD_DIR}/pthreads/src/external_pthreads/semaphore.h
${LIBDIR}/pthreads/inc/semaphore.h &&
${CMAKE_COMMAND} -E copy
${BUILD_DIR}/pthreads/src/external_pthreads/_ptw32.h
${LIBDIR}/pthreads/inc/_ptw32.h
INSTALL_DIR ${LIBDIR}/pthreads
)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_pthreads after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/pthreads/inc/
${HARVEST_TARGET}/pthreads/include/
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/pthreads/lib/
${HARVEST_TARGET}/pthreads/lib
DEPENDEES install
)
endif()
endif()

View File

@@ -0,0 +1,43 @@
# SPDX-FileCopyrightText: 2002-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(PUGIXML_EXTRA_ARGS
)
ExternalProject_Add(external_pugixml
URL file://${PACKAGE_DIR}/${PUGIXML_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${PUGIXML_HASH_TYPE}=${PUGIXML_HASH}
PREFIX ${BUILD_DIR}/pugixml
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/pugixml
${DEFAULT_CMAKE_FLAGS}
${PUGIXML_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/pugixml
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_pugixml after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/pugixml
${HARVEST_TARGET}/pugixml
DEPENDEES install
)
endif()
if(BUILD_MODE STREQUAL Debug)
ExternalProject_Add_Step(external_pugixml after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/pugixml/lib/pugixml.lib
${HARVEST_TARGET}/pugixml/lib/pugixml_d.lib
DEPENDEES install
)
endif()
else()
harvest(external_pugixml pugixml/include pugixml/include "*.hpp")
harvest(external_pugixml pugixml/lib pugixml/lib "*.a")
endif()

View File

@@ -0,0 +1,28 @@
# SPDX-FileCopyrightText: 2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(PYBIND11_EXTRA_ARGS
-DPYBIND11_TEST=OFF
-DPYTHON_EXECUTABLE=${PYTHON_BINARY}
)
ExternalProject_Add(external_pybind11
URL file://${PACKAGE_DIR}/${PYBIND11_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${PYBIND11_HASH_TYPE}=${PYBIND11_HASH}
PREFIX ${BUILD_DIR}/pybind11
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/pybind11
${DEFAULT_CMAKE_FLAGS}
${PYBIND11_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/pybind11
)
add_dependencies(
external_pybind11
external_python
)

View File

@@ -0,0 +1,37 @@
# SPDX-FileCopyrightText: 2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(PYSTRING_EXTRA_ARGS
)
ExternalProject_Add(external_pystring
URL file://${PACKAGE_DIR}/${PYSTRING_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${PYSTRING_HASH_TYPE}=${PYSTRING_HASH}
PREFIX ${BUILD_DIR}/pystring
PATCH_COMMAND ${CMAKE_COMMAND} -E copy
${PATCH_DIR}/cmakelists_pystring.txt
${BUILD_DIR}/pystring/src/external_pystring/CMakeLists.txt
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/pystring
${DEFAULT_CMAKE_FLAGS}
${PYSTRING_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/pystring
)
if(WIN32)
ExternalProject_Add_Step(external_pystring after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/pystring/lib
${HARVEST_TARGET}/pystring/lib
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/pystring/include
${HARVEST_TARGET}/pystring/include
DEPENDEES install
)
endif()

View File

@@ -0,0 +1,254 @@
# SPDX-FileCopyrightText: 2017-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(PYTHON_POSTFIX "")
set(PYTHON_EXTRA_INSTALL_FLAGS "")
if(BUILD_MODE STREQUAL Debug)
set(PYTHON_POSTFIX _d)
set(PYTHON_EXTRA_INSTALL_FLAGS -d)
endif()
if(WIN32)
set(PYTHON_BINARY ${LIBDIR}/python/python${PYTHON_POSTFIX}.exe)
set(PYTHON_SRC ${BUILD_DIR}/python/src/external_python/)
# Return values:
# - `${ResultingPath}`: the DOS-style path.
function(cmake_to_dos_path MsysPath ResultingPath)
string(REPLACE "/" "\\" _result "${MsysPath}")
set(${ResultingPath} "${_result}" PARENT_SCOPE)
endfunction()
if(BLENDER_PLATFORM_ARM)
set(PYTHON_BINARY_INTERNAL ${BUILD_DIR}/python/src/external_python/PCBuild/arm64/python${PYTHON_POSTFIX}.exe)
set(PYTHON_BAT_ARCH arm64)
set(PYTHON_INSTALL_ARCH_FOLDER ${PYTHON_SRC}/PCbuild/arm64)
set(PYTHON_PATCH_FILE python_windows_arm64.diff)
else()
set(PYTHON_BINARY_INTERNAL ${BUILD_DIR}/python/src/external_python/PCBuild/amd64/python${PYTHON_POSTFIX}.exe)
set(PYTHON_BAT_ARCH x64)
set(PYTHON_INSTALL_ARCH_FOLDER ${PYTHON_SRC}/PCbuild/amd64)
set(PYTHON_PATCH_FILE python_windows_x64.diff)
endif()
set(PYTHON_EXTERNALS_FOLDER ${BUILD_DIR}/python/src/external_python/externals)
set(ZLIB_SOURCE_FOLDER ${BUILD_DIR}/zlib/src/external_zlib)
set(SSL_SOURCE_FOLDER ${BUILD_DIR}/ssl/src/external_ssl)
set(FFI_SOURCE_FOLDER ${LIBDIR}/ffi)
set(SQLITE_SOURCE_FOLDER ${BUILD_DIR}/sqlite/src/external_sqlite)
set(DOWNLOADS_EXTERNALS_FOLDER ${DOWNLOAD_DIR}/externals)
cmake_to_dos_path(${PYTHON_EXTERNALS_FOLDER} PYTHON_EXTERNALS_FOLDER_DOS)
cmake_to_dos_path(${ZLIB_SOURCE_FOLDER} ZLIB_SOURCE_FOLDER_DOS)
cmake_to_dos_path(${FFI_SOURCE_FOLDER} FFI_SOURCE_FOLDER_DOS)
cmake_to_dos_path(${SSL_SOURCE_FOLDER} SSL_SOURCE_FOLDER_DOS)
cmake_to_dos_path(${SQLITE_SOURCE_FOLDER} SQLITE_SOURCE_FOLDER_DOS)
cmake_to_dos_path(${DOWNLOADS_EXTERNALS_FOLDER} DOWNLOADS_EXTERNALS_FOLDER_DOS)
ExternalProject_Add(external_python
URL file://${PACKAGE_DIR}/${PYTHON_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${PYTHON_HASH_TYPE}=${PYTHON_HASH}
PREFIX ${BUILD_DIR}/python
# Python will download its own deps and there's very little we can do about
# that beyond placing some code in their externals dir before it tries.
# the foldernames *HAVE* to match the ones inside pythons get_externals.cmd.
# regardless of the version actually in there.
PATCH_COMMAND mkdir ${PYTHON_EXTERNALS_FOLDER_DOS} &&
mklink /J ${PYTHON_EXTERNALS_FOLDER_DOS}\\libffi-3.4.4 ${FFI_SOURCE_FOLDER_DOS} &&
mklink /J ${PYTHON_EXTERNALS_FOLDER_DOS}\\zlib-1.3.1 ${ZLIB_SOURCE_FOLDER_DOS} &&
mklink /J ${PYTHON_EXTERNALS_FOLDER_DOS}\\openssl-3.0.19 ${SSL_SOURCE_FOLDER_DOS} &&
mklink /J ${PYTHON_EXTERNALS_FOLDER_DOS}\\sqlite-3.50.4.0 ${SQLITE_SOURCE_FOLDER_DOS} &&
${CMAKE_COMMAND} -E copy
${ZLIB_SOURCE_FOLDER}/../external_zlib-build/zconf.h
${PYTHON_EXTERNALS_FOLDER}/zlib-1.3.1/zconf.h &&
${PATCH_CMD} --verbose -p1 -d
${BUILD_DIR}/python/src/external_python <
${PATCH_DIR}/${PYTHON_PATCH_FILE}
CONFIGURE_COMMAND echo "."
BUILD_COMMAND ${CONFIGURE_ENV_MSVC} &&
cd ${BUILD_DIR}/python/src/external_python/pcbuild/ &&
set IncludeTkinter=false &&
set LDFLAGS=/DEBUG &&
call prepare_ssl.bat &&
call build.bat -e -p ${PYTHON_BAT_ARCH} -c ${BUILD_MODE}
INSTALL_COMMAND ${PYTHON_BINARY_INTERNAL} ${PYTHON_SRC}/PC/layout/main.py
-b ${PYTHON_INSTALL_ARCH_FOLDER}
-s ${PYTHON_SRC}
-t ${PYTHON_SRC}/tmp/
--include-stable
--include-pip
--include-dev
--include-launchers
--include-venv
--include-symbols
${PYTHON_EXTRA_INSTALL_FLAGS}
--copy
${LIBDIR}/python
)
add_dependencies(
external_python
external_zlib
)
else()
if(APPLE)
# Disable functions that can be in 10.13 sdk but aren't available on 10.9 target.
#
# Disable libintl (gettext library) as it might come from Homebrew, which makes
# it so test program compiles, but the Python does not. This is because for Python
# we use isysroot, which seems to forbid using libintl.h.
# The gettext functionality seems to come from CoreFoundation, so should be all fine.
set(PYTHON_FUNC_CONFIGS
export ac_cv_func_futimens=no &&
export ac_cv_func_utimensat=no &&
export ac_cv_func_basename_r=no &&
export ac_cv_func_clock_getres=no &&
export ac_cv_func_clock_gettime=no &&
export ac_cv_func_clock_settime=no &&
export ac_cv_func_dirname_r=no &&
export ac_cv_func_getentropy=no &&
export ac_cv_func_mkostemp=no &&
export ac_cv_func_mkostemps=no &&
export ac_cv_func_timingsafe_bcmp=no &&
export ac_cv_header_libintl_h=no &&
export ac_cv_lib_intl_textdomain=no
)
if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64")
set(PYTHON_FUNC_CONFIGS ${PYTHON_FUNC_CONFIGS} && export PYTHON_DECIMAL_WITH_MACHINE=ansi64)
endif()
set(PYTHON_CONFIGURE_ENV ${CONFIGURE_ENV} && ${PYTHON_FUNC_CONFIGS})
else()
set(PYTHON_CONFIGURE_ENV ${CONFIGURE_ENV})
endif()
set(PYTHON_BINARY ${LIBDIR}/python/bin/python${PYTHON_SHORT_VERSION})
set(PYTHON_CFLAGS "${PLATFORM_CFLAGS} ")
# We need to add the zlib static lib path here as even if python itself links the static zlib correctly,
# the "_sqlite" cpython library needs to know where to get it from.
set(PYTHON_LDFLAGS "-L${LIBDIR}/zlib/lib ${PLATFORM_LDFLAGS} ")
set(PYTHON_CONFIGURE_EXTRA_ARGS
# Using pkg-config is supported for most libs besides bzip2, so make sure it is on.
--with-pkg-config=yes
--enable-loadable-sqlite-extensions
# Don't build or ship the python test suite
--disable-test-modules
)
set(PYTHON_CONFIGURE_PKG_CONFIG_PATH "\
${LIBDIR}/ffi/lib/pkgconfig:${LIBDIR}/sqlite/lib/pkgconfig:${LIBDIR}/ssl/lib/pkgconfig:\
${LIBDIR}/ssl/lib64/pkgconfig:${LIBDIR}/lzma/lib/pkgconfig:${LIBDIR}/zlib/share/pkgconfig")
set(PYTHON_CONFIGURE_EXTRA_ENV
export CFLAGS=${PYTHON_CFLAGS} &&
export CPPFLAGS=${PYTHON_CFLAGS} &&
export LDFLAGS=${PYTHON_LDFLAGS} &&
# Use pkg-config for libraries that support it, and ensure that it used static libraries.
export PKG_CONFIG=pkg-config\ --static
export PKG_CONFIG_PATH=${PYTHON_CONFIGURE_PKG_CONFIG_PATH}
# Use flags documented by ./configure for other libs.
export BZIP2_CFLAGS=-I${LIBDIR}/bzip2/include
export BZIP2_LIBS=${LIBDIR}/bzip2/lib/${LIBPREFIX}bz2${LIBEXT}
# Prevent Python configuration script from enabling modules that might be enabled due to the
# presence of system-wide libraries.
# There is no official way of explicitly disabling modules via command line arguments to the
# configuration script, so instead use CFLAGS that are passed to the try-compile utilities that
# probe libraries to ensure the test program does not compile.
export TCLTK_CFLAGS="--non-existing-flag"
)
if(APPLE)
# Prevent linking against Homebrew's libmpdec if it exists.
set(PYTHON_CONFIGURE_EXTRA_ARGS
${PYTHON_CONFIGURE_EXTRA_ARGS}
--without-system-libmpdec
)
# Override library paths for SQLite and zlib on macOS (which are normally provided by pkg-config).
# Redefining these prevents Python from wrongly trying to dynamically link zlib in SQLite and various built-in modules.
set(PYTHON_CONFIGURE_EXTRA_ENV
${PYTHON_CONFIGURE_EXTRA_ENV}
export LIBSQLITE3_CFLAGS=-I${LIBDIR}/sqlite/include
export LIBSQLITE3_LIBS=${LIBDIR}/sqlite/lib/${LIBPREFIX}sqlite3${LIBEXT}
export ZLIB_CFLAGS=-I${LIBDIR}/zlib/include
export ZLIB_LIBS=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY}
)
endif()
# NOTE: untested on APPLE so far.
if(NOT APPLE)
set(PYTHON_CONFIGURE_EXTRA_ARGS
${PYTHON_CONFIGURE_EXTRA_ARGS}
# We disable optimizations as this flag turns on PGO which leads to non-reproducible builds.
--disable-optimizations
# While LTO is OK when building on the same system, it's incompatible across GCC versions,
# making it impractical for developers to build against, so keep it disabled.
# `--with-lto`
)
endif()
ExternalProject_Add(external_python
URL file://${PACKAGE_DIR}/${PYTHON_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${PYTHON_HASH_TYPE}=${PYTHON_HASH}
PREFIX ${BUILD_DIR}/python
PATCH_COMMAND ${PYTHON_PATCH}
CONFIGURE_COMMAND ${PYTHON_CONFIGURE_ENV} &&
${PYTHON_CONFIGURE_EXTRA_ENV} &&
cd ${BUILD_DIR}/python/src/external_python/ &&
${CONFIGURE_COMMAND} --prefix=${LIBDIR}/python ${PYTHON_CONFIGURE_EXTRA_ARGS}
BUILD_COMMAND ${PYTHON_CONFIGURE_ENV} &&
cd ${BUILD_DIR}/python/src/external_python/ &&
make -j${MAKE_THREADS}
INSTALL_COMMAND ${PYTHON_CONFIGURE_ENV} &&
cd ${BUILD_DIR}/python/src/external_python/ &&
make install
INSTALL_DIR ${LIBDIR}/python)
endif()
add_dependencies(
external_python
external_ssl
external_zlib
external_sqlite
external_ffi
)
if(UNIX)
add_dependencies(
external_python
external_bzip2
external_lzma
)
endif()
if(WIN32)
if(BUILD_MODE STREQUAL Debug)
ExternalProject_Add_Step(external_python after_install
# Boost can't keep itself from linking release python
# in a debug configuration even if all options are set
# correctly to instruct it to use the debug version
# of python. So just copy the debug imports file over
# and call it a day...
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/python/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}${PYTHON_POSTFIX}.lib
${LIBDIR}/python/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}.lib
DEPENDEES install
)
endif()
else()
harvest(external_python python/bin python/bin "python${PYTHON_SHORT_VERSION}")
harvest(external_python python/include python/include "*h")
harvest(external_python python/lib python/lib "*")
endif()

View File

@@ -0,0 +1,9 @@
{
global:
Py*;
_Py*;
_py*;
local:
*;
};

View File

@@ -0,0 +1,63 @@
# SPDX-FileCopyrightText: 2017-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
if(WIN32 AND BUILD_MODE STREQUAL Debug)
# zstandard is determined to build and link release mode libs in a debug
# configuration, the only way to make it happy is to bend to its will
# and give it a library to link with.
set(
PIP_CONFIGURE_COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/python/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}_d.lib
${LIBDIR}/python/libs/python${PYTHON_SHORT_VERSION_NO_DOTS}.lib
)
else()
set(PIP_CONFIGURE_COMMAND echo ".")
endif()
set(PIP_CONSTRAINT_FILE ${BUILD_DIR}/constraints.txt)
# setuptools-scm is causing issues with their latest version
# issue: https://github.com/pypa/setuptools-scm/issues/1316
# but pinning it doesn't work since downstream package dependencies
# also seem to resolve the later versions
# we can alter this behaviour by using pip constraints
file(WRITE ${PIP_CONSTRAINT_FILE}
"setuptools-scm==${SETUPTOOLS_SCM_VERSION}\n"
)
ExternalProject_Add(external_python_site_packages
DOWNLOAD_COMMAND ""
CONFIGURE_COMMAND ${PIP_CONFIGURE_COMMAND}
BUILD_COMMAND ""
PREFIX ${BUILD_DIR}/site_packages
# We do not build numpy, cython, or zstandard here as the pip builds are not reproducible.
INSTALL_COMMAND
${CMAKE_COMMAND} -E env
PIP_CONSTRAINT=${PIP_CONSTRAINT_FILE}
${PYTHON_BINARY} -m pip install --no-cache-dir ${SITE_PACKAGES_EXTRA}
setuptools==${SETUPTOOLS_VERSION}
meson-python==${MESON_PYTHON_VERSION}
packaging==${PACKAGING_VERSION}
pyproject-metadata==${PYPROJECT_METADATA_VERSION}
idna==${IDNA_VERSION}
charset-normalizer==${CHARSET_NORMALIZER_VERSION}
urllib3==${URLLIB3_VERSION}
certifi==${CERTIFI_VERSION}
requests==${REQUESTS_VERSION}
autopep8==${AUTOPEP8_VERSION}
pycodestyle==${PYCODESTYLE_VERSION}
docutils==${DOCUTILS_VERSION}
meson==${MESON_VERSION}
attrs==${ATTRS_VERSION}
cattrs==${CATTRS_VERSION}
fastjsonschema==${FASTJSONSCHEMA_VERSION}
typing-extensions==${TYPING_EXTENSIONS_VERSION}
tomli-w==${TOMLI_W_VERSION}
--no-binary :all:
)
add_dependencies(
external_python_site_packages
external_python
)

View File

@@ -0,0 +1,20 @@
# SPDX-FileCopyrightText: 2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(ROBINMAP_EXTRA_ARGS
)
ExternalProject_Add(external_robinmap
URL file://${PACKAGE_DIR}/${ROBINMAP_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${ROBINMAP_HASH_TYPE}=${ROBINMAP_HASH}
PREFIX ${BUILD_DIR}/robinmap
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/robinmap
${DEFAULT_CMAKE_FLAGS}
${ROBINMAP_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/robinmap
)

View File

@@ -0,0 +1,81 @@
# # SPDX-FileCopyrightText: 2025 Blender Authors
# #
# # SPDX-License-Identifier: GPL-2.0-or-later
if(WIN32)
set(RUBBERBAND_CONFIGURE_ENV ${CONFIGURE_ENV_MSVC})
set(FFTW_DIR ${LIBDIR}/fftw3/lib/pkgconfig)
file(TO_NATIVE_PATH "${FFTW_DIR}" FFTW_DIR)
set(RUBBERBAND_PKG_ENV PKG_CONFIG_PATH=${FFTW_DIR})
else()
set(RUBBERBAND_CONFIGURE_ENV ${CONFIGURE_ENV})
set(RUBBERBAND_PKG_ENV "PKG_CONFIG_PATH=\
${LIBDIR}/fftw3/lib/pkgconfig:\
$PKG_CONFIG_PATH"
)
endif()
set(RUBBERBAND_EXTRA_OPTIONS
-Dauto_features=disabled
-Ddefault_library=static
-Dfft=fftw
)
ExternalProject_Add(external_rubberband
URL file://${PACKAGE_DIR}/${RUBBERBAND_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${RUBBERBAND_HASH_TYPE}=${RUBBERBAND_HASH}
PREFIX ${BUILD_DIR}/rubberband
PATCH_COMMAND
${PATCH_CMD} -p 1
-d ${BUILD_DIR}/rubberband/src/external_rubberband
-i ${PATCH_DIR}/rubberband_remove_dll_exports.diff &&
${PATCH_CMD} -p 1
-d ${BUILD_DIR}/rubberband/src/external_rubberband
-i ${PATCH_DIR}/rubberband_missing_cstdlib.diff
CONFIGURE_COMMAND ${RUBBERBAND_CONFIGURE_ENV} &&
${CMAKE_COMMAND} -E env ${RUBBERBAND_PKG_ENV} ${MESON} setup
--prefix ${LIBDIR}/rubberband
--libdir lib
${MESON_BUILD_TYPE}
${RUBBERBAND_EXTRA_OPTIONS}
${BUILD_DIR}/rubberband/src/external_rubberband-build
${BUILD_DIR}/rubberband/src/external_rubberband
BUILD_COMMAND ninja
INSTALL_COMMAND ninja install
INSTALL_DIR ${LIBDIR}/rubberband
)
add_dependencies(
external_rubberband
external_fftw
# Needed for `MESON`.
external_python_site_packages
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_rubberband after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/rubberband/include
${HARVEST_TARGET}/rubberband/include
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/rubberband/lib/rubberband-static.lib
${HARVEST_TARGET}/rubberband/lib/rubberband-static.lib
DEPENDEES install
)
else()
ExternalProject_Add_Step(external_rubberband after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/rubberband/lib/rubberband-static.lib
${HARVEST_TARGET}/rubberband/lib/rubberband-static_d.lib
DEPENDEES install
)
endif()
else()
harvest(external_rubberband rubberband/include rubberband/include "*.h")
harvest(external_rubberband rubberband/lib rubberband/lib "*.a")
endif()

View File

@@ -0,0 +1,8 @@
{
"bomFormat": "CycloneDX",
"specVersion": "1.4",
"version": 1,
"components": [
@SBOMCONTENTS@
]
}

View File

@@ -0,0 +1,51 @@
# SPDX-FileCopyrightText: 2012-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(SDL_EXTRA_ARGS
-DSDL_STATIC=OFF
-DSDL_SHARED=ON
-DSDL_TESTS=OFF
-DSDL_TEST_LIBRARY=OFF
-DSDL_SNDIO=OFF
)
if(UNIX AND NOT APPLE)
set(SDL_EXTRA_ARGS
${SDL_EXTRA_ARGS}
-DSDL_X11_XSCRNSAVER=OFF
-DSDL_X11_XTEST=OFF
)
endif()
ExternalProject_Add(external_sdl
URL file://${PACKAGE_DIR}/${SDL_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${SDL_HASH_TYPE}=${SDL_HASH}
PREFIX ${BUILD_DIR}/sdl
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/sdl
${DEFAULT_CMAKE_FLAGS}
${SDL_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/sdl
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_sdl after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/sdl
${HARVEST_TARGET}/sdl
DEPENDEES install
)
endif()
else()
harvest(external_sdl sdl/include sdl/include "*.h")
# CMake files first because harvest_rpath_lib edits them.
harvest(external_sdl sdl/lib/cmake/SDL3 sdl/lib/cmake/SDL3 "*.cmake")
harvest_rpath_lib(external_sdl sdl/lib sdl/lib "*${SHAREDLIBEXT}*")
endif()

View File

@@ -0,0 +1,231 @@
# SPDX-FileCopyrightText: 2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
##################################################################################################
# msys2 Builds
##################################################################################################
# This installs msys to compile ffmpeg/libsndfile/fftw3/gmp
##################################################################################################
# Note - no compiler is actually installed here, we just use the tools
##################################################################################################
# Modifies in parent scope:
# - `MSYS2_${package_name}_FILE`: path to the downloaded file.
function(download_package package_name)
# This will:
# 1 - Download the required package from either the upstream location or blender mirror
# depending on `MSYS2_USE_UPSTREAM_PACKAGES`.
# 2 - Set a global variable [package_name]_FILE to point to the downloaded file.
# 3 - Verify the hash if FORCE_CHECK_HASH is on.
set(URL ${MSYS2_${package_name}_URL})
set(HASH ${MSYS2_${package_name}_HASH})
string(REPLACE "/" ";" _url_list ${URL})
list(GET _url_list -1 _file_name)
set(_final_filename "${DOWNLOAD_DIR}/${_file_name}")
set(MSYS2_${package_name}_FILE ${_final_filename} PARENT_SCOPE)
if(NOT EXISTS "${_final_filename}")
if(MSYS2_USE_UPSTREAM_PACKAGES)
set(_final_url ${URL})
else()
set(_final_url "https://projects.blender.org/blender/lib-windows_x64/media/branch/build_environment/${_file_name}")
endif()
message(STATUS "Downloading ${_final_filename} from ${_final_url}")
file(
DOWNLOAD ${_final_url} ${_final_filename}
TIMEOUT 1800 # seconds
EXPECTED_HASH SHA1=${HASH}
TLS_VERIFY ON
SHOW_PROGRESS
)
endif()
if(EXISTS "${_final_filename}")
if(FORCE_CHECK_HASH)
file(SHA1 ${_final_filename} LOCAL_HASH)
if(NOT ${HASH} STREQUAL ${LOCAL_HASH})
message(FATAL_ERROR "${_final_filename} SHA1 mismatch\nExpected\t: ${HASH}\nActual\t: ${LOCAL_HASH}")
endif()
endif()
endif()
endfunction()
# Note we use URL here rather than URI as the dependencies checker will check all `*_URI`
# variables for package/license/homepage requirements since none of this will end up
# on end users systems the requirements are not as strict.
set(MSYS2_BASE_URL https://repo.msys2.org/distrib/x86_64/msys2-base-x86_64-20221028.tar.xz)
set(MSYS2_BASE_HASH 545cc6a4c36bb98058f2b2945c5d06de523516db)
set(MSYS2_NASM_URL https://www.nasm.us/pub/nasm/releasebuilds/3.01/win64/nasm-3.01-win64.zip)
set(MSYS2_NASM_HASH f11c96089462db07cb42de03ebb11dcb101b5154)
set(MSYS2_PERL_URL https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/SP_5380_5361/strawberry-perl-5.38.0.1-64bit-portable.zip)
set(MSYS2_PERL_HASH 987c870cc2401e481e3ddbdd1462d2a52da34187)
set(MSYS2_GAS_URL https://raw.githubusercontent.com/FFmpeg/gas-preprocessor/7380ac24e1cd23a5e6d76c6af083d8fc5ab9e943/gas-preprocessor.pl)
set(MSYS2_GAS_HASH 313c45e9ae7e4b6c13475e65ee4063593dac2cbe)
set(MSYS2_AR_URL https://raw.githubusercontent.com/gcc-mirror/gcc/releases/gcc-12.2.0/ar-lib)
set(MSYS2_AR_HASH 77194f45708a80f502102fa881a8a5cb048b03af)
download_package(BASE)
download_package(NASM)
download_package(PERL)
download_package(GAS)
download_package(AR)
message(STATUS "LIBDIR = ${LIBDIR}")
# Return values:
# - `${ResultingPath}`: the MSYS2-style path.
function(cmake_to_msys_path MsysPath ResultingPath)
string(REPLACE ":" "" TmpPath "${MsysPath}")
string(SUBSTRING ${TmpPath} 0 1 Drive)
string(SUBSTRING ${TmpPath} 1 255 PathPart)
string(TOLOWER ${Drive} LowerDrive)
string(CONCAT _result "/" ${LowerDrive} ${PathPart})
set(${ResultingPath} "${_result}" PARENT_SCOPE)
endfunction()
cmake_to_msys_path(${LIBDIR} msys2_LIBDIR)
message(STATUS "msys2_LIBDIR = ${msys2_LIBDIR}")
# Make msys2 root directory
if(NOT EXISTS "${DOWNLOAD_DIR}/msys2")
execute_process(
COMMAND ${CMAKE_COMMAND} -E make_directory ${DOWNLOAD_DIR}/msys2
WORKING_DIRECTORY ${DOWNLOAD_DIR}
)
endif()
# Extract msys2
if((NOT EXISTS "${DOWNLOAD_DIR}/msys2/msys64/msys2_shell.cmd") AND
(EXISTS "${MSYS2_BASE_FILE}"))
message(STATUS "Extracting msys2 base")
execute_process(
COMMAND ${CMAKE_COMMAND} -E tar jxf ${MSYS2_BASE_FILE}
WORKING_DIRECTORY ${DOWNLOAD_DIR}/msys2
)
# Start msys2 with command "exit" - does initial setup etc then exits
message(STATUS "Performing first-time load for msys2")
execute_process(
COMMAND ${DOWNLOAD_DIR}/msys2/msys64/msys2_shell.cmd -defterm -no-start -clang64 -c exit
WORKING_DIRECTORY ${DOWNLOAD_DIR}/msys2/msys64
)
# Do initial upgrade of pacman packages (only required for initial setup, to get
# latest packages as opposed to what the installer comes with).
execute_process(
COMMAND ${DOWNLOAD_DIR}/msys2/msys64/msys2_shell.cmd -defterm -no-start -clang64 -c
"pacman -Sy --noconfirm && exit"
WORKING_DIRECTORY ${DOWNLOAD_DIR}/msys2/msys64
)
endif()
# If m4 isn't there, the others probably aren't either
if(NOT EXISTS "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/m4.exe")
# Refresh pacman repositories (similar to debian's `apt update`)
message(STATUS "Refreshing pacman")
execute_process(
COMMAND ${DOWNLOAD_DIR}/msys2/msys64/msys2_shell.cmd -defterm -no-start -clang64 -c
"pacman -Syy --noconfirm && exit"
WORKING_DIRECTORY ${DOWNLOAD_DIR}/msys2/msys64
)
message(STATUS "Installing required packages")
if(NOT BLENDER_PLATFORM_WINDOWS_ARM)
# A newer runtime package is required since the tools downloaded in the next step
# depend on it, we however cannot update the runtime from a msys2_shell.cmd since
# bash.exe will lock the runtime dlls so we execute pacman directly.
#
# For now only run this on X64 as there are some known issues (but unknown to me)
# with newer msys2 on Windows on ARM.
execute_process(
COMMAND ${DOWNLOAD_DIR}/msys2/msys64/usr/bin/pacman -S msys2-runtime --noconfirm
WORKING_DIRECTORY ${DOWNLOAD_DIR}/msys2/msys64
)
endif()
execute_process(
COMMAND ${DOWNLOAD_DIR}/msys2/msys64/msys2_shell.cmd -defterm -no-start -clang64 -c
"pacman -S patch m4 coreutils pkgconf make diffutils autoconf-wrapper --noconfirm && exit"
WORKING_DIRECTORY ${DOWNLOAD_DIR}/msys2/msys64
)
endif()
# Strip out the copy of perl that comes with msys2 if it exists, otherwise python builds break
if(EXISTS "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/perl.exe")
execute_process(
COMMAND ${CMAKE_COMMAND} -E rm ${DOWNLOAD_DIR}/msys2/msys64/usr/bin/perl.exe
WORKING_DIRECTORY ${DOWNLOAD_DIR}/msys2/msys64
)
endif()
# Strip out the copy of link that comes with some packages if it exists,
# otherwise meson builds break.
if(EXISTS "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/link.exe")
execute_process(
COMMAND ${CMAKE_COMMAND} -E rm ${DOWNLOAD_DIR}/msys2/msys64/usr/bin/link.exe
WORKING_DIRECTORY ${DOWNLOAD_DIR}/msys2/msys64
)
endif()
# extract nasm
if((NOT EXISTS "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/nasm.exe") AND (EXISTS "${MSYS2_NASM_FILE}"))
message(STATUS "Extracting nasm")
execute_process(
COMMAND ${CMAKE_COMMAND} -E tar jxf "${MSYS2_NASM_FILE}"
WORKING_DIRECTORY ${DOWNLOAD_DIR}/
)
execute_process(
COMMAND ${CMAKE_COMMAND} -E copy
"${DOWNLOAD_DIR}/nasm-3.01/nasm.exe"
"${DOWNLOAD_DIR}/msys2/msys64/usr/bin/nasm.exe"
)
endif()
set(NASM_PATH "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/nasm.exe")
# make perl root directory
if(NOT EXISTS "${DOWNLOAD_DIR}/perl")
execute_process(
COMMAND ${CMAKE_COMMAND} -E make_directory ${DOWNLOAD_DIR}/perl
WORKING_DIRECTORY ${DOWNLOAD_DIR}
)
endif()
# extract perl
if((NOT EXISTS "${DOWNLOAD_DIR}/perl/portable.perl") AND (EXISTS "${MSYS2_PERL_FILE}"))
message(STATUS "Extracting perl")
execute_process(
COMMAND ${CMAKE_COMMAND} -E tar jxf ${MSYS2_PERL_FILE}
WORKING_DIRECTORY ${DOWNLOAD_DIR}/perl
)
endif()
# Get gas-preprocessor for ffmpeg
# This is required for Windows ARM64 builds
if(NOT EXISTS "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/gas-preprocessor.pl")
execute_process(
COMMAND ${CMAKE_COMMAND} -E copy
${MSYS2_GAS_FILE}
"${DOWNLOAD_DIR}/msys2/msys64/usr/bin/gas-preprocessor.pl"
)
endif()
# Get ar-lib
message(STATUS "Checking for ar-lib")
if(NOT EXISTS "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/ar-lib")
execute_process(
COMMAND ${CMAKE_COMMAND} -E copy
${MSYS2_AR_FILE}
"${DOWNLOAD_DIR}/msys2/msys64/usr/bin/ar-lib"
)
endif()
if(NOT EXISTS "${DOWNLOAD_DIR}/msys2/msys64/ming64sh.cmd")
message(STATUS "Installing ming64sh.cmd")
execute_process(
COMMAND ${CMAKE_COMMAND} -E copy
${PATCH_DIR}/ming64sh.cmd
${DOWNLOAD_DIR}/msys2/msys64/ming64sh.cmd
)
endif()

View File

@@ -0,0 +1,57 @@
# SPDX-FileCopyrightText: 2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(SHADERC_EXTRA_ARGS
-DSHADERC_SKIP_TESTS=On
-DSHADERC_SPIRV_TOOLS_DIR=${BUILD_DIR}/spirv_tools/src/external_spirv_tools
-DSHADERC_SPIRV_HEADERS_DIR=${BUILD_DIR}/spirv_headers/src/external_spirv_headers
-DSHADERC_GLSLANG_DIR=${BUILD_DIR}/shaderc_glslang/src/external_shaderc_glslang
-DPython_EXECUTABLE=${PYTHON_BINARY}
-DPython3_EXECUTABLE=${PYTHON_BINARY}
-DSHADERC_ENABLE_SHARED_CRT=ON
)
ExternalProject_Add(external_shaderc
URL file://${PACKAGE_DIR}/${SHADERC_FILE}
URL_HASH ${SHADERC_HASH_TYPE}=${SHADERC_HASH}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
PREFIX ${BUILD_DIR}/shaderc
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/shaderc
${DEFAULT_CMAKE_FLAGS}
${SHADERC_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/shaderc
)
add_dependencies(
external_shaderc
external_spirv_tools
external_spirv_headers
external_shaderc_glslang
external_python
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_shaderc after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory
${LIBDIR}/shaderc/include
${HARVEST_TARGET}/shaderc/include
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/shaderc/bin/shaderc_shared.dll
${HARVEST_TARGET}/shaderc/bin/shaderc_shared.dll
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/shaderc/lib/shaderc_shared.lib
${HARVEST_TARGET}/shaderc/lib/shaderc_shared.lib
DEPENDEES install
)
endif()
else()
harvest(external_shaderc shaderc shaderc "*")
endif()

View File

@@ -0,0 +1,16 @@
# SPDX-FileCopyrightText: 2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
# These are build time requirements for shaderc. We only have to unpack these
# shaderc will build them.
ExternalProject_Add(external_shaderc_glslang
URL file://${PACKAGE_DIR}/${SHADERC_GLSLANG_FILE}
URL_HASH ${SHADERC_GLSLANG_HASH_TYPE}=${SHADERC_GLSLANG_HASH}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
PREFIX ${BUILD_DIR}/shaderc_glslang
CONFIGURE_COMMAND echo .
BUILD_COMMAND echo .
INSTALL_COMMAND echo .
)

View File

@@ -0,0 +1,86 @@
# SPDX-FileCopyrightText: 2017-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(SNDFILE_EXTRA_ARGS
-DCMAKE_POLICY_DEFAULT_CMP0074=NEW
-DOgg_ROOT=${LIBDIR}/ogg
-DVorbis_ROOT=${LIBDIR}/vorbis
-DOpus_ROOT=${LIBDIR}/opus
-DFLAC_ROOT=${LIBDIR}/flac
# Use two roots because of apparent mistake in sndfile.
-DLAME_ROOT=${LIBDIR}/lame/include
-DMP3LAME_ROOT=${LIBDIR}/lame/lib
-DCMAKE_DISABLE_FIND_PACKAGE_ALSA=ON
-DCMAKE_DISABLE_FIND_PACKAGE_mpg123=ON
-DCMAKE_DISABLE_FIND_PACKAGE_Speex=ON
-DCMAKE_DISABLE_FIND_PACKAGE_SQLite3=ON
-DBUILD_PROGRAMS=OFF
-DBUILD_EXAMPLES=OFF
-DBUILD_TESTING=OFF
-DPYTHON_EXECUTABLE=${PYTHON_BINARY}
)
if(WIN32)
# We set FLAC__NO_DLL, otherwise we cannot statically link FLAC
set(SNDFILE_C_FLAGS "${CMAKE_C_FLAGS} -DFLAC__NO_DLL=1")
set(SNDFILE_EXTRA_ARGS
${SNDFILE_EXTRA_ARGS}
-DBUILD_SHARED_LIBS=ON
-DCMAKE_C_FLAGS=${SNDFILE_C_FLAGS}
)
else()
set(SNDFILE_EXTRA_ARGS
${SNDFILE_EXTRA_ARGS}
-DBUILD_SHARED_LIBS=OFF
)
endif()
ExternalProject_Add(external_sndfile
URL file://${PACKAGE_DIR}/${SNDFILE_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${SNDFILE_HASH_TYPE}=${SNDFILE_HASH}
PREFIX ${BUILD_DIR}/sndfile
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
PATCH_COMMAND ${PATCH_CMD} -p 1 -d
${BUILD_DIR}/sndfile/src/external_sndfile <
${PATCH_DIR}/sndfile_1045.diff
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/sndfile
${DEFAULT_CMAKE_FLAGS}
${SNDFILE_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/sndfile
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_sndfile after_install
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/sndfile/bin/sndfile.dll
${HARVEST_TARGET}/sndfile/lib/sndfile.dll
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/sndfile/lib/sndfile.lib
${HARVEST_TARGET}/sndfile/lib/sndfile.lib
COMMAND ${CMAKE_COMMAND} -E copy
${LIBDIR}/sndfile/include/sndfile.h
${HARVEST_TARGET}/sndfile/include/sndfile.h
DEPENDEES install
)
endif()
else()
harvest(external_sndfile sndfile/include sndfile/include "*.h")
harvest(external_sndfile sndfile/lib sndfile/lib "*.a")
endif()
add_dependencies(
external_sndfile
external_ogg
external_vorbis
external_opus
external_flac
external_lame
)

View File

@@ -0,0 +1,28 @@
# SPDX-FileCopyrightText: 2022-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(SPIRV_REFLECT_EXTRA_ARGS
-DSPIRV_REFLECT_EXECUTABLE=OFF
-DSPIRV_REFLECT_STATIC_LIB=ON
)
ExternalProject_Add(external_spirv_reflect
URL file://${PACKAGE_DIR}/${SPIRV_REFLECT_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${SPIRV_REFLECT_HASH_TYPE}=${SPIRV_REFLECT_HASH}
PREFIX ${BUILD_DIR}/spirv_reflect
CMAKE_GENERATOR ${PLATFORM_ALT_GENERATOR}
CMAKE_ARGS
-DCMAKE_INSTALL_PREFIX=${LIBDIR}/spirv_reflect
${DEFAULT_CMAKE_FLAGS}
${SPIRV_REFLECT_EXTRA_ARGS}
INSTALL_DIR ${LIBDIR}/spirv_reflect
)
add_dependencies(
external_spirv_reflect
external_spirv_headers
)

View File

@@ -0,0 +1,37 @@
# SPDX-FileCopyrightText: 2002-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
ExternalProject_Add(external_spnav
URL file://${PACKAGE_DIR}/${SPNAV_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${SPNAV_HASH_TYPE}=${SPNAV_HASH}
PREFIX ${BUILD_DIR}/spnav
CONFIGURE_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/spnav/src/external_spnav/ &&
${CONFIGURE_COMMAND}
--prefix=${LIBDIR}/spnav
# X11 is not needed as Blender polls the device as part of the GHOST event loop.
# This is used to support `3dxserv`, however this is no longer supported by 3DCONNEXION.
# Disable so building without X11 is supported (WAYLAND only).
--disable-x11
--disable-shared
--enable-static
--with-pic
BUILD_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/spnav/src/external_spnav/ &&
make -j${MAKE_THREADS}
INSTALL_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/spnav/src/external_spnav/ &&
make install
INSTALL_DIR ${LIBDIR}/spnav
)
if(NOT WIN32)
harvest(external_spnav spnav/include spnav/include "*.h")
harvest(external_spnav spnav/lib spnav/lib "*.a")
endif()

View File

@@ -0,0 +1,81 @@
# SPDX-FileCopyrightText: 2018-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(SQLITE_CONFIGURE_ENV echo .)
set(SQLITE_CONFIGURATION_ARGS "")
if(WIN32)
# Python will build this with its preferred build options.
# We only need to unpack sqlite.
ExternalProject_Add(external_sqlite
URL file://${PACKAGE_DIR}/${SQLITE_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${SQLITE_HASH_TYPE}=${SQLITE_HASH}
PREFIX ${BUILD_DIR}/sqlite
CONFIGURE_COMMAND echo "."
BUILD_COMMAND echo "."
INSTALL_COMMAND echo "."
INSTALL_DIR ${LIBDIR}/sqlite
)
endif()
if(UNIX)
if(NOT APPLE)
set(SQLITE_LDFLAGS -Wl,--as-needed)
endif()
set(SQLITE_CFLAGS "\
-DSQLITE_SECURE_DELETE \
-DSQLITE_ENABLE_COLUMN_METADATA \
-DSQLITE_ENABLE_FTS3 \
-DSQLITE_ENABLE_FTS3_PARENTHESIS \
-DSQLITE_SOUNDEX \
-DSQLITE_ENABLE_UNLOCK_NOTIFY \
-DSQLITE_OMIT_LOOKASIDE=1 \
-DSQLITE_ENABLE_DBSTAT_VTAB \
-DSQLITE_ENABLE_UPDATE_DELETE_LIMIT=1 \
-DSQLITE_ENABLE_LOAD_EXTENSION \
-DSQLITE_LIKE_DOESNT_MATCH_BLOBS \
-DSQLITE_MAX_SCHEMA_RETRY=25 \
-DSQLITE_ENABLE_PREUPDATE_HOOK \
-DSQLITE_ENABLE_SESSION \
-DSQLITE_ENABLE_STMTVTAB \
-DSQLITE_MAX_VARIABLE_NUMBER=250000 \
-fPIC"
)
set(SQLITE_CONFIGURE_ENV
${SQLITE_CONFIGURE_ENV} &&
export LDFLAGS=${SQLITE_LDFLAGS} &&
export CFLAGS=${SQLITE_CFLAGS}
)
set(SQLITE_CONFIGURATION_ARGS
${SQLITE_CONFIGURATION_ARGS}
--enable-rtree
--enable-geopoly
--enable-threadsafe
--enable-load-extension
--enable-fts4
--enable-fts5
--disable-shared
)
ExternalProject_Add(external_sqlite
URL file://${PACKAGE_DIR}/${SQLITE_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${SQLITE_HASH_TYPE}=${SQLITE_HASH}
PREFIX ${BUILD_DIR}/sqlite
CONFIGURE_COMMAND ${SQLITE_CONFIGURE_ENV} &&
cd ${BUILD_DIR}/sqlite/src/external_sqlite/ &&
${CONFIGURE_COMMAND} --prefix=${LIBDIR}/sqlite ${SQLITE_CONFIGURATION_ARGS}
BUILD_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/sqlite/src/external_sqlite/ &&
make -j${MAKE_THREADS}
INSTALL_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/sqlite/src/external_sqlite/ &&
make install
INSTALL_DIR ${LIBDIR}/sqlite
)
endif()

View File

@@ -0,0 +1,25 @@
# SPDX-FileCopyrightText: 2002-2022 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
ExternalProject_Add(external_sse2neon
URL file://${PACKAGE_DIR}/${SSE2NEON_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${SSE2NEON_HASH_TYPE}=${SSE2NEON_HASH}
PREFIX ${BUILD_DIR}/sse2neon
CONFIGURE_COMMAND echo sse2neon - Nothing to configure
BUILD_COMMAND echo sse2neon - nothing to build
INSTALL_COMMAND ${CMAKE_COMMAND} -E copy ${BUILD_DIR}/sse2neon/src/external_sse2neon/sse2neon.h ${LIBDIR}/sse2neon
INSTALL_DIR ${LIBDIR}/sse2neon
)
if(WIN32)
if(BUILD_MODE STREQUAL Release)
ExternalProject_Add_Step(external_sse2neon after_install
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/sse2neon ${HARVEST_TARGET}/sse2neon
DEPENDEES install
)
endif()
else()
harvest(external_sse2neon sse2neon sse2neon "*.h")
endif()

View File

@@ -0,0 +1,68 @@
# SPDX-FileCopyrightText: 2018-2023 Blender Authors
#
# SPDX-License-Identifier: GPL-2.0-or-later
set(SSL_CONFIGURE_COMMAND ./Configure)
if(WIN32)
# Python will build this with its preferred build options and patches.
# We only need to unpack openssl.
ExternalProject_Add(external_ssl
URL file://${PACKAGE_DIR}/${SSL_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${SSL_HASH_TYPE}=${SSL_HASH}
PREFIX ${BUILD_DIR}/ssl
CONFIGURE_COMMAND echo "."
BUILD_COMMAND echo "."
INSTALL_COMMAND echo "."
INSTALL_DIR ${LIBDIR}/ssl
)
else()
if(APPLE)
set(SSL_OS_COMPILER "blender-darwin-${CMAKE_OSX_ARCHITECTURES}")
else()
if(BLENDER_PLATFORM_ARM)
set(SSL_OS_COMPILER "blender-linux-aarch64")
elseif("${CMAKE_SIZEOF_VOID_P}" EQUAL "8")
set(SSL_EXTRA_ARGS enable-ec_nistp_64_gcc_128)
set(SSL_OS_COMPILER "blender-linux-x86_64")
else()
set(SSL_OS_COMPILER "blender-linux-x86")
endif()
endif()
ExternalProject_Add(external_ssl
URL file://${PACKAGE_DIR}/${SSL_FILE}
DOWNLOAD_DIR ${DOWNLOAD_DIR}
URL_HASH ${SSL_HASH_TYPE}=${SSL_HASH}
PREFIX ${BUILD_DIR}/ssl
CONFIGURE_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/ssl/src/external_ssl/ &&
${SSL_CONFIGURE_COMMAND}
--prefix=${LIBDIR}/ssl
--openssldir=${LIBDIR}/ssl
# Without this: Python will use the build directories.
# using the system directory `/etc/ssl` might seem the obvious choice,
# there is no guarantee the version of SSL used with Blender is compatible with the systems,
# where changes to the SSL configuration format can cause SSL not to load (see #114452).
# So reference a directory known not to exist. Ideally Blender could distribute its own SSL
# directory, but this isn't compatible with hard coded paths.
# See #111132 & https://github.com/openssl/openssl/issues/20185 for details.
-DOPENSSLDIR=\\"/dev/null\\"
no-shared
no-idea no-mdc2 no-rc5 no-zlib no-ssl3 enable-unit-test no-ssl3-method enable-rfc3779 enable-cms
--config=${CMAKE_CURRENT_SOURCE_DIR}/cmake/ssl.conf
${SSL_OS_COMPILER}
BUILD_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/ssl/src/external_ssl/ &&
make -j${MAKE_THREADS}
INSTALL_COMMAND ${CONFIGURE_ENV} &&
cd ${BUILD_DIR}/ssl/src/external_ssl/ &&
make install
INSTALL_DIR ${LIBDIR}/ssl
)
endif()

View File

@@ -0,0 +1,25 @@
my %targets = (
"blender-linux-x86" => {
inherit_from => [ "linux-x86" ],
cflags => add("-fPIC"),
},
"blender-linux-x86_64" => {
inherit_from => [ "linux-x86_64" ],
cflags => add("-fPIC"),
},
"blender-linux-aarch64" => {
inherit_from => [ "linux-aarch64" ],
cxxflags => add("-fPIC"),
cflags => add("-fPIC"),
},
"blender-darwin-x86_64" => {
inherit_from => [ "darwin64-x86_64-cc" ],
cflags => add("-fPIC"),
},
"blender-darwin-arm64" => {
inherit_from => [ "darwin-common" ],
cxxflags => add("-fPIC -arch arm64"),
cflags => add("-fPIC -arch arm64"),
},
);

Some files were not shown because too many files have changed in this diff Show More