diff --git a/tools/mkdist.py b/tools/mkdist.py index 7a1e1b0af683d3fc1e18d370064ef371ee3164a2..466439caf73aa5ad14f4bdfdfa69cf6083a674f0 100644 --- a/tools/mkdist.py +++ b/tools/mkdist.py @@ -89,116 +89,65 @@ def walk_kconfig(RTT_ROOT, source_list): pathfile = os.path.join(parent, 'KConfig') source_list.append(pathfile) -def MakeCopy(program, BSP_ROOT, RTT_ROOT, Env): - global source_list - - target_path = os.path.join(BSP_ROOT, 'rt-thread') - - if target_path.startswith(RTT_ROOT): - print('please use scons --copy to copy rt-thread to local bsp') - return - - for item in program: - walk_children(item) - - source_list.sort() - - # fill source file in RT-Thread - target_list = [] - for src in source_list: - if Env['PLATFORM'] == 'win32': - src = src.lower() - - if src.startswith(RTT_ROOT): - target_list.append(src) - - source_list = target_list - # get source directory - src_dir = [] - for src in source_list: - src = src.replace(RTT_ROOT, '') - if src[0] == os.sep or src[0] == '/': - src = src[1:] - - path = os.path.dirname(src) - sub_path = path.split(os.sep) - full_path = RTT_ROOT - for item in sub_path: - full_path = os.path.join(full_path, item) - if full_path not in src_dir: - src_dir.append(full_path) - - for item in src_dir: - source_list.append(os.path.join(item, 'SConscript')) - walk_kconfig(RTT_ROOT, source_list) - - for src in source_list: - dst = src.replace(RTT_ROOT, '') - if dst[0] == os.sep or dst[0] == '/': - dst = dst[1:] - print '=> ', dst - dst = os.path.join(target_path, dst) - do_copy_file(src, dst) - - # copy tools directory - print("=> tools") - do_copy_folder(os.path.join(RTT_ROOT, "tools"), os.path.join(target_path, "tools"), ignore_patterns('*.pyc')) - do_copy_file(os.path.join(RTT_ROOT, 'Kconfig'), os.path.join(target_path, 'Kconfig')) - do_copy_file(os.path.join(RTT_ROOT, 'AUTHORS'), os.path.join(target_path, 'AUTHORS')) - do_copy_file(os.path.join(RTT_ROOT, 'COPYING'), os.path.join(target_path, 'COPYING')) - do_copy_file(os.path.join(RTT_ROOT, 'README.md'), os.path.join(target_path, 'README.md')) - do_copy_file(os.path.join(RTT_ROOT, 'README_zh.md'), os.path.join(target_path, 'README_zh.md')) - print('=> libc') - do_copy_folder(os.path.join(RTT_ROOT, "components", 'libc', 'compilers'), os.path.join(target_path, "components", 'libc', 'compilers')) - - print('done!') - -def MakeCopyHeader(program, BSP_ROOT, RTT_ROOT, Env): - global source_list - global source_ext - source_ext = [] - source_ext = ["h", "xpm"] - - target_path = os.path.join(BSP_ROOT, 'rt-thread') - - if target_path.startswith(RTT_ROOT): - print('please use scons --copy-header to copy header files only') - return - - for item in program: - walk_children(item) - - source_list.sort() - - # fill source file in RT-Thread - target_list = [] - for src in source_list: - if Env['PLATFORM'] == 'win32': - src = src.lower() - - if src.startswith(RTT_ROOT): - target_list.append(src) +def bsp_update_sconstruct(dist_dir): + with open(os.path.join(dist_dir, 'SConstruct'), "r") as f: + data = f.readlines() + with open(os.path.join(dist_dir, 'SConstruct'), "w") as f: + for line in data: + if line.find('RTT_ROOT') != -1: + if line.find('sys.path') != -1: + f.write('# set RTT_ROOT\n') + f.write("if not os.getenv('RTT_ROOT'): \n RTT_ROOT='rt-thread'\n\n") + f.write(line) - source_list = target_list +def bsp_update_kconfig(dist_dir): + # change RTT_ROOT in Kconfig + with open(os.path.join(dist_dir, 'Kconfig'), "r") as f: + data = f.readlines() + with open(os.path.join(dist_dir, 'Kconfig'), "w") as f: + found = 0 + for line in data: + if line.find('RTT_ROOT') != -1: + found = 1 + if line.find('default') != -1 and found: + position = line.find('default') + line = line[0:position] + 'default: "rt-thread"\n' + found = 0 + f.write(line) + +def bs_update_ide_project(bsp_root, rtt_root): + import subprocess + # default update the projects which have template file + tgt_dict = {'mdk4':('keil', 'armcc'), + 'mdk5':('keil', 'armcc'), + 'iar':('iar', 'iar'), + 'vs':('msvc', 'cl'), + 'vs2012':('msvc', 'cl'), + 'cdk':('gcc', 'gcc')} + + scons_env = os.environ.copy() + scons_env["RTT_ROOT"] = rtt_root + + for item in tgt_dict: + child = subprocess.Popen('scons --target=' + item, cwd=bsp_root, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) + stdout, stderr = child.communicate() + if child.returncode == 0: + print("update %s project" % item) + +def zip_dist(bsp_root, dist_dir, dist_name): + import zipfile - for src in source_list: - dst = src.replace(RTT_ROOT, '') - if dst[0] == os.sep or dst[0] == '/': - dst = dst[1:] - print '=> ', dst - dst = os.path.join(target_path, dst) - do_copy_file(src, dst) + zip_filename = os.path.join(bsp_root, 'dist', dist_name) + zip = zipfile.ZipFile(zip_filename + ".zip", 'w') + pre_len = len(os.path.dirname(dist_dir)) - # copy tools directory - print "=> tools" - do_copy_folder(os.path.join(RTT_ROOT, "tools"), os.path.join(target_path, "tools"), ignore_patterns('*.pyc')) - do_copy_file(os.path.join(RTT_ROOT, 'Kconfig'), os.path.join(target_path, 'Kconfig')) - do_copy_file(os.path.join(RTT_ROOT, 'AUTHORS'), os.path.join(target_path, 'AUTHORS')) - do_copy_file(os.path.join(RTT_ROOT, 'COPYING'), os.path.join(target_path, 'COPYING')) - do_copy_file(os.path.join(RTT_ROOT, 'README.md'), os.path.join(target_path, 'README.md')) - do_copy_file(os.path.join(RTT_ROOT, 'README_zh.md'), os.path.join(target_path, 'README_zh.md')) + for parent, dirnames, filenames in os.walk(dist_dir): + for filename in filenames: + pathfile = os.path.join(parent, filename) + arcname = pathfile[pre_len:].strip(os.path.sep) + zip.write(pathfile, arcname) - print('done!') + zip.close() def MkDist(program, BSP_ROOT, RTT_ROOT, Env): print("make distribution....") @@ -206,122 +155,53 @@ def MkDist(program, BSP_ROOT, RTT_ROOT, Env): dist_name = os.path.basename(BSP_ROOT) dist_dir = os.path.join(BSP_ROOT, 'dist', dist_name) + target_path = os.path.join(dist_dir, 'rt-thread') + # copy BSP files + print("=> %s" % os.path.basename(BSP_ROOT)) do_copy_folder(os.path.join(BSP_ROOT), dist_dir, ignore_patterns('build', 'dist', '*.pyc', '*.old', '*.map', 'rtthread.bin', '.sconsign.dblite', '*.elf', '*.axf', 'cconfig.h')) - global source_list + # copy tools directory + print("=> components") + do_copy_folder(os.path.join(RTT_ROOT, "components"), os.path.join(target_path, "components")) - target_path = os.path.join(dist_dir, 'rt-thread') + # skip documentation directory + # skip examples - for item in program: - walk_children(item) + # copy include directory + print("=> include") + do_copy_folder(os.path.join(RTT_ROOT, "include"), os.path.join(target_path, "include")) - source_list.sort() + # copy all libcpu/ARCH directory + print('=> libcpu') + import rtconfig + do_copy_folder(os.path.join(RTT_ROOT, 'libcpu', rtconfig.ARCH), os.path.join(target_path, 'libcpu', rtconfig.ARCH)) + do_copy_file(os.path.join(RTT_ROOT, 'libcpu', 'Kconfig'), os.path.join(target_path, 'libcpu', 'Kconfig')) + do_copy_file(os.path.join(RTT_ROOT, 'libcpu', 'SConscript'), os.path.join(target_path, 'libcpu', 'SConscript')) - # copy the source files in RT-Thread - target_list = [] - for src in source_list: - if src.lower().startswith(BSP_ROOT.lower()): - continue - - if src.lower().startswith(RTT_ROOT.lower()): - target_list.append(src) - - source_list = target_list - - # get source directory - src_dir = [] - for src in source_list: - src = src.replace(RTT_ROOT, '') - if src[0] == os.sep or src[0] == '/': - src = src[1:] - - path = os.path.dirname(src) - sub_path = path.split(os.sep) - full_path = RTT_ROOT - for item in sub_path: - full_path = os.path.join(full_path, item) - if full_path not in src_dir: - src_dir.append(full_path) - - for item in src_dir: - source_list.append(os.path.join(item, 'SConscript')) - - # add all of Kconfig files - walk_kconfig(RTT_ROOT, source_list) - - source_list.sort() - for src in source_list: - dst = src.replace(RTT_ROOT, '') - if dst[0] == os.sep or dst[0] == '/': - dst = dst[1:] - - print('=> %s' % dst) - dst = os.path.join(target_path, dst) - do_copy_file(src, dst) + # copy src directory + print("=> src") + do_copy_folder(os.path.join(RTT_ROOT, "src"), os.path.join(target_path, "src")) # copy tools directory print("=> tools") do_copy_folder(os.path.join(RTT_ROOT, "tools"), os.path.join(target_path, "tools"), ignore_patterns('*.pyc')) + do_copy_file(os.path.join(RTT_ROOT, 'Kconfig'), os.path.join(target_path, 'Kconfig')) do_copy_file(os.path.join(RTT_ROOT, 'AUTHORS'), os.path.join(target_path, 'AUTHORS')) do_copy_file(os.path.join(RTT_ROOT, 'COPYING'), os.path.join(target_path, 'COPYING')) do_copy_file(os.path.join(RTT_ROOT, 'README.md'), os.path.join(target_path, 'README.md')) do_copy_file(os.path.join(RTT_ROOT, 'README_zh.md'), os.path.join(target_path, 'README_zh.md')) - print('=> libc') - do_copy_folder(os.path.join(RTT_ROOT, "components", 'libc', 'compilers'), os.path.join(target_path, "components", 'libc', 'compilers')) # change RTT_ROOT in SConstruct - try: - sconstruct = file(os.path.join(BSP_ROOT, 'SConstruct')) - out = file(os.path.join(dist_dir, 'SConstruct'), 'w') - - for line in sconstruct: - if line.find('RTT_ROOT') != -1: - if line.find('sys.path') != -1: - out.write('# set RTT_ROOT\n') - out.write("if not os.getenv('RTT_ROOT'): \n RTT_ROOT='rt-thread'\n\n") - - out.write(line) - except : - print('') - + bsp_update_sconstruct(dist_dir) # change RTT_ROOT in Kconfig - try: - if os.path.exists(os.path.join(BSP_ROOT, 'Kconfig')): - Kconfig = file(os.path.join(BSP_ROOT, 'Kconfig')) - out = file(os.path.join(dist_dir, 'Kconfig'), 'w') - - found = 0 - for line in Kconfig: - if line.find('RTT_ROOT') != -1: - found = 1 - - if line.find('default') != -1 and found: - position = line.find('default') - line = line[0:position] + 'default: "rt-thread"\n' - found = 0 - - out.write(line) - - out.close() - except : - print('') + bsp_update_kconfig(dist_dir) + # update all project files + bs_update_ide_project(dist_dir, target_path) # make zip package - import zipfile - - zip_filename = os.path.join(BSP_ROOT, 'dist', dist_name) - zip = zipfile.ZipFile(zip_filename + ".zip", 'w') - pre_len = len(os.path.dirname(dist_dir)) - - for parent, dirnames, filenames in os.walk(dist_dir): - for filename in filenames: - pathfile = os.path.join(parent, filename) - arcname = pathfile[pre_len:].strip(os.path.sep) - zip.write(pathfile, arcname) - - zip.close() + zip_dist(BSP_ROOT, dist_dir, dist_name) print('done!')