Preliminary main mbed library for nexpaq development

Committer:
nexpaq
Date:
Fri Nov 04 20:27:58 2016 +0000
Revision:
0:6c56fb4bc5f0
Moving to library for sharing updates

Who changed what in which revision?

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