From 056bb284ccf8dd6793ec3a54ffa36c4fb2b9ad11 Mon Sep 17 00:00:00 2001 From: alexv-smirnov <alex@ydb.tech> Date: Wed, 15 Mar 2023 19:59:12 +0300 Subject: add library/cpp/actors, ymake build to ydb oss export --- build/scripts/link_fat_obj.py | 91 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 build/scripts/link_fat_obj.py (limited to 'build/scripts/link_fat_obj.py') diff --git a/build/scripts/link_fat_obj.py b/build/scripts/link_fat_obj.py new file mode 100644 index 0000000000..c189668b9e --- /dev/null +++ b/build/scripts/link_fat_obj.py @@ -0,0 +1,91 @@ +import argparse +import subprocess +import sys + +from process_whole_archive_option import ProcessWholeArchiveOption + +YA_ARG_PREFIX = '-Ya,' + + +def get_args(): + parser = argparse.ArgumentParser() + parser.add_argument('--obj') + parser.add_argument('--globals-lib') + parser.add_argument('--lib', required=True) + parser.add_argument('--arch', required=True) + parser.add_argument('--build-root', default=None) + parser.add_argument('--with-own-obj', action='store_true', default=False) + parser.add_argument('--with-global-srcs', action='store_true', default=False) + + groups = {} + args_list = groups.setdefault('default', []) + for arg in sys.argv[1:]: + if arg == '--with-own-obj': + groups['default'].append(arg) + elif arg == '--globals-lib': + groups['default'].append(arg) + elif arg == '--with-global-srcs': + groups['default'].append(arg) + elif arg.startswith(YA_ARG_PREFIX): + group_name = arg[len(YA_ARG_PREFIX):] + args_list = groups.setdefault(group_name, []) + else: + args_list.append(arg) + + return parser.parse_args(groups['default']), groups + + +def strip_suppression_files(srcs): + return [s for s in srcs if not s.endswith('.supp')] + + +def main(): + args, groups = get_args() + + # Inputs + auto_input = groups['input'] + + # Outputs + lib_output = args.lib + obj_output = args.obj + + # Dependencies + global_srcs = groups['global_srcs'] + global_srcs = strip_suppression_files(global_srcs) + global_srcs = ProcessWholeArchiveOption(args.arch).construct_cmd(global_srcs) + peers = groups['peers'] + + # Tools + linker = groups['linker'] + archiver = groups['archiver'] + + do_link = linker + ['-o', obj_output, '-Wl,-r', '-nodefaultlibs', '-nostartfiles'] + global_srcs + auto_input + do_archive = archiver + [lib_output] + peers + do_globals = None + if args.globals_lib: + do_globals = archiver + [args.globals_lib] + auto_input + global_srcs + if args.with_own_obj: + do_archive += auto_input + if args.with_global_srcs: + do_archive += global_srcs + + def call(c): + proc = subprocess.Popen(c, shell=False, stderr=sys.stderr, stdout=sys.stdout, cwd=args.build_root) + proc.communicate() + return proc.returncode + + if obj_output: + link_res = call(do_link) + if link_res: + sys.exit(link_res) + + if do_globals: + glob_res = call(do_globals) + if glob_res: + sys.exit(glob_res) + + sys.exit(call(do_archive)) + + +if __name__ == '__main__': + main() -- cgit v1.2.3