aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpg <pg@yandex-team.com>2025-02-26 20:01:13 +0300
committerpg <pg@yandex-team.com>2025-02-26 20:56:14 +0300
commit73f2e377bb4a5061f08f495a61340b482d355565 (patch)
tree8cd52119cd045f030f4c35dc718229d382d2f233
parent725f044263c17a834658ee8bc14d2839d829914b (diff)
downloadydb-73f2e377bb4a5061f08f495a61340b482d355565.tar.gz
v2
commit_hash:b1ef83d5b70569b92f918e825d5e290cc8e3c886
-rw-r--r--build/conf/go.conf2
-rw-r--r--build/scripts/link_o.py29
2 files changed, 30 insertions, 1 deletions
diff --git a/build/conf/go.conf b/build/conf/go.conf
index 4862f881c1..1b1449b631 100644
--- a/build/conf/go.conf
+++ b/build/conf/go.conf
@@ -218,7 +218,7 @@ macro _GO_COMPILE_CGO1(NAME, FLAGS[], FILES...) {
# tag:go-specific
macro _GO_COMPILE_CGO2(NAME, C_FILES[], S_FILES[], OBJ_FILES[], FILES...) {
- .CMD=${hide:_CGO_FAKEID} $C_COMPILER $C_FLAGS_PLATFORM ${pre=-I:_C__INCLUDE} $CGO_CFLAGS_VALUE ${input;tobindir:"_cgo_main.c"} -c -o ${tmp;noauto;suf=${OBJECT_SUF}:"_cgo_main.c"} && $C_COMPILER $C_FLAGS_PLATFORM ${pre=-I:_C__INCLUDE} -o ${tmp;noauto;suf=${OBJECT_SUF}:"_cgo_"} $LDFLAGS $LDFLAGS_GLOBAL $CGO2_LDFLAGS_VALUE ${hide;input:"_cgo_export.h"} ${tmp;noauto;suf=${OBJECT_SUF}:"_cgo_main.c"} ${input;suf=${OBJECT_SUF}:"_cgo_export.c"} ${input;nopath;noext;suf=.cgo2.c${OBJECT_SUF}:FILES} ${input;suf=${OBJECT_SUF}:C_FILES} ${input;suf=.o:S_FILES} ${input:OBJ_FILES} $CGO_LDFLAGS_VALUE && ${GO_TOOLS_ROOT}/pkg/tool/$_GO_TC_PATH/cgo -dynpackage $NAME -dynimport ${tmp;noauto;suf=${OBJECT_SUF}:"_cgo_"} -dynout ${output:"_cgo_import.go"} -dynlinker $GO_CGO2_FLAGS_VALUE $GO_TOOLCHAIN_ENV ${hide;kv:"p go"} ${hide;kv:"pc light-blue"} ${hide;kv:"show_out"}
+ .CMD=${hide:_CGO_FAKEID} $C_COMPILER $C_FLAGS_PLATFORM ${pre=-I:_C__INCLUDE} $CGO_CFLAGS_VALUE ${input;tobindir:"_cgo_main.c"} -c -o ${tmp;noauto;suf=${OBJECT_SUF}:"_cgo_main.c"} && $YMAKE_PYTHON ${input:"build/scripts/link_o.py"} $C_COMPILER $C_FLAGS_PLATFORM ${pre=-I:_C__INCLUDE} -o ${tmp;noauto;suf=${OBJECT_SUF}:"_cgo_"} $LDFLAGS $LDFLAGS_GLOBAL $CGO2_LDFLAGS_VALUE ${hide;input:"_cgo_export.h"} ${tmp;noauto;suf=${OBJECT_SUF}:"_cgo_main.c"} ${input;suf=${OBJECT_SUF}:"_cgo_export.c"} ${input;nopath;noext;suf=.cgo2.c${OBJECT_SUF}:FILES} ${input;suf=${OBJECT_SUF}:C_FILES} ${input;suf=.o:S_FILES} ${input:OBJ_FILES} $CGO_LDFLAGS_VALUE && ${GO_TOOLS_ROOT}/pkg/tool/$_GO_TC_PATH/cgo -dynpackage $NAME -dynimport ${tmp;noauto;suf=${OBJECT_SUF}:"_cgo_"} -dynout ${output:"_cgo_import.go"} -dynlinker $GO_CGO2_FLAGS_VALUE $GO_TOOLCHAIN_ENV ${hide;kv:"p go"} ${hide;kv:"pc light-blue"} ${hide;kv:"show_out"}
_USE_LINKER()
}
diff --git a/build/scripts/link_o.py b/build/scripts/link_o.py
new file mode 100644
index 0000000000..298f7ee16c
--- /dev/null
+++ b/build/scripts/link_o.py
@@ -0,0 +1,29 @@
+import subprocess
+import sys
+import os
+
+
+def flt(args):
+ for a in args:
+ if a == '-o':
+ yield '-Wl,-r'
+ yield '-fuse-ld=lld'
+ yield '-nodefaultlibs'
+ yield '-nostartfiles'
+ yield '-Wl,-no-pie'
+ yield '-o'
+ elif a.endswith('.o'):
+ yield a
+ elif '--ld' in a:
+ yield a
+ elif '--target' in a:
+ yield a
+
+
+if '-apple-macos' in str(sys.argv):
+ cmd = sys.argv[1:]
+else:
+ cmd = [sys.argv[1]] + list(flt(sys.argv[2:]))
+
+
+subprocess.check_call(cmd)