Skip to content

Commit bf15be4

Browse files
authored
[blender] Add ci-vcpkg-blender ci test port for windows (#51143)
1 parent 63bb8e4 commit bf15be4

20 files changed

Lines changed: 788 additions & 4 deletions
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
diff --git a/modules/dnn/src/op_inf_engine.cpp b/modules/dnn/src/op_inf_engine.cpp
2+
index d5f6902..b663428 100644
3+
--- a/modules/dnn/src/op_inf_engine.cpp
4+
+++ b/modules/dnn/src/op_inf_engine.cpp
5+
@@ -53,7 +53,9 @@ Mat infEngineBlobToMat(const ov::Tensor& blob)
6+
default:
7+
CV_Error(Error::StsNotImplemented, "Unsupported blob precision");
8+
}
9+
- return Mat(size, type, blob.data());
10+
+ // OpenVINO 2026 exposes const data for const tensors, but OpenCV still
11+
+ // wraps infer request buffers in mutable Mats for its existing copy paths.
12+
+ return Mat(size, type, const_cast<void*>(blob.data()));
13+
}
14+
15+
void infEngineBlobsToMats(const ov::TensorVector& blobs,
16+
diff --git a/modules/gapi/src/backends/ov/govbackend.cpp b/modules/gapi/src/backends/ov/govbackend.cpp
17+
--- a/modules/gapi/src/backends/ov/govbackend.cpp
18+
+++ b/modules/gapi/src/backends/ov/govbackend.cpp
19+
@@ -87,7 +87,7 @@ static ov::element::Type toOV(int depth) {
20+
case CV_16F: return ov::element::f16;
21+
default: GAPI_Error("OV Backend: Unsupported data type");
22+
}
23+
- return ov::element::undefined;
24+
+ return ov::element::dynamic;
25+
}
26+
27+
static ov::preprocess::ResizeAlgorithm toOVInterp(int interpolation) {
28+
@@ -141,7 +141,7 @@ static void copyFromOV(const ov::Tensor &tensor, cv::Mat &mat) {
29+
cv::gimpl::convertInt64ToInt32(tensor.data<int64_t>(),
30+
mat.ptr<int>(),
31+
total);
32+
} else {
33+
- std::copy_n(reinterpret_cast<uint8_t*>(tensor.data()),
34+
+ std::copy_n(reinterpret_cast<const uint8_t*>(tensor.data()),
35+
tensor.get_byte_size(),
36+
mat.ptr<uint8_t>());
37+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
diff --git a/cmake/OpenCVDetectCUDAUtils.cmake b/cmake/OpenCVDetectCUDAUtils.cmake
2+
index 9cf1600..f584831 100644
3+
--- a/cmake/OpenCVDetectCUDAUtils.cmake
4+
+++ b/cmake/OpenCVDetectCUDAUtils.cmake
5+
@@ -360,6 +360,11 @@ macro(ocv_cuda_filter_options)
6+
# issue: #11552 (from OpenCVCompilerOptions.cmake)
7+
string(REGEX REPLACE "-Wimplicit-fallthrough(=[0-9]+)? " "" ${var} "${${var}}")
8+
9+
+ # CUDA first-class-language builds set their own standard level via CMake.
10+
+ # Forwarding a second host -std= flag through -Xcompiler can conflict with
11+
+ # the CUDA frontend's standard selection and break compilation on newer GCC.
12+
+ string(REGEX REPLACE "(^| )(-std=[^ ]+|/std:c\\+\\+[^ ]+)( |$)" " " ${var} "${${var}}")
13+
+
14+
# removal of custom specified options
15+
if(OPENCV_CUDA_NVCC_FILTEROUT_OPTIONS)
16+
foreach(__flag ${OPENCV_CUDA_NVCC_FILTEROUT_OPTIONS})

ports/opencv4/portfile.cmake

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ vcpkg_from_github(
3030
0021-fix-qt-gen-def.patch
3131
0022-android-use-vcpkg-cpu-features.patch
3232
0023-ffmpeg8-support.patch
33+
0024-openvino-const-tensor-data.patch
34+
0025-fix-cuda-host-std-flag-forwarding.patch
3335
"${PATCH1_FILE}"
3436
)
3537
# Disallow accidental build of vendored copies
@@ -536,7 +538,7 @@ if("ffmpeg" IN_LIST FEATURES)
536538
string(APPEND DEPS_STRING "\nfind_dependency(FFMPEG)")
537539
endif()
538540
if("freetype" IN_LIST FEATURES)
539-
string(APPEND DEPS_STRING "\nfind_dependency(harfbuzz)")
541+
string(APPEND DEPS_STRING "\nfind_dependency(harfbuzz CONFIG)")
540542
endif()
541543
if("gdcm" IN_LIST FEATURES)
542544
string(APPEND DEPS_STRING "\nfind_dependency(GDCM)")

ports/opencv4/vcpkg.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "opencv4",
33
"version": "4.12.0",
4-
"port-version": 1,
4+
"port-version": 2,
55
"description": "Open Source Computer Vision Library",
66
"homepage": "https://opencv.org/",
77
"documentation": "https://docs.opencv.org/4.12.0/",

scripts/ci.feature.baseline.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -937,7 +937,6 @@ opencv4[opengl](xbox)=cascade
937937
opencv4[opengl]=no-separate-feature-test # needs Win32UI, Qt or GTK to enable HAVE_OPENGL
938938
opencv4[ovis]:arm64-linux=cascade
939939
opencv4[ovis](android)=feature-fails
940-
opencv4[python]:arm64-linux=cascade
941940
opencv4[qt]:arm64-linux=cascade
942941
opencv4[qt](ios | xbox)=cascade
943942
opencv4[vtk]:arm64-linux=cascade
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
2+
--- a/build_files/cmake/macros.cmake
3+
+++ b/build_files/cmake/macros.cmake
4+
@@ -414,7 +414,7 @@ function(blender_add_lib__impl
5+
6+
# message(STATUS "Configuring library ${name}")
7+
8+
- add_library(${name} ${sources})
9+
+ add_library(${name} STATIC ${sources})
10+
11+
# On windows vcpkg goes out of its way to make its libs the preferred
12+
# libs, and needs to be explicitly be told not to do that.
13+
diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
14+
--- a/source/blender/nodes/CMakeLists.txt
15+
+++ b/source/blender/nodes/CMakeLists.txt
16+
@@ -31,7 +31,7 @@ function(add_node_discovery
17+
${DISCOVER_NODES_PATH}
18+
)
19+
set_source_files_properties(${output_file} PROPERTIES GENERATED TRUE)
20+
- add_library(${lib_name} ${output_file})
21+
+ add_library(${lib_name} STATIC ${output_file})
22+
endfunction()
23+
24+
add_subdirectory(composite)
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
diff --git a/build_files/cmake/Modules/FindVulkan.cmake b/build_files/cmake/Modules/FindVulkan.cmake
2+
index 26ef6d5..26fd4fe 100644
3+
--- a/build_files/cmake/Modules/FindVulkan.cmake
4+
+++ b/build_files/cmake/Modules/FindVulkan.cmake
5+
@@ -35,14 +35,8 @@ find_path(VULKAN_INCLUDE_DIR
6+
include
7+
)
8+
9+
-find_library(VULKAN_LIBRARY
10+
- NAMES
11+
- vulkan
12+
- HINTS
13+
- ${_vulkan_SEARCH_DIRS}
14+
- PATH_SUFFIXES
15+
- lib
16+
-)
17+
+include("${CMAKE_ROOT}/Modules/FindVulkan.cmake")
18+
+set(VULKAN_LIBRARY ${Vulkan_LIBRARY})
19+
20+
# handle the QUIETLY and REQUIRED arguments and set VULKAN_FOUND to TRUE if
21+
# all listed variables are TRUE
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
diff --git a/build_files/cmake/platform/platform_apple.cmake b/build_files/cmake/platform/platform_apple.cmake
2+
index 763d32e9..6b957da8 100644
3+
--- a/build_files/cmake/platform/platform_apple.cmake
4+
+++ b/build_files/cmake/platform/platform_apple.cmake
5+
@@ -26,7 +26,6 @@ endfunction()
6+
# Find system provided libraries.
7+
8+
# Find system ZLIB, not the pre-compiled one supplied with OpenCollada.
9+
-set(ZLIB_ROOT /usr)
10+
find_package(ZLIB REQUIRED)
11+
find_package(BZip2 REQUIRED)
12+
list(APPEND ZLIB_LIBRARIES ${BZIP2_LIBRARIES})
13+
@@ -56,4 +56,5 @@ if(NOT DEFINED LIBDIR)
14+
endif()
15+
+if(0)
16+
if(NOT EXISTS "${LIBDIR}/.git")
17+
message(FATAL_ERROR "Mac OSX requires pre-compiled libs at: '${LIBDIR}'")
18+
endif()
19+
@@ -62,5 +63,6 @@ if(FIRST_RUN)
20+
endif()
21+
22+
+endif()
23+
# Avoid searching for headers since this would otherwise override our lib
24+
# directory as well as PYTHON_ROOT_DIR.
25+
set(CMAKE_FIND_FRAMEWORK NEVER)
26+
@@ -146,10 +148,13 @@ endif()
27+
28+
# FreeType compiled with Brotli compression for woff2.
29+
find_package(Freetype REQUIRED)
30+
+find_package(Brotli REQUIRED)
31+
+if(0)
32+
set(BROTLI_LIBRARIES
33+
${LIBDIR}/brotli/lib/libbrotlicommon-static.a
34+
${LIBDIR}/brotli/lib/libbrotlidec-static.a
35+
)
36+
+endif()
37+
38+
if(WITH_HARFBUZZ)
39+
find_package(Harfbuzz)
40+
@@ -232,16 +237,16 @@ if(WITH_SDL)
41+
endif()
42+
endif()
43+
44+
-set(EPOXY_ROOT_DIR ${LIBDIR}/epoxy)
45+
+set(EPOXY_ROOT_DIR ${CURRENT_INSTALLED_DIR})
46+
find_package(Epoxy REQUIRED)
47+
48+
-set(PNG_ROOT ${LIBDIR}/png)
49+
+# set(PNG_ROOT ${LIBDIR}/png)
50+
find_package(PNG REQUIRED)
51+
52+
-set(JPEG_ROOT ${LIBDIR}/jpeg)
53+
+# set(JPEG_ROOT ${LIBDIR}/jpeg)
54+
find_package(JPEG REQUIRED)
55+
56+
-set(TIFF_ROOT ${LIBDIR}/tiff)
57+
+# set(TIFF_ROOT ${LIBDIR}/tiff)
58+
find_package(TIFF REQUIRED)
59+
60+
if(WITH_IMAGE_WEBP)
61+
@@ -292,6 +297,7 @@ if(WITH_PUGIXML)
62+
find_package(PugiXML REQUIRED)
63+
endif()
64+
65+
+set(OPENCOLORIO_ROOT_DIR ${CURRENT_INSTALLED_DIR})
66+
find_package(OpenImageIO REQUIRED)
67+
add_bundled_libraries(openimageio/lib)
68+
69+
@@ -391,7 +397,7 @@ if(WITH_CYCLES AND WITH_CYCLES_PATH_GUIDING)
70+
endif()
71+
endif()
72+
73+
-set(ZSTD_ROOT_DIR ${LIBDIR}/zstd)
74+
+set(ZSTD_ROOT_DIR ${CURRENT_INSTALLED_DIR})
75+
find_package(Zstd REQUIRED)
76+
77+
if(EXISTS ${LIBDIR})
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
diff --git a/build_files/cmake/Modules/FindOpenImageIO.cmake b/build_files/cmake/Modules/FindOpenImageIO.cmake
2+
index ac74db028d..b4c74357c8 100644
3+
--- a/build_files/cmake/Modules/FindOpenImageIO.cmake
4+
+++ b/build_files/cmake/Modules/FindOpenImageIO.cmake
5+
@@ -18,6 +18,25 @@
6+
# OPENIMAGEIO_LIBRARY, where to find the OpenImageIO library.
7+
8+
# If `OPENIMAGEIO_ROOT_DIR` was defined in the environment, use it.
9+
+block(SCOPE_FOR VARIABLES)
10+
+ find_package(OpenImageIO CONFIG REQUIRED)
11+
+ set(_openimageio_libraries OpenImageIO::OpenImageIO)
12+
+ if(TARGET OpenImageIO::OpenImageIO_Util)
13+
+ list(APPEND _openimageio_libraries OpenImageIO::OpenImageIO_Util)
14+
+ endif()
15+
+ get_target_property(_openimageio_include_dirs OpenImageIO::OpenImageIO INTERFACE_INCLUDE_DIRECTORIES)
16+
+ set(OpenImageIO_FOUND TRUE PARENT_SCOPE)
17+
+ set(OPENIMAGEIO_FOUND TRUE PARENT_SCOPE)
18+
+ set(OPENIMAGEIO_LIBRARIES "${_openimageio_libraries}" PARENT_SCOPE)
19+
+ set(OPENIMAGEIO_INCLUDE_DIRS "${_openimageio_include_dirs}" PARENT_SCOPE)
20+
+ set(OPENIMAGEIO_INCLUDE_DIR "${_openimageio_include_dirs}" PARENT_SCOPE)
21+
+ set(OPENIMAGEIO_PUGIXML_FOUND TRUE PARENT_SCOPE)
22+
+ if(TARGET OpenImageIO::oiiotool)
23+
+ set(OPENIMAGEIO_TOOL OpenImageIO::oiiotool PARENT_SCOPE)
24+
+ endif()
25+
+endblock()
26+
+
27+
+if(0)
28+
if(DEFINED OPENIMAGEIO_ROOT_DIR)
29+
# Pass.
30+
elseif(DEFINED ENV{OPENIMAGEIO_ROOT_DIR})
31+
@@ -111,6 +129,8 @@ else()
32+
set(OPENIMAGEIO_PUGIXML_FOUND FALSE)
33+
endif()
34+
35+
+endif()
36+
+
37+
mark_as_advanced(
38+
OPENIMAGEIO_INCLUDE_DIR
39+
OPENIMAGEIO_LIBRARY
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
diff --git a/build_files/cmake/platform/platform_win32.cmake b/build_files/cmake/platform/platform_win32.cmake
2+
index ae75fcd2..96600f7f 100644
3+
--- a/build_files/cmake/platform/platform_win32.cmake
4+
+++ b/build_files/cmake/platform/platform_win32.cmake
5+
@@ -349,12 +349,14 @@ else()
6+
message(STATUS "Using pre-compiled LIBDIR: ${LIBDIR}")
7+
endif()
8+
endif()
9+
+if(0)
10+
if(NOT EXISTS "${LIBDIR}/.git")
11+
message(FATAL_ERROR
12+
"\n\nWindows requires pre-compiled libs at: '${LIBDIR}'. "
13+
"Please run `make update` in the blender source folder to obtain them."
14+
)
15+
endif()
16+
+endif()
17+
18+
include(platform_old_libs_update)
19+
20+
@@ -397,11 +399,13 @@ if(WITH_PUGIXML)
21+
set(PUGIXML_INCLUDE_DIR ${LIBDIR}/pugixml/include)
22+
endif()
23+
24+
+if(0)
25+
set(ZLIB_INCLUDE_DIRS ${LIBDIR}/zlib/include)
26+
set(ZLIB_LIBRARIES ${LIBDIR}/zlib/lib/libz_st.lib)
27+
set(ZLIB_INCLUDE_DIR ${LIBDIR}/zlib/include)
28+
set(ZLIB_LIBRARY ${LIBDIR}/zlib/lib/libz_st.lib)
29+
set(ZLIB_DIR ${LIBDIR}/zlib)
30+
+endif()
31+
32+
windows_find_package(ZLIB) # We want to find before finding things that depend on it like PNG.
33+
windows_find_package(PNG)
34+
@@ -422,13 +426,19 @@ if(NOT JPEG_FOUND)
35+
set(JPEG_LIBRARIES ${LIBDIR}/jpeg/lib/libjpeg.lib)
36+
endif()
37+
38+
-set(EPOXY_ROOT_DIR ${LIBDIR}/epoxy)
39+
+# set(EPOXY_ROOT_DIR ${LIBDIR}/epoxy)
40+
windows_find_package(Epoxy REQUIRED)
41+
+if(0)
42+
if(NOT EPOXY_FOUND)
43+
set(Epoxy_INCLUDE_DIRS ${LIBDIR}/epoxy/include)
44+
set(Epoxy_LIBRARIES ${LIBDIR}/epoxy/lib/epoxy.lib)
45+
endif()
46+
+endif()
47+
48+
+find_package(PThreads4W REQUIRED)
49+
+set(PTHREADS_INCLUDE_DIRS ${PThreads4W_INCLUDE_DIR})
50+
+set(PTHREADS_LIBRARIES PThreads4W::PThreads4W)
51+
+if(0)
52+
set(PTHREADS_INCLUDE_DIRS ${LIBDIR}/pthreads/include)
53+
set(PTHREADS_LIBRARIES ${LIBDIR}/pthreads/lib/pthreadVC3.lib)
54+
55+
@@ -444,6 +454,7 @@ set(BROTLI_LIBRARIES
56+
${LIBDIR}/brotli/lib/brotlidec-static.lib
57+
${LIBDIR}/brotli/lib/brotlicommon-static.lib
58+
)
59+
+endif()
60+
61+
windows_find_package(Freetype REQUIRED)
62+
63+
@@ -1337,8 +1348,11 @@ if(WITH_CYCLES AND WITH_CYCLES_PATH_GUIDING)
64+
endif()
65+
endif()
66+
67+
+find_package(Zstd REQUIRED)
68+
+if(0)
69+
set(ZSTD_INCLUDE_DIRS ${LIBDIR}/zstd/include)
70+
set(ZSTD_LIBRARIES ${LIBDIR}/zstd/lib/zstd_static.lib)
71+
+endif()
72+
73+
if(WITH_CYCLES AND (WITH_CYCLES_DEVICE_ONEAPI OR (WITH_CYCLES_EMBREE AND EMBREE_SYCL_SUPPORT)))
74+
set(LEVEL_ZERO_ROOT_DIR ${LIBDIR}/level_zero)
75+
@@ -1380,10 +1394,15 @@ endif()
76+
get_filename_component(_msvc_path ${CMAKE_C_COMPILER} DIRECTORY)
77+
# Environment variables to run precompiled executables that needed libraries.
78+
list(JOIN PLATFORM_BUNDLED_LIBRARY_DIRS ";" _library_paths)
79+
-set(PLATFORM_ENV_BUILD_DIRS "${_msvc_path}\;${LIBDIR}/epoxy/bin\;${LIBDIR}/tbb/bin\;${LIBDIR}/OpenImageIO/bin\;${LIBDIR}/boost/lib\;${LIBDIR}/openexr/bin\;${LIBDIR}/imath/bin\;${LIBDIR}/shaderc/bin\;${LIBDIR}/opencolorio/bin\;${PATH}")
80+
+set(_vcpkg_runtime_path "")
81+
+if(DEFINED VCPKG_BLENDER_RUNTIME_DIR)
82+
+ set(_vcpkg_runtime_path "${VCPKG_BLENDER_RUNTIME_DIR}\;")
83+
+endif()
84+
+set(PLATFORM_ENV_BUILD_DIRS "${_msvc_path}\;${LIBDIR}/epoxy/bin\;${LIBDIR}/tbb/bin\;${LIBDIR}/OpenImageIO/bin\;${LIBDIR}/boost/lib\;${LIBDIR}/openexr/bin\;${LIBDIR}/imath/bin\;${LIBDIR}/shaderc/bin\;${LIBDIR}/opencolorio/bin\;${_vcpkg_runtime_path}${PATH}")
85+
set(PLATFORM_ENV_BUILD "PATH=${PLATFORM_ENV_BUILD_DIRS}")
86+
# Install needs the additional folders from PLATFORM_ENV_BUILD_DIRS as well, as tools like:
87+
# `idiff` and `abcls` use the release mode dlls.
88+
set(PLATFORM_ENV_INSTALL "PATH=${CMAKE_INSTALL_PREFIX_WITH_CONFIG}/blender.shared/\;${PLATFORM_ENV_BUILD_DIRS}\;$ENV{PATH}")
89+
+unset(_vcpkg_runtime_path)
90+
unset(_library_paths)
91+
unset(_msvc_path)

0 commit comments

Comments
 (0)