You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

205 lines
5.3 KiB

import os
# toolchains options
ARCH = "arm"
CPU = "cortex-m3"
CROSS_TOOL = "gcc"
# bsp lib config
BSP_LIBRARY_TYPE = None
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"
if os.getenv("RTT_EXEC_PATH"):
EXEC_PATH = os.getenv("RTT_EXEC_PATH")
else:
EXEC_PATH = os.path.normpath(
"C:/Users/liuya/scoop/apps/gcc-arm-none-eabi/current/bin"
)
elif CROSS_TOOL == "keil":
PLATFORM = "armcc"
EXEC_PATH = r"C:/Keil_v5"
elif CROSS_TOOL == "iar":
PLATFORM = "iccarm"
EXEC_PATH = r"C:/Program Files (x86)/IAR Systems/Embedded Workbench 8.3"
if os.getenv("RTT_EXEC_PATH"):
EXEC_PATH = os.getenv("RTT_EXEC_PATH")
BUILD = "release"
if PLATFORM == "gcc":
# toolchains
PREFIX = "arm-none-eabi-"
CC = PREFIX + "gcc"
AS = PREFIX + "gcc"
AR = PREFIX + "ar"
CXX = PREFIX + "g++"
LINK = PREFIX + "gcc"
TARGET_EXT = "elf"
SIZE = PREFIX + "size"
OBJDUMP = PREFIX + "objdump"
OBJCPY = PREFIX + "objcopy"
DEVICE = " -mcpu=cortex-m3 -mthumb -ffunction-sections -fdata-sections"
CFLAGS = (
DEVICE
+ " -g -Wall -Wno-unused-function "
+ " --sysroot="
+ str(EXEC_PATH)
+ "/../arm-none-eabi"
)
AFLAGS = " -c" + DEVICE + " -x assembler-with-cpp -Wa,-mimplicit-it=thumb "
LFLAGS = (
DEVICE
+ " -Wl,--gc-sections,-Map=rt-thread.map,-cref,-u,Reset_Handler -T board/linker_scripts/link.lds"
)
CPATH = ""
LPATH = ""
if BUILD == "debug":
CFLAGS += " -O0 -gdwarf-2 -g"
AFLAGS += " -gdwarf-2"
else:
CFLAGS += " -O2"
CXXFLAGS = CFLAGS
POST_ACTION = OBJCPY + " -O binary $TARGET rtthread.bin\n" + SIZE + " $TARGET \n"
elif PLATFORM == "armcc":
# toolchains
CC = "armcc"
CXX = "armcc"
AS = "armasm"
AR = "armar"
LINK = "armlink"
TARGET_EXT = "axf"
DEVICE = " --cpu Cortex-M3 "
CFLAGS = "-c " + DEVICE + " --apcs=interwork --c99"
AFLAGS = DEVICE + " --apcs=interwork "
LFLAGS = (
DEVICE
+ ' --scatter "board\linker_scripts\link.sct" --info sizes --info totals --info unused --info veneers --list rt-thread.map --strict'
)
CFLAGS += " -I" + EXEC_PATH + "/ARM/ARMCC/include"
LFLAGS += " --libpath=" + EXEC_PATH + "/ARM/ARMCC/lib"
CFLAGS += " -D__MICROLIB "
AFLAGS += ' --pd "__MICROLIB SETA 1" '
LFLAGS += " --library_type=microlib "
EXEC_PATH += "/ARM/ARMCC/bin/"
if BUILD == "debug":
CFLAGS += " -g -O0"
AFLAGS += " -g"
else:
CFLAGS += " -O2"
CXXFLAGS = CFLAGS
CFLAGS += " -std=c99"
POST_ACTION = "fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET"
elif PLATFORM == "armclang":
# toolchains
CC = "armclang"
CXX = "armclang"
AS = "armasm"
AR = "armar"
LINK = "armlink"
TARGET_EXT = "axf"
DEVICE = " --cpu Cortex-M1.fp "
CFLAGS = " --target=arm-arm-none-eabi -mcpu=cortex-m0 "
CFLAGS += " -mcpu=cortex-m0 "
CFLAGS += " -c -fno-rtti -funsigned-char -fshort-enums -fshort-wchar "
CFLAGS += " -gdwarf-3 -ffunction-sections "
AFLAGS = DEVICE + " --apcs=interwork "
LFLAGS = DEVICE + " --info sizes --info totals --info unused --info veneers "
LFLAGS += " --list rt-thread.map "
LFLAGS += r' --strict --scatter "board\linker_scripts\link.sct" '
CFLAGS += " -I" + EXEC_PATH + "/ARM/ARMCLANG/include"
LFLAGS += " --libpath=" + EXEC_PATH + "/ARM/ARMCLANG/lib"
EXEC_PATH += "/ARM/ARMCLANG/bin/"
if BUILD == "debug":
CFLAGS += " -g -O1" # armclang recommend
AFLAGS += " -g"
else:
CFLAGS += " -O2"
CXXFLAGS = CFLAGS
CFLAGS += " -std=c99"
POST_ACTION = "fromelf --bin $TARGET --output rtthread.bin \nfromelf -z $TARGET"
elif PLATFORM == "iccarm":
# toolchains
CC = "iccarm"
CXX = "iccarm"
AS = "iasmarm"
AR = "iarchive"
LINK = "ilinkarm"
TARGET_EXT = "out"
DEVICE = "-Dewarm"
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 += " --endian=little"
CFLAGS += " --cpu=Cortex-M3"
CFLAGS += " -e"
CFLAGS += " --fpu=None"
CFLAGS += ' --dlib_config "' + EXEC_PATH + '/arm/INC/c/DLib_Config_Normal.h"'
CFLAGS += " --silent"
AFLAGS = DEVICE
AFLAGS += " -s+"
AFLAGS += " -w+"
AFLAGS += " -r"
AFLAGS += " --cpu Cortex-M3"
AFLAGS += " --fpu None"
AFLAGS += " -S"
if BUILD == "debug":
CFLAGS += " --debug"
CFLAGS += " -On"
else:
CFLAGS += " -Oh"
LFLAGS = ' --config "board/linker_scripts/link.icf"'
LFLAGS += " --entry __iar_program_start"
CXXFLAGS = CFLAGS
EXEC_PATH = EXEC_PATH + "/arm/bin/"
POST_ACTION = "ielftool --bin $TARGET rtthread.bin"
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)