diff --git a/CMakeLists.txt b/CMakeLists.txt index a186671..66de883 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -238,6 +238,14 @@ nanobind_add_stub( DEPENDS llvmpym_ext ) +nanobind_add_stub( + llvmpym_ext_stub_object + MODULE llvmpym_ext.object + OUTPUT object.pyi + PYTHON_PATH $ + DEPENDS llvmpym_ext +) + # Install directive for scikit-build-core install(TARGETS llvmpym_ext LIBRARY DESTINATION ${SKBUILD_PROJECT_NAME}) @@ -255,5 +263,6 @@ install(FILES ${CMAKE_BINARY_DIR}/bit_reader.pyi ${CMAKE_BINARY_DIR}/disassembler.pyi ${CMAKE_BINARY_DIR}/linker.pyi + ${CMAKE_BINARY_DIR}/object.pyi DESTINATION ${SKBUILD_PROJECT_NAME}/llvmpym_ext) diff --git a/src/llvm/Object.cpp b/src/llvm/Object.cpp new file mode 100644 index 0000000..5010cb5 --- /dev/null +++ b/src/llvm/Object.cpp @@ -0,0 +1,61 @@ +#include "Object.h" + +#include +#include +#include +#include "types_priv.h" + +namespace nb = nanobind; +using namespace nb::literals; + +void populateObject(nb::module_ &m) { + nb::enum_(m, "BinaryType", "BinaryType") + .value("LLVMBinaryTypeArchive", + LLVMBinaryType::LLVMBinaryTypeArchive, + "Archive file.") + .value("LLVMBinaryTypeMachOUniversalBinary", + LLVMBinaryType::LLVMBinaryTypeMachOUniversalBinary, + "Mach-O Universal Binary file.") + .value("LLVMBinaryTypeCOFFImportFile", + LLVMBinaryType::LLVMBinaryTypeCOFFImportFile, + "COFF Import file.") + .value("LLVMBinaryTypeIR", + LLVMBinaryType::LLVMBinaryTypeIR, + "LLVM IR.") + .value("LLVMBinaryTypeWinRes", + LLVMBinaryType::LLVMBinaryTypeWinRes, + "Windows resource (.res) file.") + .value("LLVMBinaryTypeCOFF", + LLVMBinaryType::LLVMBinaryTypeCOFF, + "COFF Object file.") + .value("LLVMBinaryTypeELF32L", + LLVMBinaryType::LLVMBinaryTypeELF32L, + "ELF 32-bit, little endian.") + .value("LLVMBinaryTypeELF32B", + LLVMBinaryType::LLVMBinaryTypeELF32B, + "ELF 32-bit, big endian.") + .value("LLVMBinaryTypeELF64L", + LLVMBinaryType::LLVMBinaryTypeELF64L, + "ELF 64-bit, little endian.") + .value("LLVMBinaryTypeELF64B", + LLVMBinaryType::LLVMBinaryTypeELF64B, + "ELF 64-bit, big endian.") + .value("LLVMBinaryTypeMachO32L", + LLVMBinaryType::LLVMBinaryTypeMachO32L, + "MachO 32-bit, little endian.") + .value("LLVMBinaryTypeMachO32B", + LLVMBinaryType::LLVMBinaryTypeMachO32B, + "MachO 32-bit, big endian.") + .value("LLVMBinaryTypeMachO64L", + LLVMBinaryType::LLVMBinaryTypeMachO64L, + "MachO 64-bit, little endian.") + .value("LLVMBinaryTypeMachO64B", + LLVMBinaryType::LLVMBinaryTypeMachO64B, + "MachO 64-bit, big endian.") + .value("LLVMBinaryTypeWasm", + LLVMBinaryType::LLVMBinaryTypeWasm, + "Web Assembly.") + .value("LLVMBinaryTypeOffload", + LLVMBinaryType::LLVMBinaryTypeOffload, + "Offloading fatbinary."); +} diff --git a/src/llvm/Object.h b/src/llvm/Object.h new file mode 100644 index 0000000..e1dd08f --- /dev/null +++ b/src/llvm/Object.h @@ -0,0 +1,10 @@ +#ifndef LLVMPYM_OBJECT_H +#define LLVMPYM_OBJECT_H + +#include + +void populateObject(nanobind::module_ &m); + + + +#endif diff --git a/src/llvmpym/object.py b/src/llvmpym/object.py new file mode 100644 index 0000000..7e63111 --- /dev/null +++ b/src/llvmpym/object.py @@ -0,0 +1 @@ +from .llvmpym_ext.object import * diff --git a/src/llvmpym_ext.cpp b/src/llvmpym_ext.cpp index 030d956..68ba39a 100644 --- a/src/llvmpym_ext.cpp +++ b/src/llvmpym_ext.cpp @@ -10,6 +10,7 @@ #include "llvm/Disassembler.h" #include "llvm/BitReader.h" #include "llvm/Linker.h" +#include "llvm/Object.h" namespace nb = nanobind; using namespace nb::literals; @@ -51,4 +52,6 @@ NB_MODULE(llvmpym_ext, m) { auto linkerModule = m.def_submodule("linker", "linker"); populateLinker(linkerModule); + auto objectModule = m.def_submodule("object", "object"); + populateObject(objectModule); }