summaryrefslogtreecommitdiffstats
path: root/build/plugins/llvm_bc.py
diff options
context:
space:
mode:
authoralexv-smirnov <[email protected]>2023-06-13 11:05:01 +0300
committeralexv-smirnov <[email protected]>2023-06-13 11:05:01 +0300
commitbf0f13dd39ee3e65092ba3572bb5b1fcd125dcd0 (patch)
tree1d1df72c0541a59a81439842f46d95396d3e7189 /build/plugins/llvm_bc.py
parent8bfdfa9a9bd19bddbc58d888e180fbd1218681be (diff)
add ymake export to ydb
Diffstat (limited to 'build/plugins/llvm_bc.py')
-rw-r--r--build/plugins/llvm_bc.py36
1 files changed, 36 insertions, 0 deletions
diff --git a/build/plugins/llvm_bc.py b/build/plugins/llvm_bc.py
new file mode 100644
index 00000000000..afe46fa3861
--- /dev/null
+++ b/build/plugins/llvm_bc.py
@@ -0,0 +1,36 @@
+import sys
+
+from _common import rootrel_arc_src, sort_by_keywords, skip_build_root, stripext
+
+
+def onllvm_bc(unit, *args):
+ free_args, kwds = sort_by_keywords({'SYMBOLS': -1, 'NAME': 1, 'GENERATE_MACHINE_CODE': 0, 'NO_COMPILE': 0}, args)
+ name = kwds['NAME'][0]
+ symbols = kwds.get('SYMBOLS')
+ obj_suf = unit.get('OBJ_SUF')
+ skip_compile_step = 'NO_COMPILE' in kwds
+ merged_bc = name + '_merged' + obj_suf + '.bc'
+ out_bc = name + '_optimized' + obj_suf + '.bc'
+ bcs = []
+ for x in free_args:
+ rel_path = rootrel_arc_src(x, unit)
+ bc_path = '${ARCADIA_BUILD_ROOT}/' + skip_build_root(rel_path) + obj_suf + '.bc'
+ if not skip_compile_step:
+ if x.endswith('.c'):
+ llvm_compile = unit.onllvm_compile_c
+ elif x.endswith('.ll'):
+ llvm_compile = unit.onllvm_compile_ll
+ else:
+ llvm_compile = unit.onllvm_compile_cxx
+ llvm_compile([rel_path, bc_path])
+ bcs.append(bc_path)
+ unit.onllvm_link([merged_bc] + bcs)
+ opt_opts = ['-O2', '-globalopt', '-globaldce']
+ if symbols:
+ # XXX: '#' used instead of ',' to overcome ymake tendency to split everything by comma
+ opt_opts += ['-internalize', '-internalize-public-api-list=' + '#'.join(symbols)]
+ unit.onllvm_opt([merged_bc, out_bc] + opt_opts)
+ if 'GENERATE_MACHINE_CODE' in kwds:
+ unit.onllvm_llc([out_bc, '-O2'])
+ else:
+ unit.onresource([out_bc, '/llvm_bc/' + name])