Subversion Repositories avr32-toolchain

Compare Revisions

Ignore whitespace Rev 2 → Rev 3

/vendor/Makefile
New file
0,0 → 1,599
# AVR32 Toolchain Makefile
#
# Copyright (C) 2011 by James Snyder <jbsnyder@fanplastic.org>
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
 
#### PRIMARY TOOLCHAIN VERSIONS #####
 
GCC_VERSION = 4.4.3
GDB_VERSION = 6.7.1
BINUTILS_VERSION = 2.20.1
NEWLIB_VERSION = 1.16.0
DFU_VERSION = 0.5.4
AVR_PATCH_REV = 3.2.3.261
AVR_HEADER_REV = 3.2.3.258
 
 
#### PATHS AND ENVIRONMENT VARIABLES #####
 
SHELL = /bin/bash
TARGET = avr32
 
TODAY = $(shell date "+%Y%m%d")
GIT_REV = $(shell git rev-parse --verify HEAD --short)
 
ifeq ($(strip $(GIT_REV)),)
PREFIX ?= $(HOME)/avr32-tools-$(TODAY)
else
PREFIX ?= $(HOME)/avr32-tools-$(GIT_REV)
endif
 
ifeq ($(UNAME), Linux)
PROCS ?= $(shell grep -c ^processor /proc/cpuinfo)
else ifeq ($(UNAME), Darwin)
PROCS ?= $(shell sysctl hw.ncpu | awk '{print $$2}')
else
PROCS ?= 2
endif
 
SUPP_PREFIX = $(CURDIR)/supp
PATH := ${PREFIX}/bin:${SUPP_PREFIX}/bin:${PATH}
AUTOCONF = $(SUPP_PREFIX)/bin/autoconf
AUTOMAKE = $(SUPP_PREFIX)/bin/automake
 
BUG_URL = https://github.com/jsnyder/avr32-toolchain
PKG_VERSION = "AVR 32 bit GNU Toolchain-$(AVR_PATCH_REV)-$(GIT_REV)"
 
 
#### PRIMARY TOOLCHAIN URLS #####
 
GCC_ARCHIVE = gcc-$(GCC_VERSION).tar.bz2
GCC_URL = http://mirror.anl.gov/pub/gnu/gcc/gcc-$(GCC_VERSION)/$(GCC_ARCHIVE)
GCC_MD5 = fe1ca818fc6d2caeffc9051fe67ff103
 
GDB_ARCHIVE = gdb-$(GDB_VERSION).tar.bz2
GDB_URL = http://mirror.anl.gov/pub/gnu/gdb/$(GDB_ARCHIVE)
GDB_MD5 = 30a6bf36eded4ae5a152d7d71b86dc14
 
BINUTILS_ARCHIVE = binutils-$(BINUTILS_VERSION).tar.bz2
BINUTILS_URL = http://mirror.anl.gov/pub/gnu/binutils/$(BINUTILS_ARCHIVE)
BINUTILS_MD5 = 2b9dc8f2b7dbd5ec5992c6e29de0b764
 
NEWLIB_ARCHIVE = newlib-$(NEWLIB_VERSION).tar.gz
NEWLIB_URL = ftp://sources.redhat.com/pub/newlib/$(NEWLIB_ARCHIVE)
NEWLIB_MD5 = bf8f1f9e3ca83d732c00a79a6ef29bc4
 
AVR32PATCHES_ARCHIVE = avr32-gnu-toolchain-$(AVR_PATCH_REV)-source.zip
AVR32PATCHES_URL=http://www.atmel.com/dyn/resources/prod_documents/$(AVR32PATCHES_ARCHIVE)
AVR32PATCHES_MD5 = 69a03828a328068f25d457cfd8341857
 
AVR32HEADERS_ARCHIVE = avr32-headers-$(AVR_HEADER_REV).zip
AVR32HEADERS_URL=http://www.atmel.com/dyn/resources/prod_documents/$(AVR32HEADERS_ARCHIVE)
AVR32HEADERS_MD5 = 3293d70a46e460d342e1f939b8e0d228
 
DFU_ARCHIVE = dfu-programmer-$(DFU_VERSION).tar.gz
DFU_URL = http://surfnet.dl.sourceforge.net/project/dfu-programmer/dfu-programmer/$(DFU_VERSION)/$(DFU_ARCHIVE)
DFU_MD5 = 707dcd0f957a74e92456ea6919faa772
 
 
##### SUPPORT TOOLS VERSIONS / URLS ######
AUTOCONF_VERSION = 2.64
AUTOMAKE_VERSION = 1.11
MPC_VERSION = 0.8.1
 
AUTOCONF_ARCHIVE = autoconf-$(AUTOCONF_VERSION).tar.bz2
AUTOCONF_URL = http://mirror.anl.gov/pub/gnu/autoconf/$(AUTOCONF_ARCHIVE)
AUTOCONF_MD5 = ef400d672005e0be21e0d20648169074
 
AUTOMAKE_ARCHIVE = automake-$(AUTOMAKE_VERSION).tar.bz2
AUTOMAKE_URL = http://mirror.anl.gov/pub/gnu/automake/$(AUTOMAKE_ARCHIVE)
AUTOMAKE_MD5 = 4db4efe027e26b33930a7e151de19d0f
 
 
 
.PHONY: install-tools
install-tools: stamps/install-binutils stamps/install-final-gcc stamps/install-newlib stamps/install-headers
 
.PHONY: install-cross
install-cross: install-tools install-note
 
 
.PHONY: sudomode
sudomode:
ifneq ($(USER),root)
@echo Please run this target with sudo!
@echo e.g.: sudo make targetname
@exit 1
endif
 
 
.PHONY: tst
tst:
@echo $(PREFIX)
 
.PHONY: install-note
install-note: install-tools
@echo
@echo ====== INSTALLATION NOTE ======
@echo Your tools have now been installed at the following prefix:
@echo $(PREFIX)
@echo
@echo Please be sure to add something similar to the following to your .bash_profile, .zshrc, etc:
@echo export PATH=$(PREFIX)/bin:'$$PATH'
 
 
.PHONY: download-gdb
downloads/$(GDB_ARCHIVE) download-gdb:
[ -d downloads ] || mkdir downloads ;
cd downloads && curl -LO $(GDB_URL)
 
 
 
 
.PHONY: install-supp-tools
install-supp-tools stamps/install-supp-tools: install-autoconf install-automake
[ -d stamps ] || mkdir stamps ;
touch stamps/install-supp-tools;
 
 
############# SUPP: AUTOCONF ############
 
.PHONY: download-autoconf
downloads/$(AUTOCONF_ARCHIVE) download-autoconf:
[ -d downloads ] || mkdir downloads ;
cd downloads && curl -LO $(AUTOCONF_URL)
 
.PHONY: extract-autoconf
extract-autoconf stamps/extract-autoconf: downloads/$(AUTOCONF_ARCHIVE)
@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
[ "$$t1" = "$(AUTOCONF_MD5)" ] || \
( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
tar -jxf $< ;
[ -d stamps ] || mkdir stamps ;
touch stamps/extract-autoconf;
 
.PHONY: build-autoconf
build-autoconf stamps/build-autoconf: stamps/extract-autoconf
mkdir -p build/autoconf && cd build/autoconf && \
../../autoconf-$(AUTOCONF_VERSION)/configure --prefix="$(SUPP_PREFIX)" && \
$(MAKE) -j$(PROCS)
[ -d stamps ] || mkdir stamps
touch stamps/build-autoconf;
 
.PHONY: install-autoconf
install-autoconf stamps/install-autoconf: stamps/build-autoconf
cd build/autoconf && \
$(MAKE) install
[ -d stamps ] || mkdir stamps
touch stamps/install-autoconf;
 
 
 
############ SUPP: AUTOMAKE ############
 
.PHONY: download-automake
downloads/$(AUTOMAKE_ARCHIVE) download-automake:
[ -d downloads ] || mkdir downloads ;
cd downloads && curl -LO $(AUTOMAKE_URL)
 
.PHONY: extract-automake
extract-automake stamps/extract-automake: downloads/$(AUTOMAKE_ARCHIVE)
@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
[ "$$t1" = "$(AUTOMAKE_MD5)" ] || \
( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
tar -jxf $< ;
[ -d stamps ] || mkdir stamps ;
touch stamps/extract-automake;
 
.PHONY: build-automake
build-automake stamps/build-automake: stamps/extract-automake stamps/install-autoconf
mkdir -p build/automake && cd build/automake && \
../../automake-$(AUTOMAKE_VERSION)/configure --prefix="$(SUPP_PREFIX)" && \
$(MAKE) -j$(PROCS)
[ -d stamps ] || mkdir stamps
touch stamps/build-automake;
 
.PHONY: install-automake
install-automake stamps/install-automake: stamps/build-automake
cd build/automake && \
$(MAKE) install
[ -d stamps ] || mkdir stamps
touch stamps/install-automake;
 
 
 
############# AVR32 PATCHES ############
 
.PHONY: download-avr32patches
downloads/$(AVR32PATCHES_ARCHIVE) download-avr32patches:
cd downloads && curl -LO $(AVR32PATCHES_URL)
 
.PHONY: extract-avr32patches
extract-avr32patches stamps/extract-avr32patches : downloads/$(AVR32PATCHES_ARCHIVE)
@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
[ "$$t1" = "$(AVR32PATCHES_MD5)" ] || \
( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
unzip -o $<
[ -d stamps ] || mkdir stamps
touch stamps/extract-avr32patches;
 
 
############# AVR32 HEADERS ############
 
.PHONY: download-avr32headers
downloads/$(AVR32HEADERS_ARCHIVE) download-avr32headers:
cd downloads && curl -LO $(AVR32HEADERS_URL)
 
.PHONY: install-headers
install-headers stamps/install-headers : downloads/$(AVR32HEADERS_ARCHIVE) stamps/install-final-gcc
@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
[ "$$t1" = "$(AVR32HEADERS_MD5)" ] || \
( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
unzip -o $< -d "$(PREFIX)/$(TARGET)/include/" && \
[ -d stamps ] || mkdir stamps
touch stamps/install-headers;
 
 
################ NEWLIB ################
 
.PHONY: download-newlib
downloads/$(NEWLIB_ARCHIVE) download-newlib:
[ -d downloads ] || mkdir downloads ;
cd downloads && curl -LO $(NEWLIB_URL)
 
.PHONY: prep-newlib
prep-newlib stamps/prep-newlib: stamps/regen-newlib
[ -d stamps ] || mkdir stamps
touch stamps/prep-newlib;
 
 
.PHONY: extract-newlib
extract-newlib stamps/extract-newlib : downloads/$(NEWLIB_ARCHIVE)
@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
[ "$$t1" = "$(NEWLIB_MD5)" ] || \
( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
tar -xf $<
[ -d stamps ] || mkdir stamps
touch stamps/extract-newlib;
 
 
.PHONY: patch-newlib
patch-newlib stamps/patch-newlib: stamps/extract-newlib stamps/extract-avr32patches
pushd newlib-$(NEWLIB_VERSION) ; \
for f in ../source/avr32/newlib/*.patch; do \
patch -N -p0 <$${f} ; \
done ; \
popd ;
[ -d stamps ] || mkdir stamps
touch stamps/patch-newlib;
 
.PHONY: regen-newlib
regen-newlib stamps/regen-newlib: stamps/patch-newlib stamps/install-supp-tools
pushd newlib-$(NEWLIB_VERSION) ; \
"$(SUPP_PREFIX)/bin/autoconf"; "$(SUPP_PREFIX)/bin/automake" ; \
for dir in newlib/libc/machine/avr32 newlib/libc/machine newlib/libc/sys/avr32 newlib/libc/sys; do \
pushd $$dir ; \
"$(SUPP_PREFIX)/bin/aclocal" -I ../.. -I ../../.. -I ../../../.. ; \
"$(SUPP_PREFIX)/bin/autoconf"; "$(SUPP_PREFIX)/bin/automake"; \
popd ; \
done; \
popd;
[ -d stamps ] || mkdir stamps
touch stamps/regen-newlib;
 
NEWLIB_FLAGS="-ffunction-sections -fdata-sections \
-DPREFER_SIZE_OVER_SPEED -D__OPTIMIZE_SIZE__ -g -Os \
-fomit-frame-pointer -fno-unroll-loops -D__BUFSIZ__=128 \
-DSMALL_MEMORY"
 
.PHONY: cross-newlib
build-newlib stamps/build-newlib: stamps/prep-newlib stamps/install-binutils stamps/install-gcc
mkdir -p build/newlib && cd build/newlib && \
pushd ../../newlib-$(NEWLIB_VERSION) ; \
make clean ; \
popd ; \
../../newlib-$(NEWLIB_VERSION)/configure --prefix=$(PREFIX) \
--with-build-time-tools=$(PREFIX) \
--target=$(TARGET) --disable-newlib-supplied-syscalls \
--disable-libgloss --disable-nls --disable-shared \
--enable-newlib-io-long-long --enable-newlib-io-long-double \
--enable-target-optspace --enable-newlib-io-pos-args \
--enable-newlib-reent-small && \
$(MAKE) -j$(PROCS) CFLAGS_FOR_TARGET=$(NEWLIB_FLAGS) CCASFLAGS=$(NEWLIB_FLAGS) && \
[ -d stamps ] || mkdir stamps
touch stamps/build-newlib;
 
.PHONY: install-newlib
install-newlib stamps/install-newlib: stamps/build-newlib
cd build/newlib && \
$(MAKE) install
[ -d stamps ] || mkdir stamps
touch stamps/install-newlib;
 
################ BINUTILS ################
 
.PHONY: download-binutils
downloads/$(BINUTILS_ARCHIVE) download-binutils:
[ -d downloads ] || mkdir downloads ;
cd downloads && curl -LO $(BINUTILS_URL)
 
.PHONY: prep-binutils
prep-binutils stamps/prep-binutils: stamps/regen-binutils
[ -d stamps ] || mkdir stamps;
touch stamps/prep-binutils;
 
.PHONY: extract-binutils
extract-binutils stamps/extract-binutils: downloads/$(BINUTILS_ARCHIVE)
@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
[ "$$t1" = "$(BINUTILS_MD5)" ] || \
( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
tar -jxf $< ;
[ -d stamps ] || mkdir stamps ;
touch stamps/extract-binutils;
 
.PHONY: patch-binutils
patch-binutils stamps/patch-binutils: stamps/extract-binutils stamps/extract-avr32patches
pushd binutils-$(BINUTILS_VERSION) ; \
for f in ../source/avr32/binutils/*.patch; do \
patch -N -p0 <$${f} ; \
done ; \
popd ; \
[ -d stamps ] || mkdir stamps
touch stamps/patch-binutils;
 
.PHONY: regen-binutils
regen-binutils stamps/regen-binutils: stamps/patch-binutils stamps/install-supp-tools
pushd binutils-$(BINUTILS_VERSION) ; \
"$(SUPP_PREFIX)/bin/aclocal" -I config ; \
"$(SUPP_PREFIX)/bin/autoconf" ; \
"$(SUPP_PREFIX)/bin/automake" ; \
"$(SUPP_PREFIX)/bin/autoheader" ; \
for dir in bfd opcodes binutils gas ld; do \
pushd $$dir ; \
"$(SUPP_PREFIX)/bin/autoconf"; \
"$(SUPP_PREFIX)/bin/automake"; \
"$(SUPP_PREFIX)/bin/autoheader"; \
popd ; \
done; \
popd; \
[ -d stamps ] || mkdir stamps ;
touch stamps/regen-binutils;
 
.PHONY: build-binutils
build-binutils stamps/build-binutils: stamps/regen-binutils stamps/install-supp-tools
cd binutils-$(BINUTILS_VERSION) ; \
./configure --enable-maintainer-mode \
--prefix="$(PREFIX)" --target=$(TARGET) --disable-nls \
--disable-shared --disable-werror \
--with-sysroot="$(PREFIX)/$(TARGET)" --with-bugurl=$(BUG_URL) && \
$(MAKE) all-bfd TARGET-bfd=headers; \
rm bfd/Makefile; \
make configure-bfd; \
$(MAKE)
[ -d stamps ] || mkdir stamps ;
touch stamps/build-binutils;
 
.PHONY: install-binutils
install-binutils stamps/install-binutils: stamps/build-binutils
cd binutils-$(BINUTILS_VERSION) && \
$(MAKE) installdirs install-host install-target
[ -d stamps ] || mkdir stamps ;
touch stamps/install-binutils;
 
########## DFU PROGRAMMER ###########
 
.PHONY: download-dfu
downloads/$(DFU_ARCHIVE) download-dfu:
[ -d downloads ] || mkdir downloads ;
cd downloads && curl -LO $(DFU_URL)
 
.PHONY: extract-dfu
extract-dfu stamps/extract-dfu: downloads/$(DFU_ARCHIVE)
@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
[ "$$t1" = "$(DFU_MD5)" ] || \
( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
tar -zxf $< ;
[ -d stamps ] || mkdir stamps ;
touch stamps/extract-dfu;
 
.PHONY: build-dfu
build-dfu stamps/build-dfu: stamps/extract-dfu
mkdir -p build/dfu-programmer && cd build/dfu-programmer && \
../../dfu-programmer-$(DFU_VERSION)/configure --prefix="$(PREFIX)" && \
$(MAKE) -j$(PROCS)
[ -d stamps ] || mkdir stamps
touch stamps/build-dfu;
 
.PHONY: install-dfu
install-dfu stamps/install-dfu: stamps/build-dfu
cd build/dfu-programmer && \
$(MAKE) install
[ -d stamps ] || mkdir stamps
touch stamps/install-dfu;
 
 
################ Bootstrap GCC ################
 
.PHONY: download-gcc
downloads/$(GCC_ARCHIVE) download-gcc:
[ -d downloads ] || mkdir downloads ;
cd downloads && curl -LO $(GCC_URL)
 
.PHONY: prep-gcc
prep-gcc stamps/prep-gcc: stamps/patch-gcc
[ -d stamps ] || mkdir stamps;
touch stamps/prep-gcc;
 
.PHONY: extract-gcc
extract-gcc stamps/extract-gcc: downloads/$(GCC_ARCHIVE)
@(t1=`openssl md5 $< | cut -f 2 -d " " -` && \
[ "$$t1" = "$(GCC_MD5)" ] || \
( echo "Bad Checksum! Please remove the following file and retry: $<" && false ))
tar -jxf $< ;
[ -d stamps ] || mkdir stamps ;
touch stamps/extract-gcc;
 
.PHONY: patch-gcc
patch-gcc stamps/patch-gcc: stamps/extract-gcc stamps/extract-avr32patches
pushd gcc-$(GCC_VERSION) ; \
for f in ../source/avr32/gcc/*.patch; do \
patch -N -p0 <$${f} ; \
done ; \
popd ;
[ -d stamps ] || mkdir stamps
touch stamps/patch-gcc;
 
CFLAGS_FOR_TARGET="-ffunction-sections -fdata-sections \
-fomit-frame-pointer -DPREFER_SIZE_OVER_SPEED -D__OPTIMIZE_SIZE__ -g \
-Os -fno-unroll-loops"
 
.PHONY: build-gcc
build-gcc stamps/build-gcc: stamps/install-binutils stamps/prep-gcc
mkdir -p build/gcc && cd build/gcc && \
pushd ../../gcc-$(GCC_VERSION) ; \
make clean ; \
popd ; \
../../gcc-$(GCC_VERSION)/configure --prefix="$(PREFIX)" \
--target=$(TARGET) --enable-languages="c" --with-gnu-ld \
--with-gnu-as --with-newlib --disable-nls --disable-libssp \
--with-dwarf2 --enable-sjlj-exceptions \
--enable-version-specific-runtime-libs --disable-libstdcxx-pch \
--disable-shared \
--with-build-time-tools="$(PREFIX)/$(TARGET)/bin" \
--enable-cxx-flags=$(CFLAGS_FOR_TARGET) \
--with-sysroot="$(PREFIX)/$(TARGET)" \
--with-build-sysroot="$(PREFIX)/$(TARGET)" \
--with-build-time-tools="$(PREFIX)/$(TARGET)/bin" \
CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET) \
LDFLAGS_FOR_TARGET="--sysroot=\"$(PREFIX)/$(TARGET)\"" \
CPPFLAGS_FOR_TARGET="--sysroot=\"$(PREFIX)/$(TARGET)\"" \
--with-bugurl=$(BUG_URL) \
--with-pkgversion=$(PKG_VERSION) && \
$(MAKE) -j$(PROCS)
[ -d stamps ] || mkdir stamps
touch stamps/build-gcc;
 
.PHONY: install-gcc
install-gcc stamps/install-gcc: stamps/build-gcc
cd build/gcc && \
$(MAKE) installdirs install-target && \
$(MAKE) -C gcc install-common install-cpp install- install-driver install-headers install-man
[ -d stamps ] || mkdir stamps
touch stamps/install-gcc;
 
 
################ Final GCC ################
 
.PHONY: prep-final-gcc
prep-final-gcc stamps/prep-final-gcc: stamps/patch-gcc stamps/prep-gcc
[ -d stamps ] || mkdir stamps;
touch stamps/prep-final-gcc;
 
.PHONY: build-final-gcc
build-final-gcc stamps/build-final-gcc: stamps/install-binutils stamps/install-gcc stamps/install-newlib stamps/prep-final-gcc
mkdir -p build/final-gcc && cd build/final-gcc && \
pushd ../../gcc-$(GCC_VERSION) ; \
make clean ; \
popd ; \
../../gcc-$(GCC_VERSION)/configure --prefix=$(PREFIX) \
--target=$(TARGET) $(DEPENDENCIES) --enable-languages="c,c++" --with-gnu-ld \
--with-gnu-as --with-newlib --disable-nls --disable-libssp \
--with-dwarf2 --enable-sjlj-exceptions \
--enable-version-specific-runtime-libs --disable-libstdcxx-pch \
--disable-shared --enable-__cxa_atexit \
--with-build-time-tools=$(PREFIX)/$(TARGET)/bin \
--enable-cxx-flags=$(CFLAGS_FOR_TARGET) \
--with-sysroot=$(PREFIX)/$(TARGET) \
--with-build-sysroot=$(PREFIX)/$(TARGET) \
--with-build-time-tools=$(PREFIX)/$(TARGET)/bin \
CFLAGS_FOR_TARGET=$(CFLAGS_FOR_TARGET) \
LDFLAGS_FOR_TARGET="--sysroot=$(PREFIX)/$(TARGET)" \
CPPFLAGS_FOR_TARGET="--sysroot=$(PREFIX)/$(TARGET)" \
--with-bugurl=$(BUG_URL) \
--with-pkgversion=$(PKG_VERSION) && \
$(MAKE) -j$(PROCS)
[ -d stamps ] || mkdir stamps
touch stamps/build-final-gcc;
 
.PHONY: install-final-gcc
install-final-gcc stamps/install-final-gcc: stamps/build-final-gcc
cd build/final-gcc && \
$(MAKE) installdirs install-target && \
$(MAKE) -C gcc install-common install-cpp install- install-driver install-headers install-man
[ -d stamps ] || mkdir stamps
touch stamps/install-final-gcc;
 
 
################ NON-WORKING/NON-ADJUSTED TARGETS ################
 
 
gcc-optsize-patch: gcc-$(GCC_VERSION)-$(CS_BASE)/
pushd gcc-$(GCC_VERSION)-$(CS_BASE) ; \
patch -N -p1 < ../patches/gcc-optsize.patch ; \
popd ;
 
gmp: gmp-$(CS_BASE)/ sudomode
sudo -u $(SUDO_USER) mkdir -p build/gmp && cd build/gmp ; \
pushd ../../gmp-$(CS_BASE) ; \
make clean ; \
popd ; \
sudo -u $(SUDO_USER) ../../gmp-$(CS_BASE)/configure --disable-shared && \
sudo -u $(SUDO_USER) $(MAKE) -j$(PROCS) all && \
$(MAKE) install
 
mpc: mpc-$(MPC_VERSION)/ sudomode
sudo -u $(SUDO_USER) mkdir -p build/gmp && cd build/gmp ; \
pushd ../../mpc-$(MPC_VERSION) ; \
make clean ; \
popd ; \
sudo -u $(SUDO_USER) ../../mpc-$(MPC_VERSION)/configure --disable-shared && \
sudo -u $(SUDO_USER) $(MAKE) -j$(PROCS) all && \
$(MAKE) install
 
mpc-$(MPC_VERSION) : $(LOCAL_BASE)/mpc-$(CS_VERSION).tar.bz2
ifeq ($(USER),root)
sudo -u $(SUDO_USER) tar -jxf $<
else
tar -jxf $<
endif
 
mpfr: gmp mpfr-$(CS_BASE)/ sudomode
sudo -u $(SUDO_USER) mkdir -p build/mpfr && cd build/mpfr && \
pushd ../../mpfr-$(CS_BASE) ; \
make clean ; \
popd ; \
sudo -u $(SUDO_USER) ../../mpfr-$(CS_BASE)/configure LDFLAGS="-Wl,-search_paths_first" --disable-shared && \
sudo -u $(SUDO_USER) $(MAKE) -j$(PROCS) all && \
$(MAKE) install
 
cross-gdb: gdb-$(CS_BASE)/
mkdir -p build/gdb && cd build/gdb && \
pushd ../../gdb-$(CS_BASE) ; \
make clean ; \
popd ; \
../../gdb-$(CS_BASE)/configure --prefix="$(PREFIX)" --target=$(TARGET) --disable-werror && \
$(MAKE) -j$(PROCS) && \
$(MAKE) installdirs install-host install-target && \
mkdir -p "$(PREFIX)/man/man1" && \
cp ../../gdb-$(CS_BASE)/gdb/gdb.1 "$(PREFIX)/man/man1/arm-none-eabi-gdb.1"
 
.PHONY : clean
clean:
rm -rf build *-$(CS_BASE) binutils-* gcc-* gdb-* newlib-* mpc-* $(LOCAL_BASE) dfu-programmer-* autoconf-* automake-* stamps/* source supp
/vendor/README.asciidoc
New file
0,0 → 1,126
== AVR32 Toolchain Builder ==
 
This is a early implementation of a Makefile for an AVR32 toolchain
builder for Mac OS X & Linux, and it has not been extensively tested.
That said the patches are taken directly from Atmel, and basic testing
is done with some more complicated builds (i.e.:
link:http://eluaproject.net[eLua] in float and integer mode) to ensure
that that at least these work after toolchain modifications.
 
Note: If you have previously built a toolchain of another version, out
of the same builder directory, make sure to do the following first
before building with newer sources:
 
----
make clean
----
 
=== Requirements (OS X) ===
 
You will need to have GCC, make and binutils on your machine to
compile all of this. You can get all of these on Mac OS X, by just
installing the Apple
link:http://developer.apple.com/technologies/tools/[Developer Tools].
You should be able to download free versions of 3.x from the ADC
website, install from the OS X install disc that came with your
machine, or download XCode 4 from the App Store (now free again for
all registered users).
 
You will also need gmp, mpfr and mpc first. I recommend installing
these from link:https://github.com/mxcl/homebrew[homebrew] for now.
I'll add these to the Makefile once I have a consistent configuration
that can be used for both Linux & OS X.
 
With homebrew you can install those dependencies like this:
----
brew install mpfr gmp libmpc texinfo
----
 
If you would like to build dfu-programmer, also install libusb:
 
----
brew install libusb-compat
----
 
 
=== Requirements (Ubuntu) ===
 
These instructions should now also work on Ubuntu Linux, provided the
following packages have been installed prior to attempting the build:
 
----
sudo apt-get install curl flex bison libgmp3-dev libmpfr-dev autoconf build-essential libncurses5-dev libmpc-dev texinfo
----
 
If you would like to build dfu-programmer, also install libusb:
 
----
sudo apt-get install libusb-dev
----
 
=== Main Build Instructions ===
 
Next build the toolchain:
 
----
make install-cross
----
 
You should be able to also specify a specific install/prefix location
by building using the following type of invokation:
 
----
PREFIX=$HOME/avr32-tools make install-cross
----
 
If you do this, make sure you have permissions to create a directory
at this location and/or to create directories within this location if
the directory already exists.
 
 
*NOTE:* If you're running Mac OS X Lion or XCode 4.1 you may find that
you're unable to bootstrap GCC. To work around this until the issue
is fixed in Apple's distribution of llvm-gcc, use the following
command instead of the above to build.
 
----
CC=gcc-4.2 make install-cross
----
 
 
 
This should build the compiler, newlib, gdb, etc.. and install them all
into a directory called arm-cs-tools in your home directory. If you
want to install to another location, feel free to change the export
lines and to adjust the definitions at the top of the Makefile.
 
Keep in mind that the Makefile does install at the end of each build.
 
Once you’re done, the makefile should notify you of the install
location, which will be based on the git revision if you cloned the
repository or the current date if you grabbed a tarball and/or you
don't have the git binary. The message should look like the following:
 
----
====== INSTALLATION NOTE ======
Your tools have now been installed at the following prefix:
/Users/jsnyder/avr32-tools-bd2485b
 
Please be sure to add something similar to the following to your .bash_profile, .zshrc, etc:
export PATH=/Users/jsnyder/avr32-tools-bd2485b/bin:$PATH
----
 
If it uses the date instead the the git short revision will bve
replaced with a date number like: 20110726.
 
If you also would like dfu-programmer installed intalled (make sure
you have previously installed libusb as described in requirements):
 
----
make install-dfu
----
 
=== Special Thanks ===
 
Special thanks to Rob Emanuele for the basis of this Makefile:
http://elua-development.2368040.n2.nabble.com/Building-GCC-for-Cortex-td2421927.html