summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--build/conf/linkers/ld.conf1
-rw-r--r--build/scripts/link_exe.py19
-rw-r--r--build/ymake.core.conf10
3 files changed, 24 insertions, 6 deletions
diff --git a/build/conf/linkers/ld.conf b/build/conf/linkers/ld.conf
index 1584eb2bb40..08f17a840f2 100644
--- a/build/conf/linkers/ld.conf
+++ b/build/conf/linkers/ld.conf
@@ -213,6 +213,7 @@ LINK_SCRIPT_EXE_FLAGS=
REAL_LINK_EXE_CMDLINE =\
$YMAKE_PYTHON ${input:"build/scripts/link_exe.py"} \
+REAL_LINK_EXE_CMDLINE+=--start-plugins ${ext=.pyplugin:SRCS_GLOBAL} --end-plugins
REAL_LINK_EXE_CMDLINE+=--clang-ver $CLANG_VER
REAL_LINK_EXE_CMDLINE+=$_LD_LINKER_OUTPUT
REAL_LINK_EXE_CMDLINE+=\
diff --git a/build/scripts/link_exe.py b/build/scripts/link_exe.py
index 220beec6125..89695f2b98e 100644
--- a/build/scripts/link_exe.py
+++ b/build/scripts/link_exe.py
@@ -2,6 +2,7 @@ import itertools
import os
import os.path
import sys
+import json
import subprocess
import optparse
import textwrap
@@ -321,7 +322,7 @@ def fix_blas_resolving(cmd):
return cmd
-def parse_args():
+def parse_args(args):
parser = optparse.OptionParser()
parser.disable_interspersed_args()
parser.add_option('--musl', action='store_true')
@@ -341,11 +342,23 @@ def parse_args():
parser.add_option('--whole-archive-libs', action='append')
parser.add_option('--exclude-libs', action='append')
thinlto_cache.add_options(parser)
- return parser.parse_args()
+ return parser.parse_args(args)
if __name__ == '__main__':
- opts, args = parse_args()
+ args = sys.argv[1:]
+ ib = args.index('--start-plugins')
+ ie = args.index('--end-plugins')
+ plugins = args[ib + 1:ie]
+ args = args[:ib] + args[ie + 1:]
+
+ for p in plugins:
+ res = subprocess.check_output([sys.executable, p] + args).decode().strip()
+
+ if res:
+ args = json.loads(res)
+
+ opts, args = parse_args(args)
args = pcf.skip_markers(args)
cmd = fix_blas_resolving(args)
diff --git a/build/ymake.core.conf b/build/ymake.core.conf
index 7900852da79..9af1d614113 100644
--- a/build/ymake.core.conf
+++ b/build/ymake.core.conf
@@ -1077,7 +1077,7 @@ macro LINK_EXEC_DYN_LIB_IMPL(WHOLE_ARCHIVE_PEERS...) {
###
### The base of all linkable modules: programs, DLLs etc. Describes common linking logic.
module _LINK_UNIT: _BASE_UNIT {
- .EXTS=.o .obj .supp .sbom .tidyjson .ld .a .lib
+ .EXTS=.o .obj .supp .sbom .tidyjson .ld .a .lib .pyplugin
.CMD=$LINK_EXE
.STRUCT_CMD=yes
.ALLOWED=EXTRALIBS OBJADDE_GLOBAL RESOURCE_FILES
@@ -1800,7 +1800,7 @@ module _LIBRARY: _BASE_UNIT {
.STRUCT_CMD=yes
.NODE_TYPE=Library
.PEERDIR_POLICY=as_include
- .EXTS=.o .obj .a .mf .supp .sbom .tidyjson .ld .lib .sdcmeta
+ .EXTS=.o .obj .a .mf .supp .sbom .tidyjson .ld .lib .sdcmeta .pyplugin
.ALLOWED=GRPC USE_SKIFF EXTRALIBS OBJADDE_GLOBAL RESOURCE_FILES
.GLOBAL=USER_CFLAGS USER_CXXFLAGS USER_CONLYFLAGS LDFLAGS SRCS _WHOLE_ARCHIVE_LIBS_VALUE RPATH OBJADDE_LIB _LINK_EXCLUDE_LIBRARIES
.RESTRICTED=ALLOCATOR SIZE TAG DATA TEST_DATA DEPENDS FORK_TESTS FORK_SUBTESTS SPLIT_FACTOR TEST_CWD RUN TIMEOUT SPLIT_DWARF
@@ -1951,7 +1951,7 @@ module RESOURCES_LIBRARY: _BARE_UNIT {
.ALIASES=EXTRALIBS=PY_EXTRALIBS
.NODE_TYPE=Library
.PEERDIR_POLICY=as_include
- .EXTS=.o .obj .a .mf .supp .sbom .tidyjson .ld .lib
+ .EXTS=.o .obj .a .mf .supp .sbom .tidyjson .ld .lib .pyplugin
.GLOBAL=USER_CFLAGS USER_CXXFLAGS USER_CONLYFLAGS LDFLAGS _WHOLE_ARCHIVE_LIBS_VALUE RPATH OBJADDE_LIB SRCS
@@ -3136,6 +3136,10 @@ macro _SRC_f_old(SRC, SRCFLAGS...) {
.CMD=$YMAKE_PYTHON ${input:"build/scripts/f2c.py"} -t ${tool:"contrib/tools/f2c"} -c ${input:SRC} -o ${output:SRC.c} ${hide;output_include:"f2c.h"} ${hide;kv:"p FT"} ${hide;kv:"pc light-green"}
}
+macro LD_PLUGIN(name) {
+ SRCS(GLOBAL $name.pyplugin)
+}
+
USE_FLANG=no
when ($USE_FLANG == "yes") {