diff --git a/Makefile b/Makefile
index 2edb6c197..f4b9da50f 100644
--- a/Makefile
+++ b/Makefile
@@ -27,6 +27,7 @@ WITH_BENCHMARK ?=
WITH_ASAN ?=
WITH_SVS ?=
WITH_CARDINAL ?=
+CARDINAL_VERSION_FORCE_CHECKOUT ?=
WITH_DEBUG ?=
CONAN_PROFILE ?=
@@ -35,7 +36,7 @@ CONAN_PROFILE ?=
# variables such as WITH_ASAN to every sub-process, which causes the custom
# folly recipe to pick up $ENV{WITH_ASAN} and compile folly itself with
# -fsanitize=address — breaking the build on GCC.
-unexport WITH_GPU WITH_UT WITH_BENCHMARK WITH_ASAN WITH_CARDINAL WITH_DEBUG
+unexport WITH_GPU WITH_UT WITH_BENCHMARK WITH_ASAN WITH_CARDINAL CARDINAL_VERSION_FORCE_CHECKOUT WITH_DEBUG
# ---------- Derived settings ----------
ifdef WITH_DEBUG
@@ -92,6 +93,16 @@ ifdef WITH_CARDINAL
CONAN_SETTINGS += -o \&:with_cardinal=True
endif
+ifneq ($(CARDINAL_VERSION_FORCE_CHECKOUT),)
+ ifneq ($(filter True true ON on 1,$(CARDINAL_VERSION_FORCE_CHECKOUT)),)
+ CONAN_SETTINGS += -o \&:cardinal_version_force_checkout=True
+ else ifneq ($(filter False false OFF off 0,$(CARDINAL_VERSION_FORCE_CHECKOUT)),)
+ CONAN_SETTINGS += -o \&:cardinal_version_force_checkout=False
+ else
+ $(error CARDINAL_VERSION_FORCE_CHECKOUT must be True/False, ON/OFF, or 1/0)
+ endif
+endif
+
ifdef CONAN_PROFILE
CONAN_SETTINGS += -pr $(CONAN_PROFILE)
endif
@@ -160,6 +171,7 @@ help: ## Show available targets
@echo " WITH_ASAN=True Enable AddressSanitizer"
@echo " WITH_SVS=True Enable SVS (Intel Scalable Vector Search, x86 only)"
@echo " WITH_CARDINAL=True Enable Cardinal build"
+ @echo " CARDINAL_VERSION_FORCE_CHECKOUT=True Force Cardinal checkout to configured version"
@echo " WITH_DEBUG=True Debug build (default: Release)"
@echo " CONAN_PROFILE=
Use a custom Conan profile (e.g. clang, gcc-15)"
@echo " LIBCXX= Override compiler.libcxx (auto-detected from OS)"
diff --git a/cmake/libs/cardinal/v1/CMakeLists.txt b/cmake/libs/cardinal/v1/CMakeLists.txt
index c59aa4fae..462a192ca 100644
--- a/cmake/libs/cardinal/v1/CMakeLists.txt
+++ b/cmake/libs/cardinal/v1/CMakeLists.txt
@@ -3,7 +3,7 @@ project(knowhere CXX C)
# Use short SHA1 as version
# v2.5 tag is used for cardinal v1
-set(CARDINAL_VERSION v2.5.105)
+set(CARDINAL_VERSION v1_blas)
set(CARDINAL_REPO_URL "https://github.com/zilliztech/cardinal.git")
set(CARDINAL_ROOT "${KNOWHERE_THRID_ROOT}/cardinalv1")
diff --git a/cmake/libs/cardinal/v2/CMakeLists.txt b/cmake/libs/cardinal/v2/CMakeLists.txt
index c1a8f8c38..76dad7da7 100644
--- a/cmake/libs/cardinal/v2/CMakeLists.txt
+++ b/cmake/libs/cardinal/v2/CMakeLists.txt
@@ -3,7 +3,7 @@ project(knowhere CXX C)
# Use short SHA1 as version
# v2.6 tag is used for cardinal v2
-set(CARDINAL_VERSION v3.0.1)
+set(CARDINAL_VERSION recipe)
set(CARDINAL_REPO_URL "https://github.com/zilliztech/cardinal.git")
set(CARDINAL_ROOT "${KNOWHERE_THRID_ROOT}/cardinalv2")
diff --git a/conanfile.py b/conanfile.py
index 48fe8c081..7adfc23ab 100644
--- a/conanfile.py
+++ b/conanfile.py
@@ -28,6 +28,7 @@ class KnowhereConan(ConanFile):
"with_diskann": [True, False],
"with_svs": [True, False],
"with_cardinal": [True, False],
+ "cardinal_version_force_checkout": [True, False],
"with_profiler": [True, False],
"with_ut": [True, False],
"with_benchmark": [True, False],
@@ -44,6 +45,7 @@ class KnowhereConan(ConanFile):
"with_diskann": False,
"with_svs": False,
"with_cardinal": False,
+ "cardinal_version_force_checkout": False,
"with_profiler": False,
"with_ut": False,
"glog/*:shared": True,
@@ -59,6 +61,7 @@ class KnowhereConan(ConanFile):
"openssl/*:no_apps": True,
"gflags/*:shared": True,
"fmt/*:header_only": False,
+ "openblas/*:dynamic_arch": True,
"with_faiss_tests": False,
"opentelemetry-cpp/*:with_stl": True,
"libcurl/*:with_ssl": False,
@@ -107,7 +110,7 @@ def config_options(self):
def configure(self):
if self.options.shared:
self.options.rm_safe("fPIC")
- if self.settings.os in ["Linux", "Android"] and str(self.settings.arch) in self._openblas_dynamic_arches:
+ if self.settings.os == "Linux" and str(self.settings.arch) in self._openblas_dynamic_arches:
self.options["openblas"].dynamic_arch = True
def requirements(self):
@@ -136,11 +139,9 @@ def requirements(self):
self.requires("xxhash/0.8.3#caa6d0af1b951c247922e38fbcebdbe6")
if self.settings.os == "Linux":
self.requires("openblas/0.3.30")
- if self.settings.os == "Android":
- self.requires("openblas/0.3.30")
if not self.options.with_light:
self.requires("opentelemetry-cpp/1.23.0@milvus/dev#11bc565ec6e82910ae8f7471da756720")
- if self.settings.os not in ["Macos", "Android"]:
+ if self.settings.os != "Macos":
self.requires("libunwind/1.8.1#748a981ace010b80163a08867b732e71")
if self.options.with_ut:
self.requires("catch2/3.7.1")
@@ -210,6 +211,7 @@ def generate(self):
tc.variables["WITH_DISKANN"] = self.options.with_diskann
tc.variables["WITH_SVS"] = self.options.with_svs
tc.variables["WITH_CARDINAL"] = self.options.with_cardinal
+ tc.variables["CARDINAL_VERSION_FORCE_CHECKOUT"] = self.options.cardinal_version_force_checkout
tc.variables["WITH_CUVS"] = self.options.with_cuvs
tc.variables["WITH_PROFILER"] = self.options.with_profiler
tc.variables["WITH_UT"] = self.options.with_ut