mbed official / mbed-sdk-tools
Revision:
36:96847d42f010
Parent:
35:da9c89f8be7d
Child:
40:7d3fa6b99b2b
--- a/toolchains/arm.py	Wed Feb 15 13:53:18 2017 -0600
+++ b/toolchains/arm.py	Thu Jun 22 11:12:28 2017 -0500
@@ -15,7 +15,9 @@
 limitations under the License.
 """
 import re
-from os.path import join, dirname, splitext, basename
+from os.path import join, dirname, splitext, basename, exists
+from os import makedirs, write
+from tempfile import mkstemp
 
 from tools.toolchains import mbedToolchain, TOOLCHAIN_PATHS
 from tools.hooks import hook_tool
@@ -38,8 +40,10 @@
         return mbedToolchain.generic_check_executable("ARM", 'armcc', 2, 'bin')
 
     def __init__(self, target, notify=None, macros=None,
-                 silent=False, extra_verbose=False, build_profile=None):
+                 silent=False, extra_verbose=False, build_profile=None,
+                 build_dir=None):
         mbedToolchain.__init__(self, target, notify, macros, silent,
+                               build_dir=build_dir,
                                extra_verbose=extra_verbose,
                                build_profile=build_profile)
 
@@ -179,6 +183,8 @@
         else:
             args = ["-o", output, "--info=totals", "--map", "--list=%s" % map_file]
 
+        args.extend(self.flags['ld'])
+
         if mem_map:
             args.extend(["--scatter", mem_map])
 
@@ -210,8 +216,10 @@
 
     @hook_tool
     def binary(self, resources, elf, bin):
+        _, fmt = splitext(bin)
+        bin_arg = {".bin": "--bin", ".hex": "--i32"}[fmt]
         # Build binary command
-        cmd = [self.elf2bin, '--bin', '-o', bin, elf]
+        cmd = [self.elf2bin, bin_arg, '-o', bin, elf]
 
         # Call cmdline hook
         cmd = self.hook.get_cmdline_binary(cmd)
@@ -220,6 +228,22 @@
         self.cc_verbose("FromELF: %s" % ' '.join(cmd))
         self.default_cmd(cmd)
 
+    @staticmethod
+    def name_mangle(name):
+        return "_Z%i%sv" % (len(name), name)
+
+    @staticmethod
+    def make_ld_define(name, value):
+        return "--predefine=\"-D%s=0x%x\"" % (name, value)
+
+    @staticmethod
+    def redirect_symbol(source, sync, build_dir):
+        if not exists(build_dir):
+            makedirs(build_dir)
+        handle, filename = mkstemp(prefix=".redirect-symbol.", dir=build_dir)
+        write(handle, "RESOLVE %s AS %s\n" % (source, sync))
+        return "--edit=%s" % filename
+
 
 class ARM_STD(ARM):
     pass