diff options
author | Devtools Arcadia <[email protected]> | 2022-02-07 18:08:42 +0300 |
---|---|---|
committer | Devtools Arcadia <[email protected]> | 2022-02-07 18:08:42 +0300 |
commit | 1110808a9d39d4b808aef724c861a2e1a38d2a69 (patch) | |
tree | e26c9fed0de5d9873cce7e00bc214573dc2195b7 /build/plugins/llvm_bc.py |
intermediate changes
ref:cde9a383711a11544ce7e107a78147fb96cc4029
Diffstat (limited to 'build/plugins/llvm_bc.py')
-rw-r--r-- | build/plugins/llvm_bc.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/build/plugins/llvm_bc.py b/build/plugins/llvm_bc.py new file mode 100644 index 00000000000..2cfe43884cf --- /dev/null +++ b/build/plugins/llvm_bc.py @@ -0,0 +1,33 @@ +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, '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) + unit.onresource([out_bc, '/llvm_bc/' + name]) |