原创 rtthread scons使用备注

2020-9-10 14:49 2711 24 3 分类: 软件与OS 文集: rt-thread
1. 更改默认环境变量
使用scons编译时,RTT_CC环境变量用于标识编译时使用的工具链,默认配置使用gcc,如果需要修改为iar,则可以编辑文件env_released_1.2.0\env\tools\ConEmu\ConEmu\CmdInit.cmd,找到set RTT_CC=gcc项,将gcc改为iar即可

2. 为STM32F733移植rtconfig.py,支持GCC/IAR/KEIL编译,支持硬件浮点,注意STM32F733的FPU为fpv5-sp-d16,详细可参考链接
https://www.keil.com/support/docs/3716.htm
https://www.keil.com/support/man/docs/ARMCC/ARMCC_chr1359124920656.htm
https://developer.arm.com/documentation/dui0472/k/Compiler-Coding-Practices/Processors-and-their-implicit-Floating-Point-Units--FPUs-
---------------------------------------------------------------------------------------------------------------
import os

# toolchains options
ARCH='arm'
CPU='cortex-m7'
CROSS_TOOL='iar'

if os.getenv('RTT_CC'):
    CROSS_TOOL = os.getenv('RTT_CC')
if os.getenv('RTT_ROOT'):
    RTT_ROOT = os.getenv('RTT_ROOT')

# cross_tool provides the cross compiler
# EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR
if  CROSS_TOOL == 'gcc':
    PLATFORM    = 'gcc'
    EXEC_PATH   = r'/usr/local/Cellar/arm-none-eabi-gcc/7-2017-q4-major/gcc/bin/'
elif CROSS_TOOL == 'keil':
    PLATFORM    = 'armcc'
    EXEC_PATH   = r'C:/Keil_v5'
elif CROSS_TOOL == 'iar':
    PLATFORM    = 'iar'
    EXEC_PATH   = r'C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.3'

if CROSS_TOOL == 'gcc' and os.getenv('RTT_EXEC_PATH'):
    EXEC_PATH = os.getenv('RTT_EXEC_PATH')

BUILD = 'debug'

if PLATFORM == 'gcc':
    # toolchains
    PREFIX = 'arm-none-eabi-'
    CC = PREFIX + 'gcc'
    CXX = PREFIX + 'g++'
    AS = PREFIX + 'gcc'
    AR = PREFIX + 'ar'
    CXX = PREFIX + 'g++'
    LINK = PREFIX + 'gcc'
    TARGET_EXT = 'elf'
    SIZE = PREFIX + 'size'
    OBJDUMP = PREFIX + 'objdump'
    OBJCPY = PREFIX + 'objcopy'
    STRIP = PREFIX + 'strip'

    DEVICE = ' -mcpu=Cortex-M7 -mthumb -mfpu=fpv5-sp-d16 -mfloat-abi=hard -ffunction-sections -fdata-sections'
    CFLAGS = DEVICE + ' -g -Wall'
    AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp -Wa,-mimplicit-it=thumb '
    LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread_gcc.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds'

    CPATH = ''
    LPATH = ''

    if BUILD == 'debug':
        CFLAGS += ' -O0 -gdwarf-2'
        AFLAGS += ' -gdwarf-2'
    else:
        CFLAGS += ' -O2 -Os'

    CXXFLAGS = CFLAGS 
    
    POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread_gcc.bin \n' + SIZE + ' $TARGET \n'
    POST_ACTION += OBJCPY + ' -O ihex $TARGET rtthread.hex \n'
    POST_ACTION += 'cp rtthread.hex d:\Shared \n'

    # module setting 
    CXXFLAGS = ' -Woverloaded-virtual -fno-exceptions -fno-rtti '
    M_CFLAGS = CFLAGS + ' -mlong-calls -fPIC '
    M_CXXFLAGS = CXXFLAGS + ' -mlong-calls -fPIC'
    M_LFLAGS = DEVICE + CXXFLAGS + ' -Wl,--gc-sections,-z,max-page-size=0x4' +\
                                    ' -shared -fPIC -nostartfiles -static-libgcc'
    M_POST_ACTION = STRIP + ' -R .hash $TARGET\n' + SIZE + ' $TARGET \n'

elif PLATFORM == 'armcc':
    # toolchains
    CC = 'armcc'
    CXX = 'armcc'
    AS = 'armasm'
    AR = 'armar'
    LINK = 'armlink'
    TARGET_EXT = 'axf'

    DEVICE = ' --cpu Cortex-M7.fp.sp --fpu=FPv5-SP'
    CFLAGS = DEVICE + ' --c99 --split_sections --apcs=interwork '
    AFLAGS = DEVICE + ' --apcs=interwork '
    LFLAGS = DEVICE + ' --apcs=interwork --summary_stderr --info summarysizes --map --xref --callgraph --symbols --info sizes --info totals --info unused --info veneers --list rtthread_keil.map --scatter board/linker_scripts/link.sct --strict'

    CFLAGS += ' -I' + EXEC_PATH + '/ARM/ARMCC/include'
    LFLAGS += ' --libpath "' + EXEC_PATH + '/ARM/ARMCC/lib"'

    EXEC_PATH += '/ARM/ARMCC/bin'

    if BUILD == 'debug':
        CFLAGS += ' -g -O0'
        AFLAGS += ' -g'
    else:
        CFLAGS += ' -O2 -Otime'

    CXXFLAGS = CFLAGS    
    
    POST_ACTION = 'fromelf --bin $TARGET --output rtthread_keil.bin \n fromelf -z $TARGET \n'
    POST_ACTION += 'fromelf --i32combined $TARGET --output rtthread.hex \n'
    POST_ACTION += 'cp rtthread.hex d:\Shared \n'

elif PLATFORM == 'iar':
    # toolchains
    CC = 'iccarm'
    CXX = 'iccarm'
    AS = 'iasmarm'
    AR = 'iarchive'
    LINK = 'ilinkarm'
    TARGET_EXT = 'out'

    DEVICE = ''

    CFLAGS = DEVICE
    CFLAGS += ' --diag_suppress Pa050'
    CFLAGS += ' --no_cse' 
    CFLAGS += ' --no_unroll' 
    CFLAGS += ' --no_inline' 
    CFLAGS += ' --no_code_motion' 
    CFLAGS += ' --no_tbaa' 
    CFLAGS += ' --no_clustering' 
    CFLAGS += ' --no_scheduling' 
#    CFLAGS += ' --debug' 
    CFLAGS += ' --endian=little' 
    CFLAGS += ' --cpu=Cortex-M7.fp.sp'
    CFLAGS += ' -e' 
    CFLAGS += ' --fpu=VFPv5_sp'
    CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"'        
    CFLAGS += ' --use_c++_inline'
    CFLAGS += ' --silent'
    
    AFLAGS = ''
    AFLAGS += ' -s+' 
    AFLAGS += ' -w+' 
    AFLAGS += ' -r' 
    AFLAGS += ' --cpu Cortex-M7.fp.sp '
    AFLAGS += ' --fpu VFPv5_sp' 
    AFLAGS += ' -S'

    if BUILD == 'debug':
#        CFLAGS += ' -Ol'    
        CFLAGS += ' --debug'
        CFLAGS += ' -On'
    else:
        CFLAGS += ' -Oh'
    
    LFLAGS = ' --config board/linker_scripts/link.icf'
    LFLAGS += ' --redirect _Printf=_PrintfTiny' 
    LFLAGS += ' --redirect _Scanf=_ScanfSmall' 
    LFLAGS += ' --entry __iar_program_start'    
#    LFLAGS += ' --silent'

    CXXFLAGS = CFLAGS

    EXEC_PATH = EXEC_PATH + '/arm/bin/'
    POST_ACTION = 'ielftool --bin $TARGET rtthread_iar.bin \n'
    POST_ACTION += 'ielftool --ihex $TARGET rtthread.hex \n'
    POST_ACTION += 'cp rtthread.hex d:\Shared \n'

def dist_handle(BSP_ROOT, dist_dir):
    import sys
    cwd_path = os.getcwd()
    sys.path.append(os.path.join(os.path.dirname(BSP_ROOT), 'tools'))
    from sdk_dist import dist_do_building
    dist_do_building(BSP_ROOT, dist_dir)

---------------------------------------------------------------------------------------------------------------

作者: RLink, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3918760.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

给作者打赏,鼓励TA抓紧创作!

赞赏支持
点赞 24
赞赏0

文章评论2条评论)

登录后参与讨论

yzw92 2020-9-14 05:56

纯属顶一下。

pidaneng 2020-9-11 08:45

谢谢楼主分享!
相关推荐阅读
RLink 2020-10-31 09:24
网站分享
【安富莱】MDK5.29,5.30,5.31,5.32和各种pack软件包镜像下载http://www.armbbs.cn/forum.php?mod=viewthread&tid=96992Unix...
RLink 2020-07-23 16:20
(转载)中断控制及basepri 与 basepri_max
转载自https://www.cnblogs.com/qiyuexin/p/8921718.html目录FAULTMASKPRIMASKBASEPRIBASEPRI_MAX 正文1、总开关每...
RLink 2020-07-23 11:27
(转载)ucos中的三种临界区管理机制
熟悉ucos,或者读过Jean.J.Labrosse写过的ucos书籍的人,一定会知道ucos中著名的临界去管理宏:OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL()。同样是...
RLink 2020-07-23 10:44
(转载)Cortex-M0/M0+屏蔽优先级低于BASEPRI设定的中断
Cortex-M3/M4/M7有BASEPRI特殊功能寄存器可以屏蔽优先级低于BASEPRI设定值的中断,但Cortex-M0/M0+没有BASEPRI寄存器,不过仍然可以实现相识的功能。mingdu...
RLink 2020-07-09 15:12
STM32L系列I2C应用注意
噪音滤波器I2C模块包含模拟噪音滤波器和数字噪音滤波器,其中模拟噪音滤波器可以抑制尖峰宽度高达50ns(满足快速模式协议规格),用户可以选择关闭这一特性;数字滤波器抑制尖峰噪音的长度可以通过软件配置,...
我要评论
2
24
1
2
3
4
5
6
7
8
9
0
关闭 热点推荐上一条 /2 下一条