# AVR-GCC 8.3.0 for Windows 32 and 64 bit

This is where I’ll be uploading builds of AVR-GCC for Windows 32 and 64 bit, which will also include Binutils, AVR-LibC, AVRDUDE and Make. I’ll be trying to keep the builds up to date with the latest tool releases when I can.

The binaries are built from source on an Arch Linux virtual machine with MinGW, apart from AVRDUDE where the pre-built binaries are obtained from the official download area. Both 32 bit and 64 bit Windows binaries are provided. There’s probably no benefit from using the 64 bit stuff, but all the cool kids are doing it so why not.
A bash script for building AVR-GCC, AVR-Binutils and AVR-LibC from source is also provided below, making it super easy to build these tools for yourself.

# Included tools

Tool Version
GCC 8.3.0
Binutils 2.32
AVR-LibC 2.0.0
AVRDUDE 6.3 (Not included in Linux release)
Make 4.2.1 (Not included in Linux release)

 LATEST avr-gcc-8.3.0-x64-mingw.zip (56.13 MB) AVG-GCC 8.3.0 Windows x64 (64 bit) Downloaded 646 times MD5: 43B7AAC7E7BAA0054E72EE81DFFC8C3D

 LATEST avr-gcc-8.3.0-x86-mingw.zip (53.96 MB) AVG-GCC 8.3.0 Windows x86 (32 bit) Downloaded 206 times MD5: 5C171253B2DA80277B36E9A1461B7840

 LATEST avr-gcc-8.3.0-x64-linux.tar.bz2 (43.44 MB) AVG-GCC 8.3.0 Linux x64 Downloaded 63 times MD5: 588D0BEA4C5D21A1A06AA17625684417

Upgrading the Arduino IDE is pretty easy, though there could be some incompatibilities with certain libraries. I’ve only tested this with Arduino 1.8.2.

2. Navigate to your Arduino IDE folder
3. Go to hardware/tools
4. Move the avr folder somewhere else, like to your desktop (renaming the folder won’t work, Arduino has some auto-detect thing which sometimes gets confused)
5. Move the extracted folder from earlier to the tools folder and rename it to avr
6. Copy the builtin_tools_versions.txt file and etc folder from the old avr folder to the new one

None

# Build Script

This build script will install the required packages, create directories and build the tools from source. This should work on Debian 8, Ubuntu 16.04, CentOS 7 and Arch.

Building takes about 30 minutes on an Arch Linux virtual machine with 4 cores i5 2500K @ 4GHz and 2GB RAM.


function togglevisible(id)
{
var e = document.getElementById(id);
e.style.display = e.style.display == 'block' ? 'none' : 'block';
}


#### 2 pings

• Fridolin on May 2, 2016 at 10:55 pm

Hi,

compiling with

-xc *.c

results in

avr-gcc: error: *.c: Invalid argument

1. Hey Fridolin, I also saw your post on mikrocontroller.net about it being available in previous versions, but none of the GCC versions I tried (4.7.2, 4.9.2, 5.3.0) accept *.c as a valid argument :/

• Fridolin on May 2, 2016 at 11:16 pm

Please try an official version, for example the one included in Atmel Studio. It works ok with -xc *.c

-xc *.c is needed to be able to use -flto (which optimizes the code much better than when compiling the files one-by-one).

• Fridolin on May 2, 2016 at 11:26 pm

This is what an official Atmel Studio

avr-gcc -v

outputs (compile parameters). Maybe in your build something is missing?

Using built-in specs.
COLLECT_GCC=C:\Program Files (x86)\Atmel\Atmel Toolchain\AVR8 GCC\Native\3.4.1061\avr8-gnu-toolchain\bin\avr-gcc.exe
COLLECT_LTO_WRAPPER=c:/program\ files\ (x86)/atmel/atmel\ toolchain/avr8\ gcc/native/3.4.1061/avr8-gnu-toolchain/bin/../
libexec/gcc/avr/4.8.1/lto-wrapper.exe
Target: avr
Configured with: /home/jenkins/workspace/avr8-gnu-toolchain/src/gcc/configure LDFLAGS=-L/home/jenkins/workspace/avr8-gnu
-toolchain/avr8-gnu-toolchain-win32_x86/lib CPPFLAGS= –target=avr –host=i686-pc-mingw32 –build=x86_64-pc-linux-gnu —
prefix=/home/jenkins/workspace/avr8-gnu-toolchain/avr8-gnu-toolchain-win32_x86 –libdir=/home/jenkins/workspace/avr8-gnu
-toolchain/avr8-gnu-toolchain-win32_x86/lib –enable-languages=c,c++ –with-dwarf2 –enable-doc –disable-shared –disab
gnu-toolchain-win32_x86 –with-gmp=/home/jenkins/workspace/avr8-gnu-toolchain/avr8-gnu-toolchain-win32_x86 –with-mpc=/h
ome/jenkins/workspace/avr8-gnu-toolchain/avr8-gnu-toolchain-win32_x86 –enable-win32-registry=avrtoolchain –enable-fixe
d-point –with-pkgversion=AVR_8_bit_GNU_Toolchain_3.4.5_1522 –with-bugurl=http://www.atmel.com
gcc version 4.8.1 (AVR_8_bit_GNU_Toolchain_3.4.5_1522)

1. I have that same version of Atmel’s version of GCC, but mine still stays that *.c is invalid. [This] seems to say that you can specify all the files individually, during compile or after once the object files have been created.

2. Ah my bad, *.c does work, I didn’t have any .c files in the working directory! I’ll post an update in a bit…

3. Ok, I can’t seem to find anything obvious that I might have missed, so I’m not sure why *.c isn’t working on my 6.1.0 build. I guess a workaround for now would be specify each individual .c file -xc file1.c file2.c file3.c.

• Fridolin on May 3, 2016 at 5:28 pm

Do you know what’s strange? The order in which I specify all the .c files makes a difference in the binary size (that is also the case in the older versions).

• Fridolin on May 7, 2016 at 12:45 am

http://www.mikrocontroller.net/topic/396402?goto=4569504#4569522

Summary:

Default configuration of mingw-w64 misses wildcard support.

Two solutions:

You can recompile mingw-w64 from source with configure –enable-wildcard

or

Use Arch Linux. Their mingw-w64 has wildcard support enabled.

1. Ah thanks! I’ve rebuilt everything using Arch Linux, *.c now works, the download links have been updated 🙂

• Felix on May 3, 2016 at 11:48 am

1. LTO is enabled by default, so no need for any extra build options.

• Kshitij on May 17, 2016 at 6:51 am

Hello Zak,

This is a commendable effort. However, its missing AVR specific patches. For your next build, would you please apply the binutils-patches for avr and some avr-gcc specific updates, which are available at http://distribute.atmel.no/tools/opensource/Atmel-AVR-GNU-Toolchain// ? Off the top of my head, without the avr-size patch, the avr-size –mcu option will not work. There are also some fixes for ATtiny, iirc. Their GCC fixes do get merged upstream occasionally, but for a custom built toolchain, the binutils fixes do need to be looked into.

Either way, nice job.

1. Thanks for the link, though there seems to be a lot of patch failures for the latest GCC and things. I’ll have to go through them sometime, the few I looked at where because they’ve already been merged.

• Fridolin on September 23, 2016 at 10:04 am

Hi, have you tried compiling avr-gcc 6.2?

1. Oh! I didn’t know 6.2 was out, I’ll get it compiled sometime soon.

• Fridolin on April 16, 2017 at 7:41 pm

Any news?

6.3 has been out for quite some time now.

1. Oh, 7.1 is out now lol, I’ll probably get an updated download sorted this weekend.

• Stefan on October 12, 2016 at 12:08 pm

Where is make.exe?

1. You can download make [here]. Though, I think I’ll include it with future AVR-GCC builds.

• SigmaN on March 9, 2017 at 8:25 pm

AVR Toolchain GCC 6.3.0, binutils 2.28, avr-libc 2.0.0

Bug with string constant is FIXED.

Win32, Win64, Linux64, avr-libc in separate folders https://drive.google.com/file/d/0B7dMRxCEo4yhV283QVJUYlpBRW8/view?usp=sharing

Win32 Build ready for integration in Atmel Studio 7

• Willem on May 4, 2017 at 12:55 am

I got this to work with gcc 7.1.0.

* in your build script, the PREFIX_LIBC variable points to a different location than the rest of the tools. It should be the same.
* avrdude is missing in the build script. it also needs to be installed in the same prefix path.

Then, after building, and replacing the Arduino.app/Contents/Java/hardware/tools/avr directory, it almost works.
Except that i initially got this error when linking:

core/core.a: error adding symbols: Malformed archive

Somehow this is solved by changing the -std commandline option in platform,txt to: -std=gnu++1z.

The string bug mentioned seems to be solved.

I now use this shell script for switching: https://gist.github.com/nlitsme/04f33ec27cafd8678fddc66ecad9e828

PREFIX_LIBC is supposed to go to its own directory, so the contents can then be easily copied to the x86 and x64 builds.
I didn’t include avrdude in the build script as official pre-built windows binaries are readily available here, unlike GCC. The official binaries are the the ones I included in the download packages.

• Rob on May 24, 2017 at 11:46 pm

Hello,

Forgive me for being very stupid. I don’t know what AVR-GCC 7.1.0 for Windows 32 and 64 bit is. Is this software for the “N l Watch”?

1. Hey Rob, AVR-GCC is a set of tools used to compile source code (C and C++ code) into a format that can be loaded onto an AVR microcontroller, usually a .hex file. AVR-GCC isn’t specially made for the N|Watch, it can be used by any project that needs to compile some code for AVR.

• Henning on July 8, 2017 at 10:59 pm

Out of the box libwinpthread-1.dll is missing, it was present in the 6.1 release. Without it executing gcc fails.

Some kind of integrated coreutils would be really nice, I think.

1. Thanks for telling me about the missing dll! I’ve updated the downloads to include it now. I’ll have a think about including coreutils in the next release then.

• Theo on July 9, 2017 at 8:18 am

Great work! Thank you very much for these updated components!

Unfortunately, the package is still incomplete, I had to copy libwinpthread-1.dll to .\avr\libexec\gcc\avr\7.1.0\ as well.

• Henning on July 13, 2017 at 4:04 pm

Thank you very much!

• Wouter van Ooijen on March 3, 2018 at 10:05 am

Great work, it enables me to use modern C++ (C++17, concepts) for avr8 chips, both within Arduino and with my stand-alone makescripts.

But.. is anyone aware of a similar effort for Linux distro’s? All I can find is very old avr8-gcc versions.

1. Hey Wouter, I’ve just added a 7.3.0 release for Linux, see how it works for you.

• Alexander Kokushkin on September 6, 2018 at 4:53 pm

Hello, thank you! I tried 32bits build on Win7 and 64bits on Win10 running as Admin, with disabled antiviruses and using various Arduino folders compiling empty project but got this error:

c:\arduino-pr-beta1.9-build-80\hardware\tools\avr\bin../lib/gcc/avr/8.2.0/../../../../avr/bin/ar.exe: unable to rename ‘C:\Users\Support\AppData\Local\Temp\arduino_build_442983\core\core.a’; reason: File exists

Do you have any suggestions how to fix it? Thank you!

1. Hi Alex, I think this might be a bug with GCC 8. It looks like it has problems with adding new members to existing library archives. GCC 7.3.0 is the latest version that works, there’s a download for it at the bottom of the blog post, click on the ‘View History’ button.

• Henning on September 7, 2018 at 11:30 am

Thanks for your constant updates! You can work around the above core.a error by starting Arduino as admin and or disabling the virus scanner this sometimes helps. Using a portable version of Arduino or installing it into an unprivileged folder should work best. The problem seems to be widespread and not limited to GCC8. However after working around that I am met with “cc1.exe*: error: -fno-fat-lto-objects are supported only with linker plugin.” Arduino failed with GCC 8.1 with another error I did not investigate.

1. No problem! I still have the core.a error when running the portable version of Arduino from desktop as admin without any antivirus. With GCC 8.2 or 8.1 and binutils 2.31.1 I get the core.a rename error and with bintuils 2.30 I get a “file not recognized: file truncated” linker error. I think there might be some incompatibility with the AVR version of GCC 8 and binutils when dealing with library archives?

• Snek on September 24, 2018 at 12:52 pm

Had the same problem with latest ARM embedded toolchain. If you want to get LTO working properly you need to pass LTO plugin to ar. In boards.txt find ar flags and add –plugin=D:\path\to\toolchain\liblto_plugin-0.dll to it (plugin extension and path format depends on what OS you’re using).
I didn’t manage to pass the core.a problem with 8+ toolchain, but since you mentioned run as admin I’ll give it a try again. But still this problem has something to do with ar, just like LTO (since I was able to build without it).

• Shobai on September 11, 2018 at 9:53 pm

Thanks for doing this!

• Snoop05 on October 22, 2018 at 11:13 pm

Hi Zak, great job with MinGW builds. What about including avr-gdb (or at least as separate package)?

1. Hey Snoop, an avr-gdb build is something that I’ll be having a look into at some point, a few people have requested it already 🙂

• Thomas Zeisluft on January 2, 2019 at 4:40 pm

Thanks,!

I tried the 32 and 64 packages on windows from Atmel Studio 7.

avrsize reports 0% usage for all memory, and the CPU macro (rg __AVR_ATmega644P__) is not being defined.

Apart of that it just works so far.

Thomas

• apollo on February 20, 2019 at 10:49 am

Hi,
there is also an issue with your 7.3 package regarding the missing avrxmega3 lib!
means for attiny1616 gcc 8.c as well as 7.3 can’t be used – unfortunately!

Could you check and fix the issue with avrxmega3 lib?

many thanks, dk4ug

1. Hi Apollo, 8.2.0 has support for xmega3 devices so you might be able to just copy the xmega3 files from that to 7.3. However, AVR-libC doesn’t have xmega3 support so you’ll need to define all the register addresses and things yourself. The packs from here have some xmega3 stuff http://packs.download.atmel.com/ rename the .atpack to .zip.

• Drashna on February 27, 2019 at 10:55 pm

I think that AVR GCC 8.3 is out now. That should fix the issues with 8.2-8.1.
Would you mind releasing a new version?

1. Aaaaannd done 🙂 Yup, those library archive issues seem to have been fixed.

• Thomas on March 5, 2019 at 11:54 am

Thanks for the ongoing effort.
Works nicely, just the avr-size patch is still missing, so I use the old avr-size executable

1. Hi Thomas, no problem 🙂 It seems that using avr-objdump with the -Pmem-usage argument is the new way of getting memory usage % – https://www.avrfreaks.net/forum/where-does-avr-size-get-data-supported-devices

• Dave on March 14, 2019 at 4:52 am

Thanks for doing this great work in updating AVR support to 8.3! Microchip only includes 5.4.0 with Atmel Studio, and no support with MPLABX (unless Atmel Studio is installed, too.). Since I do all of my development work in MPLABX it’ll be nice to free up some gigabytes by getting rid of Studio 7.
I also read all of the comments posted and further commend you for the speed with which you post fixes. Far better than I’ve ever seen, especially considering how technical the work is when building gcc. Nice work!

• Drashna on March 20, 2019 at 4:02 am

Awesome, thank you so much!!

Would you be willing to release the same for ARM GCC?

1. Hi Drashna! There’s already a lot of work going into ARM GCC builds – https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads and https://github.com/gnu-mcu-eclipse/arm-none-eabi-gcc/releases/tag/v8.2.1-1.2 (the second link would be better as there is currently a bug with the official release and 64bit Windows https://bugs.launchpad.net/gcc-arm-embedded/+bug/1810274).

• Drashna on March 20, 2019 at 7:11 pm

However, the problem is, that I use LTO, and these builds error out when using LTO.

But I suppose I should just disable it for ARM, since there is plenty of room.

Either way, thanks for your work!

1. Theres some stuff about liblto_plugin in the second link, that might help!

2. Nevermind, I didn’t need to copy any dlls for LTO like in the link. Just make sure you don’t have any -g debug flags set. Though, I found that LTO increased program size by almost 1K on the project I tried it on.

1. […] tip to Zak Kemble for providing this single-package download for Windows 32/64 and a bash script file for building from source for GCC, Binutils, and […]

2. […] the help from: Zak’s Electronics Blog ~* and AVR LIBC user’s manual I have compilied Download from Dropbox: avr-linux-toolchain.tar.gz […]