mirror of
https://github.com/Syngnat/GoNavi.git
synced 2026-06-16 03:29:55 +08:00
🐛 fix(ci): 修正 DuckDB Windows 动态链接参数
- 统一 Windows DuckDB 动态库构建使用的 CGO LDFLAGS - 为 workflow 中的 DuckDB 库目录补充 GCC 友好的路径格式 - 补充 DuckDB Windows 动态链接参数的回归测试
This commit is contained in:
5
.github/workflows/dev-build.yml
vendored
5
.github/workflows/dev-build.yml
vendored
@@ -616,7 +616,10 @@ jobs:
|
||||
echo "🔧 构建 ${OUTPUT_PATH} (tags=${BUILD_TAGS})"
|
||||
if [ "$DRIVER" = "duckdb" ]; then
|
||||
if [ -n "$DUCKDB_LIB_DIR" ]; then
|
||||
CGO_ENABLED=1 GOOS="$GOOS" GOARCH="$GOARCH" CGO_LDFLAGS="-L${DUCKDB_LIB_DIR} -lduckdb" PATH="${DUCKDB_LIB_DIR}:$PATH" go build \
|
||||
DUCKDB_LIB_DIR_GCC="$(cygpath -m "$DUCKDB_LIB_DIR")"
|
||||
DUCKDB_LIB_DIR_PATH="$(cygpath -u "$DUCKDB_LIB_DIR")"
|
||||
DUCKDB_WINDOWS_CGO_LDFLAGS="-L${DUCKDB_LIB_DIR_GCC} -lduckdb -lstdc++ -lm -lws2_32 -lwsock32 -lrstrtmgr"
|
||||
CGO_ENABLED=1 GOOS="$GOOS" GOARCH="$GOARCH" CGO_LDFLAGS="${DUCKDB_WINDOWS_CGO_LDFLAGS}" PATH="${DUCKDB_LIB_DIR_PATH}:$PATH" go build \
|
||||
-tags "${BUILD_TAGS}" \
|
||||
-trimpath \
|
||||
-ldflags "-s -w" \
|
||||
|
||||
5
.github/workflows/release.yml
vendored
5
.github/workflows/release.yml
vendored
@@ -614,7 +614,10 @@ jobs:
|
||||
echo "🔧 构建 ${OUTPUT_PATH} (tags=${BUILD_TAGS})"
|
||||
if [ "$DRIVER" = "duckdb" ]; then
|
||||
if [ -n "$DUCKDB_LIB_DIR" ]; then
|
||||
CGO_ENABLED=1 GOOS="$GOOS" GOARCH="$GOARCH" CGO_LDFLAGS="-L${DUCKDB_LIB_DIR} -lduckdb" PATH="${DUCKDB_LIB_DIR}:$PATH" go build \
|
||||
DUCKDB_LIB_DIR_GCC="$(cygpath -m "$DUCKDB_LIB_DIR")"
|
||||
DUCKDB_LIB_DIR_PATH="$(cygpath -u "$DUCKDB_LIB_DIR")"
|
||||
DUCKDB_WINDOWS_CGO_LDFLAGS="-L${DUCKDB_LIB_DIR_GCC} -lduckdb -lstdc++ -lm -lws2_32 -lwsock32 -lrstrtmgr"
|
||||
CGO_ENABLED=1 GOOS="$GOOS" GOARCH="$GOARCH" CGO_LDFLAGS="${DUCKDB_WINDOWS_CGO_LDFLAGS}" PATH="${DUCKDB_LIB_DIR_PATH}:$PATH" go build \
|
||||
-tags "${BUILD_TAGS}" \
|
||||
-trimpath \
|
||||
-ldflags "-s -w" \
|
||||
|
||||
@@ -3835,7 +3835,7 @@ func buildOptionalDriverAgentFromSource(definition driverDefinition, executableP
|
||||
duckDBLibDir = libDir
|
||||
cleanupDuckDBLib = cleanup
|
||||
defer cleanupDuckDBLib()
|
||||
env = withEnvValue(env, "CGO_LDFLAGS", fmt.Sprintf("-L\"%s\" -lduckdb", filepath.ToSlash(duckDBLibDir)))
|
||||
env = withEnvValue(env, "CGO_LDFLAGS", duckDBWindowsDynamicLibraryCGOLDFlags(duckDBLibDir))
|
||||
env = prependPathEnv(env, duckDBLibDir)
|
||||
}
|
||||
buildArgs = append(buildArgs, "-o", executablePath, "./cmd/optional-driver-agent")
|
||||
@@ -4129,6 +4129,20 @@ func withEnvValue(env []string, key string, value string) []string {
|
||||
return append(env, entry)
|
||||
}
|
||||
|
||||
func duckDBWindowsDynamicLibraryCGOLDFlags(libDir string) string {
|
||||
normalizedDir := filepath.ToSlash(strings.TrimSpace(libDir))
|
||||
parts := []string{
|
||||
fmt.Sprintf("-L\"%s\"", normalizedDir),
|
||||
"-lduckdb",
|
||||
"-lstdc++",
|
||||
"-lm",
|
||||
"-lws2_32",
|
||||
"-lwsock32",
|
||||
"-lrstrtmgr",
|
||||
}
|
||||
return strings.Join(parts, " ")
|
||||
}
|
||||
|
||||
func envValue(env []string, key string) string {
|
||||
normalizedKey := strings.ToUpper(strings.TrimSpace(key))
|
||||
for _, item := range env {
|
||||
|
||||
@@ -427,6 +427,23 @@ func TestDuckDBWindowsBuildUsesDynamicLibraryTag(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestDuckDBWindowsDynamicLibraryCGOLDFlagsIncludeSupportLibraries(t *testing.T) {
|
||||
flags := duckDBWindowsDynamicLibraryCGOLDFlags(`C:\tmp\duckdb lib`)
|
||||
for _, expected := range []string{
|
||||
`-L"C:/tmp/duckdb lib"`,
|
||||
"-lduckdb",
|
||||
"-lstdc++",
|
||||
"-lm",
|
||||
"-lws2_32",
|
||||
"-lwsock32",
|
||||
"-lrstrtmgr",
|
||||
} {
|
||||
if !strings.Contains(flags, expected) {
|
||||
t.Fatalf("expected flags %q to contain %q", flags, expected)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestInstallOptionalDriverAgentFromLocalZipExtractsDuckDBDLL(t *testing.T) {
|
||||
if runtime.GOOS != "windows" || runtime.GOARCH != "amd64" {
|
||||
t.Skip("DuckDB DLL support file is only required on windows/amd64")
|
||||
|
||||
Reference in New Issue
Block a user