summaryrefslogtreecommitdiff
path: root/xmake
diff options
context:
space:
mode:
authorruki <[email protected]>2025-12-12 23:12:57 +0800
committerruki <[email protected]>2025-12-12 23:12:57 +0800
commit97c17dc338a66bbbae36eef59c4d4ca537bff8ec (patch)
tree3cb7a0c517871c44265d709bb91102cac520b73c /xmake
parentb7e9857eff9a4425237e8eeb5c666fb4570eec76 (diff)
add deplibs in binutils
Diffstat (limited to 'xmake')
-rw-r--r--xmake/core/base/binutils.lua10
-rw-r--r--xmake/core/sandbox/modules/import/core/base/binutils.lua10
-rw-r--r--xmake/modules/utils/binary/deplibs.lua8
3 files changed, 27 insertions, 1 deletions
diff --git a/xmake/core/base/binutils.lua b/xmake/core/base/binutils.lua
index 9ddcfcf0c..af71e8ae7 100644
--- a/xmake/core/base/binutils.lua
+++ b/xmake/core/base/binutils.lua
@@ -30,6 +30,7 @@ binutils._bin2coff = binutils._bin2coff or binutils.bin2coff
binutils._bin2macho = binutils._bin2macho or binutils.bin2macho
binutils._bin2elf = binutils._bin2elf or binutils.bin2elf
binutils._readsyms = binutils._readsyms or binutils.readsyms
+binutils._deplibs = binutils._deplibs or binutils.deplibs
binutils._extractlib = binutils._extractlib or binutils.extractlib
-- generate c/c++ code from the binary file
@@ -101,6 +102,15 @@ function binutils.readsyms(binaryfile)
end
end
+-- get dependent libraries from binary file (auto-detect format: COFF, ELF, or Mach-O)
+function binutils.deplibs(binaryfile)
+ if binutils._deplibs then
+ return binutils._deplibs(binaryfile)
+ else
+ return nil, "deplibs: C implementation not available"
+ end
+end
+
-- extract static library to directory
-- Supports AR format (.a) and MSVC lib format (.lib)
-- @param libraryfile the static library file path (.a or .lib)
diff --git a/xmake/core/sandbox/modules/import/core/base/binutils.lua b/xmake/core/sandbox/modules/import/core/base/binutils.lua
index 5bc0e4f72..11f432340 100644
--- a/xmake/core/sandbox/modules/import/core/base/binutils.lua
+++ b/xmake/core/sandbox/modules/import/core/base/binutils.lua
@@ -52,6 +52,16 @@ function sandbox_core_base_binutils.readsyms(binaryfile)
end
end
+-- get dependent libraries from binary file (auto-detect format: ELF, COFF, Mach-O)
+function sandbox_core_base_binutils.deplibs(binaryfile)
+ local libs, errors = binutils.deplibs(binaryfile)
+ if libs then
+ return libs
+ else
+ raise("deplibs: %s", errors or "unknown errors")
+ end
+end
+
-- extract static library to directory
function sandbox_core_base_binutils.extractlib(libraryfile, outputdir, opt)
local ok, errors = binutils.extractlib(libraryfile, outputdir, opt)
diff --git a/xmake/modules/utils/binary/deplibs.lua b/xmake/modules/utils/binary/deplibs.lua
index 30c1e6b4f..1de8056fd 100644
--- a/xmake/modules/utils/binary/deplibs.lua
+++ b/xmake/modules/utils/binary/deplibs.lua
@@ -25,6 +25,11 @@ import("core.base.hashset")
import("core.tool.toolchain")
import("lib.detect.find_tool")
import("utils.binary.rpath", {alias = "rpath_utils"})
+import("core.base.binutils")
+
+function _get_depends_by_binutils(binaryfile, opt)
+ return binutils.deplibs(binaryfile)
+end
function _get_depends_by_dumpbin(binaryfile, opt)
local depends
@@ -215,7 +220,8 @@ function _get_depends(binaryfile, opt)
opt = opt or {}
local ops = {
_get_depends_by_objdump,
- _get_depends_by_readelf
+ _get_depends_by_readelf,
+ _get_depends_by_binutils
}
if is_host("windows") then
table.insert(ops, 1, _get_depends_by_dumpbin)