diff options
Diffstat (limited to 'build_files/build_environment/cmake')
25 files changed, 675 insertions, 104 deletions
diff --git a/build_files/build_environment/cmake/alembic.cmake b/build_files/build_environment/cmake/alembic.cmake index 484a7849ace..8b049e9e206 100644 --- a/build_files/build_environment/cmake/alembic.cmake +++ b/build_files/build_environment/cmake/alembic.cmake @@ -42,4 +42,5 @@ endif() add_dependencies( external_alembic external_openexr + external_imath ) diff --git a/build_files/build_environment/cmake/aom.cmake b/build_files/build_environment/cmake/aom.cmake new file mode 100644 index 00000000000..9f64439771f --- /dev/null +++ b/build_files/build_environment/cmake/aom.cmake @@ -0,0 +1,45 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +if(WIN32) + # The default generator on windows is msbuild, which we do not + # want to use for this dep, as needs to build with mingw + set(AOM_GENERATOR "Ninja") + # The default flags are full of MSVC options given this will be + # building with mingw, it'll have an unhappy time with that and + # we need to clear them out. + set(AOM_CMAKE_FLAGS ) + # CMake will correctly identify phreads being available, however + # we do not want to use them, as that gains a dependency on + # libpthreadswin.dll which we do not want. when pthreads is not + # available oam will use a pthreads emulation layer using win32 threads + set(AOM_EXTRA_ARGS_WIN32 -DCMAKE_HAVE_PTHREAD_H=OFF) +else() + set(AOM_GENERATOR "Unix Makefiles") + set(AOM_CMAKE_FLAGS ${DEFAULT_CMAKE_FLAGS}) +endif() + +set(AOM_EXTRA_ARGS + -DENABLE_TESTDATA=OFF + -DENABLE_TESTS=OFF + -DENABLE_TOOLS=OFF + -DENABLE_EXAMPLES=OFF + ${AOM_EXTRA_ARGS_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 + CONFIGURE_COMMAND ${CONFIGURE_ENV} && + cd ${BUILD_DIR}/aom/src/external_aom-build/ && + ${CMAKE_COMMAND} -G "${AOM_GENERATOR}" -DCMAKE_INSTALL_PREFIX=${LIBDIR}/aom ${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 +) diff --git a/build_files/build_environment/cmake/check_software.cmake b/build_files/build_environment/cmake/check_software.cmake index 2a1aaef0bee..cc8fead6f81 100644 --- a/build_files/build_environment/cmake/check_software.cmake +++ b/build_files/build_environment/cmake/check_software.cmake @@ -12,21 +12,13 @@ if(UNIX) automake bison ${_libtoolize_name} + meson + ninja pkg-config tclsh yasm ) - if(NOT APPLE) - set(_required_software - ${_required_software} - - # Needed for Mesa. - meson - ninja - ) - endif() - foreach(_software ${_required_software}) find_program(_software_find NAMES ${_software}) if(NOT _software_find) @@ -56,11 +48,8 @@ if(UNIX) "On Debian and Ubuntu:\n" " apt install autoconf automake libtool yasm tcl ninja-build meson python3-mako\n" "\n" - "On macOS Intel (with homebrew):\n" - " brew install autoconf automake bison libtool pkg-config yasm\n" - "\n" - "On macOS ARM (with homebrew):\n" - " brew install autoconf automake bison flex libtool pkg-config yasm\n" + "On macOS (with homebrew):\n" + " brew install autoconf automake bison flex libtool meson ninja pkg-config yasm\n" "\n" "Other platforms:\n" " Install equivalent packages.\n") diff --git a/build_files/build_environment/cmake/download.cmake b/build_files/build_environment/cmake/download.cmake index 81e7f7ab3fe..6f0dd80ea6a 100644 --- a/build_files/build_environment/cmake/download.cmake +++ b/build_files/build_environment/cmake/download.cmake @@ -36,7 +36,7 @@ download_source(BLOSC) download_source(PTHREADS) download_source(OPENEXR) download_source(FREETYPE) -download_source(GLEW) +download_source(EPOXY) download_source(FREEGLUT) download_source(ALEMBIC) download_source(OPENSUBDIV) @@ -94,6 +94,7 @@ download_source(GMP) download_source(POTRACE) download_source(HARU) download_source(ZSTD) +download_source(SSE2NEON) download_source(FLEX) download_source(BROTLI) download_source(FMT) @@ -101,3 +102,19 @@ download_source(ROBINMAP) download_source(IMATH) download_source(PYSTRING) download_source(LEVEL_ZERO) +download_source(DPCPP) +download_source(VCINTRINSICS) +download_source(OPENCLHEADERS) +download_source(ICDLOADER) +download_source(MP11) +download_source(SPIRV_HEADERS) +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) diff --git a/build_files/build_environment/cmake/dpcpp.cmake b/build_files/build_environment/cmake/dpcpp.cmake new file mode 100644 index 00000000000..3c3fe201073 --- /dev/null +++ b/build_files/build_environment/cmake/dpcpp.cmake @@ -0,0 +1,109 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + + +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 the 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 the 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 + -DLLVMGenXIntrinsics_SOURCE_DIR=${BUILD_DIR}/vcintrinsics/src/external_vcintrinsics/ + -DOpenCL_HEADERS=file://${PACKAGE_DIR}/${OPENCLHEADERS_FILE} + -DOpenCL_LIBRARY_SRC=file://${PACKAGE_DIR}/${ICDLOADER_FILE} + -DBOOST_MP11_SOURCE_DIR=${BUILD_DIR}/mp11/src/external_mp11/ + -DLEVEL_ZERO_LIBRARY=${LIBDIR}/level-zero/lib/${LIBPREFIX}ze_loader${SHAREDLIBEXT} + -DLEVEL_ZERO_INCLUDE_DIR=${LIBDIR}/level-zero/include + -DLLVM_EXTERNAL_SPIRV_HEADERS_SOURCE_DIR=${BUILD_DIR}/spirvheaders/src/external_spirvheaders/ + # Below here is copied from an invocation of buildbot/config.py + -DLLVM_ENABLE_ASSERTIONS=ON + -DLLVM_TARGETS_TO_BUILD=X86 + -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 + -DLIBCLC_TARGETS_TO_BUILD= + -DLIBCLC_GENERATE_REMANGLED_VARIANTS=OFF + -DSYCL_BUILD_PI_HIP_PLATFORM=AMD + -DLLVM_BUILD_TOOLS=ON + -DSYCL_ENABLE_WERROR=OFF + -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 + -DXPTI_ENABLE_WERROR=OFF + -DSYCL_CLANG_EXTRA_FLAGS= + -DSYCL_ENABLE_PLUGINS=level_zero + -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 +) + +if(WIN32) + list(APPEND DPCPP_EXTRA_ARGS -DPython3_FIND_REGISTRY=NEVER) +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 ${DEFAULT_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 + INSTALL_DIR ${LIBDIR}/dpcpp +) + +add_dependencies( + external_dpcpp + external_python + external_python_site_packages + external_vcintrinsics + external_openclheaders + external_icdloader + external_mp11 + external_level-zero + external_spirvheaders +) + +if(BUILD_MODE STREQUAL Release AND WIN32) + ExternalProject_Add_Step(external_dpcpp after_install + COMMAND ${CMAKE_COMMAND} -E rm -f ${LIBDIR}/dpcpp/bin/clang-cl.exe + COMMAND ${CMAKE_COMMAND} -E rm -f ${LIBDIR}/dpcpp/bin/clang-cpp.exe + COMMAND ${CMAKE_COMMAND} -E rm -f ${LIBDIR}/dpcpp/bin/clang.exe + COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/dpcpp ${HARVEST_TARGET}/dpcpp + ) +endif() diff --git a/build_files/build_environment/cmake/dpcpp_deps.cmake b/build_files/build_environment/cmake/dpcpp_deps.cmake new file mode 100644 index 00000000000..e66006993f6 --- /dev/null +++ b/build_files/build_environment/cmake/dpcpp_deps.cmake @@ -0,0 +1,61 @@ +# 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 opertunity 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 opertunity 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_mp11 + URL file://${PACKAGE_DIR}/${MP11_FILE} + URL_HASH ${MP11_HASH_TYPE}=${MP11_HASH} + DOWNLOAD_DIR ${DOWNLOAD_DIR} + PREFIX ${BUILD_DIR}/mp11 + CONFIGURE_COMMAND echo . + BUILD_COMMAND echo . + INSTALL_COMMAND echo . +) + +ExternalProject_Add(external_spirvheaders + URL file://${PACKAGE_DIR}/${SPIRV_HEADERS_FILE} + URL_HASH ${SPIRV_HEADERS_HASH_TYPE}=${SPIRV_HEADERS_HASH} + DOWNLOAD_DIR ${DOWNLOAD_DIR} + PREFIX ${BUILD_DIR}/spirvheaders + CONFIGURE_COMMAND echo . + BUILD_COMMAND echo . + INSTALL_COMMAND echo . +) diff --git a/build_files/build_environment/cmake/embree.cmake b/build_files/build_environment/cmake/embree.cmake index 2eafc729111..8c689cf000b 100644 --- a/build_files/build_environment/cmake/embree.cmake +++ b/build_files/build_environment/cmake/embree.cmake @@ -10,18 +10,12 @@ set(EMBREE_EXTRA_ARGS -DEMBREE_RAY_MASK=ON -DEMBREE_FILTER_FUNCTION=ON -DEMBREE_BACKFACE_CULLING=OFF - -DEMBREE_MAX_ISA=AVX2 -DEMBREE_TASKING_SYSTEM=TBB -DEMBREE_TBB_ROOT=${LIBDIR}/tbb -DTBB_ROOT=${LIBDIR}/tbb - -DTBB_STATIC_LIB=${TBB_STATIC_LIBRARY} ) -if(BLENDER_PLATFORM_ARM) - set(EMBREE_EXTRA_ARGS - ${EMBREE_EXTRA_ARGS} - -DEMBREE_MAX_ISA=NEON) -else() +if (NOT BLENDER_PLATFORM_ARM) set(EMBREE_EXTRA_ARGS ${EMBREE_EXTRA_ARGS} -DEMBREE_MAX_ISA=AVX2) @@ -30,23 +24,10 @@ endif() if(TBB_STATIC_LIBRARY) set(EMBREE_EXTRA_ARGS ${EMBREE_EXTRA_ARGS} - -DEMBREE_TBB_LIBRARY_NAME=tbb_static - -DEMBREE_TBBMALLOC_LIBRARY_NAME=tbbmalloc_static + -DEMBREE_TBB_COMPONENT=tbb_static ) endif() -if(WIN32) - set(EMBREE_BUILD_DIR ${BUILD_MODE}/) - if(BUILD_MODE STREQUAL Debug) - list(APPEND EMBREE_EXTRA_ARGS - -DEMBREE_TBBMALLOC_LIBRARY_NAME=tbbmalloc_debug - -DEMBREE_TBB_LIBRARY_NAME=tbb_debug - ) - endif() -else() - set(EMBREE_BUILD_DIR) -endif() - ExternalProject_Add(external_embree URL file://${PACKAGE_DIR}/${EMBREE_FILE} DOWNLOAD_DIR ${DOWNLOAD_DIR} diff --git a/build_files/build_environment/cmake/epoxy.cmake b/build_files/build_environment/cmake/epoxy.cmake new file mode 100644 index 00000000000..4cd9158f2ac --- /dev/null +++ b/build_files/build_environment/cmake/epoxy.cmake @@ -0,0 +1,25 @@ +# SPDX-License-Identifier: GPL-2.0-or-later +if(WIN32) + set(EPOXY_LIB_TYPE shared) +else() + set(EPOXY_LIB_TYPE static) +endif() +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 --default-library ${EPOXY_LIB_TYPE} --libdir lib ${BUILD_DIR}/epoxy/src/external_epoxy-build ${BUILD_DIR}/epoxy/src/external_epoxy -Dtests=false + BUILD_COMMAND ninja + INSTALL_COMMAND ninja install +) + +if(BUILD_MODE STREQUAL Release AND WIN32) + 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() diff --git a/build_files/build_environment/cmake/ffmpeg.cmake b/build_files/build_environment/cmake/ffmpeg.cmake index 4cf96ee2fcb..7730607c514 100644 --- a/build_files/build_environment/cmake/ffmpeg.cmake +++ b/build_files/build_environment/cmake/ffmpeg.cmake @@ -1,9 +1,9 @@ # SPDX-License-Identifier: GPL-2.0-or-later -set(FFMPEG_CFLAGS "-I${mingw_LIBDIR}/lame/include -I${mingw_LIBDIR}/openjpeg/include/ -I${mingw_LIBDIR}/ogg/include -I${mingw_LIBDIR}/vorbis/include -I${mingw_LIBDIR}/theora/include -I${mingw_LIBDIR}/opus/include -I${mingw_LIBDIR}/vpx/include -I${mingw_LIBDIR}/x264/include -I${mingw_LIBDIR}/xvidcore/include -I${mingw_LIBDIR}/zlib/include") -set(FFMPEG_LDFLAGS "-L${mingw_LIBDIR}/lame/lib -L${mingw_LIBDIR}/openjpeg/lib -L${mingw_LIBDIR}/ogg/lib -L${mingw_LIBDIR}/vorbis/lib -L${mingw_LIBDIR}/theora/lib -L${mingw_LIBDIR}/opus/lib -L${mingw_LIBDIR}/vpx/lib -L${mingw_LIBDIR}/x264/lib -L${mingw_LIBDIR}/xvidcore/lib -L${mingw_LIBDIR}/zlib/lib") +set(FFMPEG_CFLAGS "-I${mingw_LIBDIR}/lame/include -I${mingw_LIBDIR}/openjpeg/include/ -I${mingw_LIBDIR}/ogg/include -I${mingw_LIBDIR}/vorbis/include -I${mingw_LIBDIR}/theora/include -I${mingw_LIBDIR}/opus/include -I${mingw_LIBDIR}/vpx/include -I${mingw_LIBDIR}/x264/include -I${mingw_LIBDIR}/xvidcore/include -I${mingw_LIBDIR}/zlib/include -I${mingw_LIBDIR}/aom/include") +set(FFMPEG_LDFLAGS "-L${mingw_LIBDIR}/lame/lib -L${mingw_LIBDIR}/openjpeg/lib -L${mingw_LIBDIR}/ogg/lib -L${mingw_LIBDIR}/vorbis/lib -L${mingw_LIBDIR}/theora/lib -L${mingw_LIBDIR}/opus/lib -L${mingw_LIBDIR}/vpx/lib -L${mingw_LIBDIR}/x264/lib -L${mingw_LIBDIR}/xvidcore/lib -L${mingw_LIBDIR}/zlib/lib -L${mingw_LIBDIR}/aom/lib") set(FFMPEG_EXTRA_FLAGS --pkg-config-flags=--static --extra-cflags=${FFMPEG_CFLAGS} --extra-ldflags=${FFMPEG_LDFLAGS}) -set(FFMPEG_ENV PKG_CONFIG_PATH=${mingw_LIBDIR}/openjpeg/lib/pkgconfig:${mingw_LIBDIR}/x264/lib/pkgconfig:${mingw_LIBDIR}/vorbis/lib/pkgconfig:${mingw_LIBDIR}/ogg/lib/pkgconfig:${mingw_LIBDIR}:${mingw_LIBDIR}/vpx/lib/pkgconfig:${mingw_LIBDIR}/theora/lib/pkgconfig:${mingw_LIBDIR}/openjpeg/lib/pkgconfig:${mingw_LIBDIR}/opus/lib/pkgconfig:) +set(FFMPEG_ENV PKG_CONFIG_PATH=${mingw_LIBDIR}/openjpeg/lib/pkgconfig:${mingw_LIBDIR}/x264/lib/pkgconfig:${mingw_LIBDIR}/vorbis/lib/pkgconfig:${mingw_LIBDIR}/ogg/lib/pkgconfig:${mingw_LIBDIR}:${mingw_LIBDIR}/vpx/lib/pkgconfig:${mingw_LIBDIR}/theora/lib/pkgconfig:${mingw_LIBDIR}/openjpeg/lib/pkgconfig:${mingw_LIBDIR}/opus/lib/pkgconfig:${mingw_LIBDIR}/aom/lib/pkgconfig:) if(WIN32) set(FFMPEG_ENV set ${FFMPEG_ENV} &&) @@ -79,6 +79,7 @@ ExternalProject_Add(external_ffmpeg --disable-librtmp --enable-libx264 --enable-libxvid + --enable-libaom --disable-libopencore-amrnb --disable-libopencore-amrwb --disable-libdc1394 @@ -125,6 +126,7 @@ add_dependencies( external_vorbis external_ogg external_lame + external_aom ) if(WIN32) add_dependencies( diff --git a/build_files/build_environment/cmake/glew.cmake b/build_files/build_environment/cmake/glew.cmake deleted file mode 100644 index 0745ad01533..00000000000 --- a/build_files/build_environment/cmake/glew.cmake +++ /dev/null @@ -1,16 +0,0 @@ -# SPDX-License-Identifier: GPL-2.0-or-later - -set(GLEW_EXTRA_ARGS - -DBUILD_UTILS=Off - -DBUILD_SHARED_LIBS=Off -) - -ExternalProject_Add(external_glew - URL file://${PACKAGE_DIR}/${GLEW_FILE} - DOWNLOAD_DIR ${DOWNLOAD_DIR} - URL_HASH ${GLEW_HASH_TYPE}=${GLEW_HASH} - PATCH_COMMAND COMMAND ${CMAKE_COMMAND} -E copy ${PATCH_DIR}/cmakelists_glew.txt ${BUILD_DIR}/glew/src/external_glew/CMakeLists.txt - PREFIX ${BUILD_DIR}/glew - CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_INSTALL_PREFIX=${LIBDIR}/glew ${DEFAULT_CMAKE_FLAGS} ${GLEW_EXTRA_ARGS} - INSTALL_DIR ${LIBDIR}/glew -) diff --git a/build_files/build_environment/cmake/gmmlib.cmake b/build_files/build_environment/cmake/gmmlib.cmake new file mode 100644 index 00000000000..c46f5c8943d --- /dev/null +++ b/build_files/build_environment/cmake/gmmlib.cmake @@ -0,0 +1,13 @@ +# 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 +) diff --git a/build_files/build_environment/cmake/harvest.cmake b/build_files/build_environment/cmake/harvest.cmake index aeaa6fbd2b5..6ed98398fde 100644 --- a/build_files/build_environment/cmake/harvest.cmake +++ b/build_files/build_environment/cmake/harvest.cmake @@ -22,12 +22,6 @@ if(BUILD_MODE STREQUAL Release) # freeglut-> opengl ${CMAKE_COMMAND} -E copy ${LIBDIR}/freeglut/lib/freeglut_static.lib ${HARVEST_TARGET}/opengl/lib/freeglut_static.lib && ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/freeglut/include/ ${HARVEST_TARGET}/opengl/include/ && - # glew-> opengl - ${CMAKE_COMMAND} -E copy ${LIBDIR}/glew/lib/libglew32.lib ${HARVEST_TARGET}/opengl/lib/glew.lib && - ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/glew/include/ ${HARVEST_TARGET}/opengl/include/ && - # tiff - ${CMAKE_COMMAND} -E copy ${LIBDIR}/tiff/lib/tiff.lib ${HARVEST_TARGET}/tiff/lib/libtiff.lib && - ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/tiff/include/ ${HARVEST_TARGET}/tiff/include/ DEPENDS ) endif() @@ -46,7 +40,8 @@ function(harvest from to) install( FILES ${LIBDIR}/${from} DESTINATION ${HARVEST_TARGET}/${dirpath} - RENAME ${filename}) + RENAME ${filename} + ) else() install( DIRECTORY ${LIBDIR}/${from}/ @@ -56,7 +51,8 @@ function(harvest from to) PATTERN "pkgconfig" EXCLUDE PATTERN "cmake" EXCLUDE PATTERN "__pycache__" EXCLUDE - PATTERN "tests" EXCLUDE) + PATTERN "tests" EXCLUDE + ) endif() endfunction() @@ -76,8 +72,8 @@ harvest(fftw3/lib fftw3/lib "*.a") harvest(flac/lib sndfile/lib "libFLAC.a") harvest(freetype/include freetype/include "*.h") harvest(freetype/lib/libfreetype2ST.a freetype/lib/libfreetype.a) -harvest(glew/include glew/include "*.h") -harvest(glew/lib glew/lib "*.a") +harvest(epoxy/include epoxy/include "*.h") +harvest(epoxy/lib epoxy/lib "*.a") harvest(gmp/include gmp/include "*.h") harvest(gmp/lib gmp/lib "*.a") harvest(jemalloc/include jemalloc/include "*.h") @@ -177,6 +173,7 @@ harvest(opus/lib ffmpeg/lib "*.a") harvest(vpx/lib ffmpeg/lib "*.a") harvest(x264/lib ffmpeg/lib "*.a") harvest(xvidcore/lib ffmpeg/lib "*.a") +harvest(aom/lib ffmpeg/lib "*.a") harvest(webp/lib webp/lib "*.a") harvest(webp/include webp/include "*.h") harvest(usd/include usd/include "*.h") @@ -192,6 +189,10 @@ harvest(zstd/lib zstd/lib "*.a") if(UNIX AND NOT APPLE) harvest(libglu/lib mesa/lib "*.so*") harvest(mesa/lib64 mesa/lib "*.so*") -endif() + + harvest(dpcpp dpcpp "*") + harvest(igc dpcpp/lib/igc "*") + harvest(ocloc dpcpp/lib/ocloc "*") + endif() endif() diff --git a/build_files/build_environment/cmake/igc.cmake b/build_files/build_environment/cmake/igc.cmake new file mode 100644 index 00000000000..3b488a77b3f --- /dev/null +++ b/build_files/build_environment/cmake/igc.cmake @@ -0,0 +1,126 @@ +# 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 . + PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/igc_opencl_clang/src/external_igc_opencl_clang/ < ${PATCH_DIR}/igc_opencl_clang.diff +) + +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-OpenCL-3.0-support.patch && + ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/clang/0002-Remove-__IMAGE_SUPPORT__-macro-for-SPIR.patch && + ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/clang/0003-Avoid-calling-ParseCommandLineOptions-in-BackendUtil.patch && + ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/clang/0004-OpenCL-support-cl_ext_float_atomics.patch && + ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/clang/0005-OpenCL-Add-cl_khr_integer_dot_product.patch && + ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/llvm/0001-Memory-leak-fix-for-Managed-Static-Mutex.patch && + ${PATCH_CMD} -p 1 -d ${IGC_LLVM_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/llvm/0002-Remove-repo-name-in-LLVM-IR.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 . + PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${IGC_SPIRV_TRANSLATOR_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/spirv/0001-update-SPIR-V-headers-for-SPV_INTEL_split_barrier.patch && + ${PATCH_CMD} -p 1 -d ${IGC_SPIRV_TRANSLATOR_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/spirv/0002-Add-support-for-split-barriers-extension-SPV_INTEL_s.patch && + ${PATCH_CMD} -p 1 -d ${IGC_SPIRV_TRANSLATOR_SOURCE_DIR} < ${IGC_OPENCL_CLANG_PATCH_DIR}/spirv/0003-Support-cl_bf16_conversions.patch +) +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() + +set(IGC_EXTRA_ARGS + -DIGC_OPTION__ARCHITECTURE_TARGET=${IGC_TARGET} + -DIGC_OPTION__ARCHITECTURE_HOST=${IGC_TARGET} +) + +if(UNIX AND NOT APPLE) + list(APPEND IGC_EXTRA_ARGS + -DFLEX_EXECUTABLE=${LIBDIR}/flex/bin/flex + -DFLEX_INCLUDE_DIR=${LIBDIR}/flex/include + ) +endif() + +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 ${DEFAULT_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 alternatives folders, other are just hardocded 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_vcintrinsics + external_igc_spirv_headers + external_igc_spirv_tools + external_igc_spirv_translator +) + +if(UNIX AND NOT APPLE) + add_dependencies( + external_igc + external_flex + ) +endif() diff --git a/build_files/build_environment/cmake/ispc.cmake b/build_files/build_environment/cmake/ispc.cmake index 160088bc16f..c2dbedca55f 100644 --- a/build_files/build_environment/cmake/ispc.cmake +++ b/build_files/build_environment/cmake/ispc.cmake @@ -6,6 +6,7 @@ if(WIN32) -DBISON_EXECUTABLE=${LIBDIR}/flexbison/win_bison.exe -DM4_EXECUTABLE=${DOWNLOAD_DIR}/mingw/mingw64/msys/1.0/bin/m4.exe -DARM_ENABLED=Off + -DPython3_FIND_REGISTRY=NEVER ) elseif(APPLE) # Use bison and flex installed via Homebrew. @@ -27,7 +28,7 @@ elseif(UNIX) set(ISPC_EXTRA_ARGS_UNIX -DCMAKE_C_COMPILER=${LIBDIR}/llvm/bin/clang -DCMAKE_CXX_COMPILER=${LIBDIR}/llvm/bin/clang++ - -DARM_ENABLED=Off + -DARM_ENABLED=${BLENDER_PLATFORM_ARM} -DFLEX_EXECUTABLE=${LIBDIR}/flex/bin/flex ) endif() @@ -43,6 +44,8 @@ set(ISPC_EXTRA_ARGS -DISPC_INCLUDE_TESTS=Off -DCLANG_LIBRARY_DIR=${LIBDIR}/llvm/lib -DCLANG_INCLUDE_DIRS=${LIBDIR}/llvm/include + -DPython3_ROOT_DIR=${LIBDIR}/python/ + -DPython3_EXECUTABLE=${PYTHON_BINARY} ${ISPC_EXTRA_ARGS_WIN} ${ISPC_EXTRA_ARGS_APPLE} ${ISPC_EXTRA_ARGS_UNIX} @@ -61,6 +64,7 @@ ExternalProject_Add(external_ispc add_dependencies( external_ispc ll + external_python ) if(WIN32) diff --git a/build_files/build_environment/cmake/llvm.cmake b/build_files/build_environment/cmake/llvm.cmake index cf92a5175a3..e4ddc7db846 100644 --- a/build_files/build_environment/cmake/llvm.cmake +++ b/build_files/build_environment/cmake/llvm.cmake @@ -25,11 +25,14 @@ set(LLVM_EXTRA_ARGS -DLLVM_BUILD_LLVM_C_DYLIB=OFF -DLLVM_ENABLE_UNWIND_TABLES=OFF -DLLVM_ENABLE_PROJECTS=clang${LLVM_BUILD_CLANG_TOOLS_EXTRA} + -DPython3_ROOT_DIR=${LIBDIR}/python/ + -DPython3_EXECUTABLE=${PYTHON_BINARY} ${LLVM_XML2_ARGS} ) if(WIN32) set(LLVM_GENERATOR "Ninja") + list(APPEND LLVM_EXTRA_ARGS -DPython3_FIND_REGISTRY=NEVER) else() set(LLVM_GENERATOR "Unix Makefiles") endif() @@ -74,3 +77,8 @@ if(APPLE) external_xml2 ) endif() + +add_dependencies( + ll + external_python +) diff --git a/build_files/build_environment/cmake/macros.cmake b/build_files/build_environment/cmake/macros.cmake new file mode 100644 index 00000000000..82fc151a038 --- /dev/null +++ b/build_files/build_environment/cmake/macros.cmake @@ -0,0 +1,18 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +# shorthand to only unpack a certain dependency +macro(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 . + ) +endmacro() diff --git a/build_files/build_environment/cmake/ocloc.cmake b/build_files/build_environment/cmake/ocloc.cmake new file mode 100644 index 00000000000..f686d2dd4fc --- /dev/null +++ b/build_files/build_environment/cmake/ocloc.cmake @@ -0,0 +1,24 @@ +# SPDX-License-Identifier: GPL-2.0-or-later + +set(OCLOC_EXTRA_ARGS + -DNEO_SKIP_UNIT_TESTS=1 + -DNEO_BUILD_WITH_OCL=0 + -DBUILD_WITH_L0=0 + -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 +) diff --git a/build_files/build_environment/cmake/openimagedenoise.cmake b/build_files/build_environment/cmake/openimagedenoise.cmake index 3612e91a690..14a730d69b6 100644 --- a/build_files/build_environment/cmake/openimagedenoise.cmake +++ b/build_files/build_environment/cmake/openimagedenoise.cmake @@ -9,6 +9,7 @@ set(OIDN_EXTRA_ARGS -DOIDN_STATIC_RUNTIME=OFF -DISPC_EXECUTABLE=${LIBDIR}/ispc/bin/ispc -DOIDN_FILTER_RTLIGHTMAP=OFF + -DPYTHON_EXECUTABLE=${PYTHON_BINARY} ) if(WIN32) @@ -38,6 +39,7 @@ add_dependencies( external_openimagedenoise external_tbb external_ispc + external_python ) if(WIN32) diff --git a/build_files/build_environment/cmake/openimageio.cmake b/build_files/build_environment/cmake/openimageio.cmake index b7d7ce689a4..26881488039 100644 --- a/build_files/build_environment/cmake/openimageio.cmake +++ b/build_files/build_environment/cmake/openimageio.cmake @@ -18,9 +18,15 @@ if(WIN32) set(PNG_LIBNAME libpng16_static${LIBEXT}) set(OIIO_SIMD_FLAGS -DUSE_SIMD=sse2) set(OPENJPEG_POSTFIX _msvc) + if(BUILD_MODE STREQUAL Debug) + set(TIFF_POSTFIX d) + else() + set(TIFF_POSTFIX) + endif() else() set(PNG_LIBNAME libpng${LIBEXT}) set(OIIO_SIMD_FLAGS) + set(TIFF_POSTFIX) endif() if(MSVC) @@ -65,7 +71,7 @@ set(OPENIMAGEIO_EXTRA_ARGS -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${LIBEXT} + -DTIFF_LIBRARY=${LIBDIR}/tiff/lib/${LIBPREFIX}tiff${TIFF_POSTFIX}${LIBEXT} -DTIFF_INCLUDE_DIR=${LIBDIR}/tiff/include -DJPEG_LIBRARY=${LIBDIR}/jpeg/lib/${JPEG_LIBRARY} -DJPEG_INCLUDE_DIR=${LIBDIR}/jpeg/include diff --git a/build_files/build_environment/cmake/options.cmake b/build_files/build_environment/cmake/options.cmake index 7b9529068f4..9015ef9ac7c 100644 --- a/build_files/build_environment/cmake/options.cmake +++ b/build_files/build_environment/cmake/options.cmake @@ -38,6 +38,7 @@ message("BUILD_DIR = ${BUILD_DIR}") if(WIN32) set(PATCH_CMD ${DOWNLOAD_DIR}/mingw/mingw64/msys/1.0/bin/patch.exe) set(LIBEXT ".lib") + set(SHAREDLIBEXT ".lib") set(LIBPREFIX "") # For OIIO and OSL @@ -96,6 +97,7 @@ if(WIN32) else() set(PATCH_CMD patch) set(LIBEXT ".a") + set(SHAREDLIBEXT ".so") set(LIBPREFIX "lib") if(APPLE) diff --git a/build_files/build_environment/cmake/python.cmake b/build_files/build_environment/cmake/python.cmake index 3f45333ed3d..8fed10e9d72 100644 --- a/build_files/build_environment/cmake/python.cmake +++ b/build_files/build_environment/cmake/python.cmake @@ -27,6 +27,7 @@ if(WIN32) PREFIX ${BUILD_DIR}/python CONFIGURE_COMMAND "" BUILD_COMMAND cd ${BUILD_DIR}/python/src/external_python/pcbuild/ && set IncludeTkinter=false && call build.bat -e -p x64 -c ${BUILD_MODE} + PATCH_COMMAND ${PATCH_CMD} --verbose -p1 -d ${BUILD_DIR}/python/src/external_python < ${PATCH_DIR}/python_windows.diff INSTALL_COMMAND ${PYTHON_BINARY_INTERNAL} ${PYTHON_SRC}/PC/layout/main.py -b ${PYTHON_SRC}/PCbuild/amd64 -s ${PYTHON_SRC} -t ${PYTHON_SRC}/tmp/ --include-stable --include-pip --include-dev --include-launchers --include-venv --include-symbols ${PYTHON_EXTRA_INSTLAL_FLAGS} --copy ${LIBDIR}/python ) diff --git a/build_files/build_environment/cmake/sse2neon.cmake b/build_files/build_environment/cmake/sse2neon.cmake index 2216ad43d59..07fe1ac6f39 100644 --- a/build_files/build_environment/cmake/sse2neon.cmake +++ b/build_files/build_environment/cmake/sse2neon.cmake @@ -1,9 +1,9 @@ # SPDX-License-Identifier: GPL-2.0-or-later ExternalProject_Add(external_sse2neon - GIT_REPOSITORY ${SSE2NEON_GIT} - GIT_TAG ${SSE2NEON_GIT_HASH} + 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 diff --git a/build_files/build_environment/cmake/tiff.cmake b/build_files/build_environment/cmake/tiff.cmake index bd495df2a4c..1f8e9442ae5 100644 --- a/build_files/build_environment/cmake/tiff.cmake +++ b/build_files/build_environment/cmake/tiff.cmake @@ -3,6 +3,8 @@ set(TIFF_EXTRA_ARGS -DZLIB_LIBRARY=${LIBDIR}/zlib/lib/${ZLIB_LIBRARY} -DZLIB_INCLUDE_DIR=${LIBDIR}/zlib/include + -DJPEG_LIBRARY=${LIBDIR}/jpeg/lib/${JPEG_LIBRARY} + -DJPEG_INCLUDE_DIR=${LIBDIR}/jpeg/include -DPNG_STATIC=ON -DBUILD_SHARED_LIBS=OFF -Dlzma=OFF @@ -24,10 +26,12 @@ add_dependencies( external_tiff external_zlib ) - -if(WIN32 AND BUILD_MODE STREQUAL Debug) - ExternalProject_Add_Step(external_tiff after_install - COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tiff/lib/tiffd${LIBEXT} ${LIBDIR}/tiff/lib/tiff${LIBEXT} - DEPENDEES install - ) +if(WIN32) + if(BUILD_MODE STREQUAL Release) + ExternalProject_Add_Step(external_tiff after_install + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/tiff/lib/tiff.lib ${HARVEST_TARGET}/tiff/lib/libtiff.lib && + ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/tiff/include/ ${HARVEST_TARGET}/tiff/include/ + DEPENDEES install + ) + endif() endif() diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake index 550be86b6b6..95425300923 100644 --- a/build_files/build_environment/cmake/versions.cmake +++ b/build_files/build_environment/cmake/versions.cmake @@ -45,15 +45,15 @@ set(PTHREADS_HASH f3bf81bb395840b3446197bcf4ecd653) set(PTHREADS_HASH_TYPE MD5) set(PTHREADS_FILE pthreads4w-code-${PTHREADS_VERSION}.zip) -set(OPENEXR_VERSION 3.1.4) +set(OPENEXR_VERSION 3.1.5) set(OPENEXR_URI https://github.com/AcademySoftwareFoundation/openexr/archive/v${OPENEXR_VERSION}.tar.gz) -set(OPENEXR_HASH e990be1ff765797bc2d93a8060e1c1f2) +set(OPENEXR_HASH a92f38eedd43e56c0af56d4852506886) set(OPENEXR_HASH_TYPE MD5) set(OPENEXR_FILE openexr-${OPENEXR_VERSION}.tar.gz) -set(IMATH_VERSION 3.1.4) +set(IMATH_VERSION 3.1.5) set(IMATH_URI https://github.com/AcademySoftwareFoundation/Imath/archive/v${OPENEXR_VERSION}.tar.gz) -set(IMATH_HASH fddf14ec73e12c34e74c3c175e311a3f) +set(IMATH_HASH dd375574276c54872b7b3d54053baff0) set(IMATH_HASH_TYPE MD5) set(IMATH_FILE imath-${IMATH_VERSION}.tar.gz) @@ -80,11 +80,11 @@ set(FREETYPE_HASH bd4e3b007474319909a6b79d50908e85) set(FREETYPE_HASH_TYPE MD5) set(FREETYPE_FILE freetype-${FREETYPE_VERSION}.tar.gz) -set(GLEW_VERSION 1.13.0) -set(GLEW_URI http://prdownloads.sourceforge.net/glew/glew/${GLEW_VERSION}/glew-${GLEW_VERSION}.tgz) -set(GLEW_HASH 7cbada3166d2aadfc4169c4283701066) -set(GLEW_HASH_TYPE MD5) -set(GLEW_FILE glew-${GLEW_VERSION}.tgz) +set(EPOXY_VERSION 1.5.10) +set(EPOXY_URI https://github.com/anholt/libepoxy/archive/refs/tags/${EPOXY_VERSION}.tar.gz) +set(EPOXY_HASH f0730aad115c952e77591fcc805b1dc1) +set(EPOXY_HASH_TYPE MD5) +set(EPOXY_FILE libepoxy-${EPOXY_VERSION}.tar.gz) set(FREEGLUT_VERSION 3.0.0) set(FREEGLUT_URI http://prdownloads.sourceforge.net/freeglut/freeglut/${FREEGLUT_VERSION}/freeglut-${FREEGLUT_VERSION}.tar.gz) @@ -147,7 +147,7 @@ set(OPENIMAGEIO_HASH de45fb38501c4581062b522b53b6141c) set(OPENIMAGEIO_HASH_TYPE MD5) set(OPENIMAGEIO_FILE OpenImageIO-${OPENIMAGEIO_VERSION}.tar.gz) -# 8.0.0 is currently oiio's preferred vesion although never versions may be available. +# 8.0.0 is currently oiio's preferred version although never versions may be available. # the preferred version can be found in oiio's externalpackages.cmake set(FMT_VERSION 8.0.0) set(FMT_URI https://github.com/fmtlib/fmt/archive/refs/tags/${FMT_VERSION}.tar.gz) @@ -155,7 +155,7 @@ set(FMT_HASH 7bce0e9e022e586b178b150002e7c2339994e3c2bbe44027e9abb0d60f9cce83) set(FMT_HASH_TYPE SHA256) set(FMT_FILE fmt-${FMT_VERSION}.tar.gz) -# 0.6.2 is currently oiio's preferred vesion although never versions may be available. +# 0.6.2 is currently oiio's preferred version although never versions may be available. # the preferred version can be found in oiio's externalpackages.cmake set(ROBINMAP_VERSION v0.6.2) set(ROBINMAP_URI https://github.com/Tessil/robin-map/archive/refs/tags/${ROBINMAP_VERSION}.tar.gz) @@ -163,9 +163,9 @@ set(ROBINMAP_HASH c08ec4b1bf1c85eb0d6432244a6a89862229da1cb834f3f90fba8dc35d8c8e set(ROBINMAP_HASH_TYPE SHA256) set(ROBINMAP_FILE robinmap-${ROBINMAP_VERSION}.tar.gz) -set(TIFF_VERSION 4.3.0) +set(TIFF_VERSION 4.4.0) set(TIFF_URI http://download.osgeo.org/libtiff/tiff-${TIFF_VERSION}.tar.gz) -set(TIFF_HASH 0a2e4744d1426a8fc8211c0cdbc3a1b3) +set(TIFF_HASH 376f17f189e9d02280dfe709b2b2bbea) set(TIFF_HASH_TYPE MD5) set(TIFF_FILE tiff-${TIFF_VERSION}.tar.gz) @@ -410,9 +410,9 @@ set(SQLITE_HASH fb558c49ee21a837713c4f1e7e413309aabdd9c7) set(SQLITE_HASH_TYPE SHA1) set(SQLITE_FILE sqlite-src-3240000.zip) -set(EMBREE_VERSION 3.13.3) +set(EMBREE_VERSION 3.13.4) set(EMBREE_URI https://github.com/embree/embree/archive/v${EMBREE_VERSION}.zip) -set(EMBREE_HASH f62766ba54e48a2f327c3a22596e7133) +set(EMBREE_HASH 52d0be294d6c88ba7a6c9e046796e7be) set(EMBREE_HASH_TYPE MD5) set(EMBREE_FILE embree-v${EMBREE_VERSION}.zip) @@ -488,8 +488,11 @@ set(ZSTD_HASH 5194fbfa781fcf45b98c5e849651aa7b3b0a008c6b72d4a0db760f3002291e94) set(ZSTD_HASH_TYPE SHA256) set(ZSTD_FILE zstd-${ZSTD_VERSION}.tar.gz) -set(SSE2NEON_GIT https://github.com/DLTcollab/sse2neon.git) -set(SSE2NEON_GIT_HASH fe5ff00bb8d19b327714a3c290f3e2ce81ba3525) +set(SSE2NEON_VERSION fe5ff00bb8d19b327714a3c290f3e2ce81ba3525) +set(SSE2NEON_URI https://github.com/DLTcollab/sse2neon/archive/${SSE2NEON_VERSION}.tar.gz) +set(SSE2NEON_HASH 0780253525d299c31775ef95853698d03db9c7739942af8570000f4a25a5d605) +set(SSE2NEON_HASH_TYPE SHA256) +set(SSE2NEON_FILE sse2neon-${SSE2NEON_VERSION}.tar.gz) set(BROTLI_VERSION v1.0.9) set(BROTLI_URI https://github.com/google/brotli/archive/refs/tags/${BROTLI_VERSION}.tar.gz) @@ -502,3 +505,140 @@ set(LEVEL_ZERO_URI https://github.com/oneapi-src/level-zero/archive/refs/tags/${ set(LEVEL_ZERO_HASH c39bb05a8e5898aa6c444e1704105b93d3f1888b9c333f8e7e73825ffbfb2617) set(LEVEL_ZERO_HASH_TYPE SHA256) set(LEVEL_ZERO_FILE level-zero-${LEVEL_ZERO_VERSION}.tar.gz) + +set(DPCPP_VERSION 20220812) +set(DPCPP_URI https://github.com/intel/llvm/archive/refs/tags/sycl-nightly/${DPCPP_VERSION}.tar.gz) +set(DPCPP_HASH 0e3c95346c295f5cf80f3a42d80b1c49481955898530242636ddc002627248d6) +set(DPCPP_HASH_TYPE SHA256) +set(DPCPP_FILE DPCPP-${DPCPP_VERSION}.tar.gz) + +######################## +### DPCPP DEPS BEGIN ### +######################## +# The following deps are build time requirements for dpcpp, when possible +# the source in the dpcpp source tree for the version chosen is documented +# by each dep, these will only have to be downloaded and unpacked, dpcpp +# will take care of building them, unpack is being done in dpcpp_deps.cmake + +# Source llvm/lib/SYCLLowerIR/CMakeLists.txt +set(VCINTRINSICS_VERSION 984bb27baacce6ee5c716c2e64845f2a1928025b) +set(VCINTRINSICS_URI https://github.com/intel/vc-intrinsics/archive/${VCINTRINSICS_VERSION}.tar.gz) +set(VCINTRINSICS_HASH abea415a15a0dd11fdc94dee8fb462910f2548311b787e02f42509789e1b0d7b) +set(VCINTRINSICS_HASH_TYPE SHA256) +set(VCINTRINSICS_FILE vc-intrinsics-${VCINTRINSICS_VERSION}.tar.gz) + +# Source opencl/CMakeLists.txt +set(OPENCLHEADERS_VERSION dcd5bede6859d26833cd85f0d6bbcee7382dc9b3) +set(OPENCLHEADERS_URI https://github.com/KhronosGroup/OpenCL-Headers/archive/${OPENCLHEADERS_VERSION}.tar.gz) +set(OPENCLHEADERS_HASH ca8090359654e94f2c41e946b7e9d826253d795ae809ce7c83a7d3c859624693) +set(OPENCLHEADERS_HASH_TYPE SHA256) +set(OPENCLHEADERS_FILE opencl_headers-${OPENCLHEADERS_VERSION}.tar.gz) + +# Source opencl/CMakeLists.txt +set(ICDLOADER_VERSION aec3952654832211636fc4af613710f80e203b0a) +set(ICDLOADER_URI https://github.com/KhronosGroup/OpenCL-ICD-Loader/archive/${ICDLOADER_VERSION}.tar.gz) +set(ICDLOADER_HASH e1880551d67bd8dc31d13de63b94bbfd6b1f315b6145dad1ffcd159b89bda93c) +set(ICDLOADER_HASH_TYPE SHA256) +set(ICDLOADER_FILE icdloader-${ICDLOADER_VERSION}.tar.gz) + +# Source sycl/cmake/modules/AddBoostMp11Headers.cmake +# Using external MP11 here, getting AddBoostMp11Headers.cmake to recognize +# our copy in boost directly was more trouble than it was worth. +set(MP11_VERSION 7bc4e1ae9b36ec8ee635c3629b59ec525bbe82b9) +set(MP11_URI https://github.com/boostorg/mp11/archive/${MP11_VERSION}.tar.gz) +set(MP11_HASH 071ee2bd3952ec89882edb3af25dd1816f6b61723f66e42eea32f4d02ceef426) +set(MP11_HASH_TYPE SHA256) +set(MP11_FILE mp11-${MP11_VERSION}.tar.gz) + +# Source llvm-spirv/CMakeLists.txt (repo) +# Source llvm-spirv/spirv-headers-tag.conf (hash) +set(SPIRV_HEADERS_VERSION 36c0c1596225e728bd49abb7ef56a3953e7ed468) +set(SPIRV_HEADERS_URI https://github.com/KhronosGroup/SPIRV-Headers/archive/${SPIRV_HEADERS_VERSION}.tar.gz) +set(SPIRV_HEADERS_HASH 7a5c89633f8740456fe8adee052033e134476d267411d1336c0cb1e587a9229a) +set(SPIRV_HEADERS_HASH_TYPE SHA256) +set(SPIRV_HEADERS_FILE SPIR-V-Headers-${SPIRV_HEADERS_VERSION}.tar.gz) + +###################### +### DPCPP DEPS END ### +###################### + +########################################## +### Intel Graphics Compiler DEPS BEGIN ### +########################################## +# The following deps are build time requirements for the intel graphics +# compiler, the versions used are taken from the following location +# https://github.com/intel/intel-graphics-compiler/releases + +set(IGC_VERSION 1.0.11222) +set(IGC_URI https://github.com/intel/intel-graphics-compiler/archive/refs/tags/igc-${IGC_VERSION}.tar.gz) +set(IGC_HASH d92f0608dcbb52690855685f9447282e5c09c0ba98ae35fabf114fcf8b1e9fcf) +set(IGC_HASH_TYPE SHA256) +set(IGC_FILE igc-${IGC_VERSION}.tar.gz) + +set(IGC_LLVM_VERSION llvmorg-11.1.0) +set(IGC_LLVM_URI https://github.com/llvm/llvm-project/archive/refs/tags/${IGC_LLVM_VERSION}.tar.gz) +set(IGC_LLVM_HASH 53a0719f3f4b0388013cfffd7b10c7d5682eece1929a9553c722348d1f866e79) +set(IGC_LLVM_HASH_TYPE SHA256) +set(IGC_LLVM_FILE ${IGC_LLVM_VERSION}.tar.gz) + +# WARNING WARNING WARNING +# +# IGC_OPENCL_CLANG contains patches for some of its dependencies. +# +# Whenever IGC_OPENCL_CLANG_VERSION changes, one *MUST* inspect +# IGC_OPENCL_CLANG's patches folder and update igc.cmake to account for +# any added or removed patches. +# +# WARNING WARNING WARNING + +set(IGC_OPENCL_CLANG_VERSION bbdd1587f577397a105c900be114b56755d1f7dc) +set(IGC_OPENCL_CLANG_URI https://github.com/intel/opencl-clang/archive/${IGC_OPENCL_CLANG_VERSION}.tar.gz) +set(IGC_OPENCL_CLANG_HASH d08315f1b0d8a6fef33de2b3e6aa7356534c324910634962c72523d970773efc) +set(IGC_OPENCL_CLANG_HASH_TYPE SHA256) +set(IGC_OPENCL_CLANG_FILE opencl-clang-${IGC_OPENCL_CLANG_VERSION}.tar.gz) + +set(IGC_VCINTRINSICS_VERSION v0.4.0) +set(IGC_VCINTRINSICS_URI https://github.com/intel/vc-intrinsics/archive/refs/tags/${IGC_VCINTRINSICS_VERSION}.tar.gz) +set(IGC_VCINTRINSICS_HASH c8b92682ad5031cf9d5b82a40e7d5c0e763cd9278660adbcaa69aab988e4b589) +set(IGC_VCINTRINSICS_HASH_TYPE SHA256) +set(IGC_VCINTRINSICS_FILE vc-intrinsics-${IGC_VCINTRINSICS_VERSION}.tar.gz) + +set(IGC_SPIRV_HEADERS_VERSION sdk-1.3.204.1) +set(IGC_SPIRV_HEADERS_URI https://github.com/KhronosGroup/SPIRV-Headers/archive/refs/tags/${IGC_SPIRV_HEADERS_VERSION}.tar.gz) +set(IGC_SPIRV_HEADERS_HASH 262864053968c217d45b24b89044a7736a32361894743dd6cfe788df258c746c) +set(IGC_SPIRV_HEADERS_HASH_TYPE SHA256) +set(IGC_SPIRV_HEADERS_FILE SPIR-V-Headers-${IGC_SPIRV_HEADERS_VERSION}.tar.gz) + +set(IGC_SPIRV_TOOLS_VERSION sdk-1.3.204.1) +set(IGC_SPIRV_TOOLS_URI https://github.com/KhronosGroup/SPIRV-Tools/archive/refs/tags/${IGC_SPIRV_TOOLS_VERSION}.tar.gz) +set(IGC_SPIRV_TOOLS_HASH 6e19900e948944243024aedd0a201baf3854b377b9cc7a386553bc103b087335) +set(IGC_SPIRV_TOOLS_HASH_TYPE SHA256) +set(IGC_SPIRV_TOOLS_FILE SPIR-V-Tools-${IGC_SPIRV_TOOLS_VERSION}.tar.gz) + +set(IGC_SPIRV_TRANSLATOR_VERSION 99420daab98998a7e36858befac9c5ed109d4920) +set(IGC_SPIRV_TRANSLATOR_URI https://github.com/KhronosGroup/SPIRV-LLVM-Translator/archive/${IGC_SPIRV_TRANSLATOR_VERSION}.tar.gz) +set(IGC_SPIRV_TRANSLATOR_HASH 77dfb4ddb6bfb993535562c02ddea23f0a0d1c5a0258c1afe7e27c894ff783a8) +set(IGC_SPIRV_TRANSLATOR_HASH_TYPE SHA256) +set(IGC_SPIRV_TRANSLATOR_FILE SPIR-V-Translator-${IGC_SPIRV_TRANSLATOR_VERSION}.tar.gz) + +######################################## +### Intel Graphics Compiler DEPS END ### +######################################## + +set(GMMLIB_VERSION intel-gmmlib-22.1.2) +set(GMMLIB_URI https://github.com/intel/gmmlib/archive/refs/tags/${GMMLIB_VERSION}.tar.gz) +set(GMMLIB_HASH 3b9a6d5e7e3f5748b3d0a2fb0e980ae943907fece0980bd9c0508e71c838e334) +set(GMMLIB_HASH_TYPE SHA256) +set(GMMLIB_FILE ${GMMLIB_VERSION}.tar.gz) + +set(OCLOC_VERSION 22.20.23198) +set(OCLOC_URI https://github.com/intel/compute-runtime/archive/refs/tags/${OCLOC_VERSION}.tar.gz) +set(OCLOC_HASH ab22b8bf2560a57fdd3def0e35a62ca75991406f959c0263abb00cd6cd9ae998) +set(OCLOC_HASH_TYPE SHA256) +set(OCLOC_FILE ocloc-${OCLOC_VERSION}.tar.gz) + +set(AOM_VERSION 3.4.0) +set(AOM_URI https://storage.googleapis.com/aom-releases/libaom-${AOM_VERSION}.tar.gz) +set(AOM_HASH bd754b58c3fa69f3ffd29da77de591bd9c26970e3b18537951336d6c0252e354) +set(AOM_HASH_TYPE SHA256) +set(AOM_FILE libaom-${AOM_VERSION}.tar.gz) diff --git a/build_files/build_environment/cmake/vpx.cmake b/build_files/build_environment/cmake/vpx.cmake index ba17acad80f..111e93e79e1 100644 --- a/build_files/build_environment/cmake/vpx.cmake +++ b/build_files/build_environment/cmake/vpx.cmake @@ -1,11 +1,13 @@ # SPDX-License-Identifier: GPL-2.0-or-later if(WIN32) - if("${CMAKE_SIZEOF_VOID_P}" EQUAL "8") - set(VPX_EXTRA_FLAGS --target=x86_64-win64-gcc --disable-multithread) - else() - set(VPX_EXTRA_FLAGS --target=x86-win32-gcc --disable-multithread) - endif() + # VPX is determined to use pthreads which it will tell ffmpeg to dynamically + # link, which is not something we're super into distribution wise. However + # if it cannot find pthread.h it'll happily provide a pthread emulation + # layer using win32 threads. So all this patch does is make it not find + # pthead.h + set(VPX_PATCH ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/vpx/src/external_vpx < ${PATCH_DIR}/vpx_windows.diff) + set(VPX_EXTRA_FLAGS --target=x86_64-win64-gcc ) else() if(APPLE) if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64") @@ -18,6 +20,16 @@ else() endif() endif() +if(NOT BLENDER_PLATFORM_ARM) + list(APPEND VPX_EXTRA_FLAGS + --enable-sse4_1 + --enable-sse3 + --enable-ssse3 + --enable-avx + --enable-avx2 + ) +endif() + ExternalProject_Add(external_vpx URL file://${PACKAGE_DIR}/${VPX_FILE} DOWNLOAD_DIR ${DOWNLOAD_DIR} @@ -30,11 +42,6 @@ ExternalProject_Add(external_vpx --enable-static --disable-install-bins --disable-install-srcs - --disable-sse4_1 - --disable-sse3 - --disable-ssse3 - --disable-avx - --disable-avx2 --disable-unit-tests --disable-examples --enable-vp8 @@ -42,6 +49,7 @@ ExternalProject_Add(external_vpx ${VPX_EXTRA_FLAGS} BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/vpx/src/external_vpx/ && make -j${MAKE_THREADS} INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/vpx/src/external_vpx/ && make install + PATCH_COMMAND ${VPX_PATCH} INSTALL_DIR ${LIBDIR}/vpx ) |