diff --git a/ex_engine/build_unified_bridge.sh b/ex_engine/build_unified_bridge.sh index e58a3b1c..bb972eac 100755 --- a/ex_engine/build_unified_bridge.sh +++ b/ex_engine/build_unified_bridge.sh @@ -27,11 +27,9 @@ build_dir = "$BUILD_DIR" try: from torch.utils.cpp_extension import load - # Find ixformer include/lib dirs for linking extra_include = ["$SCRIPT_DIR/csrc/ilu"] extra_ldflags = [] - # ixformer lib dirs — bridge needs these at runtime, not compile time for p in ["/usr/local/corex/lib64/python3/dist-packages/ixformer", "/usr/local/corex/lib64"]: if os.path.isdir(p): @@ -40,19 +38,39 @@ try: extra_ldflags.append(f"-L{p}") extra_ldflags.append(f"-Wl,-rpath,{p}") - ext = load( - name="ix_unified_bridge", - sources=[src], - extra_include_paths=extra_include, - extra_ldflags=extra_ldflags, - verbose=True, - build_directory=build_dir, - ) - funcs = [x for x in dir(ext) if not x.startswith('_')] - print(f"[build_bridge] SUCCESS via cpp_extension: {len(funcs)} functions") - print(f"[build_bridge] functions: {funcs}") - sys.exit(0) + # Use load() for compilation only. It may fail on import because + # ixformer::infer symbols need RTLD_GLOBAL preload at runtime. + # That's OK — we just need the .so file to exist. + try: + ext = load( + name="ix_unified_bridge", + sources=[src], + extra_include_paths=extra_include, + extra_ldflags=extra_ldflags, + verbose=True, + build_directory=build_dir, + ) + funcs = [x for x in dir(ext) if not x.startswith('_')] + print(f"[build_bridge] SUCCESS via cpp_extension: {len(funcs)} functions: {funcs}") + sys.exit(0) + except ImportError as ie: + # Compilation succeeded but import failed (expected: ixformer symbols unresolved) + # Check if .so was actually produced + built = glob.glob(os.path.join(build_dir, "ix_unified_bridge*.so")) + if built: + print(f"[build_bridge] COMPILED OK: {built[0]}") + print(f"[build_bridge] Import deferred to runtime (ixformer preload needed): {ie}") + sys.exit(0) + else: + print(f"[build_bridge] No .so produced: {ie}") + sys.exit(1) + except Exception as e: + # Check if .so exists from compilation before the exception + built = glob.glob(os.path.join(build_dir, "ix_unified_bridge*.so")) + if built: + print(f"[build_bridge] COMPILED OK (exception during import): {built[0]}") + sys.exit(0) print(f"[build_bridge] cpp_extension failed: {e}") sys.exit(1) PYEOF