Clone of official tools

Committer:
screamer
Date:
Thu Jul 14 20:21:19 2016 +0100
Revision:
13:ab47a20b66f0
Parent:
0:66f3b5499f7f
Child:
24:25bff2709c20
Apply latest tools

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 0:66f3b5499f7f 61 'RBLAB_NRF51822',
screamer 0:66f3b5499f7f 62 'RBLAB_BLENANO',
screamer 0:66f3b5499f7f 63 'LPC2368',
screamer 0:66f3b5499f7f 64 'LPC2460',
screamer 0:66f3b5499f7f 65 'LPCCAPPUCCINO',
screamer 0:66f3b5499f7f 66 'ARCH_BLE',
screamer 0:66f3b5499f7f 67 'MTS_GAMBIT',
screamer 0:66f3b5499f7f 68 'ARCH_MAX',
screamer 0:66f3b5499f7f 69 'NUCLEO_F401RE',
screamer 0:66f3b5499f7f 70 'NUCLEO_F410RB',
screamer 0:66f3b5499f7f 71 'NUCLEO_F411RE',
screamer 13:ab47a20b66f0 72 'NUCLEO_F429ZI',
screamer 0:66f3b5499f7f 73 'NUCLEO_F446RE',
screamer 13:ab47a20b66f0 74 'NUCLEO_F446ZE',
screamer 0:66f3b5499f7f 75 'B96B_F446VE',
screamer 0:66f3b5499f7f 76 'ARCH_MAX',
screamer 0:66f3b5499f7f 77 'NUCLEO_F030R8',
screamer 0:66f3b5499f7f 78 'NUCLEO_F031K6',
screamer 0:66f3b5499f7f 79 'NUCLEO_F042K6',
screamer 0:66f3b5499f7f 80 'NUCLEO_F070RB',
screamer 0:66f3b5499f7f 81 'NUCLEO_F072RB',
screamer 0:66f3b5499f7f 82 'NUCLEO_F091RC',
screamer 0:66f3b5499f7f 83 'NUCLEO_F103RB',
screamer 0:66f3b5499f7f 84 'NUCLEO_F302R8',
screamer 0:66f3b5499f7f 85 'NUCLEO_F303K8',
screamer 0:66f3b5499f7f 86 'NUCLEO_F303RE',
screamer 0:66f3b5499f7f 87 'NUCLEO_F334R8',
screamer 0:66f3b5499f7f 88 'NUCLEO_F746ZG',
screamer 13:ab47a20b66f0 89 'NUCLEO_F767ZI',
screamer 0:66f3b5499f7f 90 'DISCO_L053C8',
screamer 13:ab47a20b66f0 91 'NUCLEO_L011K4',
screamer 13:ab47a20b66f0 92 'NUCLEO_L031K6',
screamer 0:66f3b5499f7f 93 'NUCLEO_L053R8',
screamer 0:66f3b5499f7f 94 'NUCLEO_L073RZ',
screamer 13:ab47a20b66f0 95 'NUCLEO_L432KC',
screamer 0:66f3b5499f7f 96 'NUCLEO_L476RG',
screamer 0:66f3b5499f7f 97 'DISCO_F334C8',
screamer 0:66f3b5499f7f 98 'MAX32600MBED',
screamer 0:66f3b5499f7f 99 'MAXWSNENV',
screamer 0:66f3b5499f7f 100 'MTS_MDOT_F405RG',
screamer 0:66f3b5499f7f 101 'MTS_MDOT_F411RE',
screamer 0:66f3b5499f7f 102 'NUCLEO_L152RE',
screamer 0:66f3b5499f7f 103 'NRF51_DK',
screamer 0:66f3b5499f7f 104 'NRF51_DONGLE',
screamer 13:ab47a20b66f0 105 'NRF51_MICROBIT',
screamer 0:66f3b5499f7f 106 'SEEED_TINY_BLE',
screamer 0:66f3b5499f7f 107 'DISCO_F401VC',
screamer 0:66f3b5499f7f 108 'DELTA_DFCM_NNN40',
screamer 0:66f3b5499f7f 109 'RZ_A1H',
screamer 0:66f3b5499f7f 110 'MOTE_L152RC',
screamer 0:66f3b5499f7f 111 'EFM32WG_STK3800',
screamer 0:66f3b5499f7f 112 'EFM32LG_STK3600',
screamer 0:66f3b5499f7f 113 'EFM32GG_STK3700',
screamer 0:66f3b5499f7f 114 'EFM32ZG_STK3200',
screamer 0:66f3b5499f7f 115 'EFM32HG_STK3400',
screamer 0:66f3b5499f7f 116 'EFM32PG_STK3401',
screamer 0:66f3b5499f7f 117 'NZ32_SC151',
screamer 0:66f3b5499f7f 118 'SAMR21G18A',
screamer 0:66f3b5499f7f 119 'TEENSY3_1',
screamer 0:66f3b5499f7f 120 'SAMD21J18A',
screamer 0:66f3b5499f7f 121 'SAMD21G18A',
screamer 0:66f3b5499f7f 122 'SAML21J18A',
screamer 13:ab47a20b66f0 123 'SAMG55J19',
screamer 13:ab47a20b66f0 124 'ARM_BEETLE_SOC',
screamer 13:ab47a20b66f0 125 'ELMO_F411RE',
screamer 13:ab47a20b66f0 126 'BLUEPILL_F103C8',
screamer 0:66f3b5499f7f 127 ]
screamer 0:66f3b5499f7f 128
screamer 0:66f3b5499f7f 129 DOT_IN_RELATIVE_PATH = True
screamer 0:66f3b5499f7f 130
screamer 13:ab47a20b66f0 131 MBED_CONFIG_HEADER_SUPPORTED = True
screamer 13:ab47a20b66f0 132
screamer 0:66f3b5499f7f 133 def generate(self):
screamer 0:66f3b5499f7f 134 # "make" wants Unix paths
screamer 13:ab47a20b66f0 135 if self.sources_relative:
screamer 13:ab47a20b66f0 136 self.resources.relative_to(self.prj_paths[0])
screamer 0:66f3b5499f7f 137 self.resources.win_to_unix()
screamer 0:66f3b5499f7f 138
screamer 0:66f3b5499f7f 139 to_be_compiled = []
screamer 0:66f3b5499f7f 140 for r_type in ['s_sources', 'c_sources', 'cpp_sources']:
screamer 0:66f3b5499f7f 141 r = getattr(self.resources, r_type)
screamer 0:66f3b5499f7f 142 if r:
screamer 0:66f3b5499f7f 143 for source in r:
screamer 0:66f3b5499f7f 144 base, ext = splitext(source)
screamer 0:66f3b5499f7f 145 to_be_compiled.append(base + '.o')
screamer 0:66f3b5499f7f 146
screamer 0:66f3b5499f7f 147 libraries = []
screamer 0:66f3b5499f7f 148 for lib in self.resources.libraries:
screamer 0:66f3b5499f7f 149 l, _ = splitext(basename(lib))
screamer 0:66f3b5499f7f 150 libraries.append(l[3:])
screamer 0:66f3b5499f7f 151
screamer 13:ab47a20b66f0 152 build_dir = abspath(join(self.inputDir, ".build"))
screamer 0:66f3b5499f7f 153 ctx = {
screamer 0:66f3b5499f7f 154 'name': self.program_name,
screamer 0:66f3b5499f7f 155 'to_be_compiled': to_be_compiled,
screamer 0:66f3b5499f7f 156 'object_files': self.resources.objects,
screamer 0:66f3b5499f7f 157 'include_paths': self.resources.inc_dirs,
screamer 0:66f3b5499f7f 158 'library_paths': self.resources.lib_dirs,
screamer 0:66f3b5499f7f 159 'linker_script': self.resources.linker_script,
screamer 0:66f3b5499f7f 160 'libraries': libraries,
screamer 0:66f3b5499f7f 161 'symbols': self.get_symbols(),
screamer 13:ab47a20b66f0 162 'cpu_flags': self.toolchain.cpu,
screamer 13:ab47a20b66f0 163 'vpath': [relpath(s, build_dir) for s in self.prj_paths] if self.sources_relative else [".."]
screamer 0:66f3b5499f7f 164 }
screamer 13:ab47a20b66f0 165
screamer 13:ab47a20b66f0 166 for key in ['include_paths', 'library_paths', 'linker_script']:
screamer 13:ab47a20b66f0 167 if isinstance(ctx[key], list):
screamer 13:ab47a20b66f0 168 ctx[key] = [ctx['vpath'][0] + "/" + t for t in ctx[key]]
screamer 13:ab47a20b66f0 169 else:
screamer 13:ab47a20b66f0 170 ctx[key] = ctx['vpath'][0] + "/" + ctx[key]
screamer 13:ab47a20b66f0 171 if "../." not in ctx["include_paths"]:
screamer 13:ab47a20b66f0 172 ctx["include_paths"] += ['../.']
screamer 13:ab47a20b66f0 173 ctx.update(self.progen_flags)
screamer 0:66f3b5499f7f 174 self.gen_file('gcc_arm_%s.tmpl' % self.target.lower(), ctx, 'Makefile')
screamer 13:ab47a20b66f0 175
screamer 13:ab47a20b66f0 176 def scan_and_copy_resources(self, prj_paths, trg_path, relative=False):
screamer 13:ab47a20b66f0 177 self.prj_paths = prj_paths
screamer 13:ab47a20b66f0 178 Exporter.scan_and_copy_resources(self, prj_paths, trg_path, relative)