Repostiory containing DAPLink source code with Reset Pin workaround for HANI_IOT board.
Upstream: https://github.com/ARMmbed/DAPLink
Diff: tools/copy_release_files.py
- Revision:
- 0:01f31e923fe2
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/copy_release_files.py Tue Apr 07 12:55:42 2020 +0200 @@ -0,0 +1,151 @@ +# +# DAPLink Interface Firmware +# Copyright (c) 2009-2016, ARM Limited, All Rights Reserved +# SPDX-License-Identifier: Apache-2.0 +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +""" +Copy release files from the uvision build directories into a release package + +This script is intended to be called the script creating a daplink build. +""" +from __future__ import absolute_import +from __future__ import print_function + +import os +import shutil +import glob +import argparse + +from subprocess import check_output, CalledProcessError + +COPY_PATTERN_LIST = [ + "%s_crc*.bin", + "%s_crc*.hex", + "%s_crc*.txt", + ] +OPTIONAL_COPY_PATTERN_LIST = [ + "%s.axf", + "%s.elf", + "%s_crc*.c", + "%s.build_log.htm", + "%s.map", + "%s.htm", + "%s_map.html", +] + +TOOL_DIR = { + 'uvision' : { 'proj_dir': os.path.join('projectfiles', 'uvision') , 'rel_dir' : 'uvision_release', 'build_dir' : 'build' }, + 'mbedcli' : { 'proj_dir': 'BUILD' , 'rel_dir' : 'mbedcli_release', 'build_dir' : 'ARM-CUSTOM_PROFILE' } +} + +def generate_info_files(dir): + + output_info_file = os.path.join(os.path.normpath(dir),'git_info.txt') + output_requirements_file = os.path.join(os.path.normpath(dir),'build_requirements.txt') + + # Get the git SHA. + try: + git_sha = check_output("git rev-parse --verify HEAD", shell=True) + git_sha = git_sha.decode().strip() + except: + print("ERROR - failed to get git SHA, do you have git.exe in your PATH environment variable?") + return 1 + + # Check are there any local, uncommitted modifications. + try: + check_output("git diff --no-ext-diff --quiet --exit-code", shell=True) + except (CalledProcessError, OSError): + git_has_changes = '1' + else: + git_has_changes = '0' + + # Get the requirements version. + try: + pip_freeze = check_output("pip list", shell=True).decode().strip() + except: + print("ERROR - failed requirements, pip not installed?") + return 1 + + + # Create the version files + try: + with open(output_info_file, 'w+') as file: + file.write(git_sha + '\n' + 'Uncommitted Changes:' + git_has_changes + '\n' ) + with open(output_requirements_file, 'w+') as file: + file.write(pip_freeze) + except IOError: + print("Error - failed to write information and version files") + return 1; + return 0 + + +def main(): + """Copy imporant files for the current release""" + parser = argparse.ArgumentParser(description='Copy imporant files for the current release') + parser.add_argument('--project-tool', type=str, default='uvision', choices=['uvision', 'mbedcli'], help='Choose from uvision and mbedcli') + args = parser.parse_args() + + self_path = os.path.abspath(__file__) + tools_dir = os.path.dirname(self_path) + daplink_dir = os.path.dirname(tools_dir) + + if os.path.basename(tools_dir) != "tools": + print("Error - this script must be run from the tools directory") + exit(-1) + + proj_dir = os.path.join(daplink_dir, TOOL_DIR[args.project_tool]['proj_dir']) + rel_dir = os.path.join(daplink_dir, TOOL_DIR[args.project_tool]['rel_dir']) + build_dir = TOOL_DIR[args.project_tool]['build_dir'] + # Make sure uvision dir is present + if not os.path.isdir(proj_dir): + print("Error - uvision directory '%s' missing" % proj_dir) + exit(-1) + + # Clean release dir is present + if os.path.isdir(rel_dir): + shutil.rmtree(rel_dir) + + os.mkdir(rel_dir) + + generate_info_files(rel_dir) + + project_list = os.listdir(proj_dir) + for project in project_list: + src_dir = os.path.join(proj_dir, project, build_dir) + dest_dir = os.path.join(rel_dir, project.lower()) + + #only copy a built project + if not os.path.exists(src_dir): + continue + + # File must not have been copied already + if os.path.exists(dest_dir): + print("Error - package dir '%s' alread exists" % dest_dir) + exit(-1) + os.mkdir(dest_dir) + + for file_pattern in COPY_PATTERN_LIST: + file_name = file_pattern % project.lower() + file_source = os.path.join(src_dir, file_name) + for file_wild in glob.glob(file_source): + shutil.copy(file_wild, dest_dir) + for file_pattern in OPTIONAL_COPY_PATTERN_LIST: + file_name = file_pattern % project.lower() + file_source = os.path.join(src_dir, file_name) + for file_wild in glob.glob(file_source): + shutil.copy(file_wild, dest_dir) + +main()