fix: misc fix for Windows(BUILD_SHARED_LIBS, CI) (#296)
This commit is contained in:
parent
7af6a31ae8
commit
ca4b893755
|
|
@ -4,20 +4,21 @@ on:
|
|||
workflow_call:
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
# Windows build and test matrix
|
||||
build-and-test-windows:
|
||||
name: Build & Test (${{ matrix.platform }})
|
||||
runs-on: ${{ matrix.os }}
|
||||
runs-on: ${{ matrix.platform }}
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
include:
|
||||
- os: windows-2022
|
||||
platform: windows-2022-x64
|
||||
- os: windows-2025
|
||||
platform: windows-2025-x64
|
||||
- platform: windows-2022
|
||||
- platform: windows-2025
|
||||
|
||||
steps:
|
||||
- name: Show env info
|
||||
|
|
|
|||
|
|
@ -207,7 +207,7 @@ jobs:
|
|||
$PSNativeCommandUseErrorActionPreference = $false
|
||||
$found = $false
|
||||
for ($i = 1; $i -le 30; $i++) {
|
||||
python -m pip install -f @indexArgs --dry-run "zvec==$version" 1>$null 2>$null
|
||||
python -m pip install --force-reinstall @indexArgs --dry-run "zvec==$version" 1>$null 2>$null
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Host "Version $version is available."
|
||||
$found = $true
|
||||
|
|
@ -225,5 +225,5 @@ jobs:
|
|||
python -m venv test_env
|
||||
$venvPython = "test_env/Scripts/python.exe"
|
||||
& $venvPython -m pip install --upgrade pip
|
||||
& $venvPython -m pip install @indexArgs "zvec==$version"
|
||||
& $venvPython -m pip install --force-reinstall @indexArgs "zvec==$version"
|
||||
& $venvPython -c "import zvec; print('Import OK:', zvec.__version__)"
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ set(CC_CXX_STANDARD 17)
|
|||
|
||||
if(MSVC)
|
||||
set(INTTYPES_FORMAT VC7)
|
||||
add_compile_options(/FS) # handle .pdb
|
||||
add_compile_options(/FS) # handle .pdb concurrency
|
||||
add_compile_options(/EHsc) # def c++ exception behavior
|
||||
add_compile_options(/Zc:preprocessor)
|
||||
add_compile_options(/Zc:preprocessor /Zc:__cplusplus)
|
||||
add_compile_options(/we4716) # -Werror=return-type
|
||||
|
||||
###### reduce output length to make vibe coding work better :) should be removed or solved later
|
||||
|
|
@ -54,7 +54,6 @@ endif()
|
|||
|
||||
include_directories(${PROJECT_ROOT_DIR}/src/include)
|
||||
include_directories(${PROJECT_ROOT_DIR}/src)
|
||||
include_directories(${PROJECT_ROOT_DIR})
|
||||
|
||||
option(BUILD_PYTHON_BINDINGS "Build Python bindings using pybind11" OFF)
|
||||
message(STATUS "BUILD_PYTHON_BINDINGS:${BUILD_PYTHON_BINDINGS}")
|
||||
|
|
@ -130,14 +129,4 @@ if(BUILD_PYTHON_BINDINGS)
|
|||
|
||||
message(STATUS "Zvec install path: ${ZVEC_PY_INSTALL_DIR}")
|
||||
install(TARGETS _zvec LIBRARY DESTINATION ${ZVEC_PY_INSTALL_DIR})
|
||||
|
||||
if(MSVC)
|
||||
install(FILES
|
||||
$<TARGET_FILE:glog>
|
||||
$<TARGET_FILE:gflags>
|
||||
$<TARGET_FILE:roaring>
|
||||
$<TARGET_FILE:libprotobuf>
|
||||
DESTINATION ${ZVEC_PY_INSTALL_DIR}
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -392,7 +392,14 @@ if(NOT MSVC)
|
|||
)
|
||||
unset(_COMPILER_FLAGS)
|
||||
else()
|
||||
# Replace the default compiling flags
|
||||
option(ZVEC_USE_STATIC_CRT "Use static CRT (/MT) instead of dynamic CRT (/MD), default=ON" ON)
|
||||
|
||||
if(ZVEC_USE_STATIC_CRT)
|
||||
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>" CACHE STRING "" FORCE)
|
||||
else()
|
||||
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreadedDLL$<$<CONFIG:Debug>:Debug>" CACHE STRING "" FORCE)
|
||||
endif()
|
||||
|
||||
set(
|
||||
_COMPILER_FLAGS
|
||||
CMAKE_CXX_FLAGS
|
||||
|
|
@ -406,14 +413,21 @@ else()
|
|||
CMAKE_C_FLAGS_RELWITHDEBINFO
|
||||
CMAKE_C_FLAGS_MINSIZEREL
|
||||
)
|
||||
foreach(COMPILER_FLAG ${_COMPILER_FLAGS})
|
||||
string(REPLACE "/MT" "/MD" ${COMPILER_FLAG} "${${COMPILER_FLAG}}")
|
||||
string(REGEX REPLACE "/W[0-9]" "" ${COMPILER_FLAG} "${${COMPILER_FLAG}}")
|
||||
endforeach()
|
||||
if(ZVEC_USE_STATIC_CRT)
|
||||
foreach(COMPILER_FLAG ${_COMPILER_FLAGS})
|
||||
string(REPLACE "/MD" "/MT" ${COMPILER_FLAG} "${${COMPILER_FLAG}}")
|
||||
string(REGEX REPLACE "/W[0-9]" "" ${COMPILER_FLAG} "${${COMPILER_FLAG}}")
|
||||
endforeach()
|
||||
else()
|
||||
foreach(COMPILER_FLAG ${_COMPILER_FLAGS})
|
||||
string(REPLACE "/MT" "/MD" ${COMPILER_FLAG} "${${COMPILER_FLAG}}")
|
||||
string(REGEX REPLACE "/W[0-9]" "" ${COMPILER_FLAG} "${${COMPILER_FLAG}}")
|
||||
endforeach()
|
||||
endif()
|
||||
unset(_COMPILER_FLAGS)
|
||||
|
||||
add_definitions(-D_CRT_SECURE_NO_WARNINGS)
|
||||
# Build shared library as default
|
||||
set(BUILD_SHARED_LIBS ON)
|
||||
set(BUILD_SHARED_LIBS OFF)
|
||||
endif()
|
||||
|
||||
set(CMAKE_C_FLAGS_ASAN ${CMAKE_C_FLAGS_DEBUG})
|
||||
|
|
|
|||
|
|
@ -288,7 +288,7 @@ else()
|
|||
set(HOST_ARCH unknown)
|
||||
message(WARNING "unknown host arch: ${CMAKE_SYSTEM_PROCESSOR}")
|
||||
endif()
|
||||
message(STATUS "host arch: ${HOST_ARCH}")
|
||||
# message(STATUS "host arch: ${HOST_ARCH}")
|
||||
|
||||
if (HOST_ARCH MATCHES "^(arm|arm64)$")
|
||||
_setup_armv8_march()
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
cmake_minimum_required(VERSION 3.13)
|
||||
cmake_minimum_required(VERSION 3.26)
|
||||
cmake_policy(SET CMP0077 NEW)
|
||||
project(zvec-example-c++)
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
|
|
@ -20,14 +20,31 @@ set(ZVEC_DEPENDENCY_LIB_DIR ${CMAKE_BINARY_DIR}/../../../${HOST_BUILD_DIR}/exter
|
|||
include_directories(${ZVEC_INCLUDE_DIR})
|
||||
link_directories(${ZVEC_LIB_DIR} ${ZVEC_DEPENDENCY_LIB_DIR})
|
||||
|
||||
# Support multi-config builds (libs in Release/ or Debug/ subdirectories)
|
||||
if (CMAKE_BUILD_TYPE)
|
||||
link_directories(
|
||||
${ZVEC_LIB_DIR}/${CMAKE_BUILD_TYPE}
|
||||
${ZVEC_DEPENDENCY_LIB_DIR}/${CMAKE_BUILD_TYPE}
|
||||
)
|
||||
endif ()
|
||||
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
||||
|
||||
# --- Determine debug/release library names ---
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(GLOG_LIB glogd)
|
||||
set(GFLAGS_LIB gflags_nothreads_debug)
|
||||
if (WIN32)
|
||||
set(GFLAGS_LIB gflags_nothreads_static_debug)
|
||||
else ()
|
||||
set(GFLAGS_LIB gflags_nothreads_debug)
|
||||
endif ()
|
||||
set(PROTOBUF_LIB protobufd)
|
||||
else()
|
||||
set(GLOG_LIB glog)
|
||||
set(GFLAGS_LIB gflags_nothreads)
|
||||
if (WIN32)
|
||||
set(GFLAGS_LIB gflags_nothreads_static)
|
||||
else ()
|
||||
set(GFLAGS_LIB gflags_nothreads)
|
||||
endif ()
|
||||
set(PROTOBUF_LIB protobuf)
|
||||
endif()
|
||||
|
||||
|
|
@ -48,7 +65,6 @@ if (NOT WIN32)
|
|||
${CMAKE_DL_LIBS}
|
||||
)
|
||||
|
||||
|
||||
set(zvec_db_deps
|
||||
roaring
|
||||
rocksdb
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include <cstdlib>
|
||||
#include <filesystem>
|
||||
#include <iostream>
|
||||
#include <zvec/core/interface/index.h>
|
||||
#include <zvec/core/interface/index_factory.h>
|
||||
|
|
@ -46,9 +47,7 @@ Index::Pointer create_index(const BaseIndexParam::Pointer ¶m,
|
|||
}
|
||||
|
||||
int main() {
|
||||
char cmd_buf[100];
|
||||
snprintf(cmd_buf, 100, "rm -f %s", index_name.c_str());
|
||||
system(cmd_buf);
|
||||
std::filesystem::remove(index_name);
|
||||
|
||||
auto param = HNSWIndexParamBuilder()
|
||||
.WithMetricType(MetricType::kInnerProduct)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include <cstdlib>
|
||||
#include <filesystem>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include <zvec/db/collection.h>
|
||||
|
|
@ -188,8 +189,7 @@ CollectionSchema::Ptr create_schema() {
|
|||
|
||||
int main() {
|
||||
std::string path = "./demo";
|
||||
std::string rm_cmd = "rm -rf " + path;
|
||||
system(rm_cmd.c_str());
|
||||
std::filesystem::remove_all(path);
|
||||
|
||||
auto schema = create_schema();
|
||||
CollectionOptions options{false, true};
|
||||
|
|
|
|||
|
|
@ -106,22 +106,21 @@ endif()
|
|||
# This creates a truly self-contained library with zero external dependencies
|
||||
# Users only need to link libzvec_c_api.so without installing any dependencies
|
||||
if(MSVC)
|
||||
# Windows MSVC: Use /WHOLEARCHIVE flag for static libraries only
|
||||
# Note: roaring might be a DLL on Windows, so we don't apply WHOLEARCHIVE to it
|
||||
target_link_options(zvec_c_api PRIVATE
|
||||
${ZVEC_WHOLE_ARCHIVE_PREFIX}$<TARGET_FILE:zvec_db>
|
||||
${ZVEC_WHOLE_ARCHIVE_PREFIX}$<TARGET_FILE:zvec_core>
|
||||
${ZVEC_WHOLE_ARCHIVE_PREFIX}$<TARGET_FILE:zvec_ailego>
|
||||
${ZVEC_WHOLE_ARCHIVE_PREFIX}$<TARGET_FILE:zvec_turbo>
|
||||
${ZVEC_WHOLE_ARCHIVE_PREFIX}$<TARGET_FILE:roaring>
|
||||
)
|
||||
|
||||
|
||||
target_link_libraries(zvec_c_api
|
||||
PRIVATE
|
||||
zvec_db
|
||||
zvec_core
|
||||
zvec_ailego
|
||||
zvec_turbo
|
||||
roaring # May be DLL on Windows, link normally
|
||||
roaring
|
||||
${ZVEC_CXX_STD_LIB}
|
||||
Threads::Threads
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
include(${PROJECT_ROOT_DIR}/cmake/bazel.cmake)
|
||||
include(${PROJECT_ROOT_DIR}/cmake/option.cmake)
|
||||
|
||||
# TODO(windows): this is for test_util.h, should be removed
|
||||
include_directories(${PROJECT_ROOT_DIR})
|
||||
|
||||
cc_directories(ailego)
|
||||
cc_directories(db)
|
||||
cc_directories(core)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,7 @@
|
|||
set(ENABLE_ROARING_TESTS OFF CACHE BOOL "Disable testing in CRoaring" FORCE)
|
||||
if(MSVC)
|
||||
set(ROARING_BUILD_STATIC ON CACHE BOOL "" FORCE)
|
||||
endif()
|
||||
|
||||
set(_SAVED_CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${EXTERNAL_LIB_DIR})
|
||||
|
|
|
|||
|
|
@ -2,7 +2,9 @@ set(ANTLR_SRC_DIR ${CMAKE_CURRENT_SOURCE_DIR}/antlr4)
|
|||
set(ANTLR_PATCH ${CMAKE_CURRENT_SOURCE_DIR}/antlr4.patch)
|
||||
apply_patch_once("antlr4_fix" "${ANTLR_SRC_DIR}" "${ANTLR_PATCH}")
|
||||
|
||||
set(WITH_STATIC_CRT OFF CACHE BOOL "Use dynamic CRT for antlr4" FORCE)
|
||||
if(MSVC)
|
||||
set(WITH_STATIC_CRT ${ZVEC_USE_STATIC_CRT} CACHE BOOL "" FORCE)
|
||||
endif()
|
||||
add_subdirectory(antlr4/runtime/Cpp/)
|
||||
|
||||
target_include_directories(antlr4_static INTERFACE
|
||||
|
|
|
|||
|
|
@ -6,6 +6,10 @@ else()
|
|||
set(ARROW_PATCH ${CMAKE_CURRENT_SOURCE_DIR}/arrow.patch)
|
||||
apply_patch_once("arrow_fix" "${ARROW_SRC_DIR}" "${ARROW_PATCH}")
|
||||
endif()
|
||||
if(MSVC)
|
||||
set(ARROW_WIN_PATCH ${CMAKE_CURRENT_SOURCE_DIR}/arrow.windows.patch)
|
||||
apply_patch_once("arrow_windows_crt_fix" "${ARROW_SRC_DIR}" "${ARROW_WIN_PATCH}")
|
||||
endif()
|
||||
|
||||
include(ExternalProject)
|
||||
include(ProcessorCount)
|
||||
|
|
@ -58,7 +62,19 @@ if(ANDROID)
|
|||
LOG_INSTALL ON
|
||||
)
|
||||
elseif (MSVC)
|
||||
set(ARROW_EXTRA_CMAKE_ARGS -DCMAKE_C_FLAGS=/FS -DCMAKE_CXX_FLAGS=/FS)
|
||||
if(ZVEC_USE_STATIC_CRT)
|
||||
set(_ARROW_CRT_FLAG "/MT")
|
||||
set(_ARROW_MSVC_RUNTIME "MultiThreaded$<$<CONFIG:Debug>:Debug>")
|
||||
else()
|
||||
set(_ARROW_CRT_FLAG "/MD")
|
||||
set(_ARROW_MSVC_RUNTIME "MultiThreadedDLL$<$<CONFIG:Debug>:Debug>")
|
||||
endif()
|
||||
set(ARROW_EXTRA_CMAKE_ARGS
|
||||
"-DCMAKE_C_FLAGS=/FS ${_ARROW_CRT_FLAG}"
|
||||
"-DCMAKE_CXX_FLAGS=/FS ${_ARROW_CRT_FLAG}"
|
||||
-DARROW_USE_STATIC_CRT=${ZVEC_USE_STATIC_CRT}
|
||||
"-DCMAKE_MSVC_RUNTIME_LIBRARY=${_ARROW_MSVC_RUNTIME}"
|
||||
)
|
||||
ExternalProject_Add(
|
||||
ARROW.BUILD PREFIX arrow
|
||||
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/apache-arrow-21.0.0
|
||||
|
|
|
|||
|
|
@ -0,0 +1,25 @@
|
|||
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake b/cpp/cmake_modules/ThirdpartyToolchain.cmake
|
||||
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake
|
||||
+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake
|
||||
@@ -862,10 +862,18 @@
|
||||
foreach(CONFIG DEBUG MINSIZEREL RELEASE RELWITHDEBINFO)
|
||||
set(EP_CXX_FLAGS_${CONFIG} "${CMAKE_CXX_FLAGS_${CONFIG}}")
|
||||
set(EP_C_FLAGS_${CONFIG} "${CMAKE_C_FLAGS_${CONFIG}}")
|
||||
- if(CONFIG STREQUAL DEBUG)
|
||||
- set(EP_MSVC_RUNTIME_LIBRARY MultiThreadedDebugDLL)
|
||||
+ if(ARROW_USE_STATIC_CRT)
|
||||
+ if(CONFIG STREQUAL DEBUG)
|
||||
+ set(EP_MSVC_RUNTIME_LIBRARY MultiThreadedDebug)
|
||||
+ else()
|
||||
+ set(EP_MSVC_RUNTIME_LIBRARY MultiThreaded)
|
||||
+ endif()
|
||||
else()
|
||||
- set(EP_MSVC_RUNTIME_LIBRARY MultiThreadedDLL)
|
||||
+ if(CONFIG STREQUAL DEBUG)
|
||||
+ set(EP_MSVC_RUNTIME_LIBRARY MultiThreadedDebugDLL)
|
||||
+ else()
|
||||
+ set(EP_MSVC_RUNTIME_LIBRARY MultiThreadedDLL)
|
||||
+ endif()
|
||||
endif()
|
||||
string(APPEND EP_CXX_FLAGS_${CONFIG}
|
||||
" ${CMAKE_CXX_COMPILE_OPTIONS_MSVC_RUNTIME_LIBRARY_${EP_MSVC_RUNTIME_LIBRARY}}")
|
||||
|
|
@ -6,8 +6,11 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|||
endif()
|
||||
|
||||
if (MSVC)
|
||||
set(BUILD_SHARED_LIBS OFF)
|
||||
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
||||
if(NOT ZVEC_USE_STATIC_CRT)
|
||||
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
|
||||
else()
|
||||
set(gtest_force_shared_crt OFF CACHE BOOL "" FORCE)
|
||||
endif()
|
||||
endif ()
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ if(MSVC)
|
|||
CMAKE_ARGS
|
||||
-DCMAKE_INSTALL_PREFIX=${EXTERNAL_BINARY_DIR}/usr/local
|
||||
-DCMAKE_INSTALL_LIBDIR=lib
|
||||
-DCMAKE_MSVC_RUNTIME_LIBRARY=${CMAKE_MSVC_RUNTIME_LIBRARY}
|
||||
-DBUILD_SHARED_LIBS=OFF
|
||||
-DBUILD_STATIC_LIBS=ON
|
||||
-DLZ4_BUILD_CLI=OFF
|
||||
|
|
|
|||
|
|
@ -1,5 +1,8 @@
|
|||
set(protobuf_BUILD_TESTS OFF CACHE BOOL "Disable testing in protobuf" FORCE)
|
||||
set(protobuf_WITH_ZLIB ON CACHE BOOL "Disable zlib support in protobuf" FORCE)
|
||||
if(MSVC)
|
||||
set(protobuf_MSVC_STATIC_RUNTIME ${ZVEC_USE_STATIC_CRT} CACHE BOOL "" FORCE)
|
||||
endif()
|
||||
|
||||
set(_SAVED_CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY})
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${EXTERNAL_LIB_DIR})
|
||||
|
|
|
|||
|
|
@ -6,6 +6,14 @@ endif()
|
|||
|
||||
set(ROCKSDB_BUILD_SHARED OFF CACHE BOOL "Disable install in rocksdb" FORCE)
|
||||
|
||||
if(MSVC)
|
||||
if(ZVEC_USE_STATIC_CRT)
|
||||
set(WITH_MD_LIBRARY OFF CACHE BOOL "build rocksdb with MT to match project CRT" FORCE)
|
||||
else()
|
||||
set(WITH_MD_LIBRARY ON CACHE BOOL "build rocksdb with MD to match project CRT" FORCE)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(WITH_TESTS OFF CACHE BOOL "Disable testing in rocksdb" FORCE)
|
||||
set(WITH_ALL_TESTS OFF CACHE BOOL "Build all test, rather than a small subset" FORCE)
|
||||
set(WITH_BENCHMARK_TOOLS OFF CACHE BOOL "Disable benchmarks in rocksdb" FORCE)
|
||||
|
|
|
|||
Loading…
Reference in New Issue