diff options
| author | ruki <[email protected]> | 2025-12-09 22:32:28 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2025-12-09 22:32:28 +0800 |
| commit | 102507b96dab0403592c07c8760644f08ed66dff (patch) | |
| tree | c7f677536e32cdc2d74d35984f81da24fab1afc1 /xmake/core/base/binutils.lua | |
| parent | d048344bb19e409fe830bf888a4d604700a4ab5b (diff) | |
improve bin2obj
Diffstat (limited to 'xmake/core/base/binutils.lua')
| -rw-r--r-- | xmake/core/base/binutils.lua | 49 |
1 files changed, 36 insertions, 13 deletions
diff --git a/xmake/core/base/binutils.lua b/xmake/core/base/binutils.lua index 8047046b2..995f0d0a7 100644 --- a/xmake/core/base/binutils.lua +++ b/xmake/core/base/binutils.lua @@ -39,23 +39,46 @@ function binutils.bin2c(binaryfile, outputfile, opt) end end --- generate COFF object file from the binary file -function binutils.bin2coff(binaryfile, outputfile, opt) +-- generate object file from the binary file +-- @param binaryfile the binary file path +-- @param outputfile the output object file path +-- @param opt the options +-- - format: the object file format (coff, elf, macho), required +-- - symbol_prefix: the symbol prefix (default: _binary_) +-- - arch: the target architecture (default: x86_64) +-- - plat: the target platform (default: macosx, only for macho) +-- - basename: the base name for symbols +-- - target_minver: the target minimum version (only for macho) +-- - xcode_sdkver: the Xcode SDK version (only for macho) +-- - zeroend: append null terminator (default: false) +function binutils.bin2obj(binaryfile, outputfile, opt) opt = opt or {} - return binutils._bin2coff(binaryfile, outputfile, opt.symbol_prefix or "_binary_", opt.arch or "x86_64", opt.basename, opt.zeroend or false) -end + local format = opt.format + if not format then + return nil, "bin2obj: format is required (coff, elf, or macho)" + end + format = format:lower() --- generate Mach-O object file from the binary file -function binutils.bin2macho(binaryfile, outputfile, opt) - opt = opt or {} - return binutils._bin2macho(binaryfile, outputfile, opt.symbol_prefix or "_binary_", opt.plat or "macosx", opt.arch or "x86_64", opt.basename, opt.target_minver, opt.xcode_sdkver, opt.zeroend or false) + if format == "coff" then + if not binutils._bin2coff then + return nil, "bin2obj: binutils._bin2coff not available (C implementation not compiled)" + end + return binutils._bin2coff(binaryfile, outputfile, opt.symbol_prefix or "_binary_", opt.arch or "x86_64", opt.basename, opt.zeroend or false) + elseif format == "macho" then + if not binutils._bin2macho then + return nil, "bin2obj: binutils._bin2macho not available (C implementation not compiled)" + end + return binutils._bin2macho(binaryfile, outputfile, opt.symbol_prefix or "_binary_", opt.plat or "macosx", opt.arch or "x86_64", opt.basename, opt.target_minver, opt.xcode_sdkver, opt.zeroend or false) + elseif format == "elf" then + if not binutils._bin2elf then + return nil, "bin2obj: binutils._bin2elf not available (C implementation not compiled)" + end + return binutils._bin2elf(binaryfile, outputfile, opt.symbol_prefix or "_binary_", opt.arch or "x86_64", opt.basename, opt.zeroend or false) + else + return nil, string.format("bin2obj: unsupported format '%s' (supported: coff, elf, macho)", format) + end end --- generate ELF object file from the binary file -function binutils.bin2elf(binaryfile, outputfile, opt) - opt = opt or {} - return binutils._bin2elf(binaryfile, outputfile, opt.symbol_prefix or "_binary_", opt.arch or "x86_64", opt.basename, opt.zeroend or false) -end -- read symbols from object file (auto-detect format: COFF, ELF, or Mach-O) function binutils.readsyms(binaryfile) |
