# (c) 2025 by Stephan Menzel # Licensed under the Apache License, Version 2.0. # See attached file LICENSE for full details from pathlib import Path from build_functions.build_utils import print_banner from common.azure import write_package_version_batch from common.cmake import cmake_build_install from common.git_helpers import clone_git_tag import common.settings from package.package_info import get_package_info def build_opencv(prefix: Path | str, sbom: dict): print_banner("Building OpenCV") package_info = get_package_info("opencv") package_info.add_to_sbom(sbom) eigen_install_path = package_info.dependency_path("eigen") zlib_install_path = package_info.dependency_path("zlib") opencv_cmake_args = [ # Those two undocumented lines are necessary to make the install target use the correct # subdir for the libraries # ("OpenCV_ARCH:STRING", "x64"), # ("OpenCV_RUNTIME:STRING", "vc17"), ("BUILD_SHARED_LIBS:BOOL", "OFF"), ("BUILD_TESTS:BOOL", "OFF"), ("BUILD_PERF_TESTS:BOOL", "OFF"), ("BUILD_WITH_STATIC_CRT:BOOL", "OFF"), ("BUILD_OPENJPEG:BOOL", "OFF"), ("BUILD_IPP_IW:BOOL", "OFF"), ("BUILD_ITT:BOOL", "OFF"), ("BUILD_JASPER:BOOL", "OFF"), ("BUILD_JPEG:BOOL", "OFF"), ("BUILD_ITT:BOOL", "OFF"), ("BUILD_JAVA:BOOL", "OFF"), ("BUILD_PNG:BOOL", "OFF"), ("BUILD_PROTOBUF:BOOL", "OFF"), ("BUILD_TIFF:BOOL", "OFF"), ("BUILD_WEBP:BOOL", "OFF"), ("BUILD_VTK:BOOL", "OFF"), ("BUILD_ZLIB:BOOL", "OFF"), ("BUILD_opencv_apps:BOOL", "OFF"), ("BUILD_opencv_calib3d:BOOL", "OFF"), ("BUILD_opencv_dnn:BOOL", "OFF"), ("BUILD_opencv_features2d:BOOL", "OFF"), ("BUILD_opencv_flann:BOOL", "OFF"), ("BUILD_opencv_imgcodecs:BOOL", "ON"), ("BUILD_opencv_java_bindings_generator:BOOL", "OFF"), ("BUILD_opencv_js_bindings_generator:BOOL", "OFF"), ("BUILD_opencv_objc_bindings_generator:BOOL", "OFF"), ("BUILD_opencv_objdetect:BOOL", "OFF"), ("BUILD_opencv_ml:BOOL", "OFF"), ("BUILD_opencv_photo:BOOL", "OFF"), ("BUILD_opencv_python3:BOOL", "OFF"), ("BUILD_opencv_python_bindings_generator:BOOL", "OFF"), ("BUILD_opencv_python_tests:BOOL", "OFF"), ("DNN_ENABLE_PLUGINS:BOOL", "OFF"), ("HIGHGUI_ENABLE_PLUGINS:BOOL", "OFF"), ("WITH_ADE:BOOL", "OFF"), ("WITH_DIRECTML:BOOL", "OFF"), ("WITH_DIRECTX:BOOL", "OFF"), ("WITH_DSHOW:BOOL", "OFF"), ("WITH_EIGEN:BOOL", "ON"), ("Eigen3_DIR:PATH", str(eigen_install_path / "share" / "eigen3" / "cmake")), ("WITH_FLATBUFFERS:BOOL", "OFF"), ("WITH_WITH_GSTREAMER", "OFF"), ("WITH_IMGCODEC_HDR:BOOL", "OFF"), ("WITH_IMGCODEC_PFM:BOOL", "OFF"), ("WITH_IMGCODEC_PXM:BOOL", "OFF"), ("WITH_IMGCODEC_SUNRASTER:BOOL", "OFF"), ("WITH_IPP:BOOL", "OFF"), ("WITH_ITT:BOOL", "OFF"), ("WITH_JASPER:BOOL", "OFF"), ("WITH_JPEG:BOOL", "OFF"), ("WITH_LAPACK:BOOL", "OFF"), ("WITH_MSMF:BOOL", "OFF"), ("WITH_MSMF_DXVA:BOOL", "OFF"), ("WITH_OBSENSOR:BOOL", "OFF"), ("WITH_OPENCL:BOOL", "OFF"), ("WITH_OPENCLAMDBLAS:BOOL", "OFF"), ("WITH_OPENCLAMDFFT:BOOL", "OFF"), ("WITH_OPENEXR:BOOL", "OFF"), ("WITH_OPENJPEG:BOOL", "OFF"), ("WITH_PNG:BOOL", "OFF"), ("WITH_PROTOBUF:BOOL", "OFF"), ("WITH_TIFF:BOOL", "OFF"), ("WITH_WEBP:BOOL", "OFF"), ("WITH_WIN32UI:BOOL", "OFF"), ("WITH_VTK:BOOL", "OFF"), ("ZLIB_ROOT:PATH", str(zlib_install_path)), ("ZLIB_USE_STATIC_LIBS:BOOL", "ON"), # doesn't appear to do its job ("ZLIB_LIBRARY_RELEASE:FILEPATH", str(zlib_install_path / "lib" / common.settings.zlib_static_lib_name)), ("ZLIB_LIBRARY_DEBUG:FILEPATH", str(zlib_install_path / "lib" / common.settings.zlib_static_lib_name)) ] opencv_dir = clone_git_tag(package_info, recursive=False) install_dir = cmake_build_install(opencv_dir, package_info, cmake_args=opencv_cmake_args) write_package_version_batch(package_info.version) return install_dir