diff options
author | spreis <spreis@yandex-team.com> | 2024-03-28 11:07:37 +0300 |
---|---|---|
committer | spreis <spreis@yandex-team.com> | 2024-03-28 11:17:45 +0300 |
commit | 2de742ce97267f0469cf0c9bd384488c91442bce (patch) | |
tree | 15daa45ea6fb7ecfd1e07759c7bbd6fba92075a6 /build | |
parent | 48212452a70da88a5e4b814979dd82f22379801f (diff) | |
download | ydb-2de742ce97267f0469cf0c9bd384488c91442bce.tar.gz |
Revertcommits
Эта история про второй питон подразнесла нам графогенерацию . Нам придется этот коммит откатить.
Суть проблемы в том, что генерация для 2го и 3го раньше была одной и той же командой. Ты сделал так, что команда стала разной, но аутпут этих двух команд одинаковый. Имя результата команды является ключом и сейчас берётся какая-то рандомная команда из двух. При этом команда влияет на UID и все UIDы питонячей протогенерации мигают. От фатальных проблем нас спасает только то, что protobuf-ы на самом деле одинаковые. И даже это не факт - сейчас ты патчишь какие-то рандомные либы включая таковые для 3го питона.
Мы тут конечно редиски - мы в целом контролируем клэши аутпутов, но не в мультимодулях - там часто бывает что одна и та же команда оказывается в нескольких вариантах мультимодуля (потому что оно по дефолту сейчас так себя ведёт). Мы хотим это зачинить (сделать отдельный подмодуль под кодген и отселить всякие RUN_PROGRAM туда) - но это много работы и мы не успели.
План такой:
1. мы откатываем твой фикс
2. отдельно стабилизируем раздельные команды генерации для 2го и 3го питона
3. накатываем обратно отревеченные тут правки.
916a5456c4e901ab2cda0841b4167e16397e83c4
Diffstat (limited to 'build')
-rw-r--r-- | build/plugins/pybuild.py | 3 | ||||
-rw-r--r-- | build/scripts/link_exe.py | 88 |
2 files changed, 1 insertions, 90 deletions
diff --git a/build/plugins/pybuild.py b/build/plugins/pybuild.py index ccb6d5b98f..526f98b3cf 100644 --- a/build/plugins/pybuild.py +++ b/build/plugins/pybuild.py @@ -655,8 +655,7 @@ def onpy_srcs(unit, *args): if protos: if not upath.startswith(py_runtime_path) and not upath.startswith(builtin_proto_path): - if 'protobuf_old' not in upath: - unit.onpeerdir(py_runtime_path) + unit.onpeerdir(py_runtime_path) unit.onpeerdir(unit.get("PY_PROTO_DEPS").split()) diff --git a/build/scripts/link_exe.py b/build/scripts/link_exe.py index 0d28343116..9ad94f23bf 100644 --- a/build/scripts/link_exe.py +++ b/build/scripts/link_exe.py @@ -302,99 +302,11 @@ def parse_args(): return parser.parse_args() -def run(*args): - # print >>sys.stderr, args - return subprocess.check_output(list(args), shell=False).strip() - - -def gen_renames_1(d): - for l in d.split('\n'): - l = l.strip() - - if ' ' in l: - yield l.split(' ')[-1] - -def gen_renames_2(p, d): - for s in gen_renames_1(d): - yield s + ' ' + p + s - -def gen_renames(p, d): - return '\n'.join(gen_renames_2(p, d)).strip() + '\n' - -def rename_syms(where, ret, libs): - p = 'py2_' - - # join libs - run(where + 'llvm-ar', 'qL', ret, *libs) - - # find symbols to rename - syms = run(where + 'llvm-nm', '--extern-only', '--defined-only', '-A', ret) - - # prepare rename plan - renames = gen_renames(p, syms) - - with open('syms', 'w') as f: - f.write(renames) - - # rename symbols - run(where + 'llvm-objcopy', '--redefine-syms=syms', ret) - - # back-rename some symbols - args = [ - where + 'llvm-objcopy', - '--redefine-sym', - p + 'init_api_implementation=init6google8protobuf8internal19_api_implementation', - '--redefine-sym', - p + 'init_message=init6google8protobuf5pyext8_message', - '--redefine-sym', - p + 'init6google8protobuf8internal19_api_implementation=init6google8protobuf8internal19_api_implementation', - '--redefine-sym', - p + 'init6google8protobuf5pyext8_message=init6google8protobuf5pyext8_message', - '--redefine-sym', - p + '_init6google8protobuf8internal19_api_implementation=_init6google8protobuf8internal19_api_implementation', - '--redefine-sym', - p + '_init6google8protobuf5pyext8_message=_init6google8protobuf5pyext8_message', - ret - ] - - run(*args) - - return ret - - -def fix_py2(cmd): - if 'protobuf_old' not in str(cmd): - return cmd - - def my(x): - for v in ['libcontrib-libs-protobuf_old.a', 'libpypython-protobuf-py2.a']: - if v in x: - return True - - return False - - old = [] - lib = [] - - where = '' - - for x in cmd: - if '/clang++' in x: - where = os.path.dirname(x) + '/' - - if my(x): - lib.append(x) - else: - old.append(x) - - return old + [rename_syms(where, 'libprotoherobora.a', lib)] - if __name__ == '__main__': opts, args = parse_args() args = pcf.skip_markers(args) cmd = fix_blas_resolving(args) - cmd = fix_py2(cmd) cmd = remove_excessive_flags(cmd) if opts.musl: cmd = fix_cmd_for_musl(cmd) |