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:
Brian Daniels
Date:
Wed Sep 28 14:42:35 2016 -0500
Revision:
8285:d88fab74071c
Parent:
7988:4644adacd001
Child:
8286:978e541a018f
Making all toolchains print final compiler message.

This functionality was already present in the ARM toolchain script, but
this commit adds this across all toolchain scripts. Solves an issue that
cropped up where a build error wasn't being printed unless the verbose
flag was used. This should now print any existing error messages that have
been printed when the compiler output is being parsed.

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