Clone of official tools

Committer:
screamer
Date:
Mon Aug 29 11:56:59 2016 +0100
Revision:
30:f12ce67666d0
Parent:
29:1210849dba19
Update tools from the mbed OS 5.1.2 release (instead of master)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
screamer 0:66f3b5499f7f 1 """
screamer 0:66f3b5499f7f 2 mbed SDK
screamer 0:66f3b5499f7f 3 Copyright (c) 2011-2013 ARM Limited
screamer 0:66f3b5499f7f 4
screamer 0:66f3b5499f7f 5 Licensed under the Apache License, Version 2.0 (the "License");
screamer 0:66f3b5499f7f 6 you may not use this file except in compliance with the License.
screamer 0:66f3b5499f7f 7 You may obtain a copy of the License at
screamer 0:66f3b5499f7f 8
screamer 0:66f3b5499f7f 9 http://www.apache.org/licenses/LICENSE-2.0
screamer 0:66f3b5499f7f 10
screamer 0:66f3b5499f7f 11 Unless required by applicable law or agreed to in writing, software
screamer 0:66f3b5499f7f 12 distributed under the License is distributed on an "AS IS" BASIS,
screamer 0:66f3b5499f7f 13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
screamer 0:66f3b5499f7f 14 See the License for the specific language governing permissions and
screamer 0:66f3b5499f7f 15 limitations under the License.
screamer 0:66f3b5499f7f 16 """
screamer 0:66f3b5499f7f 17 from exporters import Exporter
screamer 13:ab47a20b66f0 18 from os.path import splitext, basename, relpath, join, abspath
screamer 13:ab47a20b66f0 19 from os import curdir, getcwd
screamer 0:66f3b5499f7f 20
screamer 0:66f3b5499f7f 21
screamer 0:66f3b5499f7f 22 class GccArm(Exporter):
screamer 0:66f3b5499f7f 23 NAME = 'GccArm'
screamer 0:66f3b5499f7f 24 TOOLCHAIN = 'GCC_ARM'
screamer 0:66f3b5499f7f 25
screamer 0:66f3b5499f7f 26 TARGETS = [
screamer 0:66f3b5499f7f 27 'LPC1768',
screamer 0:66f3b5499f7f 28 'LPC1549',
screamer 0:66f3b5499f7f 29 'KL05Z',
screamer 0:66f3b5499f7f 30 'KL25Z',
screamer 0:66f3b5499f7f 31 'KL43Z',
screamer 0:66f3b5499f7f 32 'KL46Z',
screamer 0:66f3b5499f7f 33 'K64F',
screamer 0:66f3b5499f7f 34 'K22F',
screamer 0:66f3b5499f7f 35 'K20D50M',
screamer 0:66f3b5499f7f 36 'LPC4088',
screamer 0:66f3b5499f7f 37 'LPC4088_DM',
screamer 0:66f3b5499f7f 38 'LPC4330_M4',
screamer 0:66f3b5499f7f 39 'LPC11U24',
screamer 0:66f3b5499f7f 40 'LPC1114',
screamer 0:66f3b5499f7f 41 'LPC11U35_401',
screamer 0:66f3b5499f7f 42 'LPC11U35_501',
screamer 0:66f3b5499f7f 43 'LPC11U37H_401',
screamer 0:66f3b5499f7f 44 'LPC810',
screamer 0:66f3b5499f7f 45 'LPC812',
screamer 0:66f3b5499f7f 46 'LPC824',
screamer 0:66f3b5499f7f 47 'SSCI824',
screamer 0:66f3b5499f7f 48 'STM32F407',
screamer 0:66f3b5499f7f 49 'DISCO_F100RB',
screamer 0:66f3b5499f7f 50 'DISCO_F051R8',
screamer 0:66f3b5499f7f 51 'DISCO_F407VG',
screamer 0:66f3b5499f7f 52 'DISCO_F429ZI',
screamer 0:66f3b5499f7f 53 'DISCO_F469NI',
screamer 0:66f3b5499f7f 54 'DISCO_F303VC',
screamer 0:66f3b5499f7f 55 'DISCO_F746NG',
screamer 0:66f3b5499f7f 56 'DISCO_L476VG',
screamer 0:66f3b5499f7f 57 'UBLOX_C027',
screamer 0:66f3b5499f7f 58 'ARCH_PRO',
screamer 0:66f3b5499f7f 59 'NRF51822',
screamer 0:66f3b5499f7f 60 'HRM1017',
screamer 29:1210849dba19 61 'TY51822R3',
screamer 0:66f3b5499f7f 62 'RBLAB_NRF51822',
screamer 0:66f3b5499f7f 63 'RBLAB_BLENANO',
screamer 0:66f3b5499f7f 64 'LPC2368',
screamer 0:66f3b5499f7f 65 'LPC2460',
screamer 0:66f3b5499f7f 66 'LPCCAPPUCCINO',
screamer 0:66f3b5499f7f 67 'ARCH_BLE',
screamer 0:66f3b5499f7f 68 'MTS_GAMBIT',
screamer 0:66f3b5499f7f 69 'ARCH_MAX',
screamer 0:66f3b5499f7f 70 'NUCLEO_F401RE',
screamer 0:66f3b5499f7f 71 'NUCLEO_F410RB',
screamer 0:66f3b5499f7f 72 'NUCLEO_F411RE',
screamer 13:ab47a20b66f0 73 'NUCLEO_F429ZI',
screamer 0:66f3b5499f7f 74 'NUCLEO_F446RE',
screamer 13:ab47a20b66f0 75 'NUCLEO_F446ZE',
screamer 0:66f3b5499f7f 76 'B96B_F446VE',
screamer 0:66f3b5499f7f 77 'ARCH_MAX',
screamer 0:66f3b5499f7f 78 'NUCLEO_F030R8',
screamer 0:66f3b5499f7f 79 'NUCLEO_F031K6',
screamer 0:66f3b5499f7f 80 'NUCLEO_F042K6',
screamer 0:66f3b5499f7f 81 'NUCLEO_F070RB',
screamer 0:66f3b5499f7f 82 'NUCLEO_F072RB',
screamer 0:66f3b5499f7f 83 'NUCLEO_F091RC',
screamer 0:66f3b5499f7f 84 'NUCLEO_F103RB',
screamer 24:25bff2709c20 85 'NUCLEO_F207ZG',
screamer 0:66f3b5499f7f 86 'NUCLEO_F302R8',
screamer 0:66f3b5499f7f 87 'NUCLEO_F303K8',
screamer 0:66f3b5499f7f 88 'NUCLEO_F303RE',
screamer 0:66f3b5499f7f 89 'NUCLEO_F334R8',
screamer 0:66f3b5499f7f 90 'NUCLEO_F746ZG',
screamer 13:ab47a20b66f0 91 'NUCLEO_F767ZI',
screamer 0:66f3b5499f7f 92 'DISCO_L053C8',
screamer 13:ab47a20b66f0 93 'NUCLEO_L011K4',
screamer 13:ab47a20b66f0 94 'NUCLEO_L031K6',
screamer 0:66f3b5499f7f 95 'NUCLEO_L053R8',
screamer 0:66f3b5499f7f 96 'NUCLEO_L073RZ',
screamer 13:ab47a20b66f0 97 'NUCLEO_L432KC',
screamer 0:66f3b5499f7f 98 'NUCLEO_L476RG',
screamer 0:66f3b5499f7f 99 'DISCO_F334C8',
screamer 0:66f3b5499f7f 100 'MAX32600MBED',
screamer 0:66f3b5499f7f 101 'MAXWSNENV',
screamer 0:66f3b5499f7f 102 'MTS_MDOT_F405RG',
screamer 0:66f3b5499f7f 103 'MTS_MDOT_F411RE',
screamer 0:66f3b5499f7f 104 'NUCLEO_L152RE',
screamer 0:66f3b5499f7f 105 'NRF51_DK',
screamer 0:66f3b5499f7f 106 'NRF51_DONGLE',
screamer 13:ab47a20b66f0 107 'NRF51_MICROBIT',
screamer 0:66f3b5499f7f 108 'SEEED_TINY_BLE',
screamer 0:66f3b5499f7f 109 'DISCO_F401VC',
screamer 0:66f3b5499f7f 110 'DELTA_DFCM_NNN40',
screamer 0:66f3b5499f7f 111 'RZ_A1H',
screamer 0:66f3b5499f7f 112 'MOTE_L152RC',
screamer 0:66f3b5499f7f 113 'EFM32WG_STK3800',
screamer 0:66f3b5499f7f 114 'EFM32LG_STK3600',
screamer 0:66f3b5499f7f 115 'EFM32GG_STK3700',
screamer 0:66f3b5499f7f 116 'EFM32ZG_STK3200',
screamer 0:66f3b5499f7f 117 'EFM32HG_STK3400',
screamer 0:66f3b5499f7f 118 'EFM32PG_STK3401',
screamer 0:66f3b5499f7f 119 'NZ32_SC151',
screamer 0:66f3b5499f7f 120 'SAMR21G18A',
screamer 0:66f3b5499f7f 121 'TEENSY3_1',
screamer 0:66f3b5499f7f 122 'SAMD21J18A',
screamer 0:66f3b5499f7f 123 'SAMD21G18A',
screamer 0:66f3b5499f7f 124 'SAML21J18A',
screamer 13:ab47a20b66f0 125 'SAMG55J19',
screamer 13:ab47a20b66f0 126 'ARM_BEETLE_SOC',
screamer 13:ab47a20b66f0 127 'ELMO_F411RE',
screamer 13:ab47a20b66f0 128 'BLUEPILL_F103C8',
screamer 0:66f3b5499f7f 129 ]
screamer 0:66f3b5499f7f 130
screamer 0:66f3b5499f7f 131 DOT_IN_RELATIVE_PATH = True
screamer 0:66f3b5499f7f 132
screamer 13:ab47a20b66f0 133 MBED_CONFIG_HEADER_SUPPORTED = True
screamer 13:ab47a20b66f0 134
screamer 0:66f3b5499f7f 135 def generate(self):
screamer 0:66f3b5499f7f 136 # "make" wants Unix paths
screamer 13:ab47a20b66f0 137 if self.sources_relative:
screamer 13:ab47a20b66f0 138 self.resources.relative_to(self.prj_paths[0])
screamer 0:66f3b5499f7f 139 self.resources.win_to_unix()
screamer 0:66f3b5499f7f 140
screamer 0:66f3b5499f7f 141 to_be_compiled = []
screamer 0:66f3b5499f7f 142 for r_type in ['s_sources', 'c_sources', 'cpp_sources']:
screamer 0:66f3b5499f7f 143 r = getattr(self.resources, r_type)
screamer 0:66f3b5499f7f 144 if r:
screamer 0:66f3b5499f7f 145 for source in r:
screamer 0:66f3b5499f7f 146 base, ext = splitext(source)
screamer 0:66f3b5499f7f 147 to_be_compiled.append(base + '.o')
screamer 0:66f3b5499f7f 148
screamer 0:66f3b5499f7f 149 libraries = []
screamer 0:66f3b5499f7f 150 for lib in self.resources.libraries:
screamer 0:66f3b5499f7f 151 l, _ = splitext(basename(lib))
screamer 0:66f3b5499f7f 152 libraries.append(l[3:])
screamer 0:66f3b5499f7f 153
screamer 13:ab47a20b66f0 154 build_dir = abspath(join(self.inputDir, ".build"))
screamer 0:66f3b5499f7f 155 ctx = {
screamer 0:66f3b5499f7f 156 'name': self.program_name,
screamer 0:66f3b5499f7f 157 'to_be_compiled': to_be_compiled,
screamer 0:66f3b5499f7f 158 'object_files': self.resources.objects,
screamer 0:66f3b5499f7f 159 'include_paths': self.resources.inc_dirs,
screamer 0:66f3b5499f7f 160 'library_paths': self.resources.lib_dirs,
screamer 0:66f3b5499f7f 161 'linker_script': self.resources.linker_script,
screamer 0:66f3b5499f7f 162 'libraries': libraries,
screamer 0:66f3b5499f7f 163 'symbols': self.get_symbols(),
screamer 13:ab47a20b66f0 164 'cpu_flags': self.toolchain.cpu,
screamer 29:1210849dba19 165 'vpath': [relpath(s, build_dir) for s in self.prj_paths] if self.sources_relative else [".."],
screamer 29:1210849dba19 166 'hex_files': self.resources.hex_files
screamer 0:66f3b5499f7f 167 }
screamer 13:ab47a20b66f0 168
screamer 29:1210849dba19 169 for key in ['include_paths', 'library_paths', 'linker_script', 'hex_files']:
screamer 13:ab47a20b66f0 170 if isinstance(ctx[key], list):
screamer 13:ab47a20b66f0 171 ctx[key] = [ctx['vpath'][0] + "/" + t for t in ctx[key]]
screamer 13:ab47a20b66f0 172 else:
screamer 13:ab47a20b66f0 173 ctx[key] = ctx['vpath'][0] + "/" + ctx[key]
screamer 13:ab47a20b66f0 174 if "../." not in ctx["include_paths"]:
screamer 13:ab47a20b66f0 175 ctx["include_paths"] += ['../.']
screamer 13:ab47a20b66f0 176 ctx.update(self.progen_flags)
screamer 0:66f3b5499f7f 177 self.gen_file('gcc_arm_%s.tmpl' % self.target.lower(), ctx, 'Makefile')
screamer 13:ab47a20b66f0 178
screamer 13:ab47a20b66f0 179 def scan_and_copy_resources(self, prj_paths, trg_path, relative=False):
screamer 13:ab47a20b66f0 180 self.prj_paths = prj_paths
screamer 13:ab47a20b66f0 181 Exporter.scan_and_copy_resources(self, prj_paths, trg_path, relative)