Skip to content

Commit dcdc4ec

Browse files
pgblinkov
authored andcommitted
implement golang ld plugins
commit_hash:fb3ab9a0d420c781eb07bf3f791ba1f3fc1f2353
1 parent 40deb06 commit dcdc4ec

File tree

2 files changed

+9
-15
lines changed

2 files changed

+9
-15
lines changed

build/conf/go.conf

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@ _GO_CGO1_WRAPPER_FLAGS=--build-prefix=/-B --source-prefix=/-S
9595
_GO_LINK_EXE_EXT_CMD=
9696

9797
# tag:go-specific
98-
GO_WITH_MUSL=
9998

10099
# tag:go-specific
101100
GO_TOOLS_ROOT=${GO_TOOLS_RESOURCE_GLOBAL}
@@ -233,12 +232,12 @@ macro _GO_LINK_LIB_IMPL(CGO_FILES[], EXTRA_INPUTS[], EXTRA_TEXT_INPUTS[], GO_FIL
233232

234233
# tag:go-specific
235234
macro _GO_LINK_EXE_IMPL(CGO_FILES[], EXTRA_INPUTS[], EXTRA_TEXT_INPUTS[], GO_FILES...) {
236-
.CMD=${hide:_GO_FAKEID} $GO_TOOL ${hide;input:EXTRA_INPUTS} ${hide;context=TEXT;input:EXTRA_TEXT_INPUTS} --ya-start-command-file $_GO_TOOL_COMMON_FLAGS ++vcs $VCS_GO $GO_WITH_MUSL $GO_EXTLD ++peers ${rootrel;tags_in=local,GO|local,GO_PROTO|local,GO_PROTO_FROM_SCHEMA|local,GO_FBS:PEERS} ++non-local-peers ${rootrel;tags_in=GO|GO_PROTO|GO_PROTO_FROM_SCHEMA|GO_FBS|;tags_out=local:PEERS} ++cgo-peers ${VCS_C_OBJ_RR} ${_EXTRA_OBJS} ${rootrel;tags_out=GO|GO_PROTO|GO_PROTO_FROM_SCHEMA|GO_FBS|RESOURCE_LIB:PEERS} --ya-end-command-file ${hide;kv:"p LD"} ${hide;kv:"pc light-red"} ${hide;kv:"show_out"} && $_GO_LINK_EXE_EXT_CMD
235+
.CMD=${hide:_GO_FAKEID} $GO_TOOL ${hide;input:EXTRA_INPUTS} ${hide;context=TEXT;input:EXTRA_TEXT_INPUTS} --ya-start-command-file $_GO_TOOL_COMMON_FLAGS ++ld_plugins ${ext=.pyplugin:SRCS_GLOBAL} ++vcs $VCS_GO $GO_EXTLD ++peers ${rootrel;tags_in=local,GO|local,GO_PROTO|local,GO_PROTO_FROM_SCHEMA|local,GO_FBS:PEERS} ++non-local-peers ${rootrel;tags_in=GO|GO_PROTO|GO_PROTO_FROM_SCHEMA|GO_FBS|;tags_out=local:PEERS} ++cgo-peers ${VCS_C_OBJ_RR} ${_EXTRA_OBJS} ${rootrel;tags_out=GO|GO_PROTO|GO_PROTO_FROM_SCHEMA|GO_FBS|RESOURCE_LIB:PEERS} --ya-end-command-file ${hide;kv:"p LD"} ${hide;kv:"pc light-red"} ${hide;kv:"show_out"} && $_GO_LINK_EXE_EXT_CMD
237236
}
238237

239238
# tag:go-specific
240239
macro _GO_LINK_TEST_IMPL(CGO_FILES[], EXTRA_INPUTS[], EXTRA_TEXT_INPUTS[], GO_TEST_FILES[], GO_XTEST_FILES[], GO_FILES...) {
241-
.CMD=${hide:_GO_FAKEID} $GO_TOOL ${hide;input:EXTRA_INPUTS} ${hide;context=TEXT;input:EXTRA_TEXT_INPUTS} --ya-start-command-file $_GO_TOOL_COMMON_FLAGS ++vcs $VCS_GO $GO_WITH_MUSL $GO_EXTLD ++test-miner $GO_TEST_MINER ++test-import-path $GO_TEST_IMPORT_PATH ++peers ${rootrel;tags_in=local,GO|local,GO_PROGRAM|local,GO_PROTO|local,GO_PROTO_FROM_SCHEMA|local,GO_FBS:PEERS} ++non-local-peers ${rootrel;tags_in=GO|GO_PROTO|GO_PROTO_FROM_SCHEMA|GO_FBS;tags_out=local:PEERS} ++cgo-peers ${VCS_C_OBJ_RR} ${rootrel;tags_out=GO|GO_PROGRAM|GO_PROTO|GO_PROTO_FROM_SCHEMA|GO_FBS|RESOURCE_LIB:PEERS} ++test_srcs ${input:GO_TEST_FILES} ++xtest_srcs ${input:GO_XTEST_FILES} ++cover_info $GO_COVER_INFO_VALUE ++skip-tests $_GO_SKIP_TEST_VALUE --ya-end-command-file ${hide;kv:"p GO"} ${hide;kv:"pc light-red"} ${hide;kv:"show_out"}
240+
.CMD=${hide:_GO_FAKEID} $GO_TOOL ${hide;input:EXTRA_INPUTS} ${hide;context=TEXT;input:EXTRA_TEXT_INPUTS} --ya-start-command-file $_GO_TOOL_COMMON_FLAGS ++ld_plugins ${ext=.pyplugin:SRCS_GLOBAL} ++vcs $VCS_GO $GO_EXTLD ++test-miner $GO_TEST_MINER ++test-import-path $GO_TEST_IMPORT_PATH ++peers ${rootrel;tags_in=local,GO|local,GO_PROGRAM|local,GO_PROTO|local,GO_PROTO_FROM_SCHEMA|local,GO_FBS:PEERS} ++non-local-peers ${rootrel;tags_in=GO|GO_PROTO|GO_PROTO_FROM_SCHEMA|GO_FBS;tags_out=local:PEERS} ++cgo-peers ${VCS_C_OBJ_RR} ${rootrel;tags_out=GO|GO_PROGRAM|GO_PROTO|GO_PROTO_FROM_SCHEMA|GO_FBS|RESOURCE_LIB:PEERS} ++test_srcs ${input:GO_TEST_FILES} ++xtest_srcs ${input:GO_XTEST_FILES} ++cover_info $GO_COVER_INFO_VALUE ++skip-tests $_GO_SKIP_TEST_VALUE --ya-end-command-file ${hide;kv:"p GO"} ${hide;kv:"pc light-red"} ${hide;kv:"show_out"}
242241
}
243242

244243
# tag:go-specific
@@ -638,7 +637,7 @@ otherwise {
638637
###
639638
### The base module of all golang modules. Defines common properties, dependencies and rules for go build.
640639
module _GO_BASE_UNIT: _BASE_UNIT {
641-
.EXTS=.go .gosrc .o .obj .sbom .a .symabis .mf
640+
.EXTS=.go .gosrc .o .obj .sbom .a .symabis .mf .pyplugin
642641
.CMD=$TOUCH_UNIT
643642
.STRUCT_CMD=yes
644643
.NODE_TYPE=Bundle
@@ -870,10 +869,6 @@ module GO_PROGRAM: _GO_BASE_UNIT {
870869
PEERDIR += ${GOSTD}/runtime/race
871870
}
872871

873-
when ($MUSL == "yes") {
874-
GO_WITH_MUSL = ++musl
875-
}
876-
877872
when ($HARDENING == "yes") {
878873
_GO_BUILDMODE=++buildmode=pie
879874
}

build/scripts/go_tool.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -525,12 +525,7 @@ def do_link_exe(args):
525525
cmd.append('-extld={}'.format(args.extld))
526526

527527
if args.extldflags is not None:
528-
filter_musl = bool
529-
if args.musl:
530-
cmd.append('-linkmode=external')
531-
extldflags.append('-static')
532-
filter_musl = lambda x: x not in ('-lc', '-ldl', '-lm', '-lpthread', '-lrt')
533-
extldflags += [x for x in args.extldflags if filter_musl(x)]
528+
extldflags.extend(args.extldflags)
534529
cgo_peers = []
535530
if args.cgo_peers is not None and len(args.cgo_peers) > 0:
536531
is_group = args.targ_os == 'linux'
@@ -545,6 +540,10 @@ def do_link_exe(args):
545540
except ValueError:
546541
extldflags.extend(cgo_peers)
547542
if len(extldflags) > 0:
543+
for p in args.ld_plugins:
544+
res = subprocess.check_output([sys.executable, p, sys.argv[0]] + extldflags, cwd=args.build_root).decode().strip()
545+
if res:
546+
extldflags = json.loads(res)[1:]
548547
cmd.append('-extldflags={}'.format(' '.join(extldflags)))
549548
cmd.append(compile_args.output)
550549
call(cmd, args.build_root)
@@ -850,6 +849,7 @@ def find_ydx_file_name(name, flags):
850849
parser.add_argument('++test_srcs', nargs='*')
851850
parser.add_argument('++xtest_srcs', nargs='*')
852851
parser.add_argument('++cover_info', nargs='*')
852+
parser.add_argument('++ld_plugins', nargs='*')
853853
parser.add_argument('++output', nargs='?', default=None)
854854
parser.add_argument('++source-root', default=None)
855855
parser.add_argument('++build-root', required=True)
@@ -881,7 +881,6 @@ def find_ydx_file_name(name, flags):
881881
parser.add_argument('++vet-flags', nargs='*', default=None)
882882
parser.add_argument('++vet-info-ext', default=vet_info_ext)
883883
parser.add_argument('++vet-report-ext', default=vet_report_ext)
884-
parser.add_argument('++musl', action='store_true')
885884
parser.add_argument('++skip-tests', nargs='*', default=None)
886885
parser.add_argument('++ydx-file', default='')
887886
parser.add_argument('++debug-root-map', default=None)

0 commit comments

Comments
 (0)