aboutsummaryrefslogtreecommitdiffstats
path: root/build
diff options
context:
space:
mode:
authorspreis <spreis@yandex-team.com>2024-03-28 11:07:37 +0300
committerspreis <spreis@yandex-team.com>2024-03-28 11:17:45 +0300
commit2de742ce97267f0469cf0c9bd384488c91442bce (patch)
tree15daa45ea6fb7ecfd1e07759c7bbd6fba92075a6 /build
parent48212452a70da88a5e4b814979dd82f22379801f (diff)
downloadydb-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.py3
-rw-r--r--build/scripts/link_exe.py88
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)