# build arch: BUILDARCH=i686-linux-gnu #TARGETARCH=arm-none-eabi TARGETARCH=arm-none-eabi # output dir: TOOLCHAIN=/opt/$(TARGETARCH) MAKEOPTS=-j4 # ##################################################################### # MAIN TARGETS (binutils, gcc, g++, newlib, gdb for arm7tdmi) # ##################################################################### toolchain: binutils gcc newlib gdb openocd # ##################################################################### BASE=$(shell /bin/pwd) DOWNLOADS=$(BASE)/download SOURCE=$(BASE)/source PATH:=$(PATH):$(TOOLCHAIN)/bin WGET:=/usr/bin/wget --passive-ftp -nd # ##################################################################### BINUTILS_VERSION=2.22 BINUTILS_PACKAGE=binutils-$(BINUTILS_VERSION).tar.bz2 BINUTILS_DOWNLOAD=http://ftp.gnu.org/gnu/binutils/$(BINUTILS_PACKAGE) BINUTILS_SOURCE=$(SOURCE)/binutils-$(BINUTILS_VERSION) BINUTILS_BUILD=$(BINUTILS_SOURCE)-build-$(TARGETARCH) # ##################################################################### GCC_VERSION=4.6.3 GCC_PACKAGE=gcc-$(GCC_VERSION).tar.bz2 GCC_DOWNLOAD=http://ftp.gnu.org/gnu/gcc/gcc-$(GCC_VERSION)/$(GCC_PACKAGE) GCC_SOURCE=$(SOURCE)/gcc-$(GCC_VERSION) GCC_BUILD=$(GCC_SOURCE)-build-$(TARGETARCH) # ##################################################################### MPC_VERSION=0.9 MPC_PACKAGE=mpc-$(MPC_VERSION).tar.gz MPC_DOWNLOAD=http://www.multiprecision.org/mpc/download/$(MPC_PACKAGE) MPC_SOURCE=$(SOURCE)/mpc-$(MPC_VERSION) # ##################################################################### GMP_VERSION=5.0.5 GMP_PACKAGE=gmp-$(GMP_VERSION).tar.bz2 GMP_DOWNLOAD=http://ftp.gnu.org/gnu/gmp/$(GMP_PACKAGE) GMP_SOURCE=$(SOURCE)/gmp-$(GMP_VERSION) # ##################################################################### MPFR_VERSION=3.1.0 MPFR_PACKAGE=mpfr-$(MPFR_VERSION).tar.bz2 MPFR_DOWNLOAD=http://www.mpfr.org/mpfr-$(MPFR_VERSION)/$(MPFR_PACKAGE) MPFR_SOURCE=$(SOURCE)/mpfr-$(MPFR_VERSION) # ##################################################################### NEWLIB_VERSION=1.20.0 NEWLIB_PACKAGE=newlib-$(NEWLIB_VERSION).tar.gz NEWLIB_DOWNLOAD=ftp://sources.redhat.com/pub/newlib/$(NEWLIB_PACKAGE) NEWLIB_SOURCE=$(SOURCE)/newlib-$(NEWLIB_VERSION) NEWLIB_BUILD=$(NEWLIB_SOURCE)-build-$(TARGETARCH) # ##################################################################### GDB_VERSION=7.4 GDB_PACKAGE=gdb-$(GDB_VERSION).tar.bz2 GDB_DOWNLOAD=http://ftp.gnu.org/gnu/gdb/$(GDB_PACKAGE) GDB_SOURCE=$(SOURCE)/gdb-$(GDB_VERSION) GDB_BUILD=$(GDB_SOURCE)-build-$(TARGETARCH) # ##################################################################### OOCD_VERSION=0.5.0 OOCD_PACKAGE=openocd-$(OOCD_VERSION).tar.bz2 OOCD_DOWNLOAD=http://downloads.sourceforge.net/project/openocd/openocd/$(OOCD_VERSION)/$(OOCD_PACKAGE) OOCD_SOURCE=$(SOURCE)/openocd-$(OOCD_VERSION) OOCD_BUILD=$(OOCD_SOURCE) # ##################################################################### FTD2XX_VERSION=1.1.10 FTD2XX_PACKAGE=libftd2xx$(FTD2XX_VERSION).tar.gz FTD2XX_DOWNLOAD=http://www.ftdichip.com/Drivers/D2XX/Linux/$(FTD2XX_PACKAGE) FTD2XX_SOURCE=$(SOURCE)/ftd2xx-$(FTD2XX_VERSION) # ##################################################################### binutils: $(BINUTILS_BUILD)/.installed $(DOWNLOADS)/$(BINUTILS_PACKAGE): $(WGET) -P $(DOWNLOADS) $(BINUTILS_DOWNLOAD) $(BINUTILS_SOURCE)/.unpacked: $(DOWNLOADS)/$(BINUTILS_PACKAGE) tar -C $(SOURCE) -xjf $^ touch $@ $(BINUTILS_BUILD)/.configured: $(BINUTILS_SOURCE)/.unpacked mkdir -p $(BINUTILS_BUILD) (cd $(BINUTILS_BUILD); $(BINUTILS_SOURCE)/configure \ --build=$(BUILDARCH) --host=$(BUILDARCH) --target=$(TARGETARCH) \ --prefix=$(TOOLCHAIN) \ --enable-interwork \ --enable-target-optspace \ --disable-nls \ --disable-werror \ ); touch $@ $(BINUTILS_BUILD)/.compiled: $(BINUTILS_BUILD)/.configured $(MAKE) -C $(BINUTILS_BUILD) $(MAKEOPTS) all touch $@ $(BINUTILS_BUILD)/.installed: $(BINUTILS_BUILD)/.compiled $(MAKE) -C $(BINUTILS_BUILD) install touch $@ # ##################################################################### gcc: $(GCC_BUILD)/.installed $(DOWNLOADS)/$(GCC_PACKAGE): $(WGET) -P $(DOWNLOADS) $(GCC_DOWNLOAD) $(GCC_SOURCE)/.unpacked: $(DOWNLOADS)/$(GCC_PACKAGE) tar -C $(SOURCE) -xjf $^ touch $@ $(GCC_SOURCE)/mpc: $(MPC_SOURCE)/.unpacked ln -s $(MPC_SOURCE) $@ $(GCC_SOURCE)/gmp: $(GMP_SOURCE)/.unpacked ln -s $(GMP_SOURCE) $@ $(GCC_SOURCE)/mpfr: $(MPFR_SOURCE)/.unpacked ln -s $(MPFR_SOURCE) $@ $(GCC_BUILD)/.configured: $(GCC_SOURCE)/.unpacked $(GCC_SOURCE)/mpc $(GCC_SOURCE)/gmp $(GCC_SOURCE)/mpfr $(NEWLIB_SOURCE)/.unpacked mkdir -p $(GCC_BUILD) (cd $(GCC_BUILD); $(GCC_SOURCE)/configure \ --build=$(BUILDARCH) --host=$(BUILDARCH) --target=$(TARGETARCH) \ --prefix=$(TOOLCHAIN) \ --enable-languages="c,c++" \ --enable-interwork \ --disable-libssp \ --enable-target-optspace \ --with-cpu=arm7tdmi \ --with-cpu=cortex-m3 \ --with-cpu=cortex-m4 \ --with-cpu=arm966e-s \ --with-gmp-include=$(GCC_BUILD)/gmp \ --with-gmp-lib=$(GCC_BUILD)/gmp/.libs \ --with-mpfr-include=$(GCC_SOURCE)/mpfr/src \ --with-mpfr-lib=$(GCC_BUILD)/mpfr/src/.libs \ --with-newlib --with-headers=$(NEWLIB_SOURCE)/newlib/libc/include \ --disable-nls \ ); touch $@ $(GCC_BUILD)/.stage1.compiled: $(GCC_BUILD)/.configured $(BINUTILS_BUILD)/.installed $(MAKE) -C $(GCC_BUILD) $(MAKEOPTS) all-gcc touch $@ $(GCC_BUILD)/.stage1.installed: $(GCC_BUILD)/.stage1.compiled $(MAKE) -C $(GCC_BUILD) install-gcc touch $@ $(GCC_BUILD)/.stage2.compiled: $(GCC_BUILD)/.stage1.installed $(NEWLIB_BUILD)/.installed $(MAKE) -C $(GCC_BUILD) $(MAKEOPTS) all touch $@ $(GCC_BUILD)/.stage2.installed: $(GCC_BUILD)/.stage2.compiled $(MAKE) -C $(GCC_BUILD) install touch $@ $(GCC_BUILD)/.installed: $(GCC_BUILD)/.stage1.installed $(GCC_BUILD)/.stage2.installed touch $@ # ##################################################################### $(DOWNLOADS)/$(MPC_PACKAGE): $(WGET) -P $(DOWNLOADS) $(MPC_DOWNLOAD) $(MPC_SOURCE)/.unpacked: $(DOWNLOADS)/$(MPC_PACKAGE) tar -C $(SOURCE) -xzf $(DOWNLOADS)/$(MPC_PACKAGE) touch $@ # ##################################################################### $(DOWNLOADS)/$(GMP_PACKAGE): $(WGET) -P $(DOWNLOADS) $(GMP_DOWNLOAD) $(GMP_SOURCE)/.unpacked: $(DOWNLOADS)/$(GMP_PACKAGE) tar -C $(SOURCE) -xjf $(DOWNLOADS)/$(GMP_PACKAGE) touch $@ # ##################################################################### $(DOWNLOADS)/$(MPFR_PACKAGE): $(WGET) -P $(DOWNLOADS) $(MPFR_DOWNLOAD) $(MPFR_SOURCE)/.unpacked: $(DOWNLOADS)/$(MPFR_PACKAGE) tar -C $(SOURCE) -xjf $(DOWNLOADS)/$(MPFR_PACKAGE) touch $@ # ##################################################################### newlib: $(NEWLIB_BUILD)/.installed $(DOWNLOADS)/$(NEWLIB_PACKAGE): $(WGET) -P $(DOWNLOADS) $(NEWLIB_DOWNLOAD) $(NEWLIB_SOURCE)/.unpacked: $(DOWNLOADS)/$(NEWLIB_PACKAGE) tar -C $(SOURCE) -xzf $^ touch $@ $(NEWLIB_BUILD)/.configured: $(NEWLIB_SOURCE)/.unpacked $(GCC_BUILD)/.stage1.installed mkdir -p $(NEWLIB_BUILD) (cd $(NEWLIB_BUILD); $(NEWLIB_SOURCE)/configure \ --build=$(BUILDARCH) --host=$(BUILDARCH) --target=$(TARGETARCH) \ --prefix=$(TOOLCHAIN) \ --enable-interwork \ --disable-newlib-io-float \ --disable-newlib-supplied-syscalls \ --disable-nls \ ); touch $@ $(NEWLIB_BUILD)/.compiled: $(NEWLIB_BUILD)/.configured $(MAKE) -C $(NEWLIB_BUILD) $(MAKEOPTS) all touch $@ $(NEWLIB_BUILD)/.installed: $(NEWLIB_BUILD)/.compiled $(MAKE) -C $(NEWLIB_BUILD) install touch $@ # ##################################################################### gdb: $(GDB_BUILD)/.installed $(DOWNLOADS)/$(GDB_PACKAGE): $(WGET) -P $(DOWNLOADS) $(GDB_DOWNLOAD) $(GDB_SOURCE)/.unpacked: $(DOWNLOADS)/$(GDB_PACKAGE) tar -C $(SOURCE) -xjf $^ touch $@ $(GDB_BUILD)/.configured: $(GDB_SOURCE)/.unpacked $(GCC_BUILD)/.installed mkdir -p $(GDB_BUILD) (cd $(GDB_BUILD); $(GDB_SOURCE)/configure \ --build=$(BUILDARCH) --host=$(BUILDARCH) --target=$(TARGETARCH) \ --prefix=$(TOOLCHAIN) \ --enable-interwork \ --disable-nls \ ); touch $@ $(GDB_BUILD)/.compiled: $(GDB_BUILD)/.configured $(MAKE) -C $(GDB_BUILD) $(MAKEOPTS) all touch $@ $(GDB_BUILD)/.installed: $(GDB_BUILD)/.compiled $(MAKE) -C $(GDB_BUILD) install touch $@ # ##################################################################### openocd: $(OOCD_BUILD)/.installed $(DOWNLOADS)/$(OOCD_PACKAGE): $(WGET) -P $(DOWNLOADS) $(OOCD_DOWNLOAD) $(OOCD_SOURCE)/.unpacked: $(DOWNLOADS)/$(OOCD_PACKAGE) tar -C $(SOURCE) -xjf $^ touch $@ $(OOCD_BUILD)/.configured: $(OOCD_SOURCE)/.unpacked $(FTD2XX_SOURCE)/.unpacked mkdir -p $(OOCD_BUILD) (cd $(OOCD_BUILD); $(OOCD_SOURCE)/configure \ --prefix=$(TOOLCHAIN) \ --disable-static \ --disable-doxygen-html \ --enable-parport \ --enable-ft2232_ftd2xx \ --enable-usbprog \ --enable-jlink \ --enable-arm-jtag-ew \ --with-ftd2xx-linux-tardir=$(FTD2XX_SOURCE)/release \ ); touch $@ $(OOCD_BUILD)/.compiled: $(OOCD_BUILD)/.configured $(MAKE) -C $(OOCD_BUILD) $(MAKEOPTS) all touch $@ $(OOCD_BUILD)/.installed: $(OOCD_BUILD)/.compiled $(MAKE) -C $(OOCD_BUILD) install touch $@ # ##################################################################### $(DOWNLOADS)/$(FTD2XX_PACKAGE): $(WGET) -P $(DOWNLOADS) $(FTD2XX_DOWNLOAD) $(FTD2XX_SOURCE)/.unpacked: $(DOWNLOADS)/$(FTD2XX_PACKAGE) mkdir -p $(FTD2XX_SOURCE) tar -C $(FTD2XX_SOURCE) -xzf $^ touch $@