diff --git a/tools/building.py b/tools/building.py index e73815de22..527da03103 100644 --- a/tools/building.py +++ b/tools/building.py @@ -115,7 +115,7 @@ class Win32Spawn: # generate cconfig.h file def GenCconfigFile(env, BuildOptions): import rtconfig - + if rtconfig.PLATFORM == 'gcc': contents = '' if not os.path.isfile('cconfig.h'): @@ -147,21 +147,16 @@ def PrepareBuilding(env, root_directory, has_libcpu=False, remove_components = [ global Rtt_Root # ===== Add option to SCons ===== - AddOption('--copy', - dest = 'copy', - action = 'store_true', - default = False, - help = 'copy rt-thread directory to local.') - AddOption('--copy-header', - dest = 'copy-header', - action = 'store_true', - default = False, - help = 'copy header of rt-thread directory to local.') AddOption('--dist', dest = 'make-dist', action = 'store_true', default = False, help = 'make distribution') + AddOption('--dist-strip', + dest = 'make-dist-strip', + action = 'store_true', + default = False, + help = 'make distribution and strip useless files') AddOption('--cscope', dest = 'cscope', action = 'store_true', @@ -713,7 +708,7 @@ def DoBuilding(target, objects): program = Env.Program(target, objects) EndBuilding(target, program) - + def GenTargetProject(program = None): if GetOption('target') == 'mdk': @@ -789,17 +784,12 @@ def EndBuilding(target, program = None): GenTargetProject(program) BSP_ROOT = Dir('#').abspath - if GetOption('copy') and program != None: - from mkdist import MakeCopy - MakeCopy(program, BSP_ROOT, Rtt_Root, Env) - need_exit = True - if GetOption('copy-header') and program != None: - from mkdist import MakeCopyHeader - MakeCopyHeader(program, BSP_ROOT, Rtt_Root, Env) - need_exit = True if GetOption('make-dist') and program != None: from mkdist import MkDist MkDist(program, BSP_ROOT, Rtt_Root, Env) + if GetOption('make-dist-strip') and program != None: + from mkdist import MkDist_Strip + MkDist_Strip(program, BSP_ROOT, Rtt_Root, Env) need_exit = True if GetOption('cscope'): from cscope import CscopeDatabase diff --git a/tools/mkdist.py b/tools/mkdist.py index 466439caf7..eef6bfd118 100644 --- a/tools/mkdist.py +++ b/tools/mkdist.py @@ -53,7 +53,7 @@ def do_copy_folder(src_dir, dst_dir, ignore=None): shutil.copytree(src_dir, dst_dir, ignore = ignore) -source_ext = ["c", "h", "s", "S", "cpp", "xpm"] +source_ext = ['c', 'h', 's', 'S', 'cpp', 'xpm'] source_list = [] def walk_children(child): @@ -89,22 +89,30 @@ def walk_kconfig(RTT_ROOT, source_list): pathfile = os.path.join(parent, 'KConfig') source_list.append(pathfile) -def bsp_update_sconstruct(dist_dir): - with open(os.path.join(dist_dir, 'SConstruct'), "r") as f: +def bsp_copy_files(bsp_root, dist_dir): + # copy BSP files + 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')) + +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: + 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('if not os.getenv("RTT_ROOT"): \n RTT_ROOT="rt-thread"\n\n') f.write(line) def bsp_update_kconfig(dist_dir): # change RTT_ROOT in Kconfig - with open(os.path.join(dist_dir, 'Kconfig'), "r") as f: + if not os.path.isfile(os.path.join(dist_dir, 'Kconfig')): + return + + 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: + with open(os.path.join(dist_dir, 'Kconfig'), 'w') as f: found = 0 for line in data: if line.find('RTT_ROOT') != -1: @@ -126,19 +134,19 @@ def bs_update_ide_project(bsp_root, rtt_root): 'cdk':('gcc', 'gcc')} scons_env = os.environ.copy() - scons_env["RTT_ROOT"] = rtt_root + 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) + print('update %s project' % item) -def zip_dist(bsp_root, dist_dir, dist_name): +def zip_dist(dist_dir, dist_name): import zipfile - zip_filename = os.path.join(bsp_root, 'dist', dist_name) - zip = zipfile.ZipFile(zip_filename + ".zip", 'w') + zip_filename = os.path.join(dist_dir) + zip = zipfile.ZipFile(zip_filename + '.zip', 'w') pre_len = len(os.path.dirname(dist_dir)) for parent, dirnames, filenames in os.walk(dist_dir): @@ -149,8 +157,119 @@ def zip_dist(bsp_root, dist_dir, dist_name): zip.close() +def MkDist_Strip(program, BSP_ROOT, RTT_ROOT, Env): + global source_list + + print('make distribution and strip useless files....') + + dist_name = os.path.basename(BSP_ROOT) + dist_dir = os.path.join(BSP_ROOT, 'dist-strip', dist_name) + target_path = os.path.join(dist_dir, 'rt-thread') + + print('=> %s' % os.path.basename(BSP_ROOT)) + bsp_copy_files(BSP_ROOT, dist_dir) + + # get all source files from program + for item in program: + walk_children(item) + source_list.sort() + + # copy the source files without libcpu and components/libc in RT-Thread + target_list = [] + libcpu_dir = os.path.join(RTT_ROOT, 'libcpu').lower() + libc_dir = os.path.join(RTT_ROOT, 'components', 'libc', 'compilers').lower() + sal_dir = os.path.join(RTT_ROOT, 'components', 'net', 'sal_socket').lower() + sources_include_sal = False + for src in source_list: + if src.lower().startswith(BSP_ROOT.lower()): + continue + + # skip libc and libcpu dir + if src.lower().startswith(libcpu_dir): + continue + if src.lower().startswith(libc_dir): + continue + if src.lower().startswith(sal_dir): + sources_include_sal = True + 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) + + # add all of SConscript files + for item in src_dir: + source_list.append(os.path.join(item, 'SConscript')) + + # add all of Kconfig files + walk_kconfig(RTT_ROOT, source_list) + + # copy all files to target directory + 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 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('=> %s' % os.path.join('components', 'libc', 'compilers')) + do_copy_folder(os.path.join(RTT_ROOT, 'components', 'libc', 'compilers'), os.path.join(target_path, 'components', 'libc', 'compilers')) + + if sources_include_sal: + print('=> %s' % os.path.join('components', 'net', 'sal_socket')) + do_copy_folder(os.path.join(RTT_ROOT, 'components', 'net', 'sal_socket'), os.path.join(target_path, 'components', 'net', 'sal_socket')) + + # copy all libcpu/ARCH directory + import rtconfig + print('=> %s' % (os.path.join('libcpu', rtconfig.ARCH, rtconfig.CPU))) + do_copy_folder(os.path.join(RTT_ROOT, 'libcpu', rtconfig.ARCH, rtconfig.CPU), os.path.join(target_path, 'libcpu', rtconfig.ARCH, rtconfig.CPU)) + if os.path.exists(os.path.join(RTT_ROOT, 'libcpu', rtconfig.ARCH, 'common')): + print('=> %s' % (os.path.join('libcpu', rtconfig.ARCH, 'common'))) + do_copy_folder(os.path.join(RTT_ROOT, 'libcpu', rtconfig.ARCH, 'common'), os.path.join(target_path, 'libcpu', rtconfig.ARCH, 'common')) + 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')) + + # change RTT_ROOT in SConstruct + bsp_update_sconstruct(dist_dir) + # change RTT_ROOT in Kconfig + bsp_update_kconfig(dist_dir) + # update all project files + bs_update_ide_project(dist_dir, target_path) + + # make zip package + zip_dist(dist_dir, dist_name) + + print('done!') + def MkDist(program, BSP_ROOT, RTT_ROOT, Env): - print("make distribution....") + print('make distribution....') dist_name = os.path.basename(BSP_ROOT) dist_dir = os.path.join(BSP_ROOT, 'dist', dist_name) @@ -158,20 +277,19 @@ def MkDist(program, BSP_ROOT, RTT_ROOT, Env): 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')) + print('=> %s' % os.path.basename(BSP_ROOT)) + bsp_copy_files(BSP_ROOT, dist_dir) # copy tools directory - print("=> components") - do_copy_folder(os.path.join(RTT_ROOT, "components"), os.path.join(target_path, "components")) + print('=> components') + do_copy_folder(os.path.join(RTT_ROOT, 'components'), os.path.join(target_path, 'components')) # skip documentation directory # skip examples # copy include directory - print("=> include") - do_copy_folder(os.path.join(RTT_ROOT, "include"), os.path.join(target_path, "include")) + print('=> include') + do_copy_folder(os.path.join(RTT_ROOT, 'include'), os.path.join(target_path, 'include')) # copy all libcpu/ARCH directory print('=> libcpu') @@ -181,12 +299,12 @@ def MkDist(program, BSP_ROOT, RTT_ROOT, Env): do_copy_file(os.path.join(RTT_ROOT, 'libcpu', 'SConscript'), os.path.join(target_path, 'libcpu', 'SConscript')) # copy src directory - print("=> src") - do_copy_folder(os.path.join(RTT_ROOT, "src"), os.path.join(target_path, "src")) + 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')) + 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')) @@ -202,6 +320,7 @@ def MkDist(program, BSP_ROOT, RTT_ROOT, Env): bs_update_ide_project(dist_dir, target_path) # make zip package - zip_dist(BSP_ROOT, dist_dir, dist_name) + zip_dist(dist_dir, dist_name) print('done!') +