RN rnmake  3.0.0
Arch.atmega32uc3.mk
Go to the documentation of this file.
1 ################################################################################
2 #
3 # Arch/Arch.atmega32uc3.mk
4 #
5 ifdef RNMAKE_DOXY
6 /*!
7 \file
8 
9 \brief RoadNarrows Make System architecture makefile.
10 
11 Make file for the Atmel 32-bit AVR UC3 MCU devices.
12 
13 \par Architecture:
14 Atmel ATmega32uc3 Microcontroller
15 
16 \par Build Host:
17 Cross-Compiler
18 
19 \par Tool-Chain:
20 avr32-*
21 
22 \par Usage:
23 make arch=atmega32uc3 [mcu=device] <rnmake-target>\n
24  micro-contoller unit default (part number): uc3a1512
25 
26 \pkgsynopsis
27 RN Make System
28 
29 \pkgfile{Arch/Arch.atmega32uc3.mk}
30 
31 \pkgauthor{Robin Knight,robin.knight@roadnarrows.com}
32 
33 \pkgcopyright{2011-2018,RoadNarrows LLC,http://www.roadnarrows.com}
34 
35 \license{MIT}
36 
37 \EulaBegin
38 \EulaEnd
39 
40 \cond RNMAKE_DOXY
41  */
42 endif
43 #
44 ################################################################################
45 
46 # Prevent mutliple inclusion
47 _ARCH_ATMEGA32UC3_MK = 1
48 
49 # This architecture (required)
50 RNMAKE_ARCH = atmega32uc3
51 RNMAKE_ARCH_FQNAME = atmega32uc3-mcu
52 
53 # Micro-Controller Unit
54 mcu ?= uc3a1512
55 MCU = $(mcu)
56 
57 # Output format. One of: srec, ihex, binary
58 # Default is ihex. Override in including make file if necessary.
59 FORMAT ?= ihex
60 
61 # RDK TODO map fuses
62 # Device High Fuse Byte
63 # Override in including make file if necessary.
64 #
65 # Field Bit Description Default
66 # ----- --- ----------- -------
67 # OCDEN 7 Enable OCD 1 (unprogrammed, OCD disabled)
68 # JTAGEN 6 Enable JTAG 0 (programmed, JTAG enabled)
69 # SPIEN 5 Enable SPI Serial Program 0 (programmed, SPI prog. enabled)
70 # and data Downloading
71 # CKOPT 4 Oscillator options 1 (unprogrammed)
72 # EESAVE 3 EEPROM memory is preserved 1 (unprogrammed, EEPROM not preserved)
73 # through the Chip Erase
74 # BOOTSZ1 2 Select Boot Size 0 (programmed)
75 # BOOTSZ0 1 Select Boot Size 0 (programmed)
76 # BOOTRST 0 Select reset vector 1 (unprogrammed)
77 FUSE_HIGH ?= 0x99
78 
79 # RDK TODO map fuses
80 # Device Low Fuse Byte
81 # Override in including make file if necessary.
82 #
83 # Field Bit Description Default
84 # ----- --- ----------- -------
85 # BODLEVEL 7 Brown-out Detector trigger 1 (unprogrammed)
86 # level
87 # BODEN 6 Brown-out Detector enable 1 (unprogrammed, BOD disabled)
88 # SUT1 5 Select start-up time 1 (unprogrammed)
89 # SUT0 4 Select start-up time 0 (programmed)
90 # CKSEL3 3 Select Clock source 0 (programmed)
91 # CKSEL2 2 Select Clock source 0 (programmed)
92 # CKSEL1 1 Select Clock source 0 (programmed)
93 # CKSEL0 0 Select Clock source 0 (unprogrammed)
94 FUSE_LOW ?= 0xE1
95 
96 
97 #------------------------------------------------------------------------------
98 # Tool Chain
99 #------------------------------------------------------------------------------
100 
101 # Cross compiler tool chain prefix
102 CROSS_COMPILE = avr32-
103 
104 # Build Support Commands
105 AR = $(CROSS_COMPILE)ar
106 RANLIB = $(CROSS_COMPILE)ranlib
107 STRIP_LIB = $(CROSS_COMPILE)strip --strip-debug
108 STRIP_EXE = $(CROSS_COMPILE)strip --strip-all
109 OBJCOPY = $(CROSS_COMPILE)objcopy
110 OBJDUMP = $(CROSS_COMPILE)objdump
111 SIZE = $(CROSS_COMPILE)size
112 NM = $(CROSS_COMPILE)nm
113 
114 
115 #------------------------------------------------------------------------------
116 # C Preprocessor Options
117 #------------------------------------------------------------------------------
118 RNMAKE_ARCH_INCDIRS = /opt/avr32/include
119 RNMAKE_ARCH_CPPFLAGS =
120 
121 #------------------------------------------------------------------------------
122 # Assembler and Options
123 #------------------------------------------------------------------------------
124 #AS = $(CROSS_COMPILE)as
125 AS = $(CC)
126 
127 # Atmel device
128 ASFLAGS_MCU = -mpart=$(MCU)
129 
130 # Debugging format.
131 # -gstabs: Have the assembler create line number information; note that
132 # for use in COFF files, additional information about filenames
133 # and function names needs to be present in the assembler source
134 # files -- see avr-libc docs [FIXME: not yet described there]
135 ASFLAGS_DEBUG = $(CFLAGS_DEBUG)
136 
137 # Pass to other subprocesses
138 # -x Use CPP
139 ASFLAGS_PASS = -x assembler-with-cpp
140 
141 # Listing
142 # -Wa,...: tell GCC to pass this to the assembler.
143 # -adlms: create listing
144 ASFLAGS_LISTING = -Wa,-adhlns=$(<:.S=.lst)
145 
146 # Assembler flags.
147 # -Wa,...: tell GCC to pass this to the assembler.
148 # -adlms: create listing
149 ARCH_ASFLAGS = $(ASFLAGS_MCU) \
150  $(ASFLAGS_DEBUG) \
151  $(ASFLAGS_PASS) \
152  $(ASFLAGS_LISTING)
153 
154 
155 #------------------------------------------------------------------------------
156 # C Compiler and Options
157 #------------------------------------------------------------------------------
158 CC = $(CROSS_COMPILE)gcc
159 
160 # Atmel device
161 CFLAGS_MCU = -mpart=$(MCU)
162 
163 # Compiler flags to generate dependency files.
164 # Not needed in rnmake system.
165 # -Wp pass comma-separated options to cpp
166 # -M build dependency rule for object file
167 # -MP add .PHONY to each rule for object file
168 # -MT set output object to next argument
169 # -MF depencency rule output in file in next argument
170 #CFLAGS_GENDEPFLAGS = -Wp,-M,-MP,-MT,$(*F).o,-MF,.dep/$(@F).d
171 
172 # Optimization level, can be [0, 1, 2, 3, s].
173 # 0 = turn off optimization. s = optimize for size.
174 # (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
175 CFLAGS_OPTIMIZE_LEVEL = -O1
176 
177 # Debugging format.
178 # Native formats for AVR-GCC's -g are stabs [default], or dwarf-2.
179 # AVR (extended) COFF requires stabs, plus an avr-objcopy run.
180 #CFLAGS_DEBUG = -gstabs
181 CFLAGS_DEBUG = -gdwarf-2
182 
183 # Compiler flag to set the C Standard level.
184 # c89 - "ANSI" C
185 # gnu89 - c89 plus GCC extensions
186 # c99 - ISO C99 standard (not yet fully implemented)
187 # gnu99 - c99 plus GCC extensions
188 CFLAGS_CSTANDARD = -std=gnu99
189 
190 # Optimizations
191 # characters are unsigned
192 # bitfields are unsigned
193 # pack structure members with no holes
194 # smallest enum posible
195 CFLAGS_OPTIMIZES = -funsigned-char \
196  -funsigned-bitfields \
197  -fpack-struct \
198  -fshort-enums
199 
200 # Warnings
201 # All normal warnings
202 # Warn on strict prototypes
203 CFLAGS_WARNING = -Wall -Wstrict-prototypes
204 
205 # Listing
206 # -Wa,...: tell GCC to pass this to the assembler.
207 # -adlms: create listing
208 CFLAGS_LISTING = -Wa,-adhlns=$(<:.c=.lst)
209 
210 CFLAGS_CPP_ONLY = -E
211 CFLAGS_DEPS_ONLY = -M
212 
213 RNMAKE_ARCH_CFLAGS = $(CFLAGS_MCU) \
214  $(CFLAGS_DEBUG) \
215  $(CFLAGS_OPTIMIZE_LEVEL) \
216  $(CFLAGS_OPTIMIZES) \
217  $(CFLAGS_WARNING) \
218  $(CFLAGS_LISTING) \
219  $(CFLAGS_CSTANDARD) \
220  $(CFLAGS_GENDEPFLAGS)
221 
222 # Make AS/C/CXX Dependencies Command
223 RNMAKE_MAKEDEPS = $(CC) $(CFLAGS_DEPS_ONLY)
224 
225 
226 #------------------------------------------------------------------------------
227 # C++ Compiler and Options
228 #------------------------------------------------------------------------------
229 CXX = $(CROSS_COMPILE)g++
230 CXXFLAGS_CPP_ONLY = -E
231 CXXFLAGS_DEPS_ONLY = -M
232 
233 RNMAKE_ARCH_CXXFLAGS = $(CFLAGS_DEBUG) \
234  $(CFLAGS_OPTIMIZE_LEVEL) \
235  $(CFLAGS_OPTIMIZES) \
236  $(CFLAGS_WARNING) \
237  $(CFLAGS_OTHER) \
238  $(CFLAGS_CSTANDARD)
239 
240 
241 #------------------------------------------------------------------------------
242 # Linker and Options
243 #------------------------------------------------------------------------------
244 LD = $(CROSS_COMPILE)ld
245 LD_CC = $(LD)
246 LD_CXX = $(LD)
247 
248 # External memory options
249 #
250 # 64 KB of external RAM, starting after internal RAM (ATmega128!),
251 # used for variables (.data/.bss) and heap (malloc()).
252 #ARCH_LDFLAGS_EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff
253 #
254 # 64 KB of external RAM, starting after internal RAM (ATmega128!),
255 # only used for heap (malloc()).
256 #ARCH_LDFLAGS_EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
257 
258 ARCH_LDFLAGS_EXTMEMOPTS =
259 
260 # Linker flags.
261 # -Wl,...: tell GCC to pass this to linker.
262 # -Map: create map file
263 # --cref: add cross reference to map file
264 #ARCH_LDFLAGS_LD = -Wl,-Map=$(TARGET).map,--cref
265 
266 ARCH_LDFLAGS = $(ARCH_LDFLAGS_LD) \
267  $(ARCH_LDFLAGS_EXTMEMOPTS)
268 ARCH_LD_LIBPATHS = -L/opt/avr32/lib
269 ARCH_LD_LIBS =
270 
271 
272 #------------------------------------------------------------------------------
273 # Static Library Archiver and Options
274 #------------------------------------------------------------------------------
275 STLIB_LD = ${AR} cr
276 STLIB_PREFIX = lib
277 STLIB_SUFFIX = .a
278 
279 
280 #------------------------------------------------------------------------------
281 # Other Useful Flags, Etc.
282 #------------------------------------------------------------------------------
283 # Minimalistic printf version
284 PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
285 
286 # Floating point printf version (requires MATH_LIB = -lm below)
287 PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
288 
289 PRINTF_LIB =
290 
291 # Minimalistic scanf version
292 SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
293 
294 # Floating point + %[ scanf version (requires MATH_LIB = -lm below)
295 SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
296 
297 SCANF_LIB =
298 
299 MATH_LIB = -lm
300 
301 
302 ifdef RNMAKE_DOXY
303 /*! \endcond RNMAKE_DOXY */
304 endif