Open Greendogo opened 5 months ago
@ilya-lavrenov @RaguzovaTatyana
I know you just added support for 2024.0.0, but I was hoping there could be an addition of support for the THREADING cmake flag for OpenVino such that everything can be compiled statically.
@Greendogo Could you please maybe send a PR to CCI with your changes and we can see issues on CI? OpenVINO does not advocate for OMP for a while and it can be broken
@Greendogo Could you please maybe send a PR to CCI with your changes and we can see issues on CI? OpenVINO does not advocate for OMP for a while and it can be broken
Sure, I've added one here; https://github.com/conan-io/conan-center-index/pull/23068
Description
I'm trying to build OpenVINO as a static library along with any other dependencies due to the nature of my project. Unfortunately, TBB cannot be built statically, so I hope to use THREADING=OMP instead.
However, when doing so, every time I get to the cmake config step I get an error which brings this process to a standstill.
I've cloned the OpenVINO/2024.0.0 recipe from conan-center-index and altered it to support this. I believe I've done it mostly correctly, But I'm not an expert.
Here in the description I've put the recipe conanfile for OpenVino. In the "Steps to Reproduce" I've included all of the other files I've been using. In logs, you can see the config error.
Click to expand altered OpenVino recipe conanfile.py
``` from conan import ConanFile from conan.errors import ConanException, ConanInvalidConfiguration from conan.tools.build import check_min_cppstd from conan.tools.scm import Version from conan.tools.cmake import CMake, CMakeToolchain, CMakeDeps, cmake_layout from conan.tools.env import VirtualBuildEnv, VirtualRunEnv from conan.tools.files import apply_conandata_patches, copy, export_conandata_patches, get, rmdir import functools import os import yaml required_conan_version = ">=1.60.0 <2.0 || >=2.0.8" class OpenvinoConan(ConanFile): name = "openvino" # Optional metadata license = "Apache-2.0" homepage = "https://github.com/openvinotoolkit/openvino" url = "https://github.com/conan-io/conan-center-index" description = "Open Visual Inference And Optimization toolkit for AI inference" topics = ("nlp", "natural-language-processing", "ai", "computer-vision", "deep-learning", "transformers", "inference", "speech-recognition", "yolo", "performance-boost", "diffusion-models", "recommendation-system", "stable-diffusion", "generative-ai", "llm-inference", "optimize-ai", "deploy-ai") package_id_non_embed_mode = "patch_mode" package_type = "library" short_paths = True no_copy_source = True # Binary configuration settings = "os", "arch", "compiler", "build_type" options = { "shared": [True, False], "fPIC": [True, False], # HW plugins "enable_cpu": [True, False], "enable_gpu": [True, False], # SW plugins "enable_auto": [True, False], "enable_hetero": [True, False], "enable_auto_batch": [True, False], # Frontends "enable_ir_frontend": [True, False], "enable_onnx_frontend": [True, False], "enable_tf_frontend": [True, False], "enable_tf_lite_frontend": [True, False], "enable_paddle_frontend": [True, False], "enable_pytorch_frontend": [True, False], # Threading "threading": ["tbb", "omp"] } default_options = { "shared": False, "fPIC": True, # HW plugins "enable_cpu": True, "enable_gpu": True, # SW plugins "enable_auto": True, "enable_hetero": True, "enable_auto_batch": True, # Frontends "enable_ir_frontend": True, "enable_onnx_frontend": True, "enable_tf_frontend": True, "enable_tf_lite_frontend": True, "enable_paddle_frontend": True, "enable_pytorch_frontend": True, # Threading "threading": "omp" } @property def _dependencies_filename(self): return f"dependencies-{self.version}.yml" @property @functools.lru_cache(1) def _dependencies_versions(self): dependencies_filepath = os.path.join(self.recipe_folder, "dependencies", self._dependencies_filename) if not os.path.isfile(dependencies_filepath): raise ConanException(f"Cannot find {dependencies_filepath}") cached_dependencies = yaml.safe_load(open(dependencies_filepath, encoding='UTF-8')) return cached_dependencies def _require(self, dependency): if dependency not in self._dependencies_versions: raise ConanException(f"{dependency} is missing in {self._dependencies_filename}") return f"{dependency}/{self._dependencies_versions[dependency]}" @property def _protobuf_required(self): return self.options.enable_tf_frontend or self.options.enable_onnx_frontend or self.options.enable_paddle_frontend @property def _target_arm(self): return "arm" in self.settings.arch @property def _target_x86_64(self): return self.settings.arch == "x86_64" @property def _gna_option_available(self): return self.settings.os in ["Linux", "Windows"] and self._target_x86_64 and Version(self.version) < "2024.0.0" @property def _gpu_option_available(self): return self.settings.os != "Macos" and self._target_x86_64 @property def _preprocessing_available(self): return "ade" in self._dependencies_versions @property def _compilers_minimum_version(self): return { "gcc": "7", "clang": "9", "apple-clang": "11", "Visual Studio": "16", "msvc": "192", } @property def _is_legacy_one_profile(self): return not hasattr(self, "settings_build") def source(self): get(self, **self.conan_data["sources"][self.version]["openvino"], strip_root=True) get(self, **self.conan_data["sources"][self.version]["onednn_cpu"], strip_root=True, destination=f"{self.source_folder}/src/plugins/intel_cpu/thirdparty/onednn") get(self, **self.conan_data["sources"][self.version]["mlas"], strip_root=True, destination=f"{self.source_folder}/src/plugins/intel_cpu/thirdparty/mlas") get(self, **self.conan_data["sources"][self.version]["arm_compute"], strip_root=True, destination=f"{self.source_folder}/src/plugins/intel_cpu/thirdparty/ComputeLibrary") get(self, **self.conan_data["sources"][self.version]["onednn_gpu"], strip_root=True, destination=f"{self.source_folder}/src/plugins/intel_gpu/thirdparty/onednn_gpu") rmdir(self, f"{self.source_folder}/src/plugins/intel_gpu/thirdparty/rapidjson") apply_conandata_patches(self) def export(self): copy(self, f"dependencies/{self._dependencies_filename}", self.recipe_folder, self.export_folder) def export_sources(self): export_conandata_patches(self) def config_options(self): if self.settings.os == "Windows": del self.options.fPIC if not self._gpu_option_available: del self.options.enable_gpu def configure(self): if self.options.shared: self.options.rm_safe("fPIC") if self._protobuf_required: # even though OpenVINO can work with dynamic protobuf, it's still recommended to use static self.options["protobuf"].shared = False def build_requirements(self): if self._target_arm: self.tool_requires("scons/4.3.0") if not self._is_legacy_one_profile: if self._protobuf_required: self.tool_requires("protobuf/Test Project Files
Click to expand src/main.cpp
``` #include "openvino/openvino.hpp" #includeClick to expand cmakelists.txt
``` cmake_minimum_required(VERSION 3.15) project(MyOpenVINOProject) find_package(openvino CONFIG REQUIRED) add_executable(${PROJECT_NAME} src/main.cpp) target_link_libraries(${PROJECT_NAME} PRIVATE openvino::openvino) target_include_directories(${PROJECT_NAME} PRIVATE ${OpenVINO_INCLUDE_DIRS}) ```Click to expand conanfile.py
``` from conan import ConanFile from conan.tools.cmake import cmake_layout, CMakeToolchain, CMake class MyOpenVINOProject(ConanFile): name = "MyOpenVINOProject" version = "1.0" settings = "os", "compiler", "build_type", "arch" requires = "openvino/2024.0.0" generators = "CMakeDeps", "CMakeToolchain" def configure(self): if self.settings.compiler == "msvc": self.settings.compiler.runtime = "static" self.settings.compiler.version = "193" self.options["openvino"].shared = False self.options["openvino"].threading = "omp" def layout(self): cmake_layout(self) def build(self): cmake = CMake(self) cmake.configure() cmake.build() def package(self): cmake = CMake(self) cmake.install() ```Package and Environment Details
Conan profile
[settings] arch=x86_64 build_type=Release compiler=msvc compiler.cppstd=17 compiler.runtime=static compiler.version=193 os=Windows
Steps to reproduce
I set up the conan-center clone of OpenVino's recipe with:
Test Project directory: