Browse Source

support GCC compiler for LM3S platform

git-svn-id: https://rt-thread.googlecode.com/svn/trunk@234 bbd45198-f89e-11dd-88c7-29a3b14d5316
qiuyiuestc 15 years ago
parent
commit
5696b4853a
3 changed files with 268 additions and 0 deletions
  1. 50 0
      bsp/lm3s/SConstruct
  2. 116 0
      bsp/lm3s/lm3s_rom.ld
  3. 102 0
      bsp/lm3s/rtconfig.py

+ 50 - 0
bsp/lm3s/SConstruct

@@ -0,0 +1,50 @@
+import os
+import rtconfig
+
+RTT_ROOT = os.path.normpath(os.getcwd() + '/../..')
+target = 'rtthread-lm3s'
+
+# search path for C compiler
+bsp_path  = RTT_ROOT + '/bsp/lm3s'
+
+env = Environment(tools = ['mingw'],
+	AS = rtconfig.AS, ASFLAGS = rtconfig.AFLAGS,
+	CC = rtconfig.CC, CCFLAGS = rtconfig.CFLAGS,
+	AR = rtconfig.AR, ARFLAGS = '-rc',
+	LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS)
+env.PrependENVPath('PATH', rtconfig.EXEC_PATH)
+env.AppendUnique(CPPPATH = bsp_path)
+
+Export('env')
+Export('RTT_ROOT')
+Export('rtconfig')
+
+objs = SConscript(RTT_ROOT + '/libcpu/SConscript', variant_dir='build/libcpu', duplicate=0)
+objs = objs + SConscript(RTT_ROOT + '/src/SConscript', variant_dir='build/src', duplicate=0)
+objs = objs + SConscript(RTT_ROOT + '/bsp/lm3s/Libraries/SConscript', variant_dir='build/Libraries', duplicate=0)
+
+if rtconfig.RT_USING_MINILIBC:
+	objs = objs + SConscript(RTT_ROOT + '/libc/minilibc/SConscript', variant_dir='build/minilibc', duplicate=0)
+
+if rtconfig.RT_USING_FINSH:
+	objs = objs + SConscript(RTT_ROOT + '/finsh/SConscript', variant_dir='build/finsh', duplicate=0)
+
+if rtconfig.RT_USING_DFS:
+	objs = objs + SConscript(RTT_ROOT + '/filesystem/dfs/SConscript', variant_dir='build/filesystem', duplicate=0)
+
+if rtconfig.RT_USING_LWIP:
+	objs = objs + SConscript(RTT_ROOT + '/net/lwip/SConscript', variant_dir='build/net/lwip', duplicate=0)
+
+src_bsp = ['application.c', 'startup.c', 'board.c']
+
+if rtconfig.RT_USING_DFS:
+	src_drv = ['sdcard.c']
+
+if rtconfig.RT_USING_LWIP:
+	src_drv += ['luminaryif.c']
+
+objs = objs + env.Object(src_bsp + src_drv)
+
+TARGET = target + '.' + rtconfig.TARGET_EXT
+env.Program(TARGET, objs)
+env.AddPostAction(TARGET, rtconfig.POST_ACTION)

+ 116 - 0
bsp/lm3s/lm3s_rom.ld

@@ -0,0 +1,116 @@
+/*
+ * linker script for LM3S with GNU ld
+ * yi.qiu 2009-12-26 modified from Bernard's stm32 version
+ */
+
+/* Program Entry, set to mark it as "used" and avoid gc */
+MEMORY
+{
+	CODE (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000
+	DATA (rw) : ORIGIN = 0x20000000, LENGTH = 0x00010000
+}
+ENTRY(ResetISR)
+
+SECTIONS
+{
+	.text :
+	{
+	. = ALIGN(4);
+	KEEP(*(.isr_vector))            /* Startup code */
+	. = ALIGN(4);
+	*(.text)						/* remaining code */
+	*(.text.*)						/* remaining code */
+	*(.rodata)						/* read-only data (constants) */
+	*(.rodata*)
+	*(.glue_7)
+	*(.glue_7t)
+
+	/* section information for finsh shell */
+	. = ALIGN(4);
+	__fsymtab_start = .;
+	KEEP(*(FSymTab))
+	__fsymtab_end = .;
+	. = ALIGN(4);
+	__vsymtab_start = .;
+	KEEP(*(VSymTab))
+	__vsymtab_end = .;
+	. = ALIGN(4);
+
+	. = ALIGN(4);
+	_etext = .;
+
+	/* This is used by the startup in order to initialize the .data secion */
+	_sidata = _etext;
+	} > CODE = 0
+
+	/* .data section which is used for initialized data */
+
+	.data : AT (_sidata)
+	{
+	. = ALIGN(4);
+	/* This is used by the startup in order to initialize the .data secion */
+	_sdata = . ;
+
+	*(.data)
+	*(.data.*)
+
+	. = ALIGN(4);
+	/* This is used by the startup in order to initialize the .data secion */
+	_edata = . ;
+	} >DATA
+
+	__bss_start = .;
+	.bss :
+	{
+	. = ALIGN(4);
+	/* This is used by the startup in order to initialize the .bss secion */
+	_sbss = .;
+
+	*(.bss)
+	*(COMMON)
+
+	. = ALIGN(4);
+	/* This is used by the startup in order to initialize the .bss secion */
+	_ebss = . ;
+	_estack = .;
+	
+	*(.bss.init)
+	} > DATA
+	__bss_end = .;
+
+	_end = .;
+
+	/* Stabs debugging sections.  */
+	.stab          0 : { *(.stab) }
+	.stabstr       0 : { *(.stabstr) }
+	.stab.excl     0 : { *(.stab.excl) }
+	.stab.exclstr  0 : { *(.stab.exclstr) }
+	.stab.index    0 : { *(.stab.index) }
+	.stab.indexstr 0 : { *(.stab.indexstr) }
+	.comment       0 : { *(.comment) }
+	/* DWARF debug sections.
+	 * Symbols in the DWARF debugging sections are relative to the beginning
+	 * of the section so we begin them at 0.  */
+	/* DWARF 1 */
+	.debug          0 : { *(.debug) }
+	.line           0 : { *(.line) }
+	/* GNU DWARF 1 extensions */
+	.debug_srcinfo  0 : { *(.debug_srcinfo) }
+	.debug_sfnames  0 : { *(.debug_sfnames) }
+	/* DWARF 1.1 and DWARF 2 */
+	.debug_aranges  0 : { *(.debug_aranges) }
+	.debug_pubnames 0 : { *(.debug_pubnames) }
+	/* DWARF 2 */
+	.debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
+	.debug_abbrev   0 : { *(.debug_abbrev) }
+	.debug_line     0 : { *(.debug_line) }
+	.debug_frame    0 : { *(.debug_frame) }
+	.debug_str      0 : { *(.debug_str) }
+	.debug_loc      0 : { *(.debug_loc) }
+	.debug_macinfo  0 : { *(.debug_macinfo) }
+	/* SGI/MIPS DWARF 2 extensions */
+	.debug_weaknames 0 : { *(.debug_weaknames) }
+	.debug_funcnames 0 : { *(.debug_funcnames) }
+	.debug_typenames 0 : { *(.debug_typenames) }
+	.debug_varnames  0 : { *(.debug_varnames) }
+}

+ 102 - 0
bsp/lm3s/rtconfig.py

@@ -0,0 +1,102 @@
+# component options
+# finsh shell option
+RT_USING_FINSH = True
+
+# device file system options
+RT_USING_DFS = True
+RT_USING_DFS_EFSL = True
+RT_USING_DFS_ELMFAT = False
+RT_USING_DFS_YAFFS2 = False
+
+# lwip options
+RT_USING_LWIP = True
+
+# rtgui options
+RT_USING_RTGUI = False
+
+# toolchains options
+ARCH='arm'
+CPU='lm3s'
+#PLATFORM = 'gcc'
+#EXEC_PATH = 'E:/Program Files/CodeSourcery/Sourcery G++ Lite/bin'
+PLATFORM = 'armcc'
+EXEC_PATH = 'E:/Keil'
+#PLATFORM = 'iar'
+#EXEC_PATH = 'E:/Program Files/IAR Systems/Embedded Workbench 5.4/'
+BUILD = 'debug'
+
+if PLATFORM == 'gcc':
+    # toolchains
+    PREFIX = 'arm-none-eabi-'
+    CC = PREFIX + 'gcc'
+    AS = PREFIX + 'gcc'
+    AR = PREFIX + 'ar'
+    LINK = PREFIX + 'gcc'
+    TARGET_EXT = 'axf'
+    SIZE = PREFIX + 'size'
+    OBJDUMP = PREFIX + 'objdump'
+    OBJCPY = PREFIX + 'objcopy'
+
+    DEVICE = ' -mcpu=cortex-m3 -mthumb'
+    CFLAGS = DEVICE + ' -Dsourcerygxx' + ' -DRT_USING_MINILIBC' 
+    AFLAGS = ' -c' + DEVICE + ' -x assembler-with-cpp'
+    LFLAGS = DEVICE + ' -Wl,--gc-sections,-Map=rtthread-lm3s.map,-cref,-u,ResetISR -T lm3s_rom.ld'
+
+    CPATH = ''
+    LPATH = ''
+
+    if BUILD == 'debug':
+        CFLAGS += ' -O0 -gdwarf-2'
+        AFLAGS += ' -gdwarf-2'
+    else:
+        CFLAGS += ' -O2'
+
+    RT_USING_MINILIBC = True
+    POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n'
+
+elif PLATFORM == 'armcc':
+    # toolchains
+    CC = 'armcc'
+    AS = 'armasm'
+    AR = 'armar'
+    LINK = 'armlink'
+    TARGET_EXT = 'axf'
+
+    DEVICE = ' --device DARMSTM'
+    CFLAGS = DEVICE + ' --apcs=interwork'
+    AFLAGS = DEVICE
+    LFLAGS = DEVICE + ' --info sizes --info totals --info unused --info veneers --list rtthread-stm32.map --scatter stm32_rom.sct'
+
+    CFLAGS += ' -I' + EXEC_PATH + '/ARM/RV31/INC'
+    LFLAGS += ' --libpath ' + EXEC_PATH + '/ARM/RV31/LIB'
+
+    EXEC_PATH += '/arm/bin40/'
+
+    if BUILD == 'debug':
+        CFLAGS += ' -g -O0'
+        AFLAGS += ' -g'
+    else:
+        CFLAGS += ' -O2'
+
+    RT_USING_MINILIBC = False
+    if RT_USING_FINSH:
+        LFLAGS += ' --keep __fsym_* --keep __vsym_*'
+    POST_ACTION = 'fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET'
+
+elif PLATFORM == 'iar':
+    # toolchains
+    CC = 'iccarm'
+    AS = 'iasmarm'
+    AR = 'iarchive'
+    LINK = 'ilinkarm'
+    TARGET_EXT = 'out'
+
+    DEVICE = ' --cpu DARMSTM --thumb'
+
+    CFLAGS = ''
+    AFLAGS = ''
+    LFLAGS = ' --config stm32f10x_flash.icf'
+
+    EXEC_PATH += '/arm/bin/'
+    RT_USING_MINILIBC = False
+    POST_ACTION = ''