mbed-os

Dependents:   cobaLCDJoyMotor_Thread odometry_omni_3roda_v3 odometry_omni_3roda_v1 odometry_omni_3roda_v2 ... more

Committer:
be_bryan
Date:
Mon Dec 11 17:54:04 2017 +0000
Revision:
0:b74591d5ab33
motor ++

Who changed what in which revision?

UserRevisionLine numberNew contents of line
be_bryan 0:b74591d5ab33 1 """
be_bryan 0:b74591d5ab33 2 mbed SDK
be_bryan 0:b74591d5ab33 3 Copyright (c) 2014-2016 ARM Limited
be_bryan 0:b74591d5ab33 4
be_bryan 0:b74591d5ab33 5 Licensed under the Apache License, Version 2.0 (the "License");
be_bryan 0:b74591d5ab33 6 you may not use this file except in compliance with the License.
be_bryan 0:b74591d5ab33 7 You may obtain a copy of the License at
be_bryan 0:b74591d5ab33 8
be_bryan 0:b74591d5ab33 9 http://www.apache.org/licenses/LICENSE-2.0
be_bryan 0:b74591d5ab33 10
be_bryan 0:b74591d5ab33 11 Unless required by applicable law or agreed to in writing, software
be_bryan 0:b74591d5ab33 12 distributed under the License is distributed on an "AS IS" BASIS,
be_bryan 0:b74591d5ab33 13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
be_bryan 0:b74591d5ab33 14 See the License for the specific language governing permissions and
be_bryan 0:b74591d5ab33 15 limitations under the License.
be_bryan 0:b74591d5ab33 16 """
be_bryan 0:b74591d5ab33 17 from os.path import split,splitext, basename
be_bryan 0:b74591d5ab33 18
be_bryan 0:b74591d5ab33 19 from tools.export.exporters import Exporter, deprecated_exporter
be_bryan 0:b74591d5ab33 20
be_bryan 0:b74591d5ab33 21 class Folder:
be_bryan 0:b74591d5ab33 22 def __init__(self, name):
be_bryan 0:b74591d5ab33 23 self.name = name
be_bryan 0:b74591d5ab33 24 self.children = []
be_bryan 0:b74591d5ab33 25
be_bryan 0:b74591d5ab33 26 def contains(self, folderName):
be_bryan 0:b74591d5ab33 27 for child in self.children:
be_bryan 0:b74591d5ab33 28 if child.name == folderName:
be_bryan 0:b74591d5ab33 29 return True
be_bryan 0:b74591d5ab33 30 return False
be_bryan 0:b74591d5ab33 31
be_bryan 0:b74591d5ab33 32 def __str__(self):
be_bryan 0:b74591d5ab33 33 retval = self.name + " "
be_bryan 0:b74591d5ab33 34 if len(self.children) > 0:
be_bryan 0:b74591d5ab33 35 retval += "[ "
be_bryan 0:b74591d5ab33 36 for child in self.children:
be_bryan 0:b74591d5ab33 37 retval += child.__str__()
be_bryan 0:b74591d5ab33 38 retval += " ]"
be_bryan 0:b74591d5ab33 39
be_bryan 0:b74591d5ab33 40 return retval
be_bryan 0:b74591d5ab33 41
be_bryan 0:b74591d5ab33 42 def findChild(self, folderName):
be_bryan 0:b74591d5ab33 43 for child in self.children:
be_bryan 0:b74591d5ab33 44 if child.name == folderName:
be_bryan 0:b74591d5ab33 45 return child
be_bryan 0:b74591d5ab33 46 return None
be_bryan 0:b74591d5ab33 47
be_bryan 0:b74591d5ab33 48 def addChild(self, folderName):
be_bryan 0:b74591d5ab33 49 if folderName == '':
be_bryan 0:b74591d5ab33 50 return None
be_bryan 0:b74591d5ab33 51
be_bryan 0:b74591d5ab33 52 if not self.contains(folderName):
be_bryan 0:b74591d5ab33 53 self.children.append(Folder(folderName))
be_bryan 0:b74591d5ab33 54
be_bryan 0:b74591d5ab33 55 return self.findChild(folderName)
be_bryan 0:b74591d5ab33 56
be_bryan 0:b74591d5ab33 57 @deprecated_exporter
be_bryan 0:b74591d5ab33 58 class SimplicityV3(Exporter):
be_bryan 0:b74591d5ab33 59 NAME = 'SimplicityV3'
be_bryan 0:b74591d5ab33 60 TOOLCHAIN = 'GCC_ARM'
be_bryan 0:b74591d5ab33 61
be_bryan 0:b74591d5ab33 62 TARGETS = [
be_bryan 0:b74591d5ab33 63 'EFM32GG_STK3700',
be_bryan 0:b74591d5ab33 64 'EFM32ZG_STK3200',
be_bryan 0:b74591d5ab33 65 'EFM32LG_STK3600',
be_bryan 0:b74591d5ab33 66 'EFM32WG_STK3800',
be_bryan 0:b74591d5ab33 67 'EFM32HG_STK3400',
be_bryan 0:b74591d5ab33 68 'EFM32PG_STK3401'
be_bryan 0:b74591d5ab33 69 ]
be_bryan 0:b74591d5ab33 70
be_bryan 0:b74591d5ab33 71 PARTS = {
be_bryan 0:b74591d5ab33 72 'EFM32GG_STK3700': 'com.silabs.mcu.si32.efm32.efm32gg.efm32gg990f1024',
be_bryan 0:b74591d5ab33 73 'EFM32ZG_STK3200': 'com.silabs.mcu.si32.efm32.efm32zg.efm32zg222f32',
be_bryan 0:b74591d5ab33 74 'EFM32LG_STK3600': 'com.silabs.mcu.si32.efm32.efm32lg.efm32lg990f256',
be_bryan 0:b74591d5ab33 75 'EFM32WG_STK3800': 'com.silabs.mcu.si32.efm32.efm32wg.efm32wg990f256',
be_bryan 0:b74591d5ab33 76 'EFM32HG_STK3400': 'com.silabs.mcu.si32.efm32.efm32hg.efm32hg322f64',
be_bryan 0:b74591d5ab33 77 'EFM32PG_STK3401': 'com.silabs.mcu.si32.efm32.efm32pg1b.efm32pg1b200f256gm48'
be_bryan 0:b74591d5ab33 78 }
be_bryan 0:b74591d5ab33 79
be_bryan 0:b74591d5ab33 80 KITS = {
be_bryan 0:b74591d5ab33 81 'EFM32GG_STK3700': 'com.silabs.kit.si32.efm32.efm32gg.stk3700',
be_bryan 0:b74591d5ab33 82 'EFM32ZG_STK3200': 'com.silabs.kit.si32.efm32.efm32zg.stk3200',
be_bryan 0:b74591d5ab33 83 'EFM32LG_STK3600': 'com.silabs.kit.si32.efm32.efm32lg.stk3600',
be_bryan 0:b74591d5ab33 84 'EFM32WG_STK3800': 'com.silabs.kit.si32.efm32.efm32wg.stk3800',
be_bryan 0:b74591d5ab33 85 'EFM32HG_STK3400': 'com.silabs.kit.si32.efm32.efm32hg.slstk3400a',
be_bryan 0:b74591d5ab33 86 'EFM32PG_STK3401': 'com.silabs.kit.si32.efm32.efm32pg.slstk3401a'
be_bryan 0:b74591d5ab33 87 }
be_bryan 0:b74591d5ab33 88
be_bryan 0:b74591d5ab33 89 FILE_TYPES = {
be_bryan 0:b74591d5ab33 90 'c_sources':'1',
be_bryan 0:b74591d5ab33 91 'cpp_sources':'1',
be_bryan 0:b74591d5ab33 92 's_sources':'1'
be_bryan 0:b74591d5ab33 93 }
be_bryan 0:b74591d5ab33 94
be_bryan 0:b74591d5ab33 95 EXCLUDED_LIBS = [
be_bryan 0:b74591d5ab33 96 'm',
be_bryan 0:b74591d5ab33 97 'c',
be_bryan 0:b74591d5ab33 98 'gcc',
be_bryan 0:b74591d5ab33 99 'nosys',
be_bryan 0:b74591d5ab33 100 'supc++',
be_bryan 0:b74591d5ab33 101 'stdc++'
be_bryan 0:b74591d5ab33 102 ]
be_bryan 0:b74591d5ab33 103
be_bryan 0:b74591d5ab33 104 DOT_IN_RELATIVE_PATH = False
be_bryan 0:b74591d5ab33 105
be_bryan 0:b74591d5ab33 106 MBED_CONFIG_HEADER_SUPPORTED = True
be_bryan 0:b74591d5ab33 107
be_bryan 0:b74591d5ab33 108 orderedPaths = Folder("Root")
be_bryan 0:b74591d5ab33 109
be_bryan 0:b74591d5ab33 110 def check_and_add_path(self, path):
be_bryan 0:b74591d5ab33 111 levels = path.split('/')
be_bryan 0:b74591d5ab33 112 base = self.orderedPaths
be_bryan 0:b74591d5ab33 113 for level in levels:
be_bryan 0:b74591d5ab33 114 if base.contains(level):
be_bryan 0:b74591d5ab33 115 base = base.findChild(level)
be_bryan 0:b74591d5ab33 116 else:
be_bryan 0:b74591d5ab33 117 base.addChild(level)
be_bryan 0:b74591d5ab33 118 base = base.findChild(level)
be_bryan 0:b74591d5ab33 119
be_bryan 0:b74591d5ab33 120
be_bryan 0:b74591d5ab33 121 def generate(self):
be_bryan 0:b74591d5ab33 122 # "make" wants Unix paths
be_bryan 0:b74591d5ab33 123 self.resources.win_to_unix()
be_bryan 0:b74591d5ab33 124
be_bryan 0:b74591d5ab33 125 main_files = []
be_bryan 0:b74591d5ab33 126
be_bryan 0:b74591d5ab33 127 EXCLUDED_LIBS = [
be_bryan 0:b74591d5ab33 128 'm',
be_bryan 0:b74591d5ab33 129 'c',
be_bryan 0:b74591d5ab33 130 'gcc',
be_bryan 0:b74591d5ab33 131 'nosys',
be_bryan 0:b74591d5ab33 132 'supc++',
be_bryan 0:b74591d5ab33 133 'stdc++'
be_bryan 0:b74591d5ab33 134 ]
be_bryan 0:b74591d5ab33 135
be_bryan 0:b74591d5ab33 136 for r_type in ['s_sources', 'c_sources', 'cpp_sources']:
be_bryan 0:b74591d5ab33 137 r = getattr(self.resources, r_type)
be_bryan 0:b74591d5ab33 138 if r:
be_bryan 0:b74591d5ab33 139 for source in r:
be_bryan 0:b74591d5ab33 140 self.check_and_add_path(split(source)[0])
be_bryan 0:b74591d5ab33 141
be_bryan 0:b74591d5ab33 142 if not ('/' in source):
be_bryan 0:b74591d5ab33 143 main_files.append(source)
be_bryan 0:b74591d5ab33 144
be_bryan 0:b74591d5ab33 145 libraries = []
be_bryan 0:b74591d5ab33 146 for lib in self.resources.libraries:
be_bryan 0:b74591d5ab33 147 l, _ = splitext(basename(lib))
be_bryan 0:b74591d5ab33 148 if l[3:] not in EXCLUDED_LIBS:
be_bryan 0:b74591d5ab33 149 libraries.append(l[3:])
be_bryan 0:b74591d5ab33 150
be_bryan 0:b74591d5ab33 151 defines = []
be_bryan 0:b74591d5ab33 152 for define in self.toolchain.get_symbols():
be_bryan 0:b74591d5ab33 153 if '=' in define:
be_bryan 0:b74591d5ab33 154 keyval = define.split('=')
be_bryan 0:b74591d5ab33 155 defines.append( (keyval[0], keyval[1]) )
be_bryan 0:b74591d5ab33 156 else:
be_bryan 0:b74591d5ab33 157 defines.append( (define, '') )
be_bryan 0:b74591d5ab33 158
be_bryan 0:b74591d5ab33 159 self.check_and_add_path(split(self.resources.linker_script)[0])
be_bryan 0:b74591d5ab33 160
be_bryan 0:b74591d5ab33 161 ctx = {
be_bryan 0:b74591d5ab33 162 'name': self.project_name,
be_bryan 0:b74591d5ab33 163 'main_files': main_files,
be_bryan 0:b74591d5ab33 164 'recursiveFolders': self.orderedPaths,
be_bryan 0:b74591d5ab33 165 'object_files': self.resources.objects,
be_bryan 0:b74591d5ab33 166 'include_paths': self.resources.inc_dirs,
be_bryan 0:b74591d5ab33 167 'library_paths': self.resources.lib_dirs,
be_bryan 0:b74591d5ab33 168 'linker_script': self.resources.linker_script,
be_bryan 0:b74591d5ab33 169 'libraries': libraries,
be_bryan 0:b74591d5ab33 170 'defines': defines,
be_bryan 0:b74591d5ab33 171 'part': self.PARTS[self.target],
be_bryan 0:b74591d5ab33 172 'kit': self.KITS[self.target],
be_bryan 0:b74591d5ab33 173 'loopcount': 0
be_bryan 0:b74591d5ab33 174 }
be_bryan 0:b74591d5ab33 175 ctx.update(self.flags)
be_bryan 0:b74591d5ab33 176
be_bryan 0:b74591d5ab33 177 ## Strip main folder from include paths because ssproj is not capable of handling it
be_bryan 0:b74591d5ab33 178 if '.' in ctx['include_paths']:
be_bryan 0:b74591d5ab33 179 ctx['include_paths'].remove('.')
be_bryan 0:b74591d5ab33 180 ctx['include_root'] = True
be_bryan 0:b74591d5ab33 181
be_bryan 0:b74591d5ab33 182 '''
be_bryan 0:b74591d5ab33 183 Suppress print statements
be_bryan 0:b74591d5ab33 184 print('\n')
be_bryan 0:b74591d5ab33 185 print(self.target)
be_bryan 0:b74591d5ab33 186 print('\n')
be_bryan 0:b74591d5ab33 187 print(ctx)
be_bryan 0:b74591d5ab33 188 print('\n')
be_bryan 0:b74591d5ab33 189 print(self.orderedPaths)
be_bryan 0:b74591d5ab33 190 for path in self.orderedPaths.children:
be_bryan 0:b74591d5ab33 191 print(path.name + "\n")
be_bryan 0:b74591d5ab33 192 for bpath in path.children:
be_bryan 0:b74591d5ab33 193 print("\t" + bpath.name + "\n")
be_bryan 0:b74591d5ab33 194 '''
be_bryan 0:b74591d5ab33 195
be_bryan 0:b74591d5ab33 196 self.gen_file('simplicity/slsproj.tmpl', ctx, '%s.slsproj' % self.project_name)