diff options
| author | ruki <[email protected]> | 2025-12-12 23:12:57 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2025-12-12 23:12:57 +0800 |
| commit | 97c17dc338a66bbbae36eef59c4d4ca537bff8ec (patch) | |
| tree | 3cb7a0c517871c44265d709bb91102cac520b73c /xmake | |
| parent | b7e9857eff9a4425237e8eeb5c666fb4570eec76 (diff) | |
add deplibs in binutils
Diffstat (limited to 'xmake')
| -rw-r--r-- | xmake/core/base/binutils.lua | 10 | ||||
| -rw-r--r-- | xmake/core/sandbox/modules/import/core/base/binutils.lua | 10 | ||||
| -rw-r--r-- | xmake/modules/utils/binary/deplibs.lua | 8 |
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) |
