[llvm] llvm-ir2vec python bindings scaffolding (PR #176571)
Nishant Sachdeva via llvm-commits
llvm-commits at lists.llvm.org
Sat Jan 17 06:51:48 PST 2026
https://github.com/nishant-sachdeva created https://github.com/llvm/llvm-project/pull/176571
None
>From 98b68bbbf94c662f5f18083adfe6ceae1ce847e2 Mon Sep 17 00:00:00 2001
From: nishant-sachdeva <nishant.sachdeva at research.iiit.ac.in>
Date: Sat, 17 Jan 2026 18:56:03 +0530
Subject: [PATCH] Work Commit. llvm-ir2vec python bindings scaffolding
---
llvm/test/lit.site.cfg.py.in | 1 +
.../tools/llvm-ir2vec/bindings/ir2vec_bindings.py | 6 ++++++
.../test/tools/llvm-ir2vec/bindings/lit.local.cfg | 9 +++++++++
llvm/tools/llvm-ir2vec/CMakeLists.txt | 11 +++++++++++
llvm/tools/llvm-ir2vec/bindings/CMakeLists.txt | 9 +++++++++
.../llvm-ir2vec/bindings/ir2vec_bindings.cpp | 15 +++++++++++++++
6 files changed, 51 insertions(+)
create mode 100644 llvm/test/tools/llvm-ir2vec/bindings/ir2vec_bindings.py
create mode 100644 llvm/test/tools/llvm-ir2vec/bindings/lit.local.cfg
create mode 100644 llvm/tools/llvm-ir2vec/bindings/CMakeLists.txt
create mode 100644 llvm/tools/llvm-ir2vec/bindings/ir2vec_bindings.cpp
diff --git a/llvm/test/lit.site.cfg.py.in b/llvm/test/lit.site.cfg.py.in
index 193f351ef52ef..6fe48f21cc685 100644
--- a/llvm/test/lit.site.cfg.py.in
+++ b/llvm/test/lit.site.cfg.py.in
@@ -7,6 +7,7 @@ config.target_triple = "@LLVM_TARGET_TRIPLE@"
config.llvm_src_root = path(r"@LLVM_SOURCE_DIR@")
config.llvm_obj_root = path(r"@LLVM_BINARY_DIR@")
config.llvm_tools_dir = lit_config.substitute(path(r"@LLVM_TOOLS_DIR@"))
+config.llvm_ir2vec_test_python_bindings = @LLVM_IR2VEC_TEST_PYTHON_BINDINGS@
config.llvm_lib_dir = lit_config.substitute(path(r"@LLVM_LIBS_DIR@"))
config.llvm_shlib_dir = lit_config.substitute(path(r"@SHLIBDIR@"))
config.llvm_shlib_ext = "@SHLIBEXT@"
diff --git a/llvm/test/tools/llvm-ir2vec/bindings/ir2vec_bindings.py b/llvm/test/tools/llvm-ir2vec/bindings/ir2vec_bindings.py
new file mode 100644
index 0000000000000..3402cdebffe99
--- /dev/null
+++ b/llvm/test/tools/llvm-ir2vec/bindings/ir2vec_bindings.py
@@ -0,0 +1,6 @@
+# RUN: env PYTHONPATH=%llvm_lib_dir %python %s
+
+import py_ir2vec
+print("SUCCESS: Module imported")
+
+# CHECK: SUCCESS: Module imported
diff --git a/llvm/test/tools/llvm-ir2vec/bindings/lit.local.cfg b/llvm/test/tools/llvm-ir2vec/bindings/lit.local.cfg
new file mode 100644
index 0000000000000..af02c9e434923
--- /dev/null
+++ b/llvm/test/tools/llvm-ir2vec/bindings/lit.local.cfg
@@ -0,0 +1,9 @@
+import sys
+
+# Only run if user explicitly enabled bindings
+if not config.llvm_ir2vec_test_python_bindings:
+ config.unsupported = True
+else:
+ config.substitutions.append(('%python', sys.executable))
+ config.substitutions.append(('%llvm_lib_dir', config.llvm_lib_dir))
+ config.suffixes = ['.py']
diff --git a/llvm/tools/llvm-ir2vec/CMakeLists.txt b/llvm/tools/llvm-ir2vec/CMakeLists.txt
index c5da70d6eb73a..9d2e760d21b98 100644
--- a/llvm/tools/llvm-ir2vec/CMakeLists.txt
+++ b/llvm/tools/llvm-ir2vec/CMakeLists.txt
@@ -32,3 +32,14 @@ add_llvm_tool(llvm-ir2vec
target_include_directories(llvm-ir2vec PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/utils)
target_link_libraries(llvm-ir2vec PRIVATE emb_utils)
+
+option(LLVM_IR2VEC_ENABLE_PYTHON_BINDINGS
+ "Build Python bindings for llvm-ir2vec"
+ OFF)
+
+set(LLVM_IR2VEC_TEST_PYTHON_BINDINGS False CACHE INTERNAL "")
+
+if(LLVM_IR2VEC_ENABLE_PYTHON_BINDINGS)
+ add_subdirectory(bindings)
+ set(LLVM_IR2VEC_TEST_PYTHON_BINDINGS True CACHE INTERNAL "" FORCE)
+endif()
diff --git a/llvm/tools/llvm-ir2vec/bindings/CMakeLists.txt b/llvm/tools/llvm-ir2vec/bindings/CMakeLists.txt
new file mode 100644
index 0000000000000..ed379d62bf79b
--- /dev/null
+++ b/llvm/tools/llvm-ir2vec/bindings/CMakeLists.txt
@@ -0,0 +1,9 @@
+find_package(Python3 COMPONENTS Interpreter Development.Module REQUIRED)
+find_package(pybind11 CONFIG REQUIRED)
+
+set_target_properties(emb_utils PROPERTIES POSITION_INDEPENDENT_CODE ON)
+
+pybind11_add_module(py_ir2vec MODULE ir2vec_bindings.cpp)
+target_link_libraries(py_ir2vec PRIVATE emb_utils)
+
+message(STATUS "Python bindings for llvm-ir2vec will be built")
diff --git a/llvm/tools/llvm-ir2vec/bindings/ir2vec_bindings.cpp b/llvm/tools/llvm-ir2vec/bindings/ir2vec_bindings.cpp
new file mode 100644
index 0000000000000..cd4ea1630d149
--- /dev/null
+++ b/llvm/tools/llvm-ir2vec/bindings/ir2vec_bindings.cpp
@@ -0,0 +1,15 @@
+//===- ir2vec_bindings.cpp - Python Bindings for IR2Vec ------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#include <pybind11/pybind11.h>
+
+namespace py = pybind11;
+
+PYBIND11_MODULE(py_ir2vec, m) {
+ m.doc() = "Python bindings for IR2Vec";
+}
More information about the llvm-commits
mailing list