ST / ST_Events-old

Dependents:   HelloWorld_CCA01M1 HelloWorld_CCA02M1 CI-data-logger-server HelloWorld_CCA02M1 ... more

This is a fork of the events subdirectory of https://github.com/ARMmbed/mbed-os.

Note, you must import this library with import name: events!!!

Committer:
Vincent Coubard
Date:
Mon Sep 19 15:17:39 2016 +0100
Revision:
7987:0474ba76d193
Parent:
7615:69407c9f45ec
Child:
7988:4644adacd001
Override exit and atexit functions from newlib.

This change simplify the exit and initialization process.
It also reduce the number of hidden memory allocation made by atexit.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Mihail Stoyanov 6350:fd14088de4ac 1 """
Mihail Stoyanov 6350:fd14088de4ac 2 mbed SDK
Mihail Stoyanov 6350:fd14088de4ac 3 Copyright (c) 2011-2013 ARM Limited
Mihail Stoyanov 6350:fd14088de4ac 4
Mihail Stoyanov 6350:fd14088de4ac 5 Licensed under the Apache License, Version 2.0 (the "License");
Mihail Stoyanov 6350:fd14088de4ac 6 you may not use this file except in compliance with the License.
Mihail Stoyanov 6350:fd14088de4ac 7 You may obtain a copy of the License at
Mihail Stoyanov 6350:fd14088de4ac 8
Mihail Stoyanov 6350:fd14088de4ac 9 http://www.apache.org/licenses/LICENSE-2.0
Mihail Stoyanov 6350:fd14088de4ac 10
Mihail Stoyanov 6350:fd14088de4ac 11 Unless required by applicable law or agreed to in writing, software
Mihail Stoyanov 6350:fd14088de4ac 12 distributed under the License is distributed on an "AS IS" BASIS,
Mihail Stoyanov 6350:fd14088de4ac 13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Mihail Stoyanov 6350:fd14088de4ac 14 See the License for the specific language governing permissions and
Mihail Stoyanov 6350:fd14088de4ac 15 limitations under the License.
Mihail Stoyanov 6350:fd14088de4ac 16 """
Mihail Stoyanov 6350:fd14088de4ac 17 import re
Mihail Stoyanov 6355:86cd49f38a3e 18 from os.path import join, basename, splitext, dirname, exists
Sarah Marsh 7614:23701886e451 19 from distutils.spawn import find_executable
Mihail Stoyanov 6350:fd14088de4ac 20
Mihail Stoyanov 6980:b26b840b75aa 21 from tools.toolchains import mbedToolchain, TOOLCHAIN_PATHS
Mihail Stoyanov 6350:fd14088de4ac 22 from tools.hooks import hook_tool
Mihail Stoyanov 6350:fd14088de4ac 23
Mihail Stoyanov 6350:fd14088de4ac 24 class GCC(mbedToolchain):
Mihail Stoyanov 6350:fd14088de4ac 25 LINKER_EXT = '.ld'
Mihail Stoyanov 6350:fd14088de4ac 26 LIBRARY_EXT = '.a'
Mihail Stoyanov 6350:fd14088de4ac 27
Mihail Stoyanov 6350:fd14088de4ac 28 STD_LIB_NAME = "lib%s.a"
Mihail Stoyanov 6359:00ee81ac1c20 29 DIAGNOSTIC_PATTERN = re.compile('((?P<file>[^:]+):(?P<line>\d+):)(\d+:)? (?P<severity>warning|error): (?P<message>.+)')
Mihail Stoyanov 6980:b26b840b75aa 30 INDEX_PATTERN = re.compile('(?P<col>\s*)\^')
Mihail Stoyanov 6350:fd14088de4ac 31
Jimmy Brisson 6401:0edea5185bb1 32 DEFAULT_FLAGS = {
Jimmy Brisson 6401:0edea5185bb1 33 'common': ["-c", "-Wall", "-Wextra",
Jimmy Brisson 6401:0edea5185bb1 34 "-Wno-unused-parameter", "-Wno-missing-field-initializers",
Jimmy Brisson 6401:0edea5185bb1 35 "-fmessage-length=0", "-fno-exceptions", "-fno-builtin",
Jimmy Brisson 6403:ecff602aaa32 36 "-ffunction-sections", "-fdata-sections", "-funsigned-char",
Jimmy Brisson 6401:0edea5185bb1 37 "-MMD", "-fno-delete-null-pointer-checks", "-fomit-frame-pointer"
Jimmy Brisson 6401:0edea5185bb1 38 ],
Jimmy Brisson 6401:0edea5185bb1 39 'asm': ["-x", "assembler-with-cpp"],
Jimmy Brisson 6401:0edea5185bb1 40 'c': ["-std=gnu99"],
Kevin Bracey 6599:5bb9644532b8 41 'cxx': ["-std=gnu++98", "-fno-rtti", "-Wvla"],
Jimmy Brisson 6401:0edea5185bb1 42 'ld': ["-Wl,--gc-sections", "-Wl,--wrap,main",
Vincent Coubard 7987:0474ba76d193 43 "-Wl,--wrap,_malloc_r", "-Wl,--wrap,_free_r", "-Wl,--wrap,_realloc_r", "-Wl,--wrap,_calloc_r",
Vincent Coubard 7987:0474ba76d193 44 "-Wl,--wrap,exit", "-Wl,--wrap,atexit"],
Jimmy Brisson 6401:0edea5185bb1 45 }
Jimmy Brisson 6401:0edea5185bb1 46
Mihail Stoyanov 6350:fd14088de4ac 47 def __init__(self, target, options=None, notify=None, macros=None, silent=False, tool_path="", extra_verbose=False):
Mihail Stoyanov 6350:fd14088de4ac 48 mbedToolchain.__init__(self, target, options, notify, macros, silent, extra_verbose=extra_verbose)
Mihail Stoyanov 6350:fd14088de4ac 49
Mihail Stoyanov 6350:fd14088de4ac 50 if target.core == "Cortex-M0+":
Mihail Stoyanov 6350:fd14088de4ac 51 cpu = "cortex-m0plus"
0xc0170 6962:bf39d414c367 52 elif target.core == "Cortex-M4F":
0xc0170 6962:bf39d414c367 53 cpu = "cortex-m4"
0xc0170 6962:bf39d414c367 54 elif target.core == "Cortex-M7F":
0xc0170 6962:bf39d414c367 55 cpu = "cortex-m7"
0xc0170 6962:bf39d414c367 56 elif target.core == "Cortex-M7FD":
0xc0170 6962:bf39d414c367 57 cpu = "cortex-m7"
Mihail Stoyanov 6350:fd14088de4ac 58 else:
Mihail Stoyanov 6350:fd14088de4ac 59 cpu = target.core.lower()
Mihail Stoyanov 6350:fd14088de4ac 60
Mihail Stoyanov 6350:fd14088de4ac 61 self.cpu = ["-mcpu=%s" % cpu]
Mihail Stoyanov 6350:fd14088de4ac 62 if target.core.startswith("Cortex"):
Mihail Stoyanov 6350:fd14088de4ac 63 self.cpu.append("-mthumb")
Mihail Stoyanov 6350:fd14088de4ac 64
0xc0170 6962:bf39d414c367 65 # FPU handling, M7 possibly to have double FPU
0xc0170 6962:bf39d414c367 66 if target.core == "Cortex-M4F":
Mihail Stoyanov 6350:fd14088de4ac 67 self.cpu.append("-mfpu=fpv4-sp-d16")
Mihail Stoyanov 6350:fd14088de4ac 68 self.cpu.append("-mfloat-abi=softfp")
0xc0170 6962:bf39d414c367 69 elif target.core == "Cortex-M7F":
0xc0170 6962:bf39d414c367 70 self.cpu.append("-mfpu=fpv5-sp-d16")
0xc0170 6962:bf39d414c367 71 self.cpu.append("-mfloat-abi=softfp")
0xc0170 6962:bf39d414c367 72 elif target.core == "Cortex-M7FD":
0xc0170 6962:bf39d414c367 73 self.cpu.append("-mfpu=fpv5-d16")
0xc0170 6962:bf39d414c367 74 self.cpu.append("-mfloat-abi=softfp")
Olaf Hagendorf 6803:3ebc5419b948 75
Olaf Hagendorf 6803:3ebc5419b948 76
Mihail Stoyanov 6350:fd14088de4ac 77
Mihail Stoyanov 6350:fd14088de4ac 78 if target.core == "Cortex-A9":
Mihail Stoyanov 6350:fd14088de4ac 79 self.cpu.append("-mthumb-interwork")
Mihail Stoyanov 6350:fd14088de4ac 80 self.cpu.append("-marm")
Mihail Stoyanov 6350:fd14088de4ac 81 self.cpu.append("-march=armv7-a")
Mihail Stoyanov 6350:fd14088de4ac 82 self.cpu.append("-mfpu=vfpv3")
Mihail Stoyanov 6350:fd14088de4ac 83 self.cpu.append("-mfloat-abi=hard")
Mihail Stoyanov 6350:fd14088de4ac 84 self.cpu.append("-mno-unaligned-access")
Mihail Stoyanov 6350:fd14088de4ac 85
Mihail Stoyanov 6350:fd14088de4ac 86
Mihail Stoyanov 6350:fd14088de4ac 87 # Note: We are using "-O2" instead of "-Os" to avoid this known GCC bug:
Mihail Stoyanov 6350:fd14088de4ac 88 # http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46762
Jimmy Brisson 6401:0edea5185bb1 89 self.flags["common"] += self.cpu
Mihail Stoyanov 6350:fd14088de4ac 90
Mihail Stoyanov 6350:fd14088de4ac 91 if "save-asm" in self.options:
Jimmy Brisson 6401:0edea5185bb1 92 self.flags["common"].append("-save-temps")
Mihail Stoyanov 6350:fd14088de4ac 93
Mihail Stoyanov 6350:fd14088de4ac 94 if "debug-info" in self.options:
Jimmy Brisson 6401:0edea5185bb1 95 self.flags["common"].append("-g")
Jimmy Brisson 6401:0edea5185bb1 96 self.flags["common"].append("-O0")
Mihail Stoyanov 6350:fd14088de4ac 97 else:
Yogesh Pande 6967:012b075b6814 98 self.flags["common"].append("-Os")
Mihail Stoyanov 6350:fd14088de4ac 99
Mihail Stoyanov 6350:fd14088de4ac 100 main_cc = join(tool_path, "arm-none-eabi-gcc")
Mihail Stoyanov 6350:fd14088de4ac 101 main_cppc = join(tool_path, "arm-none-eabi-g++")
Jimmy Brisson 6401:0edea5185bb1 102 self.asm = [main_cc] + self.flags['asm'] + self.flags["common"]
Mihail Stoyanov 6980:b26b840b75aa 103 self.cc = [main_cc]
Mihail Stoyanov 6980:b26b840b75aa 104 self.cppc =[main_cppc]
Jimmy Brisson 6401:0edea5185bb1 105 self.cc += self.flags['c'] + self.flags['common']
Jimmy Brisson 6401:0edea5185bb1 106 self.cppc += self.flags['cxx'] + self.flags['common']
Mihail Stoyanov 6350:fd14088de4ac 107
Jimmy Brisson 6401:0edea5185bb1 108 self.flags['ld'] += self.cpu
Jimmy Brisson 6401:0edea5185bb1 109 self.ld = [join(tool_path, "arm-none-eabi-gcc")] + self.flags['ld']
Mihail Stoyanov 6350:fd14088de4ac 110 self.sys_libs = ["stdc++", "supc++", "m", "c", "gcc"]
Mihail Stoyanov 6350:fd14088de4ac 111
Mihail Stoyanov 6350:fd14088de4ac 112 self.ar = join(tool_path, "arm-none-eabi-ar")
Mihail Stoyanov 6350:fd14088de4ac 113 self.elf2bin = join(tool_path, "arm-none-eabi-objcopy")
Mihail Stoyanov 6350:fd14088de4ac 114
Sarah Marsh 7614:23701886e451 115 if tool_path:
Sarah Marsh 7614:23701886e451 116 self.toolchain_path = main_cc
Sarah Marsh 7614:23701886e451 117 else:
Sarah Marsh 7614:23701886e451 118 self.toolchain_path = find_executable("arm-none-eabi-gcc") or ''
Sarah Marsh 7612:5070b1720955 119
Mihail Stoyanov 6350:fd14088de4ac 120 def parse_dependencies(self, dep_path):
Mihail Stoyanov 6350:fd14088de4ac 121 dependencies = []
Mihail Stoyanov 6355:86cd49f38a3e 122 buff = open(dep_path).readlines()
Mihail Stoyanov 6355:86cd49f38a3e 123 buff[0] = re.sub('^(.*?)\: ', '', buff[0])
Mihail Stoyanov 6355:86cd49f38a3e 124 for line in buff:
Mihail Stoyanov 6350:fd14088de4ac 125 file = line.replace('\\\n', '').strip()
Mihail Stoyanov 6350:fd14088de4ac 126 if file:
Mihail Stoyanov 6350:fd14088de4ac 127 # GCC might list more than one dependency on a single line, in this case
Mihail Stoyanov 6350:fd14088de4ac 128 # the dependencies are separated by a space. However, a space might also
Mihail Stoyanov 6350:fd14088de4ac 129 # indicate an actual space character in a dependency path, but in this case
Mihail Stoyanov 6350:fd14088de4ac 130 # the space character is prefixed by a backslash.
Mihail Stoyanov 6350:fd14088de4ac 131 # Temporary replace all '\ ' with a special char that is not used (\a in this
Mihail Stoyanov 6350:fd14088de4ac 132 # case) to keep them from being interpreted by 'split' (they will be converted
Mihail Stoyanov 6350:fd14088de4ac 133 # back later to a space char)
Mihail Stoyanov 6350:fd14088de4ac 134 file = file.replace('\\ ', '\a')
Mihail Stoyanov 6350:fd14088de4ac 135 if file.find(" ") == -1:
Mihail Stoyanov 6980:b26b840b75aa 136 dependencies.append((self.CHROOT if self.CHROOT else '') + file.replace('\a', ' '))
Mihail Stoyanov 6350:fd14088de4ac 137 else:
Mihail Stoyanov 6980:b26b840b75aa 138 dependencies = dependencies + [(self.CHROOT if self.CHROOT else '') + f.replace('\a', ' ') for f in file.split(" ")]
Mihail Stoyanov 6350:fd14088de4ac 139 return dependencies
Mihail Stoyanov 6350:fd14088de4ac 140
Mihail Stoyanov 6350:fd14088de4ac 141 def is_not_supported_error(self, output):
Mihail Stoyanov 6350:fd14088de4ac 142 return "error: #error [NOT_SUPPORTED]" in output
Mihail Stoyanov 6350:fd14088de4ac 143
Mihail Stoyanov 6350:fd14088de4ac 144 def parse_output(self, output):
Mihail Stoyanov 6350:fd14088de4ac 145 # The warning/error notification is multiline
Mihail Stoyanov 6980:b26b840b75aa 146 msg = None
Mihail Stoyanov 6350:fd14088de4ac 147 for line in output.splitlines():
Brian Daniels 7510:0446c506f41a 148 match = GCC.DIAGNOSTIC_PATTERN.search(line)
Mihail Stoyanov 6359:00ee81ac1c20 149 if match is not None:
Mihail Stoyanov 6980:b26b840b75aa 150 if msg is not None:
Mihail Stoyanov 6980:b26b840b75aa 151 self.cc_info(msg)
Mihail Stoyanov 6980:b26b840b75aa 152 msg = {
Mihail Stoyanov 6980:b26b840b75aa 153 'severity': match.group('severity').lower(),
Mihail Stoyanov 6980:b26b840b75aa 154 'file': match.group('file'),
Mihail Stoyanov 6980:b26b840b75aa 155 'line': match.group('line'),
Mihail Stoyanov 6980:b26b840b75aa 156 'col': 0,
Mihail Stoyanov 6980:b26b840b75aa 157 'message': match.group('message'),
Mihail Stoyanov 6980:b26b840b75aa 158 'text': '',
Mihail Stoyanov 6980:b26b840b75aa 159 'target_name': self.target.name,
Mihail Stoyanov 6980:b26b840b75aa 160 'toolchain_name': self.name
Mihail Stoyanov 6980:b26b840b75aa 161 }
Mihail Stoyanov 6980:b26b840b75aa 162 elif msg is not None:
Mihail Stoyanov 6981:0381c344fb94 163 # Determine the warning/error column by calculating the ^ position
Mihail Stoyanov 6980:b26b840b75aa 164 match = GCC.INDEX_PATTERN.match(line)
Mihail Stoyanov 6980:b26b840b75aa 165 if match is not None:
Mihail Stoyanov 6980:b26b840b75aa 166 msg['col'] = len(match.group('col'))
Mihail Stoyanov 6980:b26b840b75aa 167 self.cc_info(msg)
Mihail Stoyanov 6980:b26b840b75aa 168 msg = None
Mihail Stoyanov 6980:b26b840b75aa 169 else:
Mihail Stoyanov 6980:b26b840b75aa 170 msg['text'] += line+"\n"
Mihail Stoyanov 6350:fd14088de4ac 171
Mihail Stoyanov 6355:86cd49f38a3e 172 def get_dep_option(self, object):
Mihail Stoyanov 6355:86cd49f38a3e 173 base, _ = splitext(object)
Mihail Stoyanov 6355:86cd49f38a3e 174 dep_path = base + '.d'
Mihail Stoyanov 6355:86cd49f38a3e 175 return ["-MD", "-MF", dep_path]
Mihail Stoyanov 6355:86cd49f38a3e 176
Jimmy Brisson 6639:7310555173f0 177 def get_config_option(self, config_header):
Jimmy Brisson 6639:7310555173f0 178 return ['-include', config_header]
Jimmy Brisson 6639:7310555173f0 179
Mihail Stoyanov 7371:4c352cc17ba8 180 def get_compile_options(self, defines, includes, for_asm=False):
Mihail Stoyanov 6980:b26b840b75aa 181 opts = ['-D%s' % d for d in defines]
Mihail Stoyanov 6980:b26b840b75aa 182 if self.RESPONSE_FILES:
Mihail Stoyanov 6980:b26b840b75aa 183 opts += ['@%s' % self.get_inc_file(includes)]
Mihail Stoyanov 6980:b26b840b75aa 184 else:
Mihail Stoyanov 6980:b26b840b75aa 185 opts += ["-I%s" % i for i in includes]
Mihail Stoyanov 6980:b26b840b75aa 186
Mihail Stoyanov 7371:4c352cc17ba8 187 if not for_asm:
Mihail Stoyanov 7371:4c352cc17ba8 188 config_header = self.get_config_header()
Mihail Stoyanov 7371:4c352cc17ba8 189 if config_header is not None:
Mihail Stoyanov 7371:4c352cc17ba8 190 opts = opts + self.get_config_option(config_header)
Bogdan Marinescu 6530:98ce08655513 191 return opts
Mihail Stoyanov 6355:86cd49f38a3e 192
Mihail Stoyanov 6355:86cd49f38a3e 193 @hook_tool
Mihail Stoyanov 6355:86cd49f38a3e 194 def assemble(self, source, object, includes):
Mihail Stoyanov 6355:86cd49f38a3e 195 # Build assemble command
Mihail Stoyanov 7371:4c352cc17ba8 196 cmd = self.asm + self.get_compile_options(self.get_symbols(True), includes) + ["-o", object, source]
Mihail Stoyanov 6355:86cd49f38a3e 197
Mihail Stoyanov 6355:86cd49f38a3e 198 # Call cmdline hook
Mihail Stoyanov 6355:86cd49f38a3e 199 cmd = self.hook.get_cmdline_assembler(cmd)
Mihail Stoyanov 6355:86cd49f38a3e 200
Mihail Stoyanov 6355:86cd49f38a3e 201 # Return command array, don't execute
Mihail Stoyanov 6355:86cd49f38a3e 202 return [cmd]
Mihail Stoyanov 6350:fd14088de4ac 203
Mihail Stoyanov 6355:86cd49f38a3e 204 @hook_tool
Mihail Stoyanov 6355:86cd49f38a3e 205 def compile(self, cc, source, object, includes):
Mihail Stoyanov 6355:86cd49f38a3e 206 # Build compile command
Mihail Stoyanov 6355:86cd49f38a3e 207 cmd = cc + self.get_compile_options(self.get_symbols(), includes)
Mihail Stoyanov 6355:86cd49f38a3e 208
Mihail Stoyanov 6355:86cd49f38a3e 209 cmd.extend(self.get_dep_option(object))
Mihail Stoyanov 6355:86cd49f38a3e 210
Mihail Stoyanov 6355:86cd49f38a3e 211 cmd.extend(["-o", object, source])
Vincenzo Frascino 6393:b4fa50caddef 212
Mihail Stoyanov 6355:86cd49f38a3e 213 # Call cmdline hook
Mihail Stoyanov 6355:86cd49f38a3e 214 cmd = self.hook.get_cmdline_compiler(cmd)
Mihail Stoyanov 6355:86cd49f38a3e 215
Mihail Stoyanov 6355:86cd49f38a3e 216 return [cmd]
Mihail Stoyanov 6355:86cd49f38a3e 217
Mihail Stoyanov 6355:86cd49f38a3e 218 def compile_c(self, source, object, includes):
Mihail Stoyanov 6355:86cd49f38a3e 219 return self.compile(self.cc, source, object, includes)
Mihail Stoyanov 6355:86cd49f38a3e 220
Mihail Stoyanov 6355:86cd49f38a3e 221 def compile_cpp(self, source, object, includes):
Mihail Stoyanov 6355:86cd49f38a3e 222 return self.compile(self.cppc, source, object, includes)
Mihail Stoyanov 6355:86cd49f38a3e 223
Mihail Stoyanov 6355:86cd49f38a3e 224 @hook_tool
Mihail Stoyanov 6350:fd14088de4ac 225 def link(self, output, objects, libraries, lib_dirs, mem_map):
Mihail Stoyanov 6350:fd14088de4ac 226 libs = []
Mihail Stoyanov 6350:fd14088de4ac 227 for l in libraries:
Mihail Stoyanov 6350:fd14088de4ac 228 name, _ = splitext(basename(l))
Mihail Stoyanov 6350:fd14088de4ac 229 libs.append("-l%s" % name[3:])
Mihail Stoyanov 6350:fd14088de4ac 230 libs.extend(["-l%s" % l for l in self.sys_libs])
Vincenzo Frascino 6393:b4fa50caddef 231
Mihail Stoyanov 6355:86cd49f38a3e 232 # Build linker command
Mihail Stoyanov 6355:86cd49f38a3e 233 map_file = splitext(output)[0] + ".map"
Mihail Stoyanov 6355:86cd49f38a3e 234 cmd = self.ld + ["-o", output, "-Wl,-Map=%s" % map_file] + objects + ["-Wl,--start-group"] + libs + ["-Wl,--end-group"]
Mihail Stoyanov 6355:86cd49f38a3e 235 if mem_map:
Mihail Stoyanov 6355:86cd49f38a3e 236 cmd.extend(['-T', mem_map])
Vincenzo Frascino 6393:b4fa50caddef 237
Mihail Stoyanov 6355:86cd49f38a3e 238 for L in lib_dirs:
Mihail Stoyanov 6355:86cd49f38a3e 239 cmd.extend(['-L', L])
Mihail Stoyanov 6355:86cd49f38a3e 240 cmd.extend(libs)
Mihail Stoyanov 6350:fd14088de4ac 241
Mihail Stoyanov 6355:86cd49f38a3e 242 # Call cmdline hook
Mihail Stoyanov 6355:86cd49f38a3e 243 cmd = self.hook.get_cmdline_linker(cmd)
Mihail Stoyanov 6355:86cd49f38a3e 244
Mihail Stoyanov 6980:b26b840b75aa 245 if self.RESPONSE_FILES:
Mihail Stoyanov 6980:b26b840b75aa 246 # Split link command to linker executable + response file
Mihail Stoyanov 6355:86cd49f38a3e 247 cmd_linker = cmd[0]
Mihail Stoyanov 6980:b26b840b75aa 248 link_files = self.get_link_file(cmd[1:])
Mihail Stoyanov 6980:b26b840b75aa 249 cmd = [cmd_linker, "@%s" % link_files]
Mihail Stoyanov 6355:86cd49f38a3e 250
Mihail Stoyanov 6355:86cd49f38a3e 251 # Exec command
Mihail Stoyanov 6980:b26b840b75aa 252 self.cc_verbose("Link: %s" % ' '.join(cmd))
Mihail Stoyanov 6980:b26b840b75aa 253 self.default_cmd(cmd)
Mihail Stoyanov 6355:86cd49f38a3e 254
Mihail Stoyanov 6355:86cd49f38a3e 255 @hook_tool
Mihail Stoyanov 6355:86cd49f38a3e 256 def archive(self, objects, lib_path):
Mihail Stoyanov 6980:b26b840b75aa 257 if self.RESPONSE_FILES:
Mihail Stoyanov 6980:b26b840b75aa 258 param = ["@%s" % self.get_arch_file(objects)]
Mihail Stoyanov 6980:b26b840b75aa 259 else:
Mihail Stoyanov 6980:b26b840b75aa 260 param = objects
Mihail Stoyanov 6355:86cd49f38a3e 261
Mihail Stoyanov 6355:86cd49f38a3e 262 # Exec command
Mihail Stoyanov 6980:b26b840b75aa 263 self.default_cmd([self.ar, 'rcs', lib_path] + param)
Mihail Stoyanov 6350:fd14088de4ac 264
Mihail Stoyanov 6350:fd14088de4ac 265 @hook_tool
Mihail Stoyanov 6350:fd14088de4ac 266 def binary(self, resources, elf, bin):
Mihail Stoyanov 6355:86cd49f38a3e 267 # Build binary command
Mihail Stoyanov 6355:86cd49f38a3e 268 cmd = [self.elf2bin, "-O", "binary", elf, bin]
Mihail Stoyanov 6355:86cd49f38a3e 269
Mihail Stoyanov 6355:86cd49f38a3e 270 # Call cmdline hook
Mihail Stoyanov 6355:86cd49f38a3e 271 cmd = self.hook.get_cmdline_binary(cmd)
Mihail Stoyanov 6355:86cd49f38a3e 272
Mihail Stoyanov 6355:86cd49f38a3e 273 # Exec command
Mihail Stoyanov 6980:b26b840b75aa 274 self.cc_verbose("FromELF: %s" % ' '.join(cmd))
Mihail Stoyanov 6355:86cd49f38a3e 275 self.default_cmd(cmd)
Mihail Stoyanov 6350:fd14088de4ac 276
Mihail Stoyanov 6350:fd14088de4ac 277
Mihail Stoyanov 6350:fd14088de4ac 278 class GCC_ARM(GCC):
Mihail Stoyanov 6350:fd14088de4ac 279 def __init__(self, target, options=None, notify=None, macros=None, silent=False, extra_verbose=False):
Mihail Stoyanov 6980:b26b840b75aa 280 GCC.__init__(self, target, options, notify, macros, silent, TOOLCHAIN_PATHS['GCC_ARM'], extra_verbose=extra_verbose)
Mihail Stoyanov 6350:fd14088de4ac 281
Mihail Stoyanov 6350:fd14088de4ac 282 # Use latest gcc nanolib
Vincent Coubard 7550:436889d9f0e8 283 if "std-lib" in self.options:
Russ Butler 6386:292843bb388f 284 use_nano = False
Vincent Coubard 7550:436889d9f0e8 285 elif "small-lib" in self.options:
Russ Butler 6386:292843bb388f 286 use_nano = True
Vincent Coubard 7551:7069d4b554d9 287 elif target.default_lib == "std":
Russ Butler 6386:292843bb388f 288 use_nano = False
Vincent Coubard 7551:7069d4b554d9 289 elif target.default_lib == "small":
Russ Butler 6386:292843bb388f 290 use_nano = True
Russ Butler 6386:292843bb388f 291 else:
Russ Butler 6386:292843bb388f 292 use_nano = False
Russ Butler 6386:292843bb388f 293
Russ Butler 6386:292843bb388f 294 if use_nano:
Mihail Stoyanov 6350:fd14088de4ac 295 self.ld.append("--specs=nano.specs")
Olaf Hagendorf 6826:e17692595e2b 296 self.flags['ld'].append("--specs=nano.specs")
Russ Butler 6386:292843bb388f 297 self.cc += ["-DMBED_RTOS_SINGLE_THREAD"]
Russ Butler 6386:292843bb388f 298 self.cppc += ["-DMBED_RTOS_SINGLE_THREAD"]
Olaf Hagendorf 6826:e17692595e2b 299 self.macros.extend(["MBED_RTOS_SINGLE_THREAD"])
Mihail Stoyanov 6350:fd14088de4ac 300 self.sys_libs.append("nosys")
Mihail Stoyanov 6350:fd14088de4ac 301
Mihail Stoyanov 6350:fd14088de4ac 302
Mihail Stoyanov 6350:fd14088de4ac 303 class GCC_CR(GCC):
Mihail Stoyanov 6350:fd14088de4ac 304 def __init__(self, target, options=None, notify=None, macros=None, silent=False, extra_verbose=False):
Mihail Stoyanov 6980:b26b840b75aa 305 GCC.__init__(self, target, options, notify, macros, silent, TOOLCHAIN_PATHS['GCC_CR'], extra_verbose=extra_verbose)
Mihail Stoyanov 6350:fd14088de4ac 306
Mihail Stoyanov 6350:fd14088de4ac 307 additional_compiler_flags = [
Mihail Stoyanov 6350:fd14088de4ac 308 "-D__NEWLIB__", "-D__CODE_RED", "-D__USE_CMSIS", "-DCPP_USE_HEAP",
Mihail Stoyanov 6350:fd14088de4ac 309 ]
Mihail Stoyanov 6350:fd14088de4ac 310 self.cc += additional_compiler_flags
Mihail Stoyanov 6350:fd14088de4ac 311 self.cppc += additional_compiler_flags
Mihail Stoyanov 6350:fd14088de4ac 312
Mihail Stoyanov 6350:fd14088de4ac 313 # Use latest gcc nanolib
Mihail Stoyanov 6350:fd14088de4ac 314 self.ld.append("--specs=nano.specs")
Mihail Stoyanov 6350:fd14088de4ac 315 if target.name in ["LPC1768", "LPC4088", "LPC4088_DM", "LPC4330", "UBLOX_C027", "LPC2368"]:
Mihail Stoyanov 6350:fd14088de4ac 316 self.ld.extend(["-u _printf_float", "-u _scanf_float"])
Mihail Stoyanov 6350:fd14088de4ac 317 self.ld += ["-nostdlib"]