1import os
2import sys
3
4# toolchains options
5ARCH='arm'
6CPU='cortex-r52'
7CROSS_TOOL='gcc'
8
9if os.getenv('RTT_CC'):
10    CROSS_TOOL = os.getenv('RTT_CC')
11if os.getenv('RTT_ROOT'):
12    RTT_ROOT = os.getenv('RTT_ROOT')
13
14# cross_tool provides the cross compiler
15# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR
16if  CROSS_TOOL == 'gcc':
17    PLATFORM    = 'gcc'
18    EXEC_PATH   = r'C:\Users\XXYYZZ'
19elif CROSS_TOOL == 'keil':
20    PLATFORM    = 'armclang'
21    EXEC_PATH   = r'C:/Keil_v5'
22elif CROSS_TOOL == 'iar':
23    PLATFORM    = 'iccarm'
24    EXEC_PATH   = r'D:/IAR Systems/Embedded Workbench 9.2'
25
26if os.getenv('RTT_EXEC_PATH'):
27    EXEC_PATH = os.getenv('RTT_EXEC_PATH')
28
29BUILD = 'debug'
30# BUILD = 'release'
31
32if PLATFORM == 'gcc':
33    # toolchains
34    PREFIX = 'arm-none-eabi-'
35    CC = PREFIX + 'gcc'
36    AS = PREFIX + 'gcc'
37    AR = PREFIX + 'ar'
38    CXX = PREFIX + 'g++'
39    LINK = PREFIX + 'gcc'
40    TARGET_EXT = 'elf'
41    SIZE = PREFIX + 'size'
42    OBJDUMP = PREFIX + 'objdump'
43    OBJCPY = PREFIX + 'objcopy'
44    NM = PREFIX + 'nm'
45    DEVICE = ' -mcpu=cortex-r52 -marm -mfloat-abi=hard -mfpu=neon-fp-armv8 -fdiagnostics-parseable-fixits -Og -fmessage-length=0 -fsigned-char -fdata-sections -funwind-tables -ffunction-sections -fno-strict-aliasing -g -gdwarf-4'
46    CFLAGS = DEVICE + ' -Dgcc'
47    AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp'
48    LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread.map,-cref,-u,system_init -lgcc -lrdimon -T script/fsp_xspi0_boot_scons.ld -L script/'
49    CPATH = ''
50    LPATH = ''
51
52    if BUILD == 'debug':
53        CFLAGS += ' -Og'
54        AFLAGS += ' -gdwarf-2'
55    else:
56        CFLAGS += ' -Os'
57    CXXFLAGS = CFLAGS
58
59    POST_ACTION = OBJCPY + ' -O ihex $TARGET rtthread.hex\n' + SIZE + ' $TARGET \n'
60    POST_ACTION += OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n'
61
62elif PLATFORM == 'iccarm':
63    # toolchains
64    CC = 'iccarm'
65    CXX = 'iccarm'
66    AS = 'iasmarm'
67    AR = 'iarchive'
68    LINK = 'ilinkarm'
69    TARGET_EXT = 'out'
70
71    DEVICE = '-Dewarm'
72
73    CFLAGS = DEVICE
74    CFLAGS += ' --diag_suppress Pa050'
75    CFLAGS += ' --no_cse'
76    CFLAGS += ' --no_unroll'
77    CFLAGS += ' --no_inline'
78    CFLAGS += ' --no_code_motion'
79    CFLAGS += ' --no_tbaa'
80    CFLAGS += ' --no_clustering'
81    CFLAGS += ' --no_scheduling'
82    CFLAGS += ' --endian=little'
83    CFLAGS += ' --cpu=Cortex-R52'
84    CFLAGS += ' -e'
85    CFLAGS += ' --arm'
86    CFLAGS += ' --float-abi=hard'
87    CFLAGS += ' --fpu=neon-fp-armv8'
88    CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"'
89    CFLAGS += ' --silent'
90
91    AFLAGS = DEVICE
92    AFLAGS += ' -s+'
93    AFLAGS += ' -w+'
94    AFLAGS += ' -r'
95    AFLAGS += ' --cpu Cortex-R52'
96    AFLAGS += ' --arm'
97    AFLAGS += ' --float-abi hard'
98    AFLAGS += ' --fpu neon-fp-armv8'
99    # AFLAGS += ' --unaligned-access'
100    AFLAGS += ' -S'
101
102    if BUILD == 'debug':
103        CFLAGS += ' --debug'
104        CFLAGS += ' -On'
105    else:
106        CFLAGS += ' -Oh'
107
108    LFLAGS = ' --config "script/fsp_xspi0_boot.icf"'
109    LFLAGS += ' --entry Reset_Handler'
110
111    CXXFLAGS = CFLAGS
112
113    EXEC_PATH = EXEC_PATH + '/arm/bin/'
114    POST_ACTION = 'ielftool --bin $TARGET rtthread.bin'
115
116def dist_handle(BSP_ROOT, dist_dir):
117    import sys
118    cwd_path = os.getcwd()
119    sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools'))
120    from sdk_dist import dist_do_building
121    dist_do_building(BSP_ROOT, dist_dir)
122