diff options
author | David Robillard <d@drobilla.net> | 2018-09-15 14:51:02 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2018-09-15 14:51:02 +0200 |
commit | ffb5286641dca2e12bebd2c4a4f4a73cc11a20e6 (patch) | |
tree | 4d5eee9bf36eb3a34080a7b928333939327a5a96 /waflib/extras/objcopy.py | |
parent | bd57bc1edb6d8131a920bcc4f12d91457e2ca2ed (diff) | |
parent | 8c96b17a5393bffee0c521c4872a9fa999048032 (diff) | |
download | lilv-ffb5286641dca2e12bebd2c4a4f4a73cc11a20e6.tar.gz lilv-ffb5286641dca2e12bebd2c4a4f4a73cc11a20e6.tar.bz2 lilv-ffb5286641dca2e12bebd2c4a4f4a73cc11a20e6.zip |
Merge commit '8c96b17a5393bffee0c521c4872a9fa999048032' as 'waflib'
Diffstat (limited to 'waflib/extras/objcopy.py')
-rw-r--r-- | waflib/extras/objcopy.py | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/waflib/extras/objcopy.py b/waflib/extras/objcopy.py new file mode 100644 index 0000000..82d8359 --- /dev/null +++ b/waflib/extras/objcopy.py @@ -0,0 +1,50 @@ +#!/usr/bin/python +# Grygoriy Fuchedzhy 2010 + +""" +Support for converting linked targets to ihex, srec or binary files using +objcopy. Use the 'objcopy' feature in conjunction with the 'cc' or 'cxx' +feature. The 'objcopy' feature uses the following attributes: + +objcopy_bfdname Target object format name (eg. ihex, srec, binary). + Defaults to ihex. +objcopy_target File name used for objcopy output. This defaults to the + target name with objcopy_bfdname as extension. +objcopy_install_path Install path for objcopy_target file. Defaults to ${PREFIX}/fw. +objcopy_flags Additional flags passed to objcopy. +""" + +from waflib.Utils import def_attrs +from waflib import Task +from waflib.TaskGen import feature, after_method + +class objcopy(Task.Task): + run_str = '${OBJCOPY} -O ${TARGET_BFDNAME} ${OBJCOPYFLAGS} ${SRC} ${TGT}' + color = 'CYAN' + +@feature('objcopy') +@after_method('apply_link') +def map_objcopy(self): + def_attrs(self, + objcopy_bfdname = 'ihex', + objcopy_target = None, + objcopy_install_path = "${PREFIX}/firmware", + objcopy_flags = '') + + link_output = self.link_task.outputs[0] + if not self.objcopy_target: + self.objcopy_target = link_output.change_ext('.' + self.objcopy_bfdname).name + task = self.create_task('objcopy', src=link_output, tgt=self.path.find_or_declare(self.objcopy_target)) + + task.env.append_unique('TARGET_BFDNAME', self.objcopy_bfdname) + try: + task.env.append_unique('OBJCOPYFLAGS', getattr(self, 'objcopy_flags')) + except AttributeError: + pass + + if self.objcopy_install_path: + self.add_install_files(install_to=self.objcopy_install_path, install_from=task.outputs[0]) + +def configure(ctx): + ctx.find_program('objcopy', var='OBJCOPY', mandatory=True) + |