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)