ON Semiconductor / mbed-os

Dependents:   mbed-TFT-example-NCS36510 mbed-Accelerometer-example-NCS36510 mbed-Accelerometer-example-NCS36510

Committer:
jacobjohnson
Date:
Mon Feb 27 17:45:05 2017 +0000
Revision:
1:f30bdcd2b33b
Parent:
0:098463de4c5d
changed the inputscale from 1 to 7 in analogin_api.c.  This will need to be changed later, and accessed from the main level, but for now this allows the  adc to read a value from 0 to 3.7V, instead of just up to 1V.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
group-onsemi 0:098463de4c5d 1 """ The new way of doing exports """
group-onsemi 0:098463de4c5d 2 import sys
group-onsemi 0:098463de4c5d 3 from os.path import join, abspath, dirname, exists
group-onsemi 0:098463de4c5d 4 from os.path import basename, relpath, normpath, splitext
group-onsemi 0:098463de4c5d 5 from os import makedirs, walk
group-onsemi 0:098463de4c5d 6 ROOT = abspath(join(dirname(__file__), ".."))
group-onsemi 0:098463de4c5d 7 sys.path.insert(0, ROOT)
group-onsemi 0:098463de4c5d 8 import copy
group-onsemi 0:098463de4c5d 9 from shutil import rmtree
group-onsemi 0:098463de4c5d 10 import zipfile
group-onsemi 0:098463de4c5d 11
group-onsemi 0:098463de4c5d 12 from tools.build_api import prepare_toolchain
group-onsemi 0:098463de4c5d 13 from tools.build_api import scan_resources
group-onsemi 0:098463de4c5d 14 from tools.export import EXPORTERS
group-onsemi 0:098463de4c5d 15 from tools.toolchains import Resources
group-onsemi 0:098463de4c5d 16
group-onsemi 0:098463de4c5d 17
group-onsemi 0:098463de4c5d 18 def get_exporter_toolchain(ide):
group-onsemi 0:098463de4c5d 19 """ Return the exporter class and the toolchain string as a tuple
group-onsemi 0:098463de4c5d 20
group-onsemi 0:098463de4c5d 21 Positional arguments:
group-onsemi 0:098463de4c5d 22 ide - the ide name of an exporter
group-onsemi 0:098463de4c5d 23 """
group-onsemi 0:098463de4c5d 24 return EXPORTERS[ide], EXPORTERS[ide].TOOLCHAIN
group-onsemi 0:098463de4c5d 25
group-onsemi 0:098463de4c5d 26
group-onsemi 0:098463de4c5d 27 def rewrite_basepath(file_name, resources, export_path, loc):
group-onsemi 0:098463de4c5d 28 """ Replace the basepath of filename with export_path
group-onsemi 0:098463de4c5d 29
group-onsemi 0:098463de4c5d 30 Positional arguments:
group-onsemi 0:098463de4c5d 31 file_name - the absolute path to a file
group-onsemi 0:098463de4c5d 32 resources - the resources object that the file came from
group-onsemi 0:098463de4c5d 33 export_path - the final destination of the file after export
group-onsemi 0:098463de4c5d 34 """
group-onsemi 0:098463de4c5d 35 new_f = join(loc, relpath(file_name, resources.file_basepath[file_name]))
group-onsemi 0:098463de4c5d 36 resources.file_basepath[join(export_path, new_f)] = export_path
group-onsemi 0:098463de4c5d 37 return new_f
group-onsemi 0:098463de4c5d 38
group-onsemi 0:098463de4c5d 39
group-onsemi 0:098463de4c5d 40 def subtract_basepath(resources, export_path, loc=""):
group-onsemi 0:098463de4c5d 41 """ Rewrite all of the basepaths with the export_path
group-onsemi 0:098463de4c5d 42
group-onsemi 0:098463de4c5d 43 Positional arguments:
group-onsemi 0:098463de4c5d 44 resources - the resource object to rewrite the basepaths of
group-onsemi 0:098463de4c5d 45 export_path - the final destination of the resources with respect to the
group-onsemi 0:098463de4c5d 46 generated project files
group-onsemi 0:098463de4c5d 47 """
group-onsemi 0:098463de4c5d 48 keys = ['s_sources', 'c_sources', 'cpp_sources', 'hex_files',
group-onsemi 0:098463de4c5d 49 'objects', 'libraries', 'inc_dirs', 'headers', 'linker_script',
group-onsemi 0:098463de4c5d 50 'lib_dirs']
group-onsemi 0:098463de4c5d 51 for key in keys:
group-onsemi 0:098463de4c5d 52 vals = getattr(resources, key)
group-onsemi 0:098463de4c5d 53 if isinstance(vals, set):
group-onsemi 0:098463de4c5d 54 vals = list(vals)
group-onsemi 0:098463de4c5d 55 if isinstance(vals, list):
group-onsemi 0:098463de4c5d 56 new_vals = []
group-onsemi 0:098463de4c5d 57 for val in vals:
group-onsemi 0:098463de4c5d 58 new_vals.append(rewrite_basepath(val, resources, export_path,
group-onsemi 0:098463de4c5d 59 loc))
group-onsemi 0:098463de4c5d 60 if isinstance(getattr(resources, key), set):
group-onsemi 0:098463de4c5d 61 setattr(resources, key, set(new_vals))
group-onsemi 0:098463de4c5d 62 else:
group-onsemi 0:098463de4c5d 63 setattr(resources, key, new_vals)
group-onsemi 0:098463de4c5d 64 elif vals:
group-onsemi 0:098463de4c5d 65 setattr(resources, key, rewrite_basepath(vals, resources,
group-onsemi 0:098463de4c5d 66 export_path, loc))
group-onsemi 0:098463de4c5d 67
group-onsemi 0:098463de4c5d 68
group-onsemi 0:098463de4c5d 69 def generate_project_files(resources, export_path, target, name, toolchain, ide,
group-onsemi 0:098463de4c5d 70 macros=None):
group-onsemi 0:098463de4c5d 71 """Generate the project files for a project
group-onsemi 0:098463de4c5d 72
group-onsemi 0:098463de4c5d 73 Positional arguments:
group-onsemi 0:098463de4c5d 74 resources - a Resources object containing all of the files needed to build
group-onsemi 0:098463de4c5d 75 this project
group-onsemi 0:098463de4c5d 76 export_path - location to place project files
group-onsemi 0:098463de4c5d 77 name - name of the project
group-onsemi 0:098463de4c5d 78 toolchain - a toolchain class that corresponds to the toolchain used by the
group-onsemi 0:098463de4c5d 79 IDE or makefile
group-onsemi 0:098463de4c5d 80 ide - IDE name to export to
group-onsemi 0:098463de4c5d 81
group-onsemi 0:098463de4c5d 82 Optional arguments:
group-onsemi 0:098463de4c5d 83 macros - additional macros that should be defined within the exported
group-onsemi 0:098463de4c5d 84 project
group-onsemi 0:098463de4c5d 85 """
group-onsemi 0:098463de4c5d 86 exporter_cls, _ = get_exporter_toolchain(ide)
group-onsemi 0:098463de4c5d 87 exporter = exporter_cls(target, export_path, name, toolchain,
group-onsemi 0:098463de4c5d 88 extra_symbols=macros, resources=resources)
group-onsemi 0:098463de4c5d 89 exporter.generate()
group-onsemi 0:098463de4c5d 90 files = exporter.generated_files
group-onsemi 0:098463de4c5d 91 return files, exporter
group-onsemi 0:098463de4c5d 92
group-onsemi 0:098463de4c5d 93
group-onsemi 0:098463de4c5d 94 def zip_export(file_name, prefix, resources, project_files, inc_repos):
group-onsemi 0:098463de4c5d 95 """Create a zip file from an exported project.
group-onsemi 0:098463de4c5d 96
group-onsemi 0:098463de4c5d 97 Positional Parameters:
group-onsemi 0:098463de4c5d 98 file_name - the file name of the resulting zip file
group-onsemi 0:098463de4c5d 99 prefix - a directory name that will prefix the entire zip file's contents
group-onsemi 0:098463de4c5d 100 resources - a resources object with files that must be included in the zip
group-onsemi 0:098463de4c5d 101 project_files - a list of extra files to be added to the root of the prefix
group-onsemi 0:098463de4c5d 102 directory
group-onsemi 0:098463de4c5d 103 """
group-onsemi 0:098463de4c5d 104 with zipfile.ZipFile(file_name, "w") as zip_file:
group-onsemi 0:098463de4c5d 105 for prj_file in project_files:
group-onsemi 0:098463de4c5d 106 zip_file.write(prj_file, join(prefix, basename(prj_file)))
group-onsemi 0:098463de4c5d 107 for loc, resource in resources.iteritems():
group-onsemi 0:098463de4c5d 108 for res in [resource] + resource.features.values():
group-onsemi 0:098463de4c5d 109 to_zip = (
group-onsemi 0:098463de4c5d 110 res.headers + res.s_sources + res.c_sources +\
group-onsemi 0:098463de4c5d 111 res.cpp_sources + res.libraries + res.hex_files + \
group-onsemi 0:098463de4c5d 112 [res.linker_script] + res.bin_files + res.objects + \
group-onsemi 0:098463de4c5d 113 res.json_files + res.lib_refs + res.lib_builds)
group-onsemi 0:098463de4c5d 114 if inc_repos:
group-onsemi 0:098463de4c5d 115 for directory in res.repo_dirs:
group-onsemi 0:098463de4c5d 116 for root, _, files in walk(directory):
group-onsemi 0:098463de4c5d 117 for repo_file in files:
group-onsemi 0:098463de4c5d 118 source = join(root, repo_file)
group-onsemi 0:098463de4c5d 119 to_zip.append(source)
group-onsemi 0:098463de4c5d 120 res.file_basepath[source] = res.base_path
group-onsemi 0:098463de4c5d 121 to_zip += res.repo_files
group-onsemi 0:098463de4c5d 122 for source in to_zip:
group-onsemi 0:098463de4c5d 123 if source:
group-onsemi 0:098463de4c5d 124 zip_file.write(
group-onsemi 0:098463de4c5d 125 source,
group-onsemi 0:098463de4c5d 126 join(prefix, loc,
group-onsemi 0:098463de4c5d 127 relpath(source, res.file_basepath[source])))
group-onsemi 0:098463de4c5d 128 for source in res.lib_builds:
group-onsemi 0:098463de4c5d 129 target_dir, _ = splitext(source)
group-onsemi 0:098463de4c5d 130 dest = join(prefix, loc,
group-onsemi 0:098463de4c5d 131 relpath(target_dir, res.file_basepath[source]),
group-onsemi 0:098463de4c5d 132 ".bld", "bldrc")
group-onsemi 0:098463de4c5d 133 zip_file.write(source, dest)
group-onsemi 0:098463de4c5d 134
group-onsemi 0:098463de4c5d 135
group-onsemi 0:098463de4c5d 136
group-onsemi 0:098463de4c5d 137 def export_project(src_paths, export_path, target, ide, libraries_paths=None,
group-onsemi 0:098463de4c5d 138 linker_script=None, notify=None, verbose=False, name=None,
group-onsemi 0:098463de4c5d 139 inc_dirs=None, jobs=1, silent=False, extra_verbose=False,
group-onsemi 0:098463de4c5d 140 config=None, macros=None, zip_proj=None, inc_repos=False,
group-onsemi 0:098463de4c5d 141 build_profile=None):
group-onsemi 0:098463de4c5d 142 """Generates a project file and creates a zip archive if specified
group-onsemi 0:098463de4c5d 143
group-onsemi 0:098463de4c5d 144 Positional Arguments:
group-onsemi 0:098463de4c5d 145 src_paths - a list of paths from which to find source files
group-onsemi 0:098463de4c5d 146 export_path - a path specifying the location of generated project files
group-onsemi 0:098463de4c5d 147 target - the mbed board/mcu for which to generate the executable
group-onsemi 0:098463de4c5d 148 ide - the ide for which to generate the project fields
group-onsemi 0:098463de4c5d 149
group-onsemi 0:098463de4c5d 150 Keyword Arguments:
group-onsemi 0:098463de4c5d 151 libraries_paths - paths to additional libraries
group-onsemi 0:098463de4c5d 152 linker_script - path to the linker script for the specified target
group-onsemi 0:098463de4c5d 153 notify - function is passed all events, and expected to handle notification
group-onsemi 0:098463de4c5d 154 of the user, emit the events to a log, etc.
group-onsemi 0:098463de4c5d 155 verbose - assigns the notify function to toolchains print_notify_verbose
group-onsemi 0:098463de4c5d 156 name - project name
group-onsemi 0:098463de4c5d 157 inc_dirs - additional include directories
group-onsemi 0:098463de4c5d 158 jobs - number of threads
group-onsemi 0:098463de4c5d 159 silent - silent build - no output
group-onsemi 0:098463de4c5d 160 extra_verbose - assigns the notify function to toolchains
group-onsemi 0:098463de4c5d 161 print_notify_verbose
group-onsemi 0:098463de4c5d 162 config - toolchain's config object
group-onsemi 0:098463de4c5d 163 macros - User-defined macros
group-onsemi 0:098463de4c5d 164 zip_proj - string name of the zip archive you wish to creat (exclude arg
group-onsemi 0:098463de4c5d 165 if you do not wish to create an archive
group-onsemi 0:098463de4c5d 166 """
group-onsemi 0:098463de4c5d 167
group-onsemi 0:098463de4c5d 168 # Convert src_path to a list if needed
group-onsemi 0:098463de4c5d 169 if isinstance(src_paths, dict):
group-onsemi 0:098463de4c5d 170 paths = sum(src_paths.values(), [])
group-onsemi 0:098463de4c5d 171 elif isinstance(src_paths, list):
group-onsemi 0:098463de4c5d 172 paths = src_paths[:]
group-onsemi 0:098463de4c5d 173 else:
group-onsemi 0:098463de4c5d 174 paths = [src_paths]
group-onsemi 0:098463de4c5d 175
group-onsemi 0:098463de4c5d 176 # Extend src_paths wit libraries_paths
group-onsemi 0:098463de4c5d 177 if libraries_paths is not None:
group-onsemi 0:098463de4c5d 178 paths.extend(libraries_paths)
group-onsemi 0:098463de4c5d 179
group-onsemi 0:098463de4c5d 180 if not isinstance(src_paths, dict):
group-onsemi 0:098463de4c5d 181 src_paths = {"": paths}
group-onsemi 0:098463de4c5d 182
group-onsemi 0:098463de4c5d 183 # Export Directory
group-onsemi 0:098463de4c5d 184 if not exists(export_path):
group-onsemi 0:098463de4c5d 185 makedirs(export_path)
group-onsemi 0:098463de4c5d 186
group-onsemi 0:098463de4c5d 187 _, toolchain_name = get_exporter_toolchain(ide)
group-onsemi 0:098463de4c5d 188
group-onsemi 0:098463de4c5d 189 # Pass all params to the unified prepare_resources()
group-onsemi 0:098463de4c5d 190 toolchain = prepare_toolchain(paths, target, toolchain_name, macros=macros,
group-onsemi 0:098463de4c5d 191 jobs=jobs, notify=notify, silent=silent,
group-onsemi 0:098463de4c5d 192 verbose=verbose, extra_verbose=extra_verbose,
group-onsemi 0:098463de4c5d 193 config=config, build_profile=build_profile)
group-onsemi 0:098463de4c5d 194 # The first path will give the name to the library
group-onsemi 0:098463de4c5d 195 if name is None:
group-onsemi 0:098463de4c5d 196 name = basename(normpath(abspath(src_paths[0])))
group-onsemi 0:098463de4c5d 197
group-onsemi 0:098463de4c5d 198 # Call unified scan_resources
group-onsemi 0:098463de4c5d 199 resource_dict = {loc: scan_resources(path, toolchain, inc_dirs=inc_dirs)
group-onsemi 0:098463de4c5d 200 for loc, path in src_paths.iteritems()}
group-onsemi 0:098463de4c5d 201 resources = Resources()
group-onsemi 0:098463de4c5d 202 toolchain.build_dir = export_path
group-onsemi 0:098463de4c5d 203 config_header = toolchain.get_config_header()
group-onsemi 0:098463de4c5d 204 resources.headers.append(config_header)
group-onsemi 0:098463de4c5d 205 resources.file_basepath[config_header] = dirname(config_header)
group-onsemi 0:098463de4c5d 206
group-onsemi 0:098463de4c5d 207 if zip_proj:
group-onsemi 0:098463de4c5d 208 subtract_basepath(resources, export_path)
group-onsemi 0:098463de4c5d 209 for loc, res in resource_dict.iteritems():
group-onsemi 0:098463de4c5d 210 temp = copy.deepcopy(res)
group-onsemi 0:098463de4c5d 211 subtract_basepath(temp, export_path, loc)
group-onsemi 0:098463de4c5d 212 resources.add(temp)
group-onsemi 0:098463de4c5d 213 else:
group-onsemi 0:098463de4c5d 214 for _, res in resource_dict.iteritems():
group-onsemi 0:098463de4c5d 215 resources.add(res)
group-onsemi 0:098463de4c5d 216
group-onsemi 0:098463de4c5d 217 # Change linker script if specified
group-onsemi 0:098463de4c5d 218 if linker_script is not None:
group-onsemi 0:098463de4c5d 219 resources.linker_script = linker_script
group-onsemi 0:098463de4c5d 220
group-onsemi 0:098463de4c5d 221 files, exporter = generate_project_files(resources, export_path,
group-onsemi 0:098463de4c5d 222 target, name, toolchain, ide,
group-onsemi 0:098463de4c5d 223 macros=macros)
group-onsemi 0:098463de4c5d 224 files.append(config_header)
group-onsemi 0:098463de4c5d 225 if zip_proj:
group-onsemi 0:098463de4c5d 226 if isinstance(zip_proj, basestring):
group-onsemi 0:098463de4c5d 227 zip_export(join(export_path, zip_proj), name, resource_dict, files, inc_repos)
group-onsemi 0:098463de4c5d 228 else:
group-onsemi 0:098463de4c5d 229 zip_export(zip_proj, name, resource_dict, files, inc_repos)
group-onsemi 0:098463de4c5d 230
group-onsemi 0:098463de4c5d 231 return exporter
group-onsemi 0:098463de4c5d 232
group-onsemi 0:098463de4c5d 233
group-onsemi 0:098463de4c5d 234 def print_results(successes, failures, skips=None):
group-onsemi 0:098463de4c5d 235 """ Print out the results of an export process
group-onsemi 0:098463de4c5d 236
group-onsemi 0:098463de4c5d 237 Positional arguments:
group-onsemi 0:098463de4c5d 238 successes - The list of exports that succeeded
group-onsemi 0:098463de4c5d 239 failures - The list of exports that failed
group-onsemi 0:098463de4c5d 240
group-onsemi 0:098463de4c5d 241 Keyword arguments:
group-onsemi 0:098463de4c5d 242 skips - The list of exports that were skipped
group-onsemi 0:098463de4c5d 243 """
group-onsemi 0:098463de4c5d 244 print
group-onsemi 0:098463de4c5d 245 if successes:
group-onsemi 0:098463de4c5d 246 print "Successful: "
group-onsemi 0:098463de4c5d 247 for success in successes:
group-onsemi 0:098463de4c5d 248 print " * %s" % success
group-onsemi 0:098463de4c5d 249 if failures:
group-onsemi 0:098463de4c5d 250 print "Failed: "
group-onsemi 0:098463de4c5d 251 for failure in failures:
group-onsemi 0:098463de4c5d 252 print " * %s" % failure
group-onsemi 0:098463de4c5d 253 if skips:
group-onsemi 0:098463de4c5d 254 print "Skipped: "
group-onsemi 0:098463de4c5d 255 for skip in skips:
group-onsemi 0:098463de4c5d 256 print " * %s" % skip
group-onsemi 0:098463de4c5d 257