xref: /nrf52832-nimble/rt-thread/tools/ua.py (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero#
2*10465441SEvalZero# File      : ua.py
3*10465441SEvalZero# This file is part of RT-Thread RTOS
4*10465441SEvalZero# COPYRIGHT (C) 2006 - 2015, 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# 2015-01-20     Bernard      Add copyright information
23*10465441SEvalZero#
24*10465441SEvalZero
25*10465441SEvalZeroimport os
26*10465441SEvalZeroimport sys
27*10465441SEvalZerofrom utils import _make_path_relative
28*10465441SEvalZero
29*10465441SEvalZerodef PrefixPath(prefix, path):
30*10465441SEvalZero    path = os.path.abspath(path)
31*10465441SEvalZero    prefix = os.path.abspath(prefix)
32*10465441SEvalZero
33*10465441SEvalZero    if sys.platform == 'win32':
34*10465441SEvalZero        prefix = prefix.lower()
35*10465441SEvalZero        path = path.lower()
36*10465441SEvalZero
37*10465441SEvalZero    if path.startswith(prefix):
38*10465441SEvalZero        return True
39*10465441SEvalZero
40*10465441SEvalZero    return False
41*10465441SEvalZero
42*10465441SEvalZerodef PrepareUA(project, RTT_ROOT, BSP_ROOT):
43*10465441SEvalZero    with open('rtua.py', 'w') as ua:
44*10465441SEvalZero        # ua.write('import os\n')
45*10465441SEvalZero        # ua.write('import sys\n')
46*10465441SEvalZero        ua.write('\n')
47*10465441SEvalZero
48*10465441SEvalZero        print RTT_ROOT
49*10465441SEvalZero
50*10465441SEvalZero        CPPPATH = []
51*10465441SEvalZero        CPPDEFINES = []
52*10465441SEvalZero
53*10465441SEvalZero        for group in project:
54*10465441SEvalZero            # get each include path
55*10465441SEvalZero            if 'CPPPATH' in group and group['CPPPATH']:
56*10465441SEvalZero                CPPPATH += group['CPPPATH']
57*10465441SEvalZero
58*10465441SEvalZero            # get each group's definitions
59*10465441SEvalZero            if 'CPPDEFINES' in group and group['CPPDEFINES']:
60*10465441SEvalZero                CPPDEFINES += group['CPPDEFINES']
61*10465441SEvalZero
62*10465441SEvalZero        if len(CPPPATH):
63*10465441SEvalZero            # use absolute path
64*10465441SEvalZero            for i in range(len(CPPPATH)):
65*10465441SEvalZero                CPPPATH[i] = os.path.abspath(CPPPATH[i])
66*10465441SEvalZero
67*10465441SEvalZero            # remove repeat path
68*10465441SEvalZero            paths = [i for i in set(CPPPATH)]
69*10465441SEvalZero            CPPPATH = []
70*10465441SEvalZero            for path in paths:
71*10465441SEvalZero                if PrefixPath(RTT_ROOT, path):
72*10465441SEvalZero                    CPPPATH += ['RTT_ROOT + "/%s",' % _make_path_relative(RTT_ROOT, path).replace('\\', '/')]
73*10465441SEvalZero
74*10465441SEvalZero                elif PrefixPath(BSP_ROOT, path):
75*10465441SEvalZero                    CPPPATH += ['BSP_ROOT + "/%s",' % _make_path_relative(BSP_ROOT, path).replace('\\', '/')]
76*10465441SEvalZero                else:
77*10465441SEvalZero                    CPPPATH += ['"%s",' % path.replace('\\', '/')]
78*10465441SEvalZero
79*10465441SEvalZero            CPPPATH.sort()
80*10465441SEvalZero            ua.write('def GetCPPPATH(BSP_ROOT, RTT_ROOT):\n')
81*10465441SEvalZero            ua.write('\tCPPPATH=[\n')
82*10465441SEvalZero            for path in CPPPATH:
83*10465441SEvalZero                ua.write('\t\t%s\n' % path)
84*10465441SEvalZero            ua.write('\t]\n\n')
85*10465441SEvalZero            ua.write('\treturn CPPPATH\n\n')
86*10465441SEvalZero        else:
87*10465441SEvalZero            ua.write('def GetCPPPATH(BSP_ROOT, RTT_ROOT):\n')
88*10465441SEvalZero            ua.write('\tCPPPATH=[]\n\n')
89*10465441SEvalZero            ua.write('\treturn CPPPATH\n\n')
90*10465441SEvalZero
91*10465441SEvalZero        if len(CPPDEFINES):
92*10465441SEvalZero            CPPDEFINES = [i for i in set(CPPDEFINES)]
93*10465441SEvalZero
94*10465441SEvalZero            ua.write('def GetCPPDEFINES():\n')
95*10465441SEvalZero            ua.write('\tCPPDEFINES=%s\n' % str(CPPDEFINES))
96*10465441SEvalZero            ua.write('\treturn CPPDEFINES\n\n')
97*10465441SEvalZero
98*10465441SEvalZero        else:
99*10465441SEvalZero            ua.write('def GetCPPDEFINES():\n')
100*10465441SEvalZero            ua.write('\tCPPDEFINES=""\n\n')
101*10465441SEvalZero            ua.write('\treturn CPPDEFINES\n\n')
102