mirror of
https://github.com/genodelabs/genode.git
synced 2025-01-21 03:55:04 +00:00
9c9f67d0d6
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
514 lines
18 KiB
Makefile
Executable File
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)
|
|
|