summaryrefslogtreecommitdiffstats
path: root/waflib/extras/objcopy.py
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-09-15 14:51:03 +0200
committerDavid Robillard <d@drobilla.net>2018-09-15 14:51:03 +0200
commit425cbb48dc333294954897ed7e783f9469ef8b13 (patch)
tree78f197a5770b9cda2c4ac3af5970fe730ea8b752 /waflib/extras/objcopy.py
parent3dd24e7fa4330452336b79bd6f2f6e9cd4ec9449 (diff)
parentc2b0355b0de23f6ec83b5fa5be038bcce208e26f (diff)
downloadsratom-425cbb48dc333294954897ed7e783f9469ef8b13.tar.gz
sratom-425cbb48dc333294954897ed7e783f9469ef8b13.tar.bz2
sratom-425cbb48dc333294954897ed7e783f9469ef8b13.zip
Merge commit 'c2b0355b0de23f6ec83b5fa5be038bcce208e26f' as 'waflib'
Diffstat (limited to 'waflib/extras/objcopy.py')
-rw-r--r--waflib/extras/objcopy.py50
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)
+