diff --git a/build_files/build_environment/CMakeLists.txt b/build_files/build_environment/CMakeLists.txt index 4576665de6b..d743b3d5683 100644 --- a/build_files/build_environment/CMakeLists.txt +++ b/build_files/build_environment/CMakeLists.txt @@ -41,8 +41,8 @@ include(cmake/boost_build_options.cmake) include(cmake/download.cmake) include(cmake/macros.cmake) -if(ENABLE_MINGW64) - include(cmake/setup_mingw64.cmake) +if(ENABLE_MSYS2) + include(cmake/setup_msys2.cmake) else() set(mingw_LIBDIR ${LIBDIR}) endif() @@ -129,13 +129,10 @@ if(NOT APPLE) include(cmake/level-zero.cmake) endif() -if(NOT WIN32 OR ENABLE_MINGW64) +if(NOT WIN32 OR ENABLE_MSYS2) include(cmake/gmp.cmake) include(cmake/openjpeg.cmake) if(NOT WIN32 OR BUILD_MODE STREQUAL Release) - if(WIN32) - include(cmake/zlib_mingw.cmake) - endif() include(cmake/lame.cmake) include(cmake/ogg.cmake) include(cmake/vorbis.cmake) @@ -143,16 +140,12 @@ if(NOT WIN32 OR ENABLE_MINGW64) include(cmake/opus.cmake) include(cmake/vpx.cmake) include(cmake/x264.cmake) - include(cmake/xvidcore.cmake) include(cmake/aom.cmake) include(cmake/ffmpeg.cmake) include(cmake/fftw.cmake) + include(cmake/flac.cmake) include(cmake/sndfile.cmake) - if(WIN32) - include(cmake/iconv.cmake) - endif() if(UNIX) - include(cmake/flac.cmake) if(NOT APPLE) include(cmake/spnav.cmake) include(cmake/jemalloc.cmake) diff --git a/build_files/build_environment/cmake/aom.cmake b/build_files/build_environment/cmake/aom.cmake index 5df1e78248d..fced14c08a3 100644 --- a/build_files/build_environment/cmake/aom.cmake +++ b/build_files/build_environment/cmake/aom.cmake @@ -2,16 +2,7 @@ # # 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 ) -else() - set(AOM_GENERATOR "Unix Makefiles") +if(NOT WIN32) set(AOM_CMAKE_FLAGS ${DEFAULT_CMAKE_FLAGS}) endif() @@ -36,7 +27,7 @@ ExternalProject_Add(external_aom PATCH_COMMAND ${PATCH_CMD} --verbose -p 1 -N -d ${BUILD_DIR}/aom/src/external_aom < ${PATCH_DIR}/aom.diff 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/ + ${CMAKE_COMMAND} -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/download.cmake b/build_files/build_environment/cmake/download.cmake index 99565ed96f4..391da534e46 100644 --- a/build_files/build_environment/cmake/download.cmake +++ b/build_files/build_environment/cmake/download.cmake @@ -108,7 +108,6 @@ download_source(FLAC) download_source(VPX) download_source(OPUS) download_source(X264) -download_source(XVIDCORE) download_source(OPENJPEG) download_source(FFMPEG) download_source(FFTW) diff --git a/build_files/build_environment/cmake/ffmpeg.cmake b/build_files/build_environment/cmake/ffmpeg.cmake index 795ac071474..27e3c1e8f88 100644 --- a/build_files/build_environment/cmake/ffmpeg.cmake +++ b/build_files/build_environment/cmake/ffmpeg.cmake @@ -2,10 +2,12 @@ # # SPDX-License-Identifier: GPL-2.0-or-later -if(WIN32) - set(temp_LIBDIR ${mingw_LIBDIR}) -else() +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 "\ @@ -17,28 +19,57 @@ set(FFMPEG_CFLAGS "\ -I${temp_LIBDIR}/opus/include \ -I${temp_LIBDIR}/vpx/include \ -I${temp_LIBDIR}/x264/include \ --I${temp_LIBDIR}/xvidcore/include \ -I${temp_LIBDIR}/zlib/include \ -I${temp_LIBDIR}/aom/include" ) set(FFMPEG_LDFLAGS "\ --L${temp_LIBDIR}/lame/lib \ --L${temp_LIBDIR}/openjpeg/lib \ --L${temp_LIBDIR}/ogg/lib \ --L${temp_LIBDIR}/vorbis/lib \ --L${temp_LIBDIR}/theora/lib \ --L${temp_LIBDIR}/opus/lib \ --L${temp_LIBDIR}/vpx/lib \ --L${temp_LIBDIR}/x264/lib \ --L${temp_LIBDIR}/xvidcore/lib \ --L${temp_LIBDIR}/zlib/lib \ --L${temp_LIBDIR}/aom/lib" +${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}/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:\ @@ -50,11 +81,11 @@ ${temp_LIBDIR}/openjpeg/lib/pkgconfig:\ ${temp_LIBDIR}/opus/lib/pkgconfig:\ ${temp_LIBDIR}/aom/lib/pkgconfig:" ) +endif() unset(temp_LIBDIR) if(WIN32) - set(FFMPEG_ENV set ${FFMPEG_ENV} &&) set(FFMPEG_EXTRA_FLAGS ${FFMPEG_EXTRA_FLAGS} --disable-static @@ -63,7 +94,31 @@ if(WIN32) --disable-pthreads --enable-libopenjpeg --disable-mediafoundation + --toolchain=msvc + --target-os=win32 + --disable-inline-asm ) + + if(BLENDER_PLATFORM_ARM) + set(FFMPEG_EXTRA_FLAGS + ${FFMPEG_EXTRA_FLAGS} + --arch=aarch64 + --enable-cross-compile + --as=armasm64 + ) + + set(GAS_PATH ${BUILD_DIR}/x264/src/external_x264/tools/) + string(REPLACE "/" "\\" GAS_PATH ${GAS_PATH}) + set(ENV{PATH} "$ENV{PATH};${GAS_PATH}") + else() + set(FFMPEG_EXTRA_FLAGS + ${FFMPEG_EXTRA_FLAGS} + --arch=x64 + --target-os=win32 + ) + endif() + + set(FFMPEG_CONFIGURE_COMMAND ${CONFIGURE_ENV_MSVC}) else() set(FFMPEG_EXTRA_FLAGS ${FFMPEG_EXTRA_FLAGS} @@ -71,6 +126,8 @@ else() --disable-shared --enable-libopenjpeg ) + + set(FFMPEG_CONFIGURE_COMMAND ${CONFIGURE_ENV_NO_PERL}) endif() if(APPLE) @@ -90,13 +147,9 @@ ExternalProject_Add(external_ffmpeg URL file://${PACKAGE_DIR}/${FFMPEG_FILE} DOWNLOAD_DIR ${DOWNLOAD_DIR} URL_HASH ${FFMPEG_HASH_TYPE}=${FFMPEG_HASH} - # 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. - PATCH_COMMAND ${PATCH_CMD} --verbose -p 1 -N -d ${BUILD_DIR}/ffmpeg/src/external_ffmpeg < ${PATCH_DIR}/ffmpeg.diff + PATCH_COMMAND ${PATCH_CMD} --verbose -p 1 -N -d ${BUILD_DIR}/ffmpeg/src/external_ffmpeg < ${FFMPEG_PATCH_FILE} PREFIX ${BUILD_DIR}/ffmpeg - CONFIGURE_COMMAND ${CONFIGURE_ENV_NO_PERL} && + CONFIGURE_COMMAND ${FFMPEG_CONFIGURE_COMMAND} && cd ${BUILD_DIR}/ffmpeg/src/external_ffmpeg/ && ${FFMPEG_ENV} ${CONFIGURE_COMMAND_NO_TARGET} ${FFMPEG_EXTRA_FLAGS} --disable-lzma @@ -120,7 +173,6 @@ ExternalProject_Add(external_ffmpeg --enable-libmp3lame --disable-librtmp --enable-libx264 - --enable-libxvid --enable-libaom --disable-libopencore-amrnb --disable-libopencore-amrwb @@ -146,8 +198,8 @@ ExternalProject_Add(external_ffmpeg --disable-outdev=alsa --disable-crystalhd --disable-sndio - BUILD_COMMAND ${CONFIGURE_ENV_NO_PERL} && cd ${BUILD_DIR}/ffmpeg/src/external_ffmpeg/ && make -j${MAKE_THREADS} - INSTALL_COMMAND ${CONFIGURE_ENV_NO_PERL} && cd ${BUILD_DIR}/ffmpeg/src/external_ffmpeg/ && make install + 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 ) @@ -159,8 +211,6 @@ endif() add_dependencies( external_ffmpeg external_zlib - external_openjpeg - external_xvidcore external_x264 external_opus external_vpx @@ -169,17 +219,21 @@ add_dependencies( external_ogg external_lame external_aom + external_sndfile + external_flac ) if(WIN32) add_dependencies( external_ffmpeg - external_zlib_mingw + external_zlib + external_openjpeg_msvc ) endif() if(UNIX) add_dependencies( external_ffmpeg external_nasm + external_openjpeg ) endif() diff --git a/build_files/build_environment/cmake/fftw.cmake b/build_files/build_environment/cmake/fftw.cmake index 2dadba1362c..23187bf79f0 100644 --- a/build_files/build_environment/cmake/fftw.cmake +++ b/build_files/build_environment/cmake/fftw.cmake @@ -6,41 +6,48 @@ set(FFTW_EXTRA_ARGS) macro(fftw_build FFTW_POSTFIX) if(WIN32) - set(FFTW3_PATCH_COMMAND ${PATCH_CMD} --verbose -p 0 -N -d ${BUILD_DIR}/fftw3/src/external_fftw3_${FFTW_POSTFIX} < ${PATCH_DIR}/fftw3.diff) - set(FFTW_EXTRA_ARGS --disable-static --enable-shared) - set(FFTW_INSTALL install-strip) + 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 ${FFTW_EXTRA_ARGS} + INSTALL_DIR ${LIBDIR}/fftw3 + ) else() set(FFTW_EXTRA_ARGS --enable-static) 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() - 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 - PATCH_COMMAND ${FFTW3_PATCH_COMMAND} - 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 - ) endmacro() fftw_build(double) fftw_build(float --enable-float) if(MSVC) - set_target_properties(external_fftw3_double PROPERTIES FOLDER Mingw) if(BUILD_MODE STREQUAL Release) ExternalProject_Add_Step(external_fftw3_double after_install - COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/fftw3/lib/libfftw3.dll.a ${HARVEST_TARGET}/fftw3/lib/libfftw3-3.lib - COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/fftw3/bin/libfftw3-3.dll ${HARVEST_TARGET}/fftw3/lib/libfftw3-3.dll + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/fftw3/lib/fftw3.lib ${HARVEST_TARGET}/fftw3/lib/fftw3.lib + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/fftw3/bin/fftw3.dll ${HARVEST_TARGET}/fftw3/lib/fftw3.dll COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/fftw3/include/fftw3.h ${HARVEST_TARGET}/fftw3/include/fftw3.h DEPENDEES install ) ExternalProject_Add_Step(external_fftw3_float after_install - COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/fftw3/lib/libfftw3f.dll.a ${HARVEST_TARGET}/fftw3/lib/libfftw3f.lib - COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/fftw3/bin/libfftw3f-3.dll ${HARVEST_TARGET}/fftw3/lib/libfftw3f-3.dll + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/fftw3/lib/fftw3f.lib ${HARVEST_TARGET}/fftw3/lib/fftw3f.lib + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/fftw3/bin/fftw3f.dll ${HARVEST_TARGET}/fftw3/lib/fftw3f.dll DEPENDEES install ) endif() diff --git a/build_files/build_environment/cmake/flac.cmake b/build_files/build_environment/cmake/flac.cmake index 270ea0b4688..89e64656a16 100644 --- a/build_files/build_environment/cmake/flac.cmake +++ b/build_files/build_environment/cmake/flac.cmake @@ -2,17 +2,46 @@ # # SPDX-License-Identifier: GPL-2.0-or-later -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 -) +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 + ) +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 + ) +endif() if(MSVC) - set_target_properties(external_flac PROPERTIES FOLDER Mingw) + add_dependencies( + external_flac + external_ogg + ) endif() diff --git a/build_files/build_environment/cmake/gmp.cmake b/build_files/build_environment/cmake/gmp.cmake index 444b0cff6b8..93a909ad434 100644 --- a/build_files/build_environment/cmake/gmp.cmake +++ b/build_files/build_environment/cmake/gmp.cmake @@ -5,9 +5,25 @@ set(GMP_EXTRA_ARGS -enable-cxx) if(WIN32) - # Shared for windows because static libs will drag in a libgcc dependency. - set(GMP_OPTIONS --disable-static --enable-shared --enable-fat --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32) + 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=:) + + 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() @@ -38,37 +54,22 @@ ExternalProject_Add(external_gmp 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 ${CONFIGURE_ENV_NO_PERL} && cd ${BUILD_DIR}/gmp/src/external_gmp/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/gmp ${GMP_OPTIONS} ${GMP_EXTRA_ARGS} + 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(MSVC) - set_target_properties(external_gmp PROPERTIES FOLDER Mingw) -endif() - if(BUILD_MODE STREQUAL Release AND WIN32) ExternalProject_Add_Step(external_gmp after_install - COMMAND ${CMAKE_COMMAND} -E copy ${BUILD_DIR}/gmp/src/external_gmp/.libs/libgmp-3.dll.def ${BUILD_DIR}/gmp/src/external_gmp/.libs/libgmp-10.def - COMMAND lib /def:${BUILD_DIR}/gmp/src/external_gmp/.libs/libgmp-10.def /machine:x64 /out:${BUILD_DIR}/gmp/src/external_gmp/.libs/libgmp-10.lib - COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/gmp/bin/libgmp-10.dll ${HARVEST_TARGET}/gmp/lib/libgmp-10.dll - COMMAND ${CMAKE_COMMAND} -E copy ${BUILD_DIR}/gmp/src/external_gmp/.libs/libgmp-10.lib ${HARVEST_TARGET}/gmp/lib/libgmp-10.lib + 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(BUILD_MODE STREQUAL Debug AND WIN32) - ExternalProject_Add_Step(external_gmp after_install - COMMAND ${CMAKE_COMMAND} -E copy ${BUILD_DIR}/gmp/src/external_gmp/.libs/libgmp-3.dll.def ${BUILD_DIR}/gmp/src/external_gmp/.libs/libgmp-10.def - COMMAND lib /def:${BUILD_DIR}/gmp/src/external_gmp/.libs/libgmp-10.def /machine:x64 /out:${BUILD_DIR}/gmp/src/external_gmp/.libs/libgmp-10.lib - - 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 @@ -80,10 +81,9 @@ if(WIN32) PREFIX ${BUILD_DIR}/gmpxx 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/libgmp-10.lib -DGMP_INCLUDE_DIR=${BUILD_DIR}/gmp/src/external_gmp -DCMAKE_DEBUG_POSTFIX=_d + 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 ) - set_target_properties(external_gmpxx PROPERTIES FOLDER Mingw) add_dependencies( external_gmpxx diff --git a/build_files/build_environment/cmake/harvest.cmake b/build_files/build_environment/cmake/harvest.cmake index 99428a4eeb0..dbb71ad3a59 100644 --- a/build_files/build_environment/cmake/harvest.cmake +++ b/build_files/build_environment/cmake/harvest.cmake @@ -264,7 +264,6 @@ else() 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") diff --git a/build_files/build_environment/cmake/ispc.cmake b/build_files/build_environment/cmake/ispc.cmake index cf370b8241d..0a06b442ec7 100644 --- a/build_files/build_environment/cmake/ispc.cmake +++ b/build_files/build_environment/cmake/ispc.cmake @@ -6,7 +6,7 @@ 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}/mingw/mingw64/msys/1.0/bin/m4.exe + -DM4_EXECUTABLE=${DOWNLOAD_DIR}/msys2/msys64/usr/bin/m4.exe -DARM_ENABLED=Off -DPython3_FIND_REGISTRY=NEVER ) diff --git a/build_files/build_environment/cmake/lame.cmake b/build_files/build_environment/cmake/lame.cmake index 5b921fd49d2..50a5f3b2c76 100644 --- a/build_files/build_environment/cmake/lame.cmake +++ b/build_files/build_environment/cmake/lame.cmake @@ -4,17 +4,14 @@ set(LAME_EXTRA_ARGS) if(MSVC) - if("${CMAKE_SIZEOF_VOID_P}" EQUAL "4") - set(LAME_EXTRA_ARGS CFLAGS=-msse) - endif() -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 - CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/lame/src/external_lame/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/lame --disable-shared --enable-static ${LAME_EXTRA_ARGS} + set(LAME_ARCH Win64) + 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 @@ -22,12 +19,19 @@ ExternalProject_Add(external_lame --disable-mp3x --disable-mp3rtp --disable-gtktest - --disable-frontend - BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/lame/src/external_lame/ && make -j${MAKE_THREADS} - INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/lame/src/external_lame/ && make install + --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(MSVC) - set_target_properties(external_lame PROPERTIES FOLDER Mingw) -endif() diff --git a/build_files/build_environment/cmake/ogg.cmake b/build_files/build_environment/cmake/ogg.cmake index 54af6d7c933..ebeb5b842e2 100644 --- a/build_files/build_environment/cmake/ogg.cmake +++ b/build_files/build_environment/cmake/ogg.cmake @@ -2,18 +2,25 @@ # # 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 - PATCH_COMMAND ${PATCH_CMD} --verbose -p 1 -N -d ${BUILD_DIR}/ogg/src/external_ogg < ${PATCH_DIR}/ogg.diff - CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/ogg/src/external_ogg/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/ogg --disable-shared --enable-static - BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/ogg/src/external_ogg/ && make -j${MAKE_THREADS} - INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/ogg/src/external_ogg/ && make install - INSTALL_DIR ${LIBDIR}/ogg -) - -if(MSVC) - set_target_properties(external_ogg PROPERTIES FOLDER Mingw) +if(NOT WIN32) + 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 + PATCH_COMMAND ${PATCH_CMD} --verbose -p 1 -N -d ${BUILD_DIR}/ogg/src/external_ogg < ${PATCH_DIR}/ogg.diff + CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/ogg/src/external_ogg/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/ogg --disable-shared --enable-static + BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/ogg/src/external_ogg/ && make -j${MAKE_THREADS} + INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/ogg/src/external_ogg/ && make install + INSTALL_DIR ${LIBDIR}/ogg + ) +else() + 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 + ) endif() diff --git a/build_files/build_environment/cmake/openjpeg.cmake b/build_files/build_environment/cmake/openjpeg.cmake index 8b4abe03043..d5fd8fb211c 100644 --- a/build_files/build_environment/cmake/openjpeg.cmake +++ b/build_files/build_environment/cmake/openjpeg.cmake @@ -5,36 +5,32 @@ # 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(WIN32) - set(OPENJPEG_EXTRA_ARGS -G "MSYS Makefiles" -DBUILD_PKGCONFIG_FILES=On) -else() +if(NOT WIN32) set(OPENJPEG_EXTRA_ARGS ${DEFAULT_CMAKE_FLAGS}) -endif() -set(OPENJPEG_EXTRA_ARGS - ${OPENJPEG_EXTRA_ARGS} - -DBUILD_SHARED_LIBS=OFF - -DBUILD_CODEC=OFF -) + 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 -) - -# On windows ffmpeg wants a mingw build, while oiio needs a msvc build. -if(MSVC) + 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 + ) +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} + PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/openjpeg_msvc/src/external_openjpeg_msvc < ${PATCH_DIR}/openjpeg_msvc.diff 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 @@ -47,10 +43,7 @@ if(MSVC) DEPENDEES install ) - endif() +endif() endif() set(OPENJPEG_LIBRARY libopenjp2${LIBEXT}) -if(MSVC) - set_target_properties(external_openjpeg PROPERTIES FOLDER Mingw) -endif() diff --git a/build_files/build_environment/cmake/options.cmake b/build_files/build_environment/cmake/options.cmake index 8f2a2831443..7985dae5c90 100644 --- a/build_files/build_environment/cmake/options.cmake +++ b/build_files/build_environment/cmake/options.cmake @@ -3,7 +3,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later if(WIN32) - option(ENABLE_MINGW64 "Enable building of ffmpeg/iconv/libsndfile/fftw3 by installing mingw64" ON) + option(ENABLE_MSYS2 "Enable building of ffmpeg/libsndfile/fftw3/gmp by installing msys2" ON) endif() option(FORCE_CHECK_HASH "Force a check of all hashses during CMake the configure phase" OFF) @@ -41,7 +41,7 @@ message("PATCH_DIR = ${PATCH_DIR}") message("BUILD_DIR = ${BUILD_DIR}") if(WIN32) - set(PATCH_CMD ${DOWNLOAD_DIR}/mingw/mingw64/msys/1.0/bin/patch.exe) + set(PATCH_CMD ${DOWNLOAD_DIR}/msys2/msys64/usr/bin/patch.exe) set(LIBEXT ".lib") set(SHAREDLIBEXT ".lib") set(LIBPREFIX "") @@ -101,11 +101,14 @@ if(WIN32) set(PLATFORM_CXX_FLAGS) set(PLATFORM_CMAKE_FLAGS) - set(MINGW_PATH ${DOWNLOAD_DIR}/mingw/mingw64) + 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. @@ -123,16 +126,21 @@ if(WIN32) call ${PERL_SHELL} && call ${MINGW_SHELL} && set path && - set CFLAGS=-g && - set LDFLAGS=-Wl,--as-needed -static-libgcc + 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 CFLAGS=-g && - set LDFLAGS=-Wl,--as-needed -static-libgcc + set CC=cl && + set CXX=cl && + set LD=link && + set CFLAGS=${MINGW_CFLAGS} && + set LDFLAGS=${MINGW_LDFLAGS} ) set(CONFIGURE_COMMAND sh ./configure) diff --git a/build_files/build_environment/cmake/opus.cmake b/build_files/build_environment/cmake/opus.cmake index ebf971a02a0..b3f4908b360 100644 --- a/build_files/build_environment/cmake/opus.cmake +++ b/build_files/build_environment/cmake/opus.cmake @@ -2,21 +2,37 @@ # # SPDX-License-Identifier: GPL-2.0-or-later -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 -) - if(MSVC) - set_target_properties(external_opus PROPERTIES FOLDER Mingw) + 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 + ) +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() diff --git a/build_files/build_environment/cmake/setup_mingw64.cmake b/build_files/build_environment/cmake/setup_mingw64.cmake deleted file mode 100644 index 395d80fc26c..00000000000 --- a/build_files/build_environment/cmake/setup_mingw64.cmake +++ /dev/null @@ -1,221 +0,0 @@ -# SPDX-FileCopyrightText: 2017-2023 Blender Foundation -# -# SPDX-License-Identifier: GPL-2.0-or-later - -################################################################################################## -# Mingw64 Builds -################################################################################################## -# This installs mingw64+msys to compile ffmpeg/iconv/libsndfile/fftw3 -################################################################################################## - -message("LIBDIR = ${LIBDIR}") -macro(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 ${ResultingPath} "/" ${LowerDrive} ${PathPart}) -endmacro() -cmake_to_msys_path(${LIBDIR} mingw_LIBDIR) -message("mingw_LIBDIR = ${mingw_LIBDIR}") - -message("Checking for mingw64") -# download ming64 -if(NOT EXISTS "${DOWNLOAD_DIR}/x86_64-4.9.4-release-win32-seh-rt_v5-rev0.7z") - message("Downloading mingw64") - file(DOWNLOAD "https://nchc.dl.sourceforge.net/project/mingw-w64/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/4.9.4/threads-win32/seh/x86_64-4.9.4-release-win32-seh-rt_v5-rev0.7z" "${DOWNLOAD_DIR}/x86_64-4.9.4-release-win32-seh-rt_v5-rev0.7z") -endif() - -# make mingw root directory -if(NOT EXISTS "${DOWNLOAD_DIR}/mingw") - execute_process( - COMMAND ${CMAKE_COMMAND} -E make_directory ${DOWNLOAD_DIR}/mingw - WORKING_DIRECTORY ${DOWNLOAD_DIR} - ) -endif() - -# extract mingw64 -if((NOT EXISTS "${DOWNLOAD_DIR}/mingw/mingw64/ming64sh.cmd") AND (EXISTS "${DOWNLOAD_DIR}/x86_64-4.9.4-release-win32-seh-rt_v5-rev0.7z")) - message("Extracting mingw64") - execute_process( - COMMAND ${CMAKE_COMMAND} -E tar jxf ${DOWNLOAD_DIR}/x86_64-4.9.4-release-win32-seh-rt_v5-rev0.7z - WORKING_DIRECTORY ${DOWNLOAD_DIR}/mingw - ) -endif() - -message("Checking for pkg-config") -if(NOT EXISTS "${DOWNLOAD_DIR}/pkg-config-lite-0.28-1_bin-win32.zip") - message("Downloading pkg-config") - file(DOWNLOAD "https://nchc.dl.sourceforge.net/project/pkgconfiglite/0.28-1/pkg-config-lite-0.28-1_bin-win32.zip" "${DOWNLOAD_DIR}/pkg-config-lite-0.28-1_bin-win32.zip") -endif() - -# extract pkgconfig -if((NOT EXISTS "${DOWNLOAD_DIR}/mingw/mingw64/bin/pkg-config.exe") AND (EXISTS "${DOWNLOAD_DIR}/pkg-config-lite-0.28-1_bin-win32.zip")) - message("Extracting pkg-config") - execute_process( - COMMAND ${CMAKE_COMMAND} -E tar jxf "${DOWNLOAD_DIR}/pkg-config-lite-0.28-1_bin-win32.zip" - WORKING_DIRECTORY ${DOWNLOAD_DIR}/ - ) - - execute_process( - COMMAND ${CMAKE_COMMAND} -E copy "${DOWNLOAD_DIR}/pkg-config-lite-0.28-1/bin/pkg-config.exe" "${DOWNLOAD_DIR}/mingw/mingw64/bin/pkg-config.exe" - ) - -endif() - -message("Checking for nasm") -if(NOT EXISTS "${DOWNLOAD_DIR}/nasm-2.13.02-win64.zip") - message("Downloading nasm") - file(DOWNLOAD "http://www.nasm.us/pub/nasm/releasebuilds/2.13.02/win64/nasm-2.13.02-win64.zip" "${DOWNLOAD_DIR}/nasm-2.13.02-win64.zip") -endif() - -# extract nasm -if((NOT EXISTS "${DOWNLOAD_DIR}/mingw/mingw64/bin/nasm.exe") AND (EXISTS "${DOWNLOAD_DIR}/nasm-2.13.02-win64.zip")) - message("Extracting nasm") - execute_process( - COMMAND ${CMAKE_COMMAND} -E tar jxf "${DOWNLOAD_DIR}/nasm-2.13.02-win64.zip" - WORKING_DIRECTORY ${DOWNLOAD_DIR}/ - ) - execute_process( - COMMAND ${CMAKE_COMMAND} -E copy "${DOWNLOAD_DIR}/nasm-2.13.02/nasm.exe" "${DOWNLOAD_DIR}/mingw/mingw64/bin/nasm.exe" - ) - -endif() -SET(NASM_PATH ${DOWNLOAD_DIR}/mingw/mingw64/bin/nasm.exe) - -message("Checking for mingwGet") -if(NOT EXISTS "${DOWNLOAD_DIR}/mingw-get-0.6.2-mingw32-beta-20131004-1-bin.zip") - message("Downloading mingw-get") - file(DOWNLOAD "https://nchc.dl.sourceforge.net/project/mingw/Installer/mingw-get/mingw-get-0.6.2-beta-20131004-1/mingw-get-0.6.2-mingw32-beta-20131004-1-bin.zip" "${DOWNLOAD_DIR}/mingw-get-0.6.2-mingw32-beta-20131004-1-bin.zip") -endif() - -# extract mingw_get -if((NOT EXISTS "${DOWNLOAD_DIR}/mingw/mingw64/bin/mingw-get.exe") AND (EXISTS "${DOWNLOAD_DIR}/mingw-get-0.6.2-mingw32-beta-20131004-1-bin.zip")) - message("Extracting mingw-get") - execute_process( - COMMAND ${CMAKE_COMMAND} -E tar jxf "${DOWNLOAD_DIR}/mingw-get-0.6.2-mingw32-beta-20131004-1-bin.zip" - WORKING_DIRECTORY ${DOWNLOAD_DIR}/mingw/mingw64/ - ) -endif() - -if((EXISTS "${DOWNLOAD_DIR}/mingw/mingw64/bin/mingw-get.exe") AND (NOT EXISTS "${DOWNLOAD_DIR}/mingw/mingw64/msys/1.0/bin/make.exe")) - message("Installing MSYS") - execute_process( - COMMAND ${DOWNLOAD_DIR}/mingw/mingw64/bin/mingw-get install msys msys-patch - WORKING_DIRECTORY ${DOWNLOAD_DIR}/mingw/mingw64/bin/ - ) -endif() - -if((EXISTS "${DOWNLOAD_DIR}/mingw/mingw64/bin/mingw-get.exe") AND (NOT EXISTS "${DOWNLOAD_DIR}/mingw/mingw64/msys/1.0/bin/mktemp.exe")) - message("Installing mktemp") - execute_process( - COMMAND ${DOWNLOAD_DIR}/mingw/mingw64/bin/mingw-get install msys msys-mktemp - WORKING_DIRECTORY ${DOWNLOAD_DIR}/mingw/mingw64/bin/ - ) -endif() - -if((EXISTS "${DOWNLOAD_DIR}/mingw/mingw64/bin/mingw-get.exe") AND (NOT EXISTS "${DOWNLOAD_DIR}/mingw/mingw64/msys/1.0/bin/m4.exe")) - message("Installing m4") - execute_process( - COMMAND ${DOWNLOAD_DIR}/mingw/mingw64/bin/mingw-get install msys msys-m4 - WORKING_DIRECTORY ${DOWNLOAD_DIR}/mingw/mingw64/bin/ - ) -endif() - -message("Checking for CoreUtils") -# download old core_utils for pr.exe (ffmpeg needs it to build) -if(NOT EXISTS "${DOWNLOAD_DIR}/coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2") - message("Downloading CoreUtils 5.97") - file(DOWNLOAD "https://nchc.dl.sourceforge.net/project/mingw/MSYS/Base/msys-core/_obsolete/coreutils-5.97-MSYS-1.0.11-2/coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2" "${DOWNLOAD_DIR}/coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2") -endif() - -if((EXISTS "${DOWNLOAD_DIR}/coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2") AND (NOT EXISTS "${DOWNLOAD_DIR}/mingw/mingw64/msys/1.0/bin/pr.exe")) - message("Installing pr from CoreUtils 5.97") - execute_process( - COMMAND ${CMAKE_COMMAND} -E make_directory ${DOWNLOAD_DIR}/tmp_coreutils - WORKING_DIRECTORY ${DOWNLOAD_DIR} - ) - - execute_process( - COMMAND ${CMAKE_COMMAND} -E tar jxf ${DOWNLOAD_DIR}/coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2 - WORKING_DIRECTORY ${DOWNLOAD_DIR}/tmp_coreutils/ - ) - - execute_process( - COMMAND ${CMAKE_COMMAND} -E copy ${DOWNLOAD_DIR}/tmp_coreutils/coreutils-5.97/bin/pr.exe "${DOWNLOAD_DIR}/mingw/mingw64/msys/1.0/bin/pr.exe" - WORKING_DIRECTORY ${DOWNLOAD_DIR}/tmp_coreutils/ - ) -endif() - -if(NOT EXISTS "${DOWNLOAD_DIR}/mingw/mingw64/ming64sh.cmd") - message("Installing ming64sh.cmd") - execute_process( - COMMAND ${CMAKE_COMMAND} -E copy ${PATCH_DIR}/ming64sh.cmd ${DOWNLOAD_DIR}/mingw/mingw64/ming64sh.cmd - ) -endif() - -message("Checking for perl") -# download perl for libvpx -if(NOT EXISTS "${DOWNLOAD_DIR}/strawberry-perl-5.22.1.3-64bit-portable.zip") - message("Downloading perl") - file(DOWNLOAD "http://strawberryperl.com/download/5.22.1.3/strawberry-perl-5.22.1.3-64bit-portable.zip" "${DOWNLOAD_DIR}/strawberry-perl-5.22.1.3-64bit-portable.zip") -endif() - -# 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 "${DOWNLOAD_DIR}/strawberry-perl-5.22.1.3-64bit-portable.zip")) - message("Extracting perl") - execute_process( - COMMAND ${CMAKE_COMMAND} -E tar jxf ${DOWNLOAD_DIR}/strawberry-perl-5.22.1.3-64bit-portable.zip - WORKING_DIRECTORY ${DOWNLOAD_DIR}/perl - ) -endif() - -# get yasm for vpx -if(NOT EXISTS "${DOWNLOAD_DIR}/mingw/mingw64/bin/yasm.exe") - message("Downloading yasm") - file(DOWNLOAD "http://www.tortall.net/projects/yasm/releases/yasm-1.3.0-win64.exe" "${DOWNLOAD_DIR}/mingw/mingw64/bin/yasm.exe") -endif() - -message("checking x86_64-w64-mingw32-strings.exe") -# copy strings.exe to x86_64-w64-mingw32-strings.exe for x264 -if(NOT EXISTS "${DOWNLOAD_DIR}/mingw/mingw64/bin/x86_64-w64-mingw32-strings.exe") - message("fixing x86_64-w64-mingw32-strings.exe") - execute_process( - COMMAND ${CMAKE_COMMAND} -E copy "${DOWNLOAD_DIR}/mingw/mingw64/bin/strings.exe" "${DOWNLOAD_DIR}/mingw/mingw64/bin/x86_64-w64-mingw32-strings.exe" - ) -endif() - -message("checking x86_64-w64-mingw32-ar.exe") -# copy ar.exe to x86_64-w64-mingw32-ar.exe for x264 -if(NOT EXISTS "${DOWNLOAD_DIR}/mingw/mingw64/bin/x86_64-w64-mingw32-ar.exe") - message("fixing x86_64-w64-mingw32-ar.exe") - execute_process( - COMMAND ${CMAKE_COMMAND} -E copy "${DOWNLOAD_DIR}/mingw/mingw64/bin/ar.exe" "${DOWNLOAD_DIR}/mingw/mingw64/bin/x86_64-w64-mingw32-ar.exe" - ) -endif() - -message("checking x86_64-w64-mingw32-strip.exe") -# copy strip.exe to x86_64-w64-mingw32-strip.exe for x264 -if(NOT EXISTS "${DOWNLOAD_DIR}/mingw/mingw64/bin/x86_64-w64-mingw32-strip.exe") - message("fixing x86_64-w64-mingw32-strip.exe") - execute_process( - COMMAND ${CMAKE_COMMAND} -E copy "${DOWNLOAD_DIR}/mingw/mingw64/bin/strip.exe" "${DOWNLOAD_DIR}/mingw/mingw64/bin/x86_64-w64-mingw32-strip.exe" - ) -endif() - -message("checking x86_64-w64-mingw32-ranlib.exe") -# copy ranlib.exe to x86_64-w64-mingw32-ranlib.exe for x264 -if(NOT EXISTS "${DOWNLOAD_DIR}/mingw/mingw64/bin/x86_64-w64-mingw32-ranlib.exe") - message("fixing x86_64-w64-mingw32-ranlib.exe") - execute_process( - COMMAND ${CMAKE_COMMAND} -E copy "${DOWNLOAD_DIR}/mingw/mingw64/bin/ranlib.exe" "${DOWNLOAD_DIR}/mingw/mingw64/bin/x86_64-w64-mingw32-ranlib.exe" - ) -endif() diff --git a/build_files/build_environment/cmake/setup_msys2.cmake b/build_files/build_environment/cmake/setup_msys2.cmake new file mode 100644 index 00000000000..852ef6b0773 --- /dev/null +++ b/build_files/build_environment/cmake/setup_msys2.cmake @@ -0,0 +1,154 @@ +# 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 +################################################################################################## + +message("LIBDIR = ${LIBDIR}") +macro(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 ${ResultingPath} "/" ${LowerDrive} ${PathPart}) +endmacro() +cmake_to_msys_path(${LIBDIR} msys2_LIBDIR) +message("msys2_LIBDIR = ${msys2_LIBDIR}") + +# Get msys2-base (currently x64 only) +message("Checking for msys2 base") +if(NOT EXISTS "${DOWNLOAD_DIR}/msys2-base-x86_64-20221028.tar.xz") + message("Downloading msys2-base") + file(DOWNLOAD "https://repo.msys2.org/distrib/x86_64/msys2-base-x86_64-20221028.tar.xz" "${DOWNLOAD_DIR}/msys2-base-x86_64-20221028.tar.xz") +endif() + +# 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 "${DOWNLOAD_DIR}/msys2-base-x86_64-20221028.tar.xz")) + message("Extracting msys2 base") + execute_process( + COMMAND ${CMAKE_COMMAND} -E tar jxf ${DOWNLOAD_DIR}/msys2-base-x86_64-20221028.tar.xz + WORKING_DIRECTORY ${DOWNLOAD_DIR}/msys2 + ) + + # Start msys2 with command "exit" - does initial setup etc then exits + message("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 to what the installer comes with) + execute_process( + COMMAND ${DOWNLOAD_DIR}/msys2/msys64/msys2_shell.cmd -defterm -no-start -clang64 -c "pacman -Syu --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("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("Installing required packages") + 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() + +message("Checking for nasm") +if(NOT EXISTS "${DOWNLOAD_DIR}/nasm-2.13.02-win64.zip") + message("Downloading nasm") + file(DOWNLOAD "http://www.nasm.us/pub/nasm/releasebuilds/2.13.02/win64/nasm-2.13.02-win64.zip" "${DOWNLOAD_DIR}/nasm-2.13.02-win64.zip") +endif() + +# extract nasm +if((NOT EXISTS "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/nasm.exe") AND (EXISTS "${DOWNLOAD_DIR}/nasm-2.13.02-win64.zip")) + message("Extracting nasm") + execute_process( + COMMAND ${CMAKE_COMMAND} -E tar jxf "${DOWNLOAD_DIR}/nasm-2.13.02-win64.zip" + WORKING_DIRECTORY ${DOWNLOAD_DIR}/ + ) + execute_process( + COMMAND ${CMAKE_COMMAND} -E copy "${DOWNLOAD_DIR}/nasm-2.13.02/nasm.exe" "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/nasm.exe" + ) +endif() + +message("Checking for perl") +# download perl for libvpx +if(NOT EXISTS "${DOWNLOAD_DIR}/strawberry-perl-5.22.1.3-64bit-portable.zip") + message("Downloading perl") + file(DOWNLOAD "http://strawberryperl.com/download/5.22.1.3/strawberry-perl-5.22.1.3-64bit-portable.zip" "${DOWNLOAD_DIR}/strawberry-perl-5.22.1.3-64bit-portable.zip") +endif() + +# 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 "${DOWNLOAD_DIR}/strawberry-perl-5.22.1.3-64bit-portable.zip")) + message("Extracting perl") + execute_process( + COMMAND ${CMAKE_COMMAND} -E tar jxf ${DOWNLOAD_DIR}/strawberry-perl-5.22.1.3-64bit-portable.zip + WORKING_DIRECTORY ${DOWNLOAD_DIR}/perl + ) +endif() + +# Get gas-preprocessor for ffmpeg +# This is required for Windows ARM64 builds +message("Checking for gas-preprocessor.pl") +if(NOT EXISTS "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/gas-preprocessor.pl") + message("Downloading gas-preprocessor.pl") + file(DOWNLOAD "https://raw.githubusercontent.com/FFmpeg/gas-preprocessor/9309c67acb535ca6248f092e96131d8eb07eefc1/gas-preprocessor.pl" "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/gas-preprocessor.pl") +endif() + +# Get ar-lib +message("Checking for ar-lib") +if(NOT EXISTS "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/ar-lib") + message("Downloading ar-lib") + file(DOWNLOAD "https://raw.githubusercontent.com/gcc-mirror/gcc/releases/gcc-12.2.0/ar-lib" "${DOWNLOAD_DIR}/msys2/msys64/usr/bin/ar-lib") +endif() + +if(NOT EXISTS "${DOWNLOAD_DIR}/msys2/msys64/ming64sh.cmd") + message("Installing ming64sh.cmd") + execute_process( + COMMAND ${CMAKE_COMMAND} -E copy ${PATCH_DIR}/ming64sh.cmd ${DOWNLOAD_DIR}/msys2/msys64/ming64sh.cmd + ) +endif() diff --git a/build_files/build_environment/cmake/sndfile.cmake b/build_files/build_environment/cmake/sndfile.cmake index 7bb07a13327..35946cd642b 100644 --- a/build_files/build_environment/cmake/sndfile.cmake +++ b/build_files/build_environment/cmake/sndfile.cmake @@ -5,33 +5,60 @@ set(SNDFILE_EXTRA_ARGS) set(SNDFILE_ENV) -if(WIN32) - set(SNDFILE_ENV "PKG_CONFIG_PATH=\ -${mingw_LIBDIR}/ogg/lib/pkgconfig:\ -${mingw_LIBDIR}/vorbis/lib/pkgconfig:\ -${mingw_LIBDIR}/flac/lib/pkgconfig:\ -${mingw_LIBDIR}/opus/lib/pkgconfig" -) - set(SNDFILE_ENV set ${SNDFILE_ENV} &&) - # Shared for windows because static libs will drag in a libgcc dependency. - set(SNDFILE_OPTIONS --disable-static --enable-shared ) -else() +if(NOT WIN32) set(SNDFILE_OPTIONS --enable-static --disable-shared ) 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 - CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sndfile/src/external_sndfile/ && ${SNDFILE_ENV} ${CONFIGURE_COMMAND} ${SNDFILE_OPTIONS} --prefix=${mingw_LIBDIR}/sndfile - BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sndfile/src/external_sndfile/ && make -j${MAKE_THREADS} - INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sndfile/src/external_sndfile/ && make install - INSTALL_DIR ${LIBDIR}/sndfile -) +if(NOT WIN32) + 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 + CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sndfile/src/external_sndfile/ && ${SNDFILE_ENV} ${CONFIGURE_COMMAND} ${SNDFILE_OPTIONS} --prefix=${mingw_LIBDIR}/sndfile + BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sndfile/src/external_sndfile/ && make -j${MAKE_THREADS} + INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/sndfile/src/external_sndfile/ && make install + INSTALL_DIR ${LIBDIR}/sndfile + ) +else() + # We set FLAC__NO_DLL, otherwise we cannot statically link FLAC + set(SNDFILE_C_FLAGS "${CMAKE_C_FLAGS} -DFLAC__NO_DLL=1") -if(MSVC) - set_target_properties(external_sndfile PROPERTIES FOLDER Mingw) + set(SNDFILE_EXTRA_ARGS + -DCMAKE_POLICY_DEFAULT_CMP0074=NEW + -DOgg_ROOT=${LIBDIR}/ogg + -DVorbis_ROOT=${LIBDIR}/vorbis + -DOpus_ROOT=${LIBDIR}/opus + -DLame_ROOT=${LIBDIR}/lame + -DLAME_INCLUDE_DIR=${LIBDIR}/lame/include/ + -DFLAC_ROOT=${LIBDIR}/flac + -DBUILD_PROGRAMS=OFF + -DBUILD_EXAMPLES=OFF + -DBUILD_TESTING=OFF + -DBUILD_SHARED_LIBS=ON + -DPYTHON_EXECUTABLE=${PYTHON_BINARY} + -DCMAKE_C_FLAGS=${SNDFILE_C_FLAGS} + ) + + 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 + PATCH_COMMAND ${CMAKE_COMMAND} -E copy ${PATCH_DIR}/cmake/modules/FindLame.cmake ${BUILD_DIR}/sndfile/src/external_sndfile/cmake/FindLame.cmake + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/sndfile ${DEFAULT_CMAKE_FLAGS} ${SNDFILE_EXTRA_ARGS} + INSTALL_DIR ${LIBDIR}/sndfile + ) +endif() + +if(BUILD_MODE STREQUAL Release AND WIN32) + 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() add_dependencies( @@ -39,21 +66,5 @@ add_dependencies( external_ogg external_vorbis external_opus + external_flac ) -if(UNIX) - add_dependencies( - external_sndfile - external_flac - ) -endif() - -if(BUILD_MODE STREQUAL Release AND WIN32) - ExternalProject_Add_Step(external_sndfile after_install - COMMAND lib /def:${BUILD_DIR}/sndfile/src/external_sndfile/src/libsndfile-1.def /machine:x64 /out:${BUILD_DIR}/sndfile/src/external_sndfile/src/libsndfile-1.lib - COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/sndfile/bin/libsndfile-1.dll ${HARVEST_TARGET}/sndfile/lib/libsndfile-1.dll - COMMAND ${CMAKE_COMMAND} -E copy ${BUILD_DIR}/sndfile/src/external_sndfile/src/libsndfile-1.lib ${HARVEST_TARGET}/sndfile/lib/libsndfile-1.lib - COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/sndfile/include/sndfile.h ${HARVEST_TARGET}/sndfile/include/sndfile.h - - DEPENDEES install - ) -endif() diff --git a/build_files/build_environment/cmake/theora.cmake b/build_files/build_environment/cmake/theora.cmake index 9d046256714..f8212bce170 100644 --- a/build_files/build_environment/cmake/theora.cmake +++ b/build_files/build_environment/cmake/theora.cmake @@ -8,30 +8,41 @@ else() set(THEORA_CONFIGURE_ENV ${CONFIGURE_ENV}) endif() -ExternalProject_Add(external_theora - URL file://${PACKAGE_DIR}/${THEORA_FILE} - DOWNLOAD_DIR ${DOWNLOAD_DIR} - URL_HASH ${THEORA_HASH_TYPE}=${THEORA_HASH} - PREFIX ${BUILD_DIR}/theora - PATCH_COMMAND ${PATCH_CMD} -p 0 -d ${BUILD_DIR}/theora/src/external_theora < ${PATCH_DIR}/theora.diff - CONFIGURE_COMMAND ${THEORA_CONFIGURE_ENV} && cd ${BUILD_DIR}/theora/src/external_theora/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/theora - --disable-shared - --enable-static - --with-pic - --with-ogg=${LIBDIR}/ogg - --with-vorbis=${LIBDIR}/vorbis - --disable-examples - BUILD_COMMAND ${THEORA_CONFIGURE_ENV} && cd ${BUILD_DIR}/theora/src/external_theora/ && make -j${MAKE_THREADS} - INSTALL_COMMAND ${THEORA_CONFIGURE_ENV} && cd ${BUILD_DIR}/theora/src/external_theora/ && make install - INSTALL_DIR ${LIBDIR}/theora -) +if(NOT WIN32) + ExternalProject_Add(external_theora + URL file://${PACKAGE_DIR}/${THEORA_FILE} + DOWNLOAD_DIR ${DOWNLOAD_DIR} + URL_HASH ${THEORA_HASH_TYPE}=${THEORA_HASH} + PREFIX ${BUILD_DIR}/theora + PATCH_COMMAND ${PATCH_CMD} -p 0 -d ${BUILD_DIR}/theora/src/external_theora < ${PATCH_DIR}/theora.diff + CONFIGURE_COMMAND ${THEORA_CONFIGURE_ENV} && cd ${BUILD_DIR}/theora/src/external_theora/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/theora + --disable-shared + --enable-static + --with-pic + --with-ogg=${LIBDIR}/ogg + --with-vorbis=${LIBDIR}/vorbis + --disable-examples + BUILD_COMMAND ${THEORA_CONFIGURE_ENV} && cd ${BUILD_DIR}/theora/src/external_theora/ && make -j${MAKE_THREADS} + INSTALL_COMMAND ${THEORA_CONFIGURE_ENV} && cd ${BUILD_DIR}/theora/src/external_theora/ && make install + INSTALL_DIR ${LIBDIR}/theora + ) +else() + # We are kind of naughty here and steal vorbis' FindOgg.cmake, but given it's a dependency anyway... + ExternalProject_Add(external_theora + URL file://${PACKAGE_DIR}/${THEORA_FILE} + DOWNLOAD_DIR ${DOWNLOAD_DIR} + URL_HASH ${THEORA_HASH_TYPE}=${THEORA_HASH} + PREFIX ${BUILD_DIR}/theora + PATCH_COMMAND COMMAND ${CMAKE_COMMAND} -E copy ${PATCH_DIR}/cmakelists_theora.txt ${BUILD_DIR}/theora/src/external_theora/CMakeLists.txt && + ${CMAKE_COMMAND} -E copy ${PATCH_DIR}/libtheora.def ${BUILD_DIR}/theora/src/external_theora/libtheora.def && + ${CMAKE_COMMAND} -E copy ${BUILD_DIR}/vorbis/src/external_vorbis/cmake/FindOgg.cmake ${BUILD_DIR}/theora/src/external_theora/FindOgg.cmake + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/theora -DOGG_ROOT=${LIBDIR}/ogg ${DEFAULT_CMAKE_FLAGS} -DLIBDIR=${LIBDIR} + INSTALL_DIR ${LIBDIR}/theora + ) +endif() add_dependencies( external_theora external_vorbis external_ogg ) - -if(MSVC) - set_target_properties(external_theora PROPERTIES FOLDER Mingw) -endif() diff --git a/build_files/build_environment/cmake/versions.cmake b/build_files/build_environment/cmake/versions.cmake index 20c7ddc709c..988529ede42 100644 --- a/build_files/build_environment/cmake/versions.cmake +++ b/build_files/build_environment/cmake/versions.cmake @@ -323,12 +323,6 @@ set(X264_HASH bb4f7da03936b5a030ed5827133b58eb3f701d7e5dce32cca4ba6df93797d42e) set(X264_HASH_TYPE SHA256) set(X264_FILE x264-${X264_VERSION}.tar.gz) -set(XVIDCORE_VERSION 1.3.7) -set(XVIDCORE_URI https://downloads.xvid.com/downloads/xvidcore-${XVIDCORE_VERSION}.tar.gz) -set(XVIDCORE_HASH abbdcbd39555691dd1c9b4d08f0a031376a3b211652c0d8b3b8aa9be1303ce2d) -set(XVIDCORE_HASH_TYPE SHA256) -set(XVIDCORE_FILE xvidcore-${XVIDCORE_VERSION}.tar.gz) - set(OPENJPEG_VERSION 2.5.0) set(OPENJPEG_SHORT_VERSION 2.5) set(OPENJPEG_URI https://github.com/uclouvain/openjpeg/archive/v${OPENJPEG_VERSION}.tar.gz) diff --git a/build_files/build_environment/cmake/vorbis.cmake b/build_files/build_environment/cmake/vorbis.cmake index eca2f73122b..d51df267320 100644 --- a/build_files/build_environment/cmake/vorbis.cmake +++ b/build_files/build_environment/cmake/vorbis.cmake @@ -2,26 +2,33 @@ # # SPDX-License-Identifier: GPL-2.0-or-later +if(NOT WIN32) + ExternalProject_Add(external_vorbis + URL file://${PACKAGE_DIR}/${VORBIS_FILE} + DOWNLOAD_DIR ${DOWNLOAD_DIR} + URL_HASH ${VORBIS_HASH_TYPE}=${VORBIS_HASH} + PREFIX ${BUILD_DIR}/vorbis + CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/vorbis/src/external_vorbis/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/vorbis + --disable-shared + --enable-static + --with-pic + --with-ogg=${LIBDIR}/ogg + BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/vorbis/src/external_vorbis/ && make -j${MAKE_THREADS} + INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/vorbis/src/external_vorbis/ && make install + INSTALL_DIR ${LIBDIR}/vorbis + ) +else() ExternalProject_Add(external_vorbis - URL file://${PACKAGE_DIR}/${VORBIS_FILE} - DOWNLOAD_DIR ${DOWNLOAD_DIR} - URL_HASH ${VORBIS_HASH_TYPE}=${VORBIS_HASH} - PREFIX ${BUILD_DIR}/vorbis - CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/vorbis/src/external_vorbis/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/vorbis - --disable-shared - --enable-static - --with-pic - --with-ogg=${LIBDIR}/ogg - BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/vorbis/src/external_vorbis/ && make -j${MAKE_THREADS} - INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/vorbis/src/external_vorbis/ && make install - INSTALL_DIR ${LIBDIR}/vorbis -) + URL file://${PACKAGE_DIR}/${VORBIS_FILE} + DOWNLOAD_DIR ${DOWNLOAD_DIR} + URL_HASH ${VORBIS_HASH_TYPE}=${VORBIS_HASH} + PREFIX ${BUILD_DIR}/vorbis + CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${LIBDIR}/vorbis -DOGG_ROOT=${LIBDIR}/ogg ${DEFAULT_CMAKE_FLAGS} + INSTALL_DIR ${LIBDIR}/vorbis + ) +endif() add_dependencies( external_vorbis external_ogg ) - -if(MSVC) - set_target_properties(external_vorbis PROPERTIES FOLDER Mingw) -endif() diff --git a/build_files/build_environment/cmake/vpx.cmake b/build_files/build_environment/cmake/vpx.cmake index 6e7d749de50..6708b19412f 100644 --- a/build_files/build_environment/cmake/vpx.cmake +++ b/build_files/build_environment/cmake/vpx.cmake @@ -8,8 +8,32 @@ if(WIN32) # 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 ) + + if(MSVC_VERSION GREATER_EQUAL 1920) # 2019 + set(VPX_COMPILER_STRING vs16) + else() # 2017 + set(VPX_COMPILER_STRING vs15) + endif() + + if(BLENDER_PLATFORM_ARM) + # ARM64 requires a min of vc142 + set(VPX_EXTRA_FLAGS --target=arm64-win64-vs16 --as=nasm) + set(VPX_INCL_ARCH nopost-nodocs-arm64) + else() + set(VPX_EXTRA_FLAGS --target=x86_64-win64-${VPX_COMPILER_STRING} --as=nasm) + set(VPX_INCL_ARCH nodocs-x86_64-win64) + endif() + + set(VPX_CONFIGURE_COMMAND ${CONFIGURE_ENV_MSVC}) + + set(VPX_INCLUDE_PATH ${BUILD_DIR}/vpx/src/external_vpx/vpx-vp8-vp9-${VPX_INCL_ARCH}md-${VPX_COMPILER_STRING}-v${VPX_VERSION}) + + set(VPX_BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/vpx/src/external_vpx/ && make dist && msbuild /m vpx.sln /p:OutDir=${BUILD_DIR}/vpx/src/external_vpx-build/ /p:Configuration=Release) + set(VPX_INSTALL_COMMAND ${CONFIGURE_ENV} && ${CMAKE_COMMAND} -E copy_directory ${VPX_INCLUDE_PATH}/include ${LIBDIR}/vpx/include && + ${CMAKE_COMMAND} -E copy_directory ${BUILD_DIR}/vpx/src/external_vpx-build/ ${LIBDIR}/vpx/lib/ && + ${CMAKE_COMMAND} -E copy ${LIBDIR}/vpx/lib/vpxmd.lib ${LIBDIR}/vpx/lib/vpx.lib) else() if(APPLE) if("${CMAKE_OSX_ARCHITECTURES}" STREQUAL "arm64") @@ -20,6 +44,11 @@ else() else() set(VPX_EXTRA_FLAGS --target=generic-gnu) endif() + + set(VPX_CONFIGURE_COMMAND ${CONFIGURE_ENV}) + + set(VPX_BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/vpx/src/external_vpx/ && make -j${MAKE_THREADS}) + set(VPX_INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/vpx/src/external_vpx/ && make install) endif() if(NOT BLENDER_PLATFORM_ARM) @@ -37,7 +66,7 @@ ExternalProject_Add(external_vpx DOWNLOAD_DIR ${DOWNLOAD_DIR} URL_HASH ${VPX_HASH_TYPE}=${VPX_HASH} PREFIX ${BUILD_DIR}/vpx - CONFIGURE_COMMAND ${CONFIGURE_ENV} && + CONFIGURE_COMMAND ${VPX_CONFIGURE_COMMAND} && cd ${BUILD_DIR}/vpx/src/external_vpx/ && ${CONFIGURE_COMMAND_NO_TARGET} --prefix=${LIBDIR}/vpx --disable-shared @@ -49,8 +78,8 @@ ExternalProject_Add(external_vpx --enable-vp8 --enable-vp9 ${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 + BUILD_COMMAND ${VPX_BUILD_COMMAND} + INSTALL_COMMAND ${VPX_INSTALL_COMMAND} PATCH_COMMAND ${VPX_PATCH} INSTALL_DIR ${LIBDIR}/vpx ) diff --git a/build_files/build_environment/cmake/x264.cmake b/build_files/build_environment/cmake/x264.cmake index 19ab31d15ea..23042b96b78 100644 --- a/build_files/build_environment/cmake/x264.cmake +++ b/build_files/build_environment/cmake/x264.cmake @@ -3,7 +3,7 @@ # SPDX-License-Identifier: GPL-2.0-or-later if(WIN32) - set(X264_EXTRA_ARGS --enable-win32thread --cross-prefix=${MINGW_HOST}- --host=${MINGW_HOST}) + set(X264_EXTRA_ARGS --enable-win32thread) endif() if(BLENDER_PLATFORM_ARM) @@ -12,10 +12,12 @@ endif() if((APPLE AND NOT BLENDER_PLATFORM_ARM) OR (UNIX AND NOT APPLE)) set(X264_CONFIGURE_ENV - export AS=${LIBDIR}/nasm/bin/nasm + ${CONFIGURE_ENV} && export AS=${LIBDIR}/nasm/bin/nasm ) +elseif(WIN32) + set(X264_CONFIGURE_ENV ${CONFIGURE_ENV_NO_PERL}) else() - set(X264_CONFIGURE_ENV echo .) + set(X264_CONFIGURE_ENV ${CONFIGURE_ENV}) endif() ExternalProject_Add(external_x264 @@ -23,14 +25,14 @@ ExternalProject_Add(external_x264 DOWNLOAD_DIR ${DOWNLOAD_DIR} URL_HASH ${X264_HASH_TYPE}=${X264_HASH} PREFIX ${BUILD_DIR}/x264 - CONFIGURE_COMMAND ${CONFIGURE_ENV} && ${X264_CONFIGURE_ENV} && cd ${BUILD_DIR}/x264/src/external_x264/ && + CONFIGURE_COMMAND ${X264_CONFIGURE_ENV} && cd ${BUILD_DIR}/x264/src/external_x264/ && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/x264 --enable-static --enable-pic --disable-lavf ${X264_EXTRA_ARGS} - BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/x264/src/external_x264/ && make -j${MAKE_THREADS} - INSTALL_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/x264/src/external_x264/ && make install + BUILD_COMMAND ${X264_CONFIGURE_ENV} && cd ${BUILD_DIR}/x264/src/external_x264/ && make -j${MAKE_THREADS} + INSTALL_COMMAND ${X264_CONFIGURE_ENV} && cd ${BUILD_DIR}/x264/src/external_x264/ && make install INSTALL_DIR ${LIBDIR}/x264 ) diff --git a/build_files/build_environment/cmake/xvidcore.cmake b/build_files/build_environment/cmake/xvidcore.cmake deleted file mode 100644 index 1a45b6e44bf..00000000000 --- a/build_files/build_environment/cmake/xvidcore.cmake +++ /dev/null @@ -1,32 +0,0 @@ -# SPDX-FileCopyrightText: 2017-2023 Blender Foundation -# -# SPDX-License-Identifier: GPL-2.0-or-later - -if(WIN32) - set(XVIDCORE_EXTRA_ARGS --host=${MINGW_HOST}) -endif() - -ExternalProject_Add(external_xvidcore - URL file://${PACKAGE_DIR}/${XVIDCORE_FILE} - DOWNLOAD_DIR ${DOWNLOAD_DIR} - URL_HASH ${XVIDCORE_HASH_TYPE}=${XVIDCORE_HASH} - PREFIX ${BUILD_DIR}/xvidcore - CONFIGURE_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/xvidcore/src/external_xvidcore/build/generic && ${CONFIGURE_COMMAND} --prefix=${LIBDIR}/xvidcore ${XVIDCORE_EXTRA_ARGS} - BUILD_COMMAND ${CONFIGURE_ENV} && cd ${BUILD_DIR}/xvidcore/src/external_xvidcore/build/generic && make -j${MAKE_THREADS} - INSTALL_COMMAND ${CONFIGURE_ENV} && - ${CMAKE_COMMAND} -E remove ${LIBDIR}/xvidcore/lib/* && # clean because re-installing fails otherwise - cd ${BUILD_DIR}/xvidcore/src/external_xvidcore/build/generic && make install - INSTALL_DIR ${LIBDIR}/xvidcore -) - -if(WIN32) - ExternalProject_Add_Step(external_xvidcore after_install - COMMAND ${CMAKE_COMMAND} -E rename ${LIBDIR}/xvidcore/lib/xvidcore.a ${LIBDIR}/xvidcore/lib/libxvidcore.a || true - COMMAND ${CMAKE_COMMAND} -E remove ${LIBDIR}/xvidcore/lib/xvidcore.dll.a - DEPENDEES install - ) -endif() - -if(MSVC) - set_target_properties(external_xvidcore PROPERTIES FOLDER Mingw) -endif() diff --git a/build_files/build_environment/cmake/zlib.cmake b/build_files/build_environment/cmake/zlib.cmake index 8d2a54abd44..f404579cb8b 100644 --- a/build_files/build_environment/cmake/zlib.cmake +++ b/build_files/build_environment/cmake/zlib.cmake @@ -2,10 +2,17 @@ # # SPDX-License-Identifier: GPL-2.0-or-later +if(MSVC) + set(ZLIB_PATCH_COMMAND ${PATCH_CMD} -p 1 -d ${BUILD_DIR}/zlib/src/external_zlib < ${PATCH_DIR}/zlib.diff) +else() + set(ZLIB_PATCH_COMMAND echo .) +endif() + ExternalProject_Add(external_zlib URL file://${PACKAGE_DIR}/${ZLIB_FILE} URL_HASH ${ZLIB_HASH_TYPE}=${ZLIB_HASH} PREFIX ${BUILD_DIR}/zlib + PATCH_COMMAND ${ZLIB_PATCH_COMMAND} CMAKE_ARGS -DCMAKE_POSITION_INDEPENDENT_CODE=ON -DCMAKE_INSTALL_PREFIX=${LIBDIR}/zlib ${DEFAULT_CMAKE_FLAGS} INSTALL_DIR ${LIBDIR}/zlib ) @@ -15,12 +22,17 @@ if(WIN32) ExternalProject_Add_Step(external_zlib after_install COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/zlib/lib/zlibstatic${LIBEXT} ${HARVEST_TARGET}/zlib/lib/libz_st${LIBEXT} COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDIR}/zlib/include/ ${HARVEST_TARGET}/zlib/include/ + COMMAND ${CMAKE_COMMAND} -E rm -f ${LIBDIR}/zlib/bin/zlib.dll + COMMAND ${CMAKE_COMMAND} -E rm -f ${LIBDIR}/zlib/lib/zlib.lib + COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/zlib/lib/zlibstatic${LIBEXT} ${LIBDIR}/zlib/lib/zlib${LIBEXT} DEPENDEES install ) endif() if(BUILD_MODE STREQUAL Debug) ExternalProject_Add_Step(external_zlib after_install COMMAND ${CMAKE_COMMAND} -E copy ${LIBDIR}/zlib/lib/zlibstaticd${LIBEXT} ${HARVEST_TARGET}/zlib/lib/libz_st_d${LIBEXT} + COMMAND ${CMAKE_COMMAND} -E rm -f ${LIBDIR}/zlib/bin/zlib.dll + COMMAND ${CMAKE_COMMAND} -E rm -f ${LIBDIR}/zlib/lib/zlib.lib DEPENDEES install ) endif() diff --git a/build_files/build_environment/dependencies.dot b/build_files/build_environment/dependencies.dot index b0de92979ca..5c341086e5f 100644 --- a/build_files/build_environment/dependencies.dot +++ b/build_files/build_environment/dependencies.dot @@ -18,7 +18,6 @@ graph[autosize = false, size = "25.7,8.3!", resolution = 300]; external_embree -- external_tbb; external_ffmpeg -- external_zlib; external_ffmpeg -- external_openjpeg; - external_ffmpeg -- external_xvidcore; external_ffmpeg -- external_x264; external_ffmpeg -- external_opus; external_ffmpeg -- external_vpx; diff --git a/build_files/build_environment/patches/cmake/modules/FindLame.cmake b/build_files/build_environment/patches/cmake/modules/FindLame.cmake new file mode 100644 index 00000000000..c9e15fbac08 --- /dev/null +++ b/build_files/build_environment/patches/cmake/modules/FindLame.cmake @@ -0,0 +1,68 @@ +# Backported (with some minor modifications) from libsndfile 1.2.0 + +# - Find lame +# Find the native lame includes and libraries +# +# LAME_INCLUDE_DIRS - where to find lame.h, etc. +# LAME_LIBRARIES - List of libraries when using lame. +# LAME_FOUND - True if Lame found. + +if (LAME_INCLUDE_DIR) + # Already in cache, be silent + set(LAME_FIND_QUIETLY TRUE) +endif () + +find_path (LAME_INCLUDE_DIR lame/lame.h + HINTS + ${LAME_ROOT} + ) + +# MSVC built lame may be named mp3lame_static. +# The provided project files name the library with the lib prefix. + +find_library (LAME_LIBRARY + NAMES + mp3lame + mp3lame_static + libmp3lame + libmp3lame_static + libmp3lame-static + HINTS + ${LAME_ROOT} + ) + +find_library (LAME_HIP_LIBRARY + NAMES + mpghip-static + libmpghip-static + HINTS + ${LAME_ROOT} + ) + +# Handle the QUIETLY and REQUIRED arguments and set LAME_FOUND +# to TRUE if all listed variables are TRUE. +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args (Lame + REQUIRED_VARS + LAME_LIBRARY + LAME_INCLUDE_DIR + ) + +if (LAME_FOUND) + set (LAME_LIBRARIES ${LAME_LIBRARY} ${LAME_HIP_LIBRARY}) + set (LAME_INCLUDE_DIRS ${LAME_INCLUDE_DIR}) + + if (NOT TARGET Lame::Lame) + add_library (Lame::Lame UNKNOWN IMPORTED) + set_target_properties (Lame::Lame PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${LAME_INCLUDE_DIRS}" + IMPORTED_LOCATION "${LAME_LIBRARY}" + ) + if (LAME_HIP_LIBRARY) + set_property (TARGET Lame::Lame APPEND PROPERTY + INTERFACE_LINK_LIBRARIES "${LAME_HIP_LIBRARY}") + endif () + endif () +endif () + +mark_as_advanced(LAME_INCLUDE_DIR LAME_LIBRARY LAME_HIP_LIBRARY) diff --git a/build_files/build_environment/patches/cmakelists_theora.txt b/build_files/build_environment/patches/cmakelists_theora.txt new file mode 100644 index 00000000000..a6260af608e --- /dev/null +++ b/build_files/build_environment/patches/cmakelists_theora.txt @@ -0,0 +1,101 @@ +# Based on the VCPKG version of theora + +cmake_minimum_required(VERSION 3.0) +project(theora LANGUAGES C) + +set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}") +FIND_PACKAGE(OGG REQUIRED) + +file(GLOB HEADERS + "include/theora/codec.h" + "include/theora/theora.h" + "include/theora/theoradec.h" + "include/theora/theoraenc.h" +) + +include_directories("include") +include_directories(${OGG_INCLUDE_DIR}) + +set(LIBTHEORA_COMMON + "lib/apiwrapper.c" + "lib/bitpack.c" + "lib/dequant.c" + "lib/fragment.c" + "lib/idct.c" + "lib/info.c" + "lib/internal.c" + "lib/state.c" + "lib/quant.c" + + "lib/x86_vc/mmxfrag.c" + "lib/x86_vc/mmxidct.c" + "lib/x86_vc/mmxstate.c" + "lib/x86_vc/x86state.c" +) + +set(LIBTHEORA_ENC + "lib/analyze.c" + "lib/encapiwrapper.c" + "lib/encfrag.c" + "lib/encinfo.c" + "lib/encode.c" + "lib/enquant.c" + "lib/fdct.c" + "lib/huffenc.c" + "lib/mathops.c" + "lib/mcenc.c" + "lib/rate.c" + "lib/tokenize.c" + + "lib/x86_vc/mmxencfrag.c" + "lib/x86_vc/mmxfdct.c" + "lib/x86_vc/x86enc.c" +) + +set(LIBTHEORA_DEC + "lib/decapiwrapper.c" + "lib/decinfo.c" + "lib/decode.c" + "lib/huffdec.c" +) + +add_definitions(-D_CRT_SECURE_NO_DEPRECATE) +add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) + +add_library(theora-common OBJECT ${LIBTHEORA_COMMON} ${HEADERS}) +add_library(theora-enc OBJECT ${LIBTHEORA_ENC} ${HEADERS}) +add_library(theora-dec OBJECT ${LIBTHEORA_DEC} ${HEADERS}) + +add_library(theora $ $ $ "libtheora.def") +target_link_libraries(theora ${OGG_LIBRARY}) + +add_library(theoraenc $ $ "win32/xmingw32/libtheoraenc-all.def") +target_link_libraries(theoraenc ${OGG_LIBRARY}) + +add_library(theoradec $ $ "win32/xmingw32/libtheoradec-all.def") +target_link_libraries(theoradec ${OGG_LIBRARY}) + +# pkgconfig vars +set(prefix ${LIBDIR}/theora) +set(exec_prefix ${LIBDIR}/theora/bin) +set(libdir ${LIBDIR}/theora/lib) +set(includedir ${LIBDIR}/theora/include) + +configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/theora.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/theora.pc + @ONLY +) + +install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/theora.pc + DESTINATION lib/pkgconfig +) + +install(FILES ${HEADERS} DESTINATION include/theora) + +install(TARGETS theora theoraenc theoradec + RUNTIME DESTINATION bin + LIBRARY DESTINATION bin + ARCHIVE DESTINATION lib +) \ No newline at end of file diff --git a/build_files/build_environment/patches/ffmpeg_windows.diff b/build_files/build_environment/patches/ffmpeg_windows.diff new file mode 100644 index 00000000000..8e461e922dd --- /dev/null +++ b/build_files/build_environment/patches/ffmpeg_windows.diff @@ -0,0 +1,52 @@ +diff -Naur ffmpeg-clean/configure ffmpeg-dirty/configure +--- ffmpeg-clean/configure 2023-02-27 20:43:45.000000000 +0000 ++++ ffmpeg-dirty/configure 2023-05-25 09:49:24.949566500 +0100 +@@ -6563,7 +6563,7 @@ + enabled jni && { [ $target_os = "android" ] && check_headers jni.h && enabled pthreads || die "ERROR: jni not found"; } + enabled ladspa && require_headers "ladspa.h dlfcn.h" + enabled lcms2 && require_pkg_config lcms2 "lcms2 >= 2.13" lcms2.h cmsCreateContext +-enabled libaom && require_pkg_config libaom "aom >= 1.0.0" aom/aom_codec.h aom_codec_version ++enabled libaom && { require libaom aom/aom_codec.h aom_codec_version -laom; } + enabled libaribb24 && { check_pkg_config libaribb24 "aribb24 > 1.0.3" "aribb24/aribb24.h" arib_instance_new || + { enabled gpl && require_pkg_config libaribb24 aribb24 "aribb24/aribb24.h" arib_instance_new; } || + die "ERROR: libaribb24 requires version higher than 1.0.3 or --enable-gpl."; } +@@ -6654,16 +6654,15 @@ + require libopencv opencv2/core/core_c.h cvCreateImageHeader -lopencv_core -lopencv_imgproc; } || + require_pkg_config libopencv opencv opencv/cxcore.h cvCreateImageHeader; } + enabled libopenh264 && require_pkg_config libopenh264 openh264 wels/codec_api.h WelsGetCodecVersion +-enabled libopenjpeg && { check_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version || +- { require_pkg_config libopenjpeg "libopenjp2 >= 2.1.0" openjpeg.h opj_version -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } } ++enabled libopenjpeg && require libopenjpeg openjpeg.h opj_version "-DOPJ_STATIC" -lopenjp2 + enabled libopenmpt && require_pkg_config libopenmpt "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create -lstdc++ && append libopenmpt_extralibs "-lstdc++" + enabled libopenvino && require libopenvino c_api/ie_c_api.h ie_c_api_version -linference_engine_c_api + enabled libopus && { + enabled libopus_decoder && { +- require_pkg_config libopus opus opus_multistream.h opus_multistream_decoder_create ++ require libopus opus_multistream.h opus_multistream_decoder_create -lopus + } + enabled libopus_encoder && { +- require_pkg_config libopus opus opus_multistream.h opus_multistream_surround_encoder_create ++ require libopus opus_multistream.h opus_multistream_encoder_create -lopus + } + } + enabled libplacebo && require_pkg_config libplacebo "libplacebo >= 4.192.0" libplacebo/vulkan.h pl_vulkan_create +@@ -6696,8 +6695,8 @@ + enabled libvidstab && require_pkg_config libvidstab "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit + enabled libvmaf && require_pkg_config libvmaf "libvmaf >= 2.0.0" libvmaf.h vmaf_init + enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc +-enabled libvorbis && require_pkg_config libvorbis vorbis vorbis/codec.h vorbis_info_init && +- require_pkg_config libvorbisenc vorbisenc vorbis/vorbisenc.h vorbis_encode_init ++enabled libvorbis && require libvorbis vorbis/codec.h vorbis_info_init -lvorbis -logg -lvorbisfile && ++ require libvorbisenc vorbis/vorbisenc.h vorbis_encode_init -lvorbis -lvorbisenc -logg -lvorbisfile + + enabled libvpx && { + enabled libvpx_vp8_decoder && { +@@ -6724,7 +6723,7 @@ + enabled libwebp && { + enabled libwebp_encoder && require_pkg_config libwebp "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion + enabled libwebp_anim_encoder && check_pkg_config libwebp_anim_encoder "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit; } +-enabled libx264 && require_pkg_config libx264 x264 "stdint.h x264.h" x264_encoder_encode && ++enabled libx264 && require libx264 "stdint.h x264.h" x264_encoder_encode -lx264 && + require_cpp_condition libx264 x264.h "X264_BUILD >= 122" && { + [ "$toolchain" != "msvc" ] || + require_cpp_condition libx264 x264.h "X264_BUILD >= 158"; } && diff --git a/build_files/build_environment/patches/gmp.diff b/build_files/build_environment/patches/gmp.diff index bf22f93bc4f..d6baca50b28 100644 --- a/build_files/build_environment/patches/gmp.diff +++ b/build_files/build_environment/patches/gmp.diff @@ -1,15 +1,66 @@ ---- a/mpz/inp_raw.c Tue Dec 22 23:49:51 2020 +0100 -+++ b/mpz/inp_raw.c Thu Oct 21 19:06:49 2021 +0200 +diff -Naur gmp-6.2.1-clean/Makefile.am gmp-6.2.1-dirty/Makefile.am +--- gmp-6.2.1-clean/Makefile.am 2020-11-14 18:45:09.000000000 +0000 ++++ gmp-6.2.1-dirty/Makefile.am 2023-01-24 13:06:03.527956700 +0000 +@@ -112,7 +112,7 @@ + LIBGMPXX_LT_AGE = 6 + + +-SUBDIRS = tests mpn mpz mpq mpf printf scanf rand cxx demos tune doc ++SUBDIRS = tests mpn mpz mpq mpf printf scanf rand cxx demos tune + + EXTRA_DIST = configfsf.guess configfsf.sub .gdbinit INSTALL.autoconf \ + COPYING.LESSERv3 COPYINGv2 COPYINGv3 +diff -Naur gmp-6.2.1-clean/Makefile.in gmp-6.2.1-dirty/Makefile.in +--- gmp-6.2.1-clean/Makefile.in 2020-11-14 18:45:16.000000000 +0000 ++++ gmp-6.2.1-dirty/Makefile.in 2023-01-24 13:06:47.691201700 +0000 +@@ -572,7 +572,7 @@ + LIBGMPXX_LT_CURRENT = 10 + LIBGMPXX_LT_REVISION = 1 + LIBGMPXX_LT_AGE = 6 +-SUBDIRS = tests mpn mpz mpq mpf printf scanf rand cxx demos tune doc ++SUBDIRS = tests mpn mpz mpq mpf printf scanf rand cxx demos tune + + # Put asl.h here for now. + +diff -Naur gmp-6.2.1-clean/configure gmp-6.2.1-dirty/configure +--- gmp-6.2.1-clean/configure 2020-11-14 18:45:15.000000000 +0000 ++++ gmp-6.2.1-dirty/configure 2023-01-24 14:06:26.822206200 +0000 +@@ -12142,8 +12142,8 @@ + # + if test "$enable_shared" = yes; then + GMP_LDFLAGS="$GMP_LDFLAGS -no-undefined -Wl,--export-all-symbols" +- LIBGMP_LDFLAGS="$LIBGMP_LDFLAGS -Wl,--output-def,.libs/libgmp-3.dll.def" +- LIBGMPXX_LDFLAGS="$LIBGMP_LDFLAGS -Wl,--output-def,.libs/libgmpxx-3.dll.def" ++ #LIBGMP_LDFLAGS="$LIBGMP_LDFLAGS -Wl,--output-def,.libs/libgmp-3.dll.def" ++ #LIBGMPXX_LDFLAGS="$LIBGMP_LDFLAGS -Wl,--output-def,.libs/libgmpxx-3.dll.def" + LIBGMP_DLL=1 + fi + ;; +diff -Naur gmp-6.2.1-clean/gmp-h.in gmp-6.2.1-dirty/gmp-h.in +--- gmp-6.2.1-clean/gmp-h.in 2020-11-14 18:45:09.000000000 +0000 ++++ gmp-6.2.1-dirty/gmp-h.in 2023-01-24 14:07:02.962184400 +0000 +@@ -398,7 +398,7 @@ + + /* Microsoft's C compiler accepts __inline */ + #ifdef _MSC_VER +-#define __GMP_EXTERN_INLINE __inline ++#define __GMP_EXTERN_INLINE static __inline + #endif + + /* Recent enough Sun C compilers want "inline" */ +diff -Naur gmp-6.2.1-clean/mpz/inp_raw.c gmp-6.2.1-dirty/mpz/inp_raw.c +--- gmp-6.2.1-clean/mpz/inp_raw.c 2020-11-14 18:45:09.000000000 +0000 ++++ gmp-6.2.1-dirty/mpz/inp_raw.c 2023-01-24 10:24:26.379294800 +0000 @@ -88,8 +88,11 @@ - + abs_csize = ABS (csize); - + + if (UNLIKELY (abs_csize > ~(mp_bitcnt_t) 0 / 8)) + return 0; /* Bit size overflows */ + /* round up to a multiple of limbs */ - abs_xsize = BITS_TO_LIMBS (abs_csize*8); + abs_xsize = BITS_TO_LIMBS ((mp_bitcnt_t) abs_csize * 8); - + if (abs_xsize != 0) { diff --git a/build_files/build_environment/patches/lame.diff b/build_files/build_environment/patches/lame.diff new file mode 100644 index 00000000000..9f25c76a6af --- /dev/null +++ b/build_files/build_environment/patches/lame.diff @@ -0,0 +1,47 @@ +diff --git a/Makefile.MSVC b/Makefile.MSVC +index 6538911..530c9f9 100644 +--- a/Makefile.MSVC ++++ b/Makefile.MSVC +@@ -61,6 +61,10 @@ ASM = NO # or it could be ML64 if we want to use it... + GTK = NO + ! ENDIF + ! ENDIF ++! IF "$(MSVCVER)" == "ARM64" ++ASM = NO ++GTK = NO ++! ENDIF + ! ELSE + ! IF "$(COMP)" == "" + COMP = MSVC +@@ -99,7 +103,13 @@ SNDFILE = NO + ! ENDIF + + OFF = win32 ++! IF "$(MSVCVER)" == "Win64" ++MACHINE = /machine:x64 ++! ELSEIF "$(MSVCVER)" == "ARM64" ++MACHINE = /machine:ARM64 ++! ELSE + MACHINE = /machine:I386 ++! ENDIF + LIB_OPTS = /nologo $(MACHINE) + + ! MESSAGE ---------------------------------------------------------------------- +@@ -150,6 +160,8 @@ LIB_OPTS = /nologo $(MACHINE) + ! ELSE + ! IF "$(MSVCVER)" == "Win64" + ! MESSAGE + using MS 64-Bit Compiler ++! ELSEIF "$(MSVCVER)" == "ARM64" ++! MESSAGE + using MS ARM64 Compiler + ! ELSE + ! MESSAGE using MS COMPILER + ! IF "$(CPU)" == "P1" +@@ -209,6 +221,8 @@ CC_OPTS = /nologo /DWin64 /O2b2ity /GAy /Gs1024 /Zp8 /GL /GS- /Zi + CC_OPTS = /nologo /O2 /Wp64 /Oi /GL /arch:SSE /fp:precise + ! ELSEif "$(CPU)"=="P6" + CC_OPTS = /nologo /O2 /Ob2 /GAy /Gs1024 /Zp8 /Zi ++! ELSEIF "$(MSVCVER)" == "ARM64" ++CC_OPTS = /nologo /O2 /Ob3 /GAy /Zi + !else + CC_OPTS = /nologo /O2 /Ob2 /GAy /Gs1024 /QIfdiv /QI0f /YX + ! ENDIF diff --git a/build_files/build_environment/patches/libtheora.def b/build_files/build_environment/patches/libtheora.def new file mode 100644 index 00000000000..869e2f7bdbf --- /dev/null +++ b/build_files/build_environment/patches/libtheora.def @@ -0,0 +1,63 @@ +; Based on VCPKG's implementation + +EXPORTS +; Old alpha API + theora_version_string + theora_version_number + theora_decode_header + theora_decode_init + theora_decode_packetin + theora_decode_YUVout + theora_control + theora_packet_isheader + theora_packet_iskeyframe + theora_granule_shift + theora_granule_frame + theora_granule_time + theora_info_init + theora_info_clear + theora_clear + theora_comment_init + theora_comment_add + theora_comment_add_tag + theora_comment_query + theora_comment_query_count + theora_comment_clear +; New theora-exp API + th_version_string + th_version_number + th_decode_headerin + th_decode_alloc + th_setup_free + th_decode_ctl + th_decode_packetin + th_decode_ycbcr_out + th_decode_free + th_packet_isheader + th_packet_iskeyframe + th_granule_frame + th_granule_time + th_info_init + th_info_clear + th_comment_init + th_comment_add + th_comment_add_tag + th_comment_query + th_comment_query_count + th_comment_clear +; Old alpha API + theora_encode_init + theora_encode_YUVin + theora_encode_packetout + theora_encode_header + theora_encode_comment + theora_encode_tables +; New theora-exp API + th_encode_alloc + th_encode_ctl + th_encode_flushheader + th_encode_ycbcr_in + th_encode_packetout + th_encode_free + TH_VP31_QUANT_INFO + TH_VP31_HUFF_CODES diff --git a/build_files/build_environment/patches/ming64sh.cmd b/build_files/build_environment/patches/ming64sh.cmd index 18fea3829f3..aa25545bf95 100644 --- a/build_files/build_environment/patches/ming64sh.cmd +++ b/build_files/build_environment/patches/ming64sh.cmd @@ -1,7 +1,7 @@ -@title MinGW-w64 64-bit GCC build environment +@title MSYS2 64-bit MSVC build environment -@echo Setting up environment for MinGW-w64 GCC 64-bit... +@echo Setting up environment for MSYS2 MSVC 64-bit... -@set PATH=%CD%\bin;%CD%\msys\1.0\bin;%cd%\..\..\perl\site\bin;%cd%\..\..\perl\bin;%cd%\..\..\c\bin;%PATH% +@set PATH=%CD%\usr\bin;%cd%\..\..\perl\site\bin;%cd%\..\..\perl\bin;%cd%\..\..\c\bin;%PATH% diff --git a/build_files/build_environment/patches/opus_windows.diff b/build_files/build_environment/patches/opus_windows.diff new file mode 100644 index 00000000000..ebf267e665e --- /dev/null +++ b/build_files/build_environment/patches/opus_windows.diff @@ -0,0 +1,12 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 17ee3fc2..9027d073 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -16,7 +16,6 @@ string(REGEX + message(STATUS "Opus project version: ${PROJECT_VERSION}") + + project(Opus LANGUAGES C VERSION ${PROJECT_VERSION}) +-include(opus_buildtype.cmake) + + option(OPUS_STACK_PROTECTOR "Use stack protection" ON) + option(OPUS_USE_ALLOCA "Use alloca for stack arrays (on non-C99 compilers)" OFF) diff --git a/build_files/build_environment/patches/zlib.diff b/build_files/build_environment/patches/zlib.diff new file mode 100644 index 00000000000..e9447d413dd --- /dev/null +++ b/build_files/build_environment/patches/zlib.diff @@ -0,0 +1,13 @@ +diff --git a/zconf.h.cmakein b/zconf.h.cmakein +index 247ba24..e5c16e6 100644 +--- a/zconf.h.cmakein ++++ b/zconf.h.cmakein +@@ -439,7 +439,7 @@ typedef uLong FAR uLongf; + typedef unsigned long z_crc_t; + #endif + +-#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ ++#if defined(HAVE_UNISTD_H) && HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ + # define Z_HAVE_UNISTD_H + #endif + diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake index 724919e9bce..1330dd272ce 100644 --- a/build_files/cmake/platform/platform_apple.cmake +++ b/build_files/cmake/platform/platform_apple.cmake @@ -153,10 +153,13 @@ if(WITH_CODEC_FFMPEG) avcodec avdevice avformat avutil mp3lame ogg opus swresample swscale theora theoradec theoraenc vorbis vorbisenc - vorbisfile vpx x264 xvidcore) + vorbisfile vpx x264) if(EXISTS ${LIBDIR}/ffmpeg/lib/libaom.a) list(APPEND FFMPEG_FIND_COMPONENTS aom) endif() + if(EXISTS ${LIBDIR}/ffmpeg/lib/libxvidcore.a) + list(APPEND FFMPEG_FIND_COMPONENTS xvidcore) + endif() find_package(FFmpeg) endif() diff --git a/build_files/cmake/platform/platform_unix.cmake b/build_files/cmake/platform/platform_unix.cmake index 25b6d38af46..798dbb310e8 100644 --- a/build_files/cmake/platform/platform_unix.cmake +++ b/build_files/cmake/platform/platform_unix.cmake @@ -243,10 +243,14 @@ if(WITH_CODEC_FFMPEG) theora theoradec theoraenc vorbis vorbisenc vorbisfile ogg vpx - x264 - xvidcore) - if((DEFINED LIBDIR) AND (EXISTS ${LIBDIR}/ffmpeg/lib/libaom.a)) - list(APPEND FFMPEG_FIND_COMPONENTS aom) + x264) + if(DEFINED LIBDIR) + if(EXISTS ${LIBDIR}/ffmpeg/lib/libaom.a) + list(APPEND FFMPEG_FIND_COMPONENTS aom) + endif() + if(EXISTS ${LIBDIR}/ffmpeg/lib/libxvidcore.a) + list(APPEND FFMPEG_FIND_COMPONENTS xvidcore) + endif() endif() elseif(FFMPEG) # Old cache variable used for root dir, convert to new standard. diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake index 70cebf4d020..343a8b392c9 100644 --- a/build_files/cmake/platform/platform_win32.cmake +++ b/build_files/cmake/platform/platform_win32.cmake @@ -372,8 +372,10 @@ if(WITH_FFTW3) set(FFTW3 ${LIBDIR}/fftw3) if(EXISTS ${FFTW3}/lib/libfftw3-3.lib) # 3.6 libraries set(FFTW3_LIBRARIES ${FFTW3}/lib/libfftw3-3.lib ${FFTW3}/lib/libfftw3f.lib) - else() + elseif(EXISTS ${FFTW3}/lib/libfftw.lib) set(FFTW3_LIBRARIES ${FFTW3}/lib/libfftw.lib) # 3.5 Libraries + else() + set(FFTW3_LIBRARIES ${FFTW3}/lib/fftw3.lib ${FFTW3}/lib/fftw3f.lib) # msys2+MSVC Libraries endif() set(FFTW3_INCLUDE_DIRS ${FFTW3}/include) set(FFTW3_LIBPATH ${FFTW3}/lib) @@ -811,7 +813,11 @@ if(WITH_CODEC_SNDFILE) set(LIBSNDFILE ${LIBDIR}/sndfile) set(LIBSNDFILE_INCLUDE_DIRS ${LIBSNDFILE}/include) set(LIBSNDFILE_LIBPATH ${LIBSNDFILE}/lib) # TODO, deprecate - set(LIBSNDFILE_LIBRARIES ${LIBSNDFILE_LIBPATH}/libsndfile-1.lib) + if(EXISTS ${LIBSNDFILE_LIBPATH}/sndfile.lib) + set(LIBSNDFILE_LIBRARIES ${LIBSNDFILE_LIBPATH}/sndfile.lib) + else() + set(LIBSNDFILE_LIBRARIES ${LIBSNDFILE_LIBPATH}/libsndfile-1.lib) + endif() endif() if(WITH_CYCLES AND WITH_CYCLES_OSL) @@ -1021,7 +1027,12 @@ endif() if(WITH_GMP) set(GMP_INCLUDE_DIRS ${LIBDIR}/gmp/include) - set(GMP_LIBRARIES ${LIBDIR}/gmp/lib/libgmp-10.lib optimized ${LIBDIR}/gmp/lib/libgmpxx.lib debug ${LIBDIR}/gmp/lib/libgmpxx_d.lib) + if(EXISTS ${LIBDIR}/gmp/lib/gmp.dll.lib) + set(GMP_DLL_LIB_NAME gmp.dll.lib) + else() + set(GMP_DLL_LIB_NAME libgmp-10.lib) + endif() + set(GMP_LIBRARIES ${LIBDIR}/gmp/lib/${GMP_DLL_LIB_NAME} optimized ${LIBDIR}/gmp/lib/libgmpxx.lib debug ${LIBDIR}/gmp/lib/libgmpxx_d.lib) set(GMP_ROOT_DIR ${LIBDIR}/gmp) set(GMP_FOUND ON) endif() diff --git a/intern/ffmpeg/tests/ffmpeg_codecs.cc b/intern/ffmpeg/tests/ffmpeg_codecs.cc index cd06917f59b..680bef92e2d 100644 --- a/intern/ffmpeg/tests/ffmpeg_codecs.cc +++ b/intern/ffmpeg/tests/ffmpeg_codecs.cc @@ -155,7 +155,6 @@ FFMPEG_TEST_VCODEC_NAME(libtheora, AV_PIX_FMT_YUV420P) FFMPEG_TEST_VCODEC_NAME(libx264, AV_PIX_FMT_YUV420P) FFMPEG_TEST_VCODEC_NAME(libvpx, AV_PIX_FMT_YUV420P) FFMPEG_TEST_VCODEC_NAME(libopenjpeg, AV_PIX_FMT_YUV420P) -FFMPEG_TEST_VCODEC_NAME(libxvid, AV_PIX_FMT_YUV420P) /* aom's AV1 encoder is "libaom-av1". FFMPEG_TEST_VCODEC_NAME(libaom-av1, ...) * will not work because the dash will not work with the test macro. */ TEST(ffmpeg, libaom_av1_AV_PIX_FMT_YUV420P) diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index f671d624662..0c154a19b4f 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -1,6 +1,5 @@ -# SPDX-FileCopyrightText: 2006 Blender Foundation -# # SPDX-License-Identifier: GPL-2.0-or-later +# Copyright 2006 Blender Foundation set(INC ../../intern/clog @@ -888,13 +887,24 @@ elseif(WIN32) ) endif() + if(EXISTS ${LIBDIR}/fftw3/lib/fftw3.dll) + set(FFTW_DLL ${LIBDIR}/fftw3/lib/fftw3.dll) + else() + set(FFTW_DLL ${LIBDIR}/fftw3/lib/libfftw3-3.dll) + endif() + windows_install_shared_manifest( - FILES ${LIBDIR}/fftw3/lib/libfftw3-3.dll + FILES ${FFTW_DLL} ALL ) - if(EXISTS ${LIBDIR}/fftw3/lib/libfftw3f-3.dll) + if(EXISTS ${LIBDIR}/fftw3/lib/fftw3f-3.dll) windows_install_shared_manifest( - FILES ${LIBDIR}/fftw3/lib/libfftw3f-3.dll + FILES ${LIBDIR}/fftw3/lib/fftw3f-3.dll + ALL + ) + elseif(EXISTS ${LIBDIR}/fftw3/lib/fftw3f.dll) + windows_install_shared_manifest( + FILES ${LIBDIR}/fftw3/lib/fftw3f.dll ALL ) endif() @@ -957,10 +967,19 @@ elseif(WIN32) DEBUG ) endif() + + if(EXISTS ${LIBDIR}/gmp/lib/gmp-10.dll) + set(GMP_DLL ${LIBDIR}/gmp/lib/gmp-10.dll) + else() + set(GMP_DLL ${LIBDIR}/gmp/lib/libgmp-10.dll) + endif() + windows_install_shared_manifest( - FILES ${LIBDIR}/gmp/lib/libgmp-10.dll + FILES ${GMP_DLL} ALL ) + unset(GMP_DLL) + windows_install_shared_manifest( FILES ${LIBDIR}/gmp/lib/libgmpxx.dll RELEASE @@ -1268,10 +1287,17 @@ elseif(WIN32) list(APPEND LIB ${TBB_MALLOC_LIBRARIES}) endif() + if(EXISTS ${LIBDIR}/sndfile/lib/sndfile.dll) + set(SNDFILE_DLL ${LIBDIR}/sndfile/lib/sndfile.dll) + else() + set(SNDFILE_DLL ${LIBDIR}/sndfile/lib/libsndfile-1.dll) + endif() + windows_install_shared_manifest( - FILES ${LIBDIR}/sndfile/lib/libsndfile-1.dll + FILES ${SNDFILE_DLL} ALL ) + unset(SNDFILE_DLL) windows_install_shared_manifest( FILES ${LIBDIR}/shaderc/bin/shaderc_shared.dll