# Copyright 2014-2015 Ivan Kravets # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """ 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", "-mmcu=$BOARD_MCU" ], CFLAGS=["-std=gnu11"], CXXFLAGS=[ "-std=gnu++11", "-fno-exceptions", "-fno-threadsafe-statics" ], CPPDEFINES=["F_CPU=$BOARD_F_CPU"], LINKFLAGS=[ "-Os", "-mmcu=$BOARD_MCU", "-Wl,--gc-sections,--relax" ], LIBS=["m"], SIZEPRINTCMD='"$SIZETOOL" --mcu=$BOARD_MCU -C -d $SOURCES', PROGNAME="firmware", PROGSUFFIX=".elf" ) 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" ) ) )