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:
Sam Grove
Date:
Fri Aug 26 13:10:48 2016 -0500
Revision:
7615:69407c9f45ec
Parent:
7551:7069d4b554d9
Parent:
7614:23701886e451
Child:
7987:0474ba76d193
Child:
7930:9daa4c328198
Child:
7907:36a6ad9af387
Merge pull request #2418 from sarahmarshy/path_error_rev

Readable error when toolchain paths not set. Allow IAR and ARM toolchains to be set in user's PATH.

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