May 23 2017

AVR-GCC 7.1.0 for Windows 32 and 64 bit

Here 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 binary was 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 7.1.0
Binutils 2.28
AVR-LibC 2.0.0
Make 4.2.1


avr-gcc-7.1.0-x64-mingw-r3.zip (50.8 MB)
AVG-GCC 7.1.0 Windows x64 (64 bit)
Downloaded 131 times
MD5: 9D72AA66D9E38A6FE5904DE44B8E348F

avr-gcc-7.1.0-x86-mingw-r3.zip (48.56 MB)
AVG-GCC 7.1.0 Windows x86 (32 bit)
Downloaded 47 times
MD5: 68E54333D4D97D57F8DDCB9FD3355924

Upgrading the Arduino IDE

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

  1. Download and extract one of the downloads above
  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
  7. Done! Open up the Arduino IDE, load up the Blink example, upload it to your Arduino and make sure the LED is blinking!

Known Issues

When building for Windows there seems to be a problem with INT8_MAX and some other things being undefined in /gcc/config/avr/avr.c. Adding ‘#include <stdint.h>’ doesn’t fix it, but manually defining the values does the trick. The build script below includes the fix in the fixGCCAVR() function.

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.


2 pings

Skip to comment form

  1. Fridolin


    compiling with

    -xc *.c

    results in

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

    1. Zak Kemble

      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 :/

  2. Fridolin

    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).

    1. Fridolin

      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/../
      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
      le-libada –disable-libssp –disable-nls –with-avrlibc=yes –with-mpfr=/home/jenkins/workspace/avr8-gnu-toolchain/avr8-
      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
      Thread model: single
      gcc version 4.8.1 (AVR_8_bit_GNU_Toolchain_3.4.5_1522)

      1. Zak Kemble

        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. Zak Kemble

        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. Zak Kemble

        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.

        1. Fridolin

          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).

        2. Fridolin



          Default configuration of mingw-w64 misses wildcard support.

          Two solutions:

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


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

          1. Zak Kemble

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

  3. Felix

    Have you tried to add “lto” to the list of languages so it reads: c,c++,lto? I read about that in this article: https://www.mikrocontroller.net/articles/AVR-GCC

    1. Zak Kemble

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

  4. Kshitij

    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. Zak Kemble

      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.

  5. Fridolin

    Hi, have you tried compiling avr-gcc 6.2?

    1. Zak Kemble

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

      1. Fridolin

        Any news?

        6.3 has been out for quite some time now.

        1. Zak Kemble

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

  6. Stefan

    Where is make.exe?

    1. Zak Kemble

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

  7. SigmaN

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

    Bug with string constant is FIXED.

    Real worjing LTO(add -flto to compiler AND linker)

    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
    View README inside zip

  8. Willem

    I got this to work with gcc 7.1.0.

    I had a few problems:
    * 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

    1. Zak Kemble

      Oh nice, I hadn’t realized GCC 7.1 was out already!
      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.

      I’ll have to see about getting the download updated to 7.1.

  9. Rob


    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. Zak Kemble

      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.

  10. Henning

    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. Zak Kemble

      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.

      1. Theo

        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.

        1. Zak Kemble

          Hah, I’ve updated the downloads again :p

          1. Henning

            Thank you very much!

  1. AVR-GCC, Binutils, AVR-LibC, & AVRDUDE in Single Package, for Windows or Linux #Arduino « Adafruit Industries – Makers, hackers, artists, designers and engineers!

    […] 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. AVR TOOLCHAIN based on: gcc 6.20 with libc 2.0.0 & binutils 2.27 » geeks24.eu

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

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Are you human? *