genode/tool/tool_chain
Bjoern Doebel 9c9f67d0d6 Check for all missing tools at once
Instead of terminating tool/tool_chain when finding the first
missing tool, this patch runs all checks to completion before
bailing out. This eases finding missing programs, because the
user has to run the script only once to get a list of all missing
software.

Fixes #1046
Fixes #1047
2014-02-06 15:20:14 +01:00

514 lines
18 KiB
Makefile
Executable File

#!/usr/bin/make -f
#
# \brief Tool-chain creation tool for the Genode OS Framework
# \author Norman Feske
# \date 2009-02-03
#
help:
$(ECHO)
$(ECHO) "Build tool chain for the Genode OS Framework"
$(ECHO)
$(ECHO) "The tool chain consists of GCC $(GCC_VERSION) and binutils $(BINUTILS_VERSION)"
$(ECHO) "and will be created at '$(LOCAL_INSTALL_LOCATION)'."
$(ECHO)
$(ECHO) "--- available commands ---"
$(ECHO) "x86 - create tool chain for x86"
$(ECHO) "arm - create tool chain for arm"
$(ECHO) "clean - clean everything except downloaded archives"
$(ECHO) "cleanall - clean everything including downloaded archives"
$(ECHO) "install - copy tool chain to '$(INSTALL_LOCATION)'"
$(ECHO)
#
# User interface
#
SUPPORTED_PLATFORMS := x86 microblaze arm
PLATFORM := $(firstword $(filter $(SUPPORTED_PLATFORMS),$(MAKECMDGOALS)))
$(SUPPORTED_PLATFORMS): install
#
# Enable parallel build for 2nd-level $(MAKE) by default
#
MAKE_OPT ?= -j4
#
# Determine Genode base directory based on the known location of the
# 'create_builddir' tool within the Genode source tree
#
GENODE_DIR ?= $(realpath $(dir $(firstword $(MAKEFILE_LIST)))/..)
#
# Download locations
#
DOWNLOAD_MIRROR ?= ftp://ftp.fu-berlin.de
GCC_DOWNLOAD_URL = $(DOWNLOAD_MIRROR)/gnu/gcc
BINUTILS_DOWNLOAD_URL = $(DOWNLOAD_MIRROR)/gnu/binutils
GDB_DOWNLOAD_URL = $(DOWNLOAD_MIRROR)/gnu/gdb
GMP_DOWNLOAD_URL = $(DOWNLOAD_MIRROR)/gnu/gmp
MPFR_DOWNLOAD_URL = $(DOWNLOAD_MIRROR)/gnu/mpfr
MPC_DOWNLOAD_URL ?= http://www.multiprecision.org/mpc/download
#
# Tool versions and install location
#
GCC_VERSION = 4.7.2
BINUTILS_VERSION = 2.22
GDB_VERSION = 7.3.1
GMP_VERSION = 5.0.2
MPFR_VERSION = 3.1.0
MPC_VERSION = 0.9
INSTALL_LOCATION = /usr/local/genode-gcc
DOWNLOAD_DIR = download
CONTRIB_DIR = contrib
SIGVERIFIER = $(GENODE_DIR)/tool/download_sigver
BINUTILS_DOWNLOAD_TBZ2 = binutils-$(BINUTILS_VERSION).tar.bz2
# download file name differs from dir name found within the archive
ifeq ($(BINUTILS_VERSION),2.21.1)
BINUTILS_DOWNLOAD_TBZ2 = binutils-$(BINUTILS_VERSION)a.tar.bz2
endif
#
# Utilities
#
SHELL = bash
BRIGHT_COL = \033[01;33m
DEFAULT_COL = \033[0m
ECHO = @echo -e
VERBOSE = @
AUTOCONF_gcc_4.4.5 = autoconf2.59
AUTOCONF_gcc_4.6.1 = autoconf2.64
AUTOCONF_gcc_4.7.2 = autoconf2.64
AUTOCONF = $(AUTOCONF_gcc_$(GCC_VERSION))
# Return $(2) if $(1) is empty, "" else
check_nonempty_f = $(if $(1),,$(info $(2))$(2))
# Return $(3) if $(1) != $(2), "" else
check_equal_f = $(if $(filter $(1),$(2)),,$(info $(3))$(3))
AUTOCONF_OK = $(call check_nonempty_f,$(AUTOCONF),\
Unknown autoconf version for GCC $(GCC_VERSION))
#
# Check if 'autoconf' is installed
#
AUTOCONFINST_OK = $(call check_nonempty_f,$(shell which $(AUTOCONF)),\
Need to have $(AUTOCONF) installed.)
#
# Check if 'libncurses' is installed
#
CURSES_OK = $(call check_equal_f,\
$(shell $(LD) -lncurses -e0 -o /tmp/a.out && echo ok),ok,\
Need to have 'libncurses' installed.)
#
# Check if 'texinfo' is installed
#
TEXINFO_OK = $(call check_nonempty_f,$(shell which texi2pdf),\
Need to have 'texinfo' installed.)
#
# Check if 'wget' is installed
#
WGET_OK = $(call check_nonempty_f,$(shell which wget),\
Need to have 'wget' installed.)
#
# Check if 'autogen' is installed
#
AUTOGEN_OK = $(call check_nonempty_f,$(shell which autogen),\
Need to have 'autogen' installed.)
#
# Check if 'gpg' is installed
#
GPG_OK = $(call check_nonempty_f,$(shell which gpg),\
Need to have 'gpg' installed.)
TOOLS_OK = $(AUTOCONF_OK) $(AUTOCONFINST_OK) $(CURSES_OK) \
$(TEXINFO_OK) $(WGET_OK) $(AUTOGEN_OK) $(GPG_OK)
ifneq ($(strip $(TOOLS_OK)),)
$(error Please install missing tools.)
endif
#
# Libc stub
#
LIBC_GEN_SYMLINKS = \
stdint.h memory.h string.h stdlib.h unistd.h errno.h wchar.h \
ctype.h strings.h wctype.h math.h stdio.h dlfcn.h inttypes.h \
malloc.h signal.h fcntl.h assert.h locale.h setjmp.h time.h \
link.h gnu-versions.h elf.h
LIBC_GEN_SYS_SYMLINKS = types.h stat.h sem.h
LIBC_DIR = $(shell pwd)/build/libc/include
LIBC_STUB_H = $(GENODE_DIR)/tool/libgcc_libc_stub.h
LIBC = $(addprefix $(LIBC_DIR)/,$(LIBC_GEN_SYMLINKS)) \
$(addprefix $(LIBC_DIR)/sys/,$(LIBC_GEN_SYS_SYMLINKS))
$(LIBC_DIR) $(LIBC_DIR)/sys:
$(VERBOSE)mkdir -p $@
$(addprefix $(LIBC_DIR)/,$(LIBC_GEN_SYMLINKS)): $(LIBC_DIR)
$(VERBOSE)ln -sf $(LIBC_STUB_H) $@
$(addprefix $(LIBC_DIR)/sys/,$(LIBC_GEN_SYS_SYMLINKS)): $(LIBC_DIR)/sys
$(VERBOSE)ln -sf $(LIBC_STUB_H) $@
#
# 'configure' parameters for binutils, gcc and gdb
#
LOCAL_INSTALL_LOCATION = $(shell pwd)/build/install
#
# Local install location for gmp, mpfr, and mpc libraries. These libraries are
# requried at build time of gcc. We install them locally before invoking the
# gcc build. Because the libs do not need to be included in the tool-chain
# package (they are statically linked against gcc), we install them to a
# different install location as gcc.
#
LOCAL_LIB_INSTALL_LOCATION = $(shell pwd)/build/lib-install
TARGET_NAME_x86 = x86_64-elf
TARGET_NAME_microblaze = microblaze-elf
TARGET_NAME_arm = arm-elf-eabi
ifneq ($(VERBOSE),)
CONFIG_QUIET = --quiet
MAKEFLAGS += --quiet
export MAKEFLAGS
endif
COMMON_CONFIG = $(CONFIG_QUIET) \
--prefix=$(LOCAL_INSTALL_LOCATION) \
--program-prefix=genode-$(PLATFORM)- \
--target=$(TARGET_NAME_$(PLATFORM)) \
--program-transform-name="s/$(TARGET_NAME_$(PLATFORM))/$(PLATFORM)/"
BINUTILS_CONFIG += $(COMMON_CONFIG) --disable-werror
#
# Prevent GNU assembler from treating '/' as the start of a comment. In
# 'gas/config/tc-i386.c', the policy of handling '/' is defined. For Linux, '/'
# is treated as division, which we expect. To apply this needed policy for our
# plain 'elf' version gas, we supply the definition of 'TE_LINUX' by hand.
# Fortunately, this define is not used outside of gas.
#
BINUTILS_CONFIG += CFLAGS=-DTE_LINUX
#
# Add platform-specific binutils configure arguments
#
BINUTILS_CONFIG += $(BINUTILS_CONFIG_$(PLATFORM))
#
# Dummy libc symbols to resolve unresolved references when linking
# 'libgcc_s.so'. Even though, this library is not used on Genode, we want the
# link command to succeed to complete the build process.
#
DUMMY_LIBC_SYMS = strlen free memcpy malloc memset abort dl_iterate_phdr
LD_PREFIX = -Wl,
LD_DEFSYM_DUMMY_LIBC = $(addprefix $(LD_PREFIX)--defsym=,$(addsuffix =0,$(DUMMY_LIBC_SYMS)))
GCC_CONFIG += $(COMMON_CONFIG) \
--enable-languages=c,c++,go --disable-libgo \
--enable-targets=all \
--with-gnu-as --with-gnu-ld --disable-tls --disable-threads \
--disable-libstdcxx-pch \
--enable-shared \
--with-gmp=$(LOCAL_LIB_INSTALL_LOCATION) \
--with-mpfr=$(LOCAL_LIB_INSTALL_LOCATION) \
--with-mpc=$(LOCAL_LIB_INSTALL_LOCATION) \
CPPFLAGS_FOR_TARGET=-I$(LIBC_DIR) \
CFLAGS_FOR_TARGET="-I$(LIBC_DIR) -nostdlib $(LD_DEFSYM_DUMMY_LIBC) -fPIC"
GCC_CONFIG += $(GCC_CONFIG_$(PLATFORM))
#
# Configure options passed to gcc
#
HOST_CONFIG_ARGS = $(CONFIG_QUIET) \
host_xm_include_list=$(LINK_SPEC_H_$(PLATFORM)) \
tmake_file='t-slibgcc'
#
# Passed to target components such as libgcc, libstdc++
#
# The 't-slibgcc' tmake file is needed to have libgcc_eh.a built.
# The 't-eh-dw2-dip' tmake file is needed to let the tool chain use 'unwind-dw2-fde-dip.c',
# needed for the exception handling on Genode in the presence of shared libraries.
#
TARGET_CONFIG_ARGS = $(CONFIG_QUIET) \
tmake_file='t-crtstuff-pic t-libgcc-pic t-eh-dw2-dip t-slibgcc t-slibgcc-gld t-slibgcc-elf-ver' \
extra_parts='crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o'
# compile libsupc++ as position-independent code
TARGET_CONFIG_ARGS += PIC_CXXFLAGS='-prefer-pic'
GCC_INSTALL_RULE = install-strip
ifeq ($(GCC_VERSION),4.4.5)
GCC_INSTALL_RULE = install
endif
#
# Default linker script
#
# Needed only to make target-configure happy.
#
LD_SCRIPT_microblaze = $(LOCAL_INSTALL_LOCATION)/$(TARGET_NAME_microblaze)/lib/xilinx.ld
$(LD_SCRIPT_$(PLATFORM)):
$(VERBOSE)mkdir -p $(dir $@)
$(VERBOSE)touch $@
#
# Link spec
#
# The 'LINK_SPEC' define comprises the rules of how the GCC frontend invokes
# the linker.
#
LINK_SPEC_H_x86 = $(shell pwd)/build/$(PLATFORM)/link_spec.h
$(LINK_SPEC_H_x86):
$(VERBOSE)echo "#define LINK_SPEC \"%{!m32:-m elf_x86_64} %{m32:-m elf_i386} %{shared:-shared} %{!static:--eh-frame-hdr}\"" > $@
$(LINK_SPEC_H_arm):
$(VERBOSE)echo "#define LINK_SPEC \"%(shared:-shared) %{!static:--eh-frame-hdr}\"" > $@
#
# Platform-specific multilib support
#
MAKE_OPT_x86 := MULTILIB_OPTIONS="m64/m32" MULTILIB_DIRNAMES="64 32"
MAKE_OPT += $(MAKE_OPT_$(PLATFORM))
#
# Build rules and dependencies between build steps
#
# We use the binaries 'objdump' and 'g++' as representatives for expressing
# dependencies. All other programs will be generated as side effect.
#
BINUTILS_BINARIES = build/$(PLATFORM)/binutils/binutils/objdump
BINUTILS_INSTALLED_BINARIES = $(LOCAL_INSTALL_LOCATION)/bin/genode-$(PLATFORM)-objdump
GCC_BINARIES = build/$(PLATFORM)/gcc/gcc/g++
GCC_INSTALLED_BINARIES = $(LOCAL_INSTALL_LOCATION)/bin/genode-$(PLATFORM)-g++
GDB_BINARIES = build/$(PLATFORM)/gdb/gdb/gdb
GDB_INSTALLED_BINARIES = $(LOCAL_INSTALL_LOCATION)/bin/genode-$(PLATFORM)-gdb
build_all: $(GCC_INSTALLED_BINARIES) $(GDB_INSTALLED_BINARIES)
$(DOWNLOAD_DIR):
$(VERBOSE)mkdir -p $@
$(DOWNLOAD_DIR)/$(BINUTILS_DOWNLOAD_TBZ2): $(DOWNLOAD_DIR)
$(ECHO) "$(BRIGHT_COL)downloading binutils...$(DEFAULT_COL)"
$(VERBOSE)wget -c -P $(DOWNLOAD_DIR) $(BINUTILS_DOWNLOAD_URL)/$(BINUTILS_DOWNLOAD_TBZ2) && touch $@
$(VERBOSE)wget -c -P $(DOWNLOAD_DIR) $(BINUTILS_DOWNLOAD_URL)/$(BINUTILS_DOWNLOAD_TBZ2).sig && touch $@
$(VERBOSE)$(SIGVERIFIER) $(DOWNLOAD_DIR)/$(BINUTILS_DOWNLOAD_TBZ2) $(DOWNLOAD_DIR)/$(BINUTILS_DOWNLOAD_TBZ2).sig GNU
$(DOWNLOAD_DIR)/gcc-$(GCC_VERSION).tar.bz2: $(DOWNLOAD_DIR)
$(ECHO) "$(BRIGHT_COL)downloading gcc...$(DEFAULT_COL)"
$(VERBOSE)wget -c -P $(DOWNLOAD_DIR) $(GCC_DOWNLOAD_URL)/gcc-$(GCC_VERSION)/gcc-$(GCC_VERSION).tar.bz2 && touch $@
$(VERBOSE)wget -c -P $(DOWNLOAD_DIR) $(GCC_DOWNLOAD_URL)/gcc-$(GCC_VERSION)/gcc-$(GCC_VERSION).tar.bz2.sig && touch $@
$(VERBOSE)$(SIGVERIFIER) $(DOWNLOAD_DIR)/gcc-$(GCC_VERSION).tar.bz2 $(DOWNLOAD_DIR)/gcc-$(GCC_VERSION).tar.bz2.sig GNU
$(DOWNLOAD_DIR)/gmp-$(GMP_VERSION).tar.bz2: $(DOWNLOAD_DIR)
$(ECHO) "$(BRIGHT_COL)downloading gmp...$(DEFAULT_COL)"
$(VERBOSE)wget -c -P $(DOWNLOAD_DIR) $(GMP_DOWNLOAD_URL)/gmp-$(GMP_VERSION).tar.bz2 && touch $@
$(VERBOSE)wget -c -P $(DOWNLOAD_DIR) $(GMP_DOWNLOAD_URL)/gmp-$(GMP_VERSION).tar.bz2.sig && touch $@
$(VERBOSE)$(SIGVERIFIER) $(DOWNLOAD_DIR)/gmp-$(GMP_VERSION).tar.bz2 $(DOWNLOAD_DIR)/gmp-$(GMP_VERSION).tar.bz2.sig GNU
$(DOWNLOAD_DIR)/mpfr-$(MPFR_VERSION).tar.bz2: $(DOWNLOAD_DIR)
$(ECHO) "$(BRIGHT_COL)downloading mpfr...$(DEFAULT_COL)"
$(VERBOSE)wget -c -P $(DOWNLOAD_DIR) $(MPFR_DOWNLOAD_URL)/mpfr-$(MPFR_VERSION).tar.bz2 && touch $@
$(VERBOSE)wget -c -P $(DOWNLOAD_DIR) $(MPFR_DOWNLOAD_URL)/mpfr-$(MPFR_VERSION).tar.bz2.sig && touch $@
$(VERBOSE)$(SIGVERIFIER) $(DOWNLOAD_DIR)/mpfr-$(MPFR_VERSION).tar.bz2 $(DOWNLOAD_DIR)/mpfr-$(MPFR_VERSION).tar.bz2.sig
$(DOWNLOAD_DIR)/mpc-$(MPC_VERSION).tar.gz: $(DOWNLOAD_DIR)
$(ECHO) "$(BRIGHT_COL)downloading mpc...$(DEFAULT_COL)"
$(VERBOSE)wget -c -P $(DOWNLOAD_DIR) $(MPC_DOWNLOAD_URL)/mpc-$(MPC_VERSION).tar.gz && touch $@
$(VERBOSE)wget -c -P $(DOWNLOAD_DIR) $(MPC_DOWNLOAD_URL)/mpc-$(MPC_VERSION).tar.gz.asc && touch $@
# GPG key from http://www.multiprecision.org/index.php?prog=mpc&page=download
$(VERBOSE)$(SIGVERIFIER) $(DOWNLOAD_DIR)/mpc-$(MPC_VERSION).tar.gz $(DOWNLOAD_DIR)/mpc-$(MPC_VERSION).tar.gz.asc AD17A21EF8AED8F1CC02DBD9F7D5C9BF765C61E3
$(CONTRIB_DIR)/gmp-$(GMP_VERSION)/configure: $(DOWNLOAD_DIR)/gmp-$(GMP_VERSION).tar.bz2
$(ECHO) "$(BRIGHT_COL)unpacking gmp...$(DEFAULT_COL)"
$(VERBOSE)tar xfj $< -C $(CONTRIB_DIR)
$(CONTRIB_DIR)/mpfr-$(MPFR_VERSION)/configure: $(DOWNLOAD_DIR)/mpfr-$(MPFR_VERSION).tar.bz2
$(ECHO) "$(BRIGHT_COL)unpacking mpfr...$(DEFAULT_COL)"
$(VERBOSE)tar xfj $< -C $(CONTRIB_DIR)
$(CONTRIB_DIR)/mpc-$(MPC_VERSION)/configure: $(DOWNLOAD_DIR)/mpc-$(MPC_VERSION).tar.gz
$(ECHO) "$(BRIGHT_COL)unpacking mpc...$(DEFAULT_COL)"
$(VERBOSE)tar xfz $< -C $(CONTRIB_DIR)
$(CONTRIB_DIR)/gcc-$(GCC_VERSION): $(addprefix $(DOWNLOAD_DIR)/,gcc-$(GCC_VERSION).tar.bz2)
$(ECHO) "$(BRIGHT_COL)unpacking gcc...$(DEFAULT_COL)"
$(VERBOSE)mkdir -p $(CONTRIB_DIR)
$(VERBOSE)for i in $^ ; do tar xfj $$i -C $(CONTRIB_DIR) ;done
$(VERBOSE)touch $@
include $(GENODE_DIR)/tool/tool_chain_gcc_patches.inc
$(CONTRIB_DIR)/binutils-$(BINUTILS_VERSION)/configure: $(DOWNLOAD_DIR)/$(BINUTILS_DOWNLOAD_TBZ2)
$(ECHO) "$(BRIGHT_COL)unpacking binutils...$(DEFAULT_COL)"
$(VERBOSE)mkdir -p $(CONTRIB_DIR)
$(VERBOSE)tar xfj $^ -C $(CONTRIB_DIR) && touch $@
build/$(PLATFORM)/binutils/Makefile: $(CONTRIB_DIR)/binutils-$(BINUTILS_VERSION)/configure
$(ECHO) "$(BRIGHT_COL)configuring binutils...$(DEFAULT_COL)"
$(VERBOSE)mkdir -p $(dir $@)
$(VERBOSE)cd $(dir $@); ../../../$(CONTRIB_DIR)/binutils-$(BINUTILS_VERSION)/configure $(BINUTILS_CONFIG)
$(BINUTILS_BINARIES): build/$(PLATFORM)/binutils/Makefile
$(ECHO) "$(BRIGHT_COL)builing binutils...$(DEFAULT_COL)"
$(VERBOSE)$(MAKE) -C $(dir $<) $(MAKE_OPT)
$(BINUTILS_INSTALLED_BINARIES): $(BINUTILS_BINARIES)
$(ECHO) "$(BRIGHT_COL)installing binutils...$(DEFAULT_COL)"
$(VERBOSE)for i in binutils gas ld intl opcodes; do \
$(MAKE) -C build/$(PLATFORM)/binutils/$$i install-strip; done
$(VERBOSE)$(MAKE) -C build/$(PLATFORM)/binutils/libiberty install
COMMON_LIB_CONFIG = --prefix=$(LOCAL_LIB_INSTALL_LOCATION) \
--disable-shared --enable-static
GMP_CONFIG = $(COMMON_LIB_CONFIG)
MPFR_CONFIG = $(COMMON_LIB_CONFIG) --with-gmp=$(LOCAL_LIB_INSTALL_LOCATION)
MPC_CONFIG = $(COMMON_LIB_CONFIG) --with-gmp=$(LOCAL_LIB_INSTALL_LOCATION) \
--with-mpfr=$(LOCAL_LIB_INSTALL_LOCATION)
$(LOCAL_LIB_INSTALL_LOCATION)/lib/libgmp.a: build/gmp/Makefile
$(LOCAL_LIB_INSTALL_LOCATION)/lib/libmpfr.a: build/mpfr/Makefile
$(LOCAL_LIB_INSTALL_LOCATION)/lib/libmpc.a: build/mpc/Makefile
# rule to build libgmp, libmpfr, and libmpc
$(LOCAL_LIB_INSTALL_LOCATION)/lib/lib%.a:
$(ECHO) "$(BRIGHT_COL)building lib$*...$(DEFAULT_COL)"
$(VERBOSE)make -C build/$* all install
build/gmp/Makefile: $(CONTRIB_DIR)/gmp-$(GMP_VERSION)/configure
build/gmp/Makefile:
$(ECHO) "$(BRIGHT_COL)configuring libgmp...$(DEFAULT_COL)"
$(VERBOSE)mkdir -p $(dir $@)
$(VERBOSE)cd $(dir $@); \
../../$(CONTRIB_DIR)/gmp-$(GMP_VERSION)/configure $(GMP_CONFIG)
build/mpfr/Makefile: $(CONTRIB_DIR)/mpfr-$(MPFR_VERSION)/configure \
$(LOCAL_LIB_INSTALL_LOCATION)/lib/libgmp.a
build/mpfr/Makefile:
$(ECHO) "$(BRIGHT_COL)configuring libmpfr...$(DEFAULT_COL)"
$(VERBOSE)mkdir -p $(dir $@)
$(VERBOSE)cd $(dir $@); \
../../$(CONTRIB_DIR)/mpfr-$(MPFR_VERSION)/configure $(MPFR_CONFIG)
build/mpc/Makefile: $(CONTRIB_DIR)/mpc-$(MPC_VERSION)/configure \
$(LOCAL_LIB_INSTALL_LOCATION)/lib/libgmp.a \
$(LOCAL_LIB_INSTALL_LOCATION)/lib/libmpfr.a
build/mpc/Makefile:
$(ECHO) "$(BRIGHT_COL)configuring libmpc...$(DEFAULT_COL)"
$(VERBOSE)mkdir -p $(dir $@)
$(VERBOSE)cd $(dir $@); \
../../$(CONTRIB_DIR)/mpc-$(MPC_VERSION)/configure $(MPC_CONFIG)
build/$(PLATFORM)/gcc/Makefile: $(CONTRIB_DIR)/gcc-$(GCC_VERSION)/configure \
$(BINUTILS_INSTALLED_BINARIES) \
$(LOCAL_LIB_INSTALL_LOCATION)/lib/libgmp.a \
$(LOCAL_LIB_INSTALL_LOCATION)/lib/libmpfr.a \
$(LOCAL_LIB_INSTALL_LOCATION)/lib/libmpc.a
build/$(PLATFORM)/gcc/Makefile:
$(ECHO) "$(BRIGHT_COL)configuring gcc...$(DEFAULT_COL)"
$(VERBOSE)mkdir -p $(dir $@)
$(VERBOSE)cd $(dir $@); \
host_configargs="$(HOST_CONFIG_ARGS)" \
target_configargs="$(TARGET_CONFIG_ARGS)" \
../../../$(CONTRIB_DIR)/gcc-$(GCC_VERSION)/configure $(GCC_CONFIG)
$(GCC_BINARIES): build/$(PLATFORM)/gcc/Makefile \
$(LINK_SPEC_H_$(PLATFORM)) \
$(LD_SCRIPT_$(PLATFORM)) \
$(LIBC)
$(GCC_BINARIES): build/$(PLATFORM)/gcc/Makefile
$(ECHO) "$(BRIGHT_COL)builing gcc...$(DEFAULT_COL)"
$(VERBOSE)$(MAKE) -C $(dir $<) $(MAKE_OPT)
$(GCC_INSTALLED_BINARIES): $(GCC_BINARIES)
$(ECHO) "$(BRIGHT_COL)installing gcc...$(DEFAULT_COL)"
$(VERBOSE)$(MAKE) -C build/$(PLATFORM)/gcc $(GCC_INSTALL_RULE)
$(DOWNLOAD_DIR)/gdb-$(GDB_VERSION).tar.bz2: $(DOWNLOAD_DIR)
$(ECHO) "$(BRIGHT_COL)downloading gdb...$(DEFAULT_COL)"
$(VERBOSE)wget -c -P $(DOWNLOAD_DIR) $(GDB_DOWNLOAD_URL)/gdb-$(GDB_VERSION).tar.bz2 && touch $@
$(VERBOSE)wget -c -P $(DOWNLOAD_DIR) $(GDB_DOWNLOAD_URL)/gdb-$(GDB_VERSION).tar.bz2.sig && touch $@
$(VERBOSE)$(SIGVERIFIER) $(DOWNLOAD_DIR)/gdb-$(GDB_VERSION).tar.bz2 $(DOWNLOAD_DIR)/gdb-$(GDB_VERSION).tar.bz2.sig GNU
$(CONTRIB_DIR)/gdb-$(GDB_VERSION): $(DOWNLOAD_DIR)/gdb-$(GDB_VERSION).tar.bz2
$(ECHO) "$(BRIGHT_COL)unpacking gdb...$(DEFAULT_COL)"
$(VERBOSE)mkdir -p $(CONTRIB_DIR)
$(VERBOSE)tar xfj $^ -C $(CONTRIB_DIR) && touch $@
include $(GENODE_DIR)/tool/tool_chain_gdb_patches.inc
build/$(PLATFORM)/gdb/Makefile: $(CONTRIB_DIR)/gdb-$(GDB_VERSION)/configure
$(ECHO) "$(BRIGHT_COL)configuring gdb...$(DEFAULT_COL)"
$(VERBOSE)mkdir -p $(dir $@)
$(VERBOSE)cd $(dir $@); \
../../../$(CONTRIB_DIR)/gdb-$(GDB_VERSION)/configure $(COMMON_CONFIG)
$(GDB_BINARIES): build/$(PLATFORM)/gdb/Makefile
$(ECHO) "$(BRIGHT_COL)builing gdb...$(DEFAULT_COL)"
$(VERBOSE)$(MAKE) -C $(dir $<) $(MAKE_OPT)
$(GDB_INSTALLED_BINARIES): $(GDB_BINARIES)
$(ECHO) "$(BRIGHT_COL)installing gdb...$(DEFAULT_COL)"
$(VERBOSE)$(MAKE) -C build/$(PLATFORM)/gdb install
#
# Clean rules
#
clean:
rm -rf $(addprefix $(CONTRIB_DIR)/,binutils-$(BINUTILS_VERSION) gcc-$(GCC_VERSION))
rm -rf build
cleanall: clean
rm -rf $(DOWNLOAD_DIR)/$(BINUTILS_DOWNLOAD_TBZ2)
rm -rf $(DOWNLOAD_DIR)/gcc-$(GCC_VERSION).tar.bz2
#
# Install rules
#
install: build_all
$(ECHO) "$(BRIGHT_COL)installing tool chain to '$(INSTALL_LOCATION)'...$(DEFAULT_COL)"
$(VERBOSE)sudo cp -a --remove-destination --no-target-directory $(LOCAL_INSTALL_LOCATION) $(INSTALL_LOCATION)