[llvm] [llvm-readobj] Add a reusable LLVMReadobjDriver library (PR #222917)

Anutosh Bhat via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 14 22:20:58 PDT 2026


https://github.com/anutosh491 updated https://github.com/llvm/llvm-project/pull/222917

>From 6822294af1993576e19c9768d17ee7077036ae9d Mon Sep 17 00:00:00 2001
From: anutosh491 <andersonbhat491 at gmail.com>
Date: Fri, 11 Sep 2026 16:20:18 +0530
Subject: [PATCH] [llvm-readobj] Add a reusable LLVMReadobjDriver library

---
 llvm/tools/llvm-readobj/CMakeLists.txt        | 20 ++---------
 .../llvm-readobj/{ => lib}/ARMEHABIPrinter.h  |  0
 .../{ => lib}/ARMWinEHPrinter.cpp             |  0
 .../llvm-readobj/{ => lib}/ARMWinEHPrinter.h  |  0
 llvm/tools/llvm-readobj/lib/CMakeLists.txt    | 21 +++++++++++
 .../llvm-readobj/{ => lib}/COFFDumper.cpp     |  0
 .../{ => lib}/COFFImportDumper.cpp            |  0
 .../{ => lib}/DwarfCFIEHPrinter.h             |  0
 .../llvm-readobj/{ => lib}/ELFDumper.cpp      |  0
 .../llvm-readobj/{ => lib}/MachODumper.cpp    |  0
 .../llvm-readobj/{ => lib}/ObjDumper.cpp      |  0
 llvm/tools/llvm-readobj/{ => lib}/ObjDumper.h |  0
 llvm/tools/llvm-readobj/{ => lib}/Opts.td     |  0
 .../llvm-readobj/{ => lib}/StackMapPrinter.h  |  0
 .../llvm-readobj/{ => lib}/WasmDumper.cpp     |  0
 .../llvm-readobj/{ => lib}/Win64EHDumper.cpp  |  0
 .../llvm-readobj/{ => lib}/Win64EHDumper.h    |  0
 .../{ => lib}/WindowsResourceDumper.cpp       |  0
 .../{ => lib}/WindowsResourceDumper.h         |  0
 .../llvm-readobj/{ => lib}/XCOFFDumper.cpp    |  0
 .../llvm-readobj/{ => lib}/llvm-readobj.cpp   |  0
 .../llvm-readobj/{ => lib}/llvm-readobj.h     |  0
 .../llvm/tools/llvm-readobj/BUILD.gn          | 32 +----------------
 .../llvm/tools/llvm-readobj/lib/BUILD.gn      | 35 +++++++++++++++++++
 .../llvm-project-overlay/llvm/BUILD.bazel     | 10 +++---
 25 files changed, 65 insertions(+), 53 deletions(-)
 rename llvm/tools/llvm-readobj/{ => lib}/ARMEHABIPrinter.h (100%)
 rename llvm/tools/llvm-readobj/{ => lib}/ARMWinEHPrinter.cpp (100%)
 rename llvm/tools/llvm-readobj/{ => lib}/ARMWinEHPrinter.h (100%)
 create mode 100644 llvm/tools/llvm-readobj/lib/CMakeLists.txt
 rename llvm/tools/llvm-readobj/{ => lib}/COFFDumper.cpp (100%)
 rename llvm/tools/llvm-readobj/{ => lib}/COFFImportDumper.cpp (100%)
 rename llvm/tools/llvm-readobj/{ => lib}/DwarfCFIEHPrinter.h (100%)
 rename llvm/tools/llvm-readobj/{ => lib}/ELFDumper.cpp (100%)
 rename llvm/tools/llvm-readobj/{ => lib}/MachODumper.cpp (100%)
 rename llvm/tools/llvm-readobj/{ => lib}/ObjDumper.cpp (100%)
 rename llvm/tools/llvm-readobj/{ => lib}/ObjDumper.h (100%)
 rename llvm/tools/llvm-readobj/{ => lib}/Opts.td (100%)
 rename llvm/tools/llvm-readobj/{ => lib}/StackMapPrinter.h (100%)
 rename llvm/tools/llvm-readobj/{ => lib}/WasmDumper.cpp (100%)
 rename llvm/tools/llvm-readobj/{ => lib}/Win64EHDumper.cpp (100%)
 rename llvm/tools/llvm-readobj/{ => lib}/Win64EHDumper.h (100%)
 rename llvm/tools/llvm-readobj/{ => lib}/WindowsResourceDumper.cpp (100%)
 rename llvm/tools/llvm-readobj/{ => lib}/WindowsResourceDumper.h (100%)
 rename llvm/tools/llvm-readobj/{ => lib}/XCOFFDumper.cpp (100%)
 rename llvm/tools/llvm-readobj/{ => lib}/llvm-readobj.cpp (100%)
 rename llvm/tools/llvm-readobj/{ => lib}/llvm-readobj.h (100%)
 create mode 100644 llvm/utils/gn/secondary/llvm/tools/llvm-readobj/lib/BUILD.gn

diff --git a/llvm/tools/llvm-readobj/CMakeLists.txt b/llvm/tools/llvm-readobj/CMakeLists.txt
index 0051f87b3c103..488cc1864c994 100644
--- a/llvm/tools/llvm-readobj/CMakeLists.txt
+++ b/llvm/tools/llvm-readobj/CMakeLists.txt
@@ -9,27 +9,13 @@ set(LLVM_LINK_COMPONENTS
   TargetParser
   )
 
-set(LLVM_TARGET_DEFINITIONS Opts.td)
-tablegen(LLVM Opts.inc -gen-opt-parser-defs)
-add_public_tablegen_target(ReadobjOptsTableGen)
-
 add_llvm_tool(llvm-readobj
-  ARMWinEHPrinter.cpp
-  COFFDumper.cpp
-  COFFImportDumper.cpp
-  ELFDumper.cpp
-  llvm-readobj.cpp
-  MachODumper.cpp
-  ObjDumper.cpp
-  WasmDumper.cpp
-  Win64EHDumper.cpp
-  WindowsResourceDumper.cpp
-  XCOFFDumper.cpp
-  DEPENDS
-  ReadobjOptsTableGen
   GENERATE_DRIVER
   )
 
+add_subdirectory(lib)
+target_link_libraries(llvm-readobj PRIVATE LLVMReadobjDriver)
+
 setup_host_tool(llvm-readobj LLVM_READOBJ llvm_readobj_exe llvm_readobj_target)
 
 add_llvm_tool_symlink(llvm-readelf llvm-readobj)
diff --git a/llvm/tools/llvm-readobj/ARMEHABIPrinter.h b/llvm/tools/llvm-readobj/lib/ARMEHABIPrinter.h
similarity index 100%
rename from llvm/tools/llvm-readobj/ARMEHABIPrinter.h
rename to llvm/tools/llvm-readobj/lib/ARMEHABIPrinter.h
diff --git a/llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp b/llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/ARMWinEHPrinter.cpp
rename to llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.cpp
diff --git a/llvm/tools/llvm-readobj/ARMWinEHPrinter.h b/llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.h
similarity index 100%
rename from llvm/tools/llvm-readobj/ARMWinEHPrinter.h
rename to llvm/tools/llvm-readobj/lib/ARMWinEHPrinter.h
diff --git a/llvm/tools/llvm-readobj/lib/CMakeLists.txt b/llvm/tools/llvm-readobj/lib/CMakeLists.txt
new file mode 100644
index 0000000000000..a779934e61a8c
--- /dev/null
+++ b/llvm/tools/llvm-readobj/lib/CMakeLists.txt
@@ -0,0 +1,21 @@
+set(LLVM_TARGET_DEFINITIONS Opts.td)
+tablegen(LLVM Opts.inc -gen-opt-parser-defs)
+add_public_tablegen_target(ReadobjOptsTableGen)
+
+add_llvm_library(LLVMReadobjDriver
+  STATIC
+  ARMWinEHPrinter.cpp
+  COFFDumper.cpp
+  COFFImportDumper.cpp
+  ELFDumper.cpp
+  llvm-readobj.cpp
+  MachODumper.cpp
+  ObjDumper.cpp
+  WasmDumper.cpp
+  Win64EHDumper.cpp
+  WindowsResourceDumper.cpp
+  XCOFFDumper.cpp
+
+  DEPENDS
+  ReadobjOptsTableGen
+  )
diff --git a/llvm/tools/llvm-readobj/COFFDumper.cpp b/llvm/tools/llvm-readobj/lib/COFFDumper.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/COFFDumper.cpp
rename to llvm/tools/llvm-readobj/lib/COFFDumper.cpp
diff --git a/llvm/tools/llvm-readobj/COFFImportDumper.cpp b/llvm/tools/llvm-readobj/lib/COFFImportDumper.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/COFFImportDumper.cpp
rename to llvm/tools/llvm-readobj/lib/COFFImportDumper.cpp
diff --git a/llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h b/llvm/tools/llvm-readobj/lib/DwarfCFIEHPrinter.h
similarity index 100%
rename from llvm/tools/llvm-readobj/DwarfCFIEHPrinter.h
rename to llvm/tools/llvm-readobj/lib/DwarfCFIEHPrinter.h
diff --git a/llvm/tools/llvm-readobj/ELFDumper.cpp b/llvm/tools/llvm-readobj/lib/ELFDumper.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/ELFDumper.cpp
rename to llvm/tools/llvm-readobj/lib/ELFDumper.cpp
diff --git a/llvm/tools/llvm-readobj/MachODumper.cpp b/llvm/tools/llvm-readobj/lib/MachODumper.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/MachODumper.cpp
rename to llvm/tools/llvm-readobj/lib/MachODumper.cpp
diff --git a/llvm/tools/llvm-readobj/ObjDumper.cpp b/llvm/tools/llvm-readobj/lib/ObjDumper.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/ObjDumper.cpp
rename to llvm/tools/llvm-readobj/lib/ObjDumper.cpp
diff --git a/llvm/tools/llvm-readobj/ObjDumper.h b/llvm/tools/llvm-readobj/lib/ObjDumper.h
similarity index 100%
rename from llvm/tools/llvm-readobj/ObjDumper.h
rename to llvm/tools/llvm-readobj/lib/ObjDumper.h
diff --git a/llvm/tools/llvm-readobj/Opts.td b/llvm/tools/llvm-readobj/lib/Opts.td
similarity index 100%
rename from llvm/tools/llvm-readobj/Opts.td
rename to llvm/tools/llvm-readobj/lib/Opts.td
diff --git a/llvm/tools/llvm-readobj/StackMapPrinter.h b/llvm/tools/llvm-readobj/lib/StackMapPrinter.h
similarity index 100%
rename from llvm/tools/llvm-readobj/StackMapPrinter.h
rename to llvm/tools/llvm-readobj/lib/StackMapPrinter.h
diff --git a/llvm/tools/llvm-readobj/WasmDumper.cpp b/llvm/tools/llvm-readobj/lib/WasmDumper.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/WasmDumper.cpp
rename to llvm/tools/llvm-readobj/lib/WasmDumper.cpp
diff --git a/llvm/tools/llvm-readobj/Win64EHDumper.cpp b/llvm/tools/llvm-readobj/lib/Win64EHDumper.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/Win64EHDumper.cpp
rename to llvm/tools/llvm-readobj/lib/Win64EHDumper.cpp
diff --git a/llvm/tools/llvm-readobj/Win64EHDumper.h b/llvm/tools/llvm-readobj/lib/Win64EHDumper.h
similarity index 100%
rename from llvm/tools/llvm-readobj/Win64EHDumper.h
rename to llvm/tools/llvm-readobj/lib/Win64EHDumper.h
diff --git a/llvm/tools/llvm-readobj/WindowsResourceDumper.cpp b/llvm/tools/llvm-readobj/lib/WindowsResourceDumper.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/WindowsResourceDumper.cpp
rename to llvm/tools/llvm-readobj/lib/WindowsResourceDumper.cpp
diff --git a/llvm/tools/llvm-readobj/WindowsResourceDumper.h b/llvm/tools/llvm-readobj/lib/WindowsResourceDumper.h
similarity index 100%
rename from llvm/tools/llvm-readobj/WindowsResourceDumper.h
rename to llvm/tools/llvm-readobj/lib/WindowsResourceDumper.h
diff --git a/llvm/tools/llvm-readobj/XCOFFDumper.cpp b/llvm/tools/llvm-readobj/lib/XCOFFDumper.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/XCOFFDumper.cpp
rename to llvm/tools/llvm-readobj/lib/XCOFFDumper.cpp
diff --git a/llvm/tools/llvm-readobj/llvm-readobj.cpp b/llvm/tools/llvm-readobj/lib/llvm-readobj.cpp
similarity index 100%
rename from llvm/tools/llvm-readobj/llvm-readobj.cpp
rename to llvm/tools/llvm-readobj/lib/llvm-readobj.cpp
diff --git a/llvm/tools/llvm-readobj/llvm-readobj.h b/llvm/tools/llvm-readobj/lib/llvm-readobj.h
similarity index 100%
rename from llvm/tools/llvm-readobj/llvm-readobj.h
rename to llvm/tools/llvm-readobj/lib/llvm-readobj.h
diff --git a/llvm/utils/gn/secondary/llvm/tools/llvm-readobj/BUILD.gn b/llvm/utils/gn/secondary/llvm/tools/llvm-readobj/BUILD.gn
index 2fd748e40bebc..f7b93a4c0c6b0 100644
--- a/llvm/utils/gn/secondary/llvm/tools/llvm-readobj/BUILD.gn
+++ b/llvm/utils/gn/secondary/llvm/tools/llvm-readobj/BUILD.gn
@@ -1,13 +1,7 @@
 import("//llvm/tools/binutils_symlinks.gni")
-import("//llvm/utils/TableGen/tablegen.gni")
 import("//llvm/utils/gn/build/driver_executable.gni")
 import("//llvm/utils/gn/build/symlink_or_copy.gni")
 
-tablegen("Opts") {
-  visibility = [ ":llvm-readobj" ]
-  args = [ "-gen-opt-parser-defs" ]
-}
-
 symlinks = [ "llvm-readelf" ]
 if (llvm_install_binutils_symlinks) {
   symlinks += [ "readelf" ]
@@ -29,29 +23,5 @@ group("symlinks") {
 }
 
 driver_executable("llvm-readobj") {
-  deps = [
-    ":Opts",
-    "//llvm/lib/BinaryFormat",
-    "//llvm/lib/DebugInfo/CodeView",
-    "//llvm/lib/DebugInfo/DWARF",
-    "//llvm/lib/DebugInfo/MSF",
-    "//llvm/lib/DebugInfo/PDB",
-    "//llvm/lib/Object",
-    "//llvm/lib/Option",
-    "//llvm/lib/Support",
-    "//llvm/lib/TargetParser",
-  ]
-  sources = [
-    "ARMWinEHPrinter.cpp",
-    "COFFDumper.cpp",
-    "COFFImportDumper.cpp",
-    "ELFDumper.cpp",
-    "MachODumper.cpp",
-    "ObjDumper.cpp",
-    "WasmDumper.cpp",
-    "Win64EHDumper.cpp",
-    "WindowsResourceDumper.cpp",
-    "XCOFFDumper.cpp",
-    "llvm-readobj.cpp",
-  ]
+  deps = [ "lib" ]
 }
diff --git a/llvm/utils/gn/secondary/llvm/tools/llvm-readobj/lib/BUILD.gn b/llvm/utils/gn/secondary/llvm/tools/llvm-readobj/lib/BUILD.gn
new file mode 100644
index 0000000000000..e34ad76f1f18c
--- /dev/null
+++ b/llvm/utils/gn/secondary/llvm/tools/llvm-readobj/lib/BUILD.gn
@@ -0,0 +1,35 @@
+import("//llvm/utils/TableGen/tablegen.gni")
+
+tablegen("Opts") {
+  visibility = [ ":lib" ]
+  args = [ "-gen-opt-parser-defs" ]
+}
+
+static_library("lib") {
+  output_name = "LLVMReadobjDriver"
+  deps = [
+    ":Opts",
+    "//llvm/lib/BinaryFormat",
+    "//llvm/lib/DebugInfo/CodeView",
+    "//llvm/lib/DebugInfo/DWARF",
+    "//llvm/lib/DebugInfo/MSF",
+    "//llvm/lib/DebugInfo/PDB",
+    "//llvm/lib/Object",
+    "//llvm/lib/Option",
+    "//llvm/lib/Support",
+    "//llvm/lib/TargetParser",
+  ]
+  sources = [
+    "ARMWinEHPrinter.cpp",
+    "COFFDumper.cpp",
+    "COFFImportDumper.cpp",
+    "ELFDumper.cpp",
+    "MachODumper.cpp",
+    "ObjDumper.cpp",
+    "WasmDumper.cpp",
+    "Win64EHDumper.cpp",
+    "WindowsResourceDumper.cpp",
+    "XCOFFDumper.cpp",
+    "llvm-readobj.cpp",
+  ]
+}
diff --git a/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel b/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel
index b7765075c72fb..8d08bf78b5159 100644
--- a/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel
+++ b/utils/bazel/llvm-project-overlay/llvm/BUILD.bazel
@@ -6315,18 +6315,18 @@ binary_alias(
 
 gentbl_cc_library(
     name = "ReadobjOptsTableGen",
-    strip_include_prefix = "tools/llvm-readobj",
-    tbl_outs = {"tools/llvm-readobj/Opts.inc": ["-gen-opt-parser-defs"]},
+    strip_include_prefix = "tools/llvm-readobj/lib",
+    tbl_outs = {"tools/llvm-readobj/lib/Opts.inc": ["-gen-opt-parser-defs"]},
     tblgen = ":llvm-tblgen",
-    td_file = "tools/llvm-readobj/Opts.td",
+    td_file = "tools/llvm-readobj/lib/Opts.td",
     deps = [":OptParserTdFiles"],
 )
 
 cc_library(
     name = "llvm-readobj-lib",
     srcs = glob([
-        "tools/llvm-readobj/*.cpp",
-        "tools/llvm-readobj/*.h",
+        "tools/llvm-readobj/lib/*.cpp",
+        "tools/llvm-readobj/lib/*.h",
     ]),
     copts = llvm_copts,
     deps = [



More information about the llvm-commits mailing list