xref: /nrf52832-nimble/rt-thread/tools/mkdist.py (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero#
2*10465441SEvalZero# File      : mkdir.py
3*10465441SEvalZero# This file is part of RT-Thread RTOS
4*10465441SEvalZero# COPYRIGHT (C) 2006 - 2018, RT-Thread Development Team
5*10465441SEvalZero#
6*10465441SEvalZero#  This program is free software; you can redistribute it and/or modify
7*10465441SEvalZero#  it under the terms of the GNU General Public License as published by
8*10465441SEvalZero#  the Free Software Foundation; either version 2 of the License, or
9*10465441SEvalZero#  (at your option) any later version.
10*10465441SEvalZero#
11*10465441SEvalZero#  This program is distributed in the hope that it will be useful,
12*10465441SEvalZero#  but WITHOUT ANY WARRANTY; without even the implied warranty of
13*10465441SEvalZero#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*10465441SEvalZero#  GNU General Public License for more details.
15*10465441SEvalZero#
16*10465441SEvalZero#  You should have received a copy of the GNU General Public License along
17*10465441SEvalZero#  with this program; if not, write to the Free Software Foundation, Inc.,
18*10465441SEvalZero#  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19*10465441SEvalZero#
20*10465441SEvalZero# Change Logs:
21*10465441SEvalZero# Date           Author       Notes
22*10465441SEvalZero# 2017-10-04     Bernard      The first version
23*10465441SEvalZero
24*10465441SEvalZeroimport os
25*10465441SEvalZeroimport shutil
26*10465441SEvalZero
27*10465441SEvalZerofrom shutil import ignore_patterns
28*10465441SEvalZero
29*10465441SEvalZerodef do_copy_file(src, dst):
30*10465441SEvalZero    # check source file
31*10465441SEvalZero    if not os.path.exists(src):
32*10465441SEvalZero        return
33*10465441SEvalZero
34*10465441SEvalZero    path = os.path.dirname(dst)
35*10465441SEvalZero    # mkdir if path not exist
36*10465441SEvalZero    if not os.path.exists(path):
37*10465441SEvalZero        os.makedirs(path)
38*10465441SEvalZero
39*10465441SEvalZero    shutil.copy2(src, dst)
40*10465441SEvalZero
41*10465441SEvalZerodef do_copy_folder(src_dir, dst_dir, ignore=None):
42*10465441SEvalZero    import shutil
43*10465441SEvalZero    # check source directory
44*10465441SEvalZero    if not os.path.exists(src_dir):
45*10465441SEvalZero        return
46*10465441SEvalZero
47*10465441SEvalZero    try:
48*10465441SEvalZero        if os.path.exists(dst_dir):
49*10465441SEvalZero            shutil.rmtree(dst_dir)
50*10465441SEvalZero    except:
51*10465441SEvalZero        print('Deletes folder: %s failed.' % dst_dir)
52*10465441SEvalZero        return
53*10465441SEvalZero
54*10465441SEvalZero    shutil.copytree(src_dir, dst_dir, ignore = ignore)
55*10465441SEvalZero
56*10465441SEvalZerosource_ext = ['c', 'h', 's', 'S', 'cpp', 'xpm']
57*10465441SEvalZerosource_list = []
58*10465441SEvalZero
59*10465441SEvalZerodef walk_children(child):
60*10465441SEvalZero    global source_list
61*10465441SEvalZero    global source_ext
62*10465441SEvalZero
63*10465441SEvalZero    # print child
64*10465441SEvalZero    full_path = child.rfile().abspath
65*10465441SEvalZero    file_type  = full_path.rsplit('.',1)[1]
66*10465441SEvalZero    #print file_type
67*10465441SEvalZero    if file_type in source_ext:
68*10465441SEvalZero        if full_path not in source_list:
69*10465441SEvalZero            source_list.append(full_path)
70*10465441SEvalZero
71*10465441SEvalZero    children = child.all_children()
72*10465441SEvalZero    if children != []:
73*10465441SEvalZero        for item in children:
74*10465441SEvalZero            walk_children(item)
75*10465441SEvalZero
76*10465441SEvalZerodef walk_kconfig(RTT_ROOT, source_list):
77*10465441SEvalZero    for parent, dirnames, filenames in os.walk(RTT_ROOT):
78*10465441SEvalZero        if 'bsp' in parent:
79*10465441SEvalZero            continue
80*10465441SEvalZero        if '.git' in parent:
81*10465441SEvalZero            continue
82*10465441SEvalZero        if 'tools' in parent:
83*10465441SEvalZero            continue
84*10465441SEvalZero
85*10465441SEvalZero        if 'Kconfig' in filenames:
86*10465441SEvalZero            pathfile = os.path.join(parent, 'Kconfig')
87*10465441SEvalZero            source_list.append(pathfile)
88*10465441SEvalZero        if 'KConfig' in filenames:
89*10465441SEvalZero            pathfile = os.path.join(parent, 'KConfig')
90*10465441SEvalZero            source_list.append(pathfile)
91*10465441SEvalZero
92*10465441SEvalZerodef bsp_copy_files(bsp_root, dist_dir):
93*10465441SEvalZero    # copy BSP files
94*10465441SEvalZero    do_copy_folder(os.path.join(bsp_root), dist_dir,
95*10465441SEvalZero        ignore_patterns('build', 'dist', '*.pyc', '*.old', '*.map', 'rtthread.bin', '.sconsign.dblite', '*.elf', '*.axf', 'cconfig.h'))
96*10465441SEvalZero
97*10465441SEvalZerodef bsp_update_sconstruct(dist_dir):
98*10465441SEvalZero    with open(os.path.join(dist_dir, 'SConstruct'), 'r') as f:
99*10465441SEvalZero        data = f.readlines()
100*10465441SEvalZero    with open(os.path.join(dist_dir, 'SConstruct'), 'w') as f:
101*10465441SEvalZero        for line in data:
102*10465441SEvalZero            if line.find('RTT_ROOT') != -1:
103*10465441SEvalZero                if line.find('sys.path') != -1:
104*10465441SEvalZero                    f.write('# set RTT_ROOT\n')
105*10465441SEvalZero                    f.write('if not os.getenv("RTT_ROOT"): \n    RTT_ROOT="rt-thread"\n\n')
106*10465441SEvalZero            f.write(line)
107*10465441SEvalZero
108*10465441SEvalZerodef bsp_update_kconfig(dist_dir):
109*10465441SEvalZero    # change RTT_ROOT in Kconfig
110*10465441SEvalZero    if not os.path.isfile(os.path.join(dist_dir, 'Kconfig')):
111*10465441SEvalZero        return
112*10465441SEvalZero
113*10465441SEvalZero    with open(os.path.join(dist_dir, 'Kconfig'), 'r') as f:
114*10465441SEvalZero        data = f.readlines()
115*10465441SEvalZero    with open(os.path.join(dist_dir, 'Kconfig'), 'w') as f:
116*10465441SEvalZero        found = 0
117*10465441SEvalZero        for line in data:
118*10465441SEvalZero            if line.find('RTT_ROOT') != -1:
119*10465441SEvalZero                found = 1
120*10465441SEvalZero            if line.find('default') != -1 and found:
121*10465441SEvalZero                position = line.find('default')
122*10465441SEvalZero                line = line[0:position] + 'default "rt-thread"\n'
123*10465441SEvalZero                found = 0
124*10465441SEvalZero            f.write(line)
125*10465441SEvalZero
126*10465441SEvalZerodef bsp_update_kconfig_library(dist_dir):
127*10465441SEvalZero    # change RTT_ROOT in Kconfig
128*10465441SEvalZero    if not os.path.isfile(os.path.join(dist_dir, 'Kconfig')):
129*10465441SEvalZero        return
130*10465441SEvalZero
131*10465441SEvalZero    with open(os.path.join(dist_dir, 'Kconfig'), 'r') as f:
132*10465441SEvalZero        data = f.readlines()
133*10465441SEvalZero    with open(os.path.join(dist_dir, 'Kconfig'), 'w') as f:
134*10465441SEvalZero        found = 0
135*10465441SEvalZero        for line in data:
136*10465441SEvalZero            if line.find('RTT_ROOT') != -1:
137*10465441SEvalZero                found = 1
138*10465441SEvalZero            if line.find('../libraries') != -1 and found:
139*10465441SEvalZero                position = line.find('../libraries')
140*10465441SEvalZero                line = line[0:position] + 'libraries/Kconfig"\n'
141*10465441SEvalZero                found = 0
142*10465441SEvalZero            f.write(line)
143*10465441SEvalZero
144*10465441SEvalZerodef bs_update_ide_project(bsp_root, rtt_root):
145*10465441SEvalZero    import subprocess
146*10465441SEvalZero    # default update the projects which have template file
147*10465441SEvalZero    tgt_dict = {'mdk4':('keil', 'armcc'),
148*10465441SEvalZero                'mdk5':('keil', 'armcc'),
149*10465441SEvalZero                'iar':('iar', 'iar'),
150*10465441SEvalZero                'vs':('msvc', 'cl'),
151*10465441SEvalZero                'vs2012':('msvc', 'cl'),
152*10465441SEvalZero                'cdk':('gcc', 'gcc')}
153*10465441SEvalZero
154*10465441SEvalZero    scons_env = os.environ.copy()
155*10465441SEvalZero    scons_env['RTT_ROOT'] = rtt_root
156*10465441SEvalZero
157*10465441SEvalZero    for item in tgt_dict:
158*10465441SEvalZero        child = subprocess.Popen('scons --target=' + item, cwd=bsp_root, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
159*10465441SEvalZero        stdout, stderr = child.communicate()
160*10465441SEvalZero        if child.returncode == 0:
161*10465441SEvalZero            print('update %s project' % item)
162*10465441SEvalZero
163*10465441SEvalZerodef zip_dist(dist_dir, dist_name):
164*10465441SEvalZero    import zipfile
165*10465441SEvalZero
166*10465441SEvalZero    zip_filename = os.path.join(dist_dir)
167*10465441SEvalZero    zip = zipfile.ZipFile(zip_filename + '.zip', 'w')
168*10465441SEvalZero    pre_len = len(os.path.dirname(dist_dir))
169*10465441SEvalZero
170*10465441SEvalZero    for parent, dirnames, filenames in os.walk(dist_dir):
171*10465441SEvalZero        for filename in filenames:
172*10465441SEvalZero            pathfile = os.path.join(parent, filename)
173*10465441SEvalZero            arcname = pathfile[pre_len:].strip(os.path.sep)
174*10465441SEvalZero            zip.write(pathfile, arcname)
175*10465441SEvalZero
176*10465441SEvalZero    zip.close()
177*10465441SEvalZero
178*10465441SEvalZerodef MkDist_Strip(program, BSP_ROOT, RTT_ROOT, Env):
179*10465441SEvalZero    global source_list
180*10465441SEvalZero
181*10465441SEvalZero    print('make distribution and strip useless files....')
182*10465441SEvalZero
183*10465441SEvalZero    dist_name = os.path.basename(BSP_ROOT)
184*10465441SEvalZero    dist_dir  = os.path.join(BSP_ROOT, 'dist-strip', dist_name)
185*10465441SEvalZero    target_path = os.path.join(dist_dir, 'rt-thread')
186*10465441SEvalZero
187*10465441SEvalZero    print('=> %s' % os.path.basename(BSP_ROOT))
188*10465441SEvalZero    bsp_copy_files(BSP_ROOT, dist_dir)
189*10465441SEvalZero
190*10465441SEvalZero    # copy stm32 bsp libiary files
191*10465441SEvalZero    if os.path.basename(os.path.dirname(BSP_ROOT)) == 'stm32':
192*10465441SEvalZero        print("=> copy stm32 bsp library")
193*10465441SEvalZero        library_path = os.path.join(os.path.dirname(BSP_ROOT), 'libraries')
194*10465441SEvalZero        library_dir  = os.path.join(dist_dir, 'libraries')
195*10465441SEvalZero        bsp_copy_files(os.path.join(library_path, 'HAL_Drivers'), os.path.join(library_dir, 'HAL_Drivers'))
196*10465441SEvalZero        bsp_copy_files(os.path.join(library_path, Env['bsp_lib_type']), os.path.join(library_dir, Env['bsp_lib_type']))
197*10465441SEvalZero        shutil.copyfile(os.path.join(library_path, 'Kconfig'), os.path.join(library_dir, 'Kconfig'))
198*10465441SEvalZero
199*10465441SEvalZero    # do bsp special dist handle
200*10465441SEvalZero    if 'dist_handle' in Env:
201*10465441SEvalZero        print("=> start dist handle")
202*10465441SEvalZero        dist_handle = Env['dist_handle']
203*10465441SEvalZero        dist_handle(BSP_ROOT)
204*10465441SEvalZero
205*10465441SEvalZero    # get all source files from program
206*10465441SEvalZero    for item in program:
207*10465441SEvalZero        walk_children(item)
208*10465441SEvalZero    source_list.sort()
209*10465441SEvalZero
210*10465441SEvalZero    # copy the source files without libcpu and components/libc in RT-Thread
211*10465441SEvalZero    target_list = []
212*10465441SEvalZero    libcpu_dir = os.path.join(RTT_ROOT, 'libcpu').lower()
213*10465441SEvalZero    libc_dir = os.path.join(RTT_ROOT, 'components', 'libc', 'compilers').lower()
214*10465441SEvalZero    sal_dir = os.path.join(RTT_ROOT, 'components', 'net', 'sal_socket').lower()
215*10465441SEvalZero    sources_include_sal = False
216*10465441SEvalZero    for src in source_list:
217*10465441SEvalZero        if src.lower().startswith(BSP_ROOT.lower()):
218*10465441SEvalZero            continue
219*10465441SEvalZero
220*10465441SEvalZero        # skip libc and libcpu dir
221*10465441SEvalZero        if src.lower().startswith(libcpu_dir):
222*10465441SEvalZero            continue
223*10465441SEvalZero        if src.lower().startswith(libc_dir):
224*10465441SEvalZero            continue
225*10465441SEvalZero        if src.lower().startswith(sal_dir):
226*10465441SEvalZero            sources_include_sal = True
227*10465441SEvalZero            continue
228*10465441SEvalZero
229*10465441SEvalZero        if src.lower().startswith(RTT_ROOT.lower()):
230*10465441SEvalZero            target_list.append(src)
231*10465441SEvalZero    source_list = target_list
232*10465441SEvalZero
233*10465441SEvalZero    # get source directory
234*10465441SEvalZero    src_dir = []
235*10465441SEvalZero    for src in source_list:
236*10465441SEvalZero        src = src.replace(RTT_ROOT, '')
237*10465441SEvalZero        if src[0] == os.sep or src[0] == '/':
238*10465441SEvalZero            src = src[1:]
239*10465441SEvalZero
240*10465441SEvalZero        path = os.path.dirname(src)
241*10465441SEvalZero        sub_path = path.split(os.sep)
242*10465441SEvalZero        full_path = RTT_ROOT
243*10465441SEvalZero        for item in sub_path:
244*10465441SEvalZero            full_path = os.path.join(full_path, item)
245*10465441SEvalZero            if full_path not in src_dir:
246*10465441SEvalZero                src_dir.append(full_path)
247*10465441SEvalZero
248*10465441SEvalZero    # add all of SConscript files
249*10465441SEvalZero    for item in src_dir:
250*10465441SEvalZero        source_list.append(os.path.join(item, 'SConscript'))
251*10465441SEvalZero
252*10465441SEvalZero    # add all of Kconfig files
253*10465441SEvalZero    walk_kconfig(RTT_ROOT, source_list)
254*10465441SEvalZero
255*10465441SEvalZero    # copy all files to target directory
256*10465441SEvalZero    source_list.sort()
257*10465441SEvalZero    for src in source_list:
258*10465441SEvalZero        dst = src.replace(RTT_ROOT, '')
259*10465441SEvalZero        if dst[0] == os.sep or dst[0] == '/':
260*10465441SEvalZero            dst = dst[1:]
261*10465441SEvalZero
262*10465441SEvalZero        print('=> %s' % dst)
263*10465441SEvalZero        dst = os.path.join(target_path, dst)
264*10465441SEvalZero        do_copy_file(src, dst)
265*10465441SEvalZero
266*10465441SEvalZero    # copy tools directory
267*10465441SEvalZero    print('=> tools')
268*10465441SEvalZero    do_copy_folder(os.path.join(RTT_ROOT, 'tools'), os.path.join(target_path, 'tools'), ignore_patterns('*.pyc'))
269*10465441SEvalZero    do_copy_file(os.path.join(RTT_ROOT, 'Kconfig'), os.path.join(target_path, 'Kconfig'))
270*10465441SEvalZero    do_copy_file(os.path.join(RTT_ROOT, 'AUTHORS'), os.path.join(target_path, 'AUTHORS'))
271*10465441SEvalZero    do_copy_file(os.path.join(RTT_ROOT, 'COPYING'), os.path.join(target_path, 'COPYING'))
272*10465441SEvalZero    do_copy_file(os.path.join(RTT_ROOT, 'README.md'), os.path.join(target_path, 'README.md'))
273*10465441SEvalZero    do_copy_file(os.path.join(RTT_ROOT, 'README_zh.md'), os.path.join(target_path, 'README_zh.md'))
274*10465441SEvalZero
275*10465441SEvalZero    print('=> %s' % os.path.join('components', 'libc', 'compilers'))
276*10465441SEvalZero    do_copy_folder(os.path.join(RTT_ROOT, 'components', 'libc', 'compilers'), os.path.join(target_path, 'components', 'libc', 'compilers'))
277*10465441SEvalZero
278*10465441SEvalZero    if sources_include_sal:
279*10465441SEvalZero        print('=> %s' % os.path.join('components', 'net', 'sal_socket'))
280*10465441SEvalZero        do_copy_folder(os.path.join(RTT_ROOT, 'components', 'net', 'sal_socket'), os.path.join(target_path, 'components', 'net', 'sal_socket'))
281*10465441SEvalZero
282*10465441SEvalZero    # copy all libcpu/ARCH directory
283*10465441SEvalZero    import rtconfig
284*10465441SEvalZero    print('=> %s' % (os.path.join('libcpu', rtconfig.ARCH, rtconfig.CPU)))
285*10465441SEvalZero    do_copy_folder(os.path.join(RTT_ROOT, 'libcpu', rtconfig.ARCH, rtconfig.CPU), os.path.join(target_path, 'libcpu', rtconfig.ARCH, rtconfig.CPU))
286*10465441SEvalZero    if os.path.exists(os.path.join(RTT_ROOT, 'libcpu', rtconfig.ARCH, 'common')):
287*10465441SEvalZero        print('=> %s' % (os.path.join('libcpu', rtconfig.ARCH, 'common')))
288*10465441SEvalZero        do_copy_folder(os.path.join(RTT_ROOT, 'libcpu', rtconfig.ARCH, 'common'), os.path.join(target_path, 'libcpu', rtconfig.ARCH, 'common'))
289*10465441SEvalZero    do_copy_file(os.path.join(RTT_ROOT, 'libcpu', 'Kconfig'), os.path.join(target_path, 'libcpu', 'Kconfig'))
290*10465441SEvalZero    do_copy_file(os.path.join(RTT_ROOT, 'libcpu', 'SConscript'), os.path.join(target_path, 'libcpu', 'SConscript'))
291*10465441SEvalZero
292*10465441SEvalZero    # change RTT_ROOT in SConstruct
293*10465441SEvalZero    bsp_update_sconstruct(dist_dir)
294*10465441SEvalZero    # change RTT_ROOT in Kconfig
295*10465441SEvalZero    bsp_update_kconfig(dist_dir)
296*10465441SEvalZero    bsp_update_kconfig_library(dist_dir)
297*10465441SEvalZero    # update all project files
298*10465441SEvalZero    bs_update_ide_project(dist_dir, target_path)
299*10465441SEvalZero
300*10465441SEvalZero    # make zip package
301*10465441SEvalZero    zip_dist(dist_dir, dist_name)
302*10465441SEvalZero
303*10465441SEvalZero    print('done!')
304*10465441SEvalZero
305*10465441SEvalZerodef MkDist(program, BSP_ROOT, RTT_ROOT, Env):
306*10465441SEvalZero    print('make distribution....')
307*10465441SEvalZero
308*10465441SEvalZero    dist_name = os.path.basename(BSP_ROOT)
309*10465441SEvalZero    dist_dir  = os.path.join(BSP_ROOT, 'dist', dist_name)
310*10465441SEvalZero
311*10465441SEvalZero    target_path = os.path.join(dist_dir, 'rt-thread')
312*10465441SEvalZero
313*10465441SEvalZero    # copy BSP files
314*10465441SEvalZero    print('=> %s' % os.path.basename(BSP_ROOT))
315*10465441SEvalZero    bsp_copy_files(BSP_ROOT, dist_dir)
316*10465441SEvalZero
317*10465441SEvalZero    # copy stm32 bsp libiary files
318*10465441SEvalZero    if os.path.basename(os.path.dirname(BSP_ROOT)) == 'stm32':
319*10465441SEvalZero        print("=> copy stm32 bsp library")
320*10465441SEvalZero        library_path = os.path.join(os.path.dirname(BSP_ROOT), 'libraries')
321*10465441SEvalZero        library_dir  = os.path.join(dist_dir, 'libraries')
322*10465441SEvalZero        bsp_copy_files(os.path.join(library_path, 'HAL_Drivers'), os.path.join(library_dir, 'HAL_Drivers'))
323*10465441SEvalZero        bsp_copy_files(os.path.join(library_path, Env['bsp_lib_type']), os.path.join(library_dir, Env['bsp_lib_type']))
324*10465441SEvalZero        shutil.copyfile(os.path.join(library_path, 'Kconfig'), os.path.join(library_dir, 'Kconfig'))
325*10465441SEvalZero
326*10465441SEvalZero    # do bsp special dist handle
327*10465441SEvalZero    if 'dist_handle' in Env:
328*10465441SEvalZero        print("=> start dist handle")
329*10465441SEvalZero        dist_handle = Env['dist_handle']
330*10465441SEvalZero        dist_handle(BSP_ROOT)
331*10465441SEvalZero
332*10465441SEvalZero    # copy tools directory
333*10465441SEvalZero    print('=> components')
334*10465441SEvalZero    do_copy_folder(os.path.join(RTT_ROOT, 'components'), os.path.join(target_path, 'components'))
335*10465441SEvalZero
336*10465441SEvalZero    # skip documentation directory
337*10465441SEvalZero    # skip examples
338*10465441SEvalZero
339*10465441SEvalZero    # copy include directory
340*10465441SEvalZero    print('=> include')
341*10465441SEvalZero    do_copy_folder(os.path.join(RTT_ROOT, 'include'), os.path.join(target_path, 'include'))
342*10465441SEvalZero
343*10465441SEvalZero    # copy all libcpu/ARCH directory
344*10465441SEvalZero    print('=> libcpu')
345*10465441SEvalZero    import rtconfig
346*10465441SEvalZero    do_copy_folder(os.path.join(RTT_ROOT, 'libcpu', rtconfig.ARCH), os.path.join(target_path, 'libcpu', rtconfig.ARCH))
347*10465441SEvalZero    do_copy_file(os.path.join(RTT_ROOT, 'libcpu', 'Kconfig'), os.path.join(target_path, 'libcpu', 'Kconfig'))
348*10465441SEvalZero    do_copy_file(os.path.join(RTT_ROOT, 'libcpu', 'SConscript'), os.path.join(target_path, 'libcpu', 'SConscript'))
349*10465441SEvalZero
350*10465441SEvalZero    # copy src directory
351*10465441SEvalZero    print('=> src')
352*10465441SEvalZero    do_copy_folder(os.path.join(RTT_ROOT, 'src'), os.path.join(target_path, 'src'))
353*10465441SEvalZero
354*10465441SEvalZero    # copy tools directory
355*10465441SEvalZero    print('=> tools')
356*10465441SEvalZero    do_copy_folder(os.path.join(RTT_ROOT, 'tools'), os.path.join(target_path, 'tools'), ignore_patterns('*.pyc'))
357*10465441SEvalZero
358*10465441SEvalZero    do_copy_file(os.path.join(RTT_ROOT, 'Kconfig'), os.path.join(target_path, 'Kconfig'))
359*10465441SEvalZero    do_copy_file(os.path.join(RTT_ROOT, 'AUTHORS'), os.path.join(target_path, 'AUTHORS'))
360*10465441SEvalZero    do_copy_file(os.path.join(RTT_ROOT, 'COPYING'), os.path.join(target_path, 'COPYING'))
361*10465441SEvalZero    do_copy_file(os.path.join(RTT_ROOT, 'README.md'), os.path.join(target_path, 'README.md'))
362*10465441SEvalZero    do_copy_file(os.path.join(RTT_ROOT, 'README_zh.md'), os.path.join(target_path, 'README_zh.md'))
363*10465441SEvalZero
364*10465441SEvalZero    # change RTT_ROOT in SConstruct
365*10465441SEvalZero    bsp_update_sconstruct(dist_dir)
366*10465441SEvalZero    # change RTT_ROOT in Kconfig
367*10465441SEvalZero    bsp_update_kconfig(dist_dir)
368*10465441SEvalZero    bsp_update_kconfig_library(dist_dir)
369*10465441SEvalZero    # update all project files
370*10465441SEvalZero    bs_update_ide_project(dist_dir, target_path)
371*10465441SEvalZero
372*10465441SEvalZero    # make zip package
373*10465441SEvalZero    zip_dist(dist_dir, dist_name)
374*10465441SEvalZero
375*10465441SEvalZero    print('done!')
376*10465441SEvalZero
377