# Copyright (C) Ivan Kravets # See LICENSE for details. """ Base for Atmel AVR series of microcontrollers """ from SCons.Script import Builder, DefaultEnvironment env = DefaultEnvironment() env.Replace( AR="avr-ar", AS="avr-as", CC="avr-gcc", CXX="avr-g++", OBJCOPY="avr-objcopy", RANLIB="avr-ranlib", SIZETOOL="avr-size", ARFLAGS=["rcs"], ASPPFLAGS=["-x", "assembler-with-cpp"], CPPFLAGS=[ "-g", # include debugging info (so errors include line numbers) "-Os", # optimize for size "-Wall", # show warnings "-ffunction-sections", # place each function in its own section "-fdata-sections", "-MMD", # output dependency info "-mmcu=$BOARD_MCU" ], CPPDEFINES=[ "F_CPU=$BOARD_F_CPU" ], CXXFLAGS=[ "-fno-exceptions", "-fno-threadsafe-statics" ], LINKFLAGS=[ "-Os", "-mmcu=$BOARD_MCU", "-Wl,--gc-sections" ], SIZEPRINTCMD='"$SIZETOOL" --mcu=$BOARD_MCU -C -d $SOURCES' ) if "UPLOAD_SPEED" in env: env.Append(UPLOADERFLAGS=["-b", "$UPLOAD_SPEED"]) if env.subst("$UPLOAD_PROTOCOL") != "usbtiny": env.Append(UPLOADERFLAGS=["-P", "$UPLOAD_PORT"]) env.Append( BUILDERS=dict( ElfToEep=Builder( action=" ".join([ "$OBJCOPY", "-O", "ihex", "-j", ".eeprom", '--set-section-flags=.eeprom="alloc,load"', "--no-change-warnings", "--change-section-lma", ".eeprom=0", "$SOURCES", "$TARGET"]), suffix=".eep" ), ElfToHex=Builder( action=" ".join([ "$OBJCOPY", "-O", "ihex", "-R", ".eeprom", "$SOURCES", "$TARGET"]), suffix=".hex" ) ) )