1# 2# Copyright (C) 2007-2009 OpenWrt.org 3# 4# This is free software, licensed under the GNU General Public License v2. 5# See /LICENSE for more information. 6# 7# Main makefile for the toolchain 8# 9# Steps: 10# 1) toolchain/binutils/install 11# build & install binutils 12# 2) toolchain/gcc/minimal/install 13# build & install a minimal gcc, needed for steps 3 & 4 14# 3) toolchain/kernel-headers/install 15# install kernel headers, needed for step 4 16# 4) toolchain/libc/headers/install 17# build & install libc headers & support files, needed for step 5 18# 5) toolchain/gcc/initial/install 19# build & install an initial gcc, needed for step 6 20# 6) toolchain/libc/install 21# build & install the final libc 22# 7) toolchain/gcc/final/install 23# build & install the final gcc 24# 8) toolchain/libc/utils/install 25# build & install libc utilities 26# 27 28curdir:=toolchain 29 30# subdirectories to descend into 31$(curdir)/builddirs := $(if $(CONFIG_GDB),gdb) $(if $(CONFIG_INSIGHT),insight) $(if $(CONFIG_EXTERNAL_TOOLCHAIN),wrapper,kernel-headers binutils gcc/minimal gcc/initial gcc/final $(LIBC)/headers $(LIBC) fortify-headers) 32ifdef CONFIG_USE_UCLIBC 33 $(curdir)/builddirs += $(LIBC)/utils 34endif 35$(curdir)/builddirs-compile:=$($(curdir)/builddirs-prepare) 36$(curdir)/builddirs-install:=$($(curdir)/builddirs-compile) 37 38# builddir dependencies 39ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) 40 $(curdir)/gcc/minimal/compile:=$(curdir)/binutils/install 41 $(curdir)/kernel-headers/install:=$(curdir)/gcc/minimal/install 42 $(curdir)/gcc/initial/prepare:=$(curdir)/gcc/minimal/prepare 43 $(curdir)/gcc/final/prepare:=$(curdir)/gcc/initial/prepare 44 45 $(curdir)/$(LIBC)/headers/compile:=$(curdir)/kernel-headers/install 46 $(curdir)/gcc/initial/compile:=$(curdir)/$(LIBC)/headers/install 47 $(curdir)/$(LIBC)/compile:=$(curdir)/gcc/initial/install 48 $(curdir)/gcc/final/compile:=$(curdir)/$(LIBC)/install 49 $(curdir)/$(LIBC)/utils/compile:=$(curdir)/gcc/final/install 50 $(curdir)/$(LIBC)/prepare:=$(curdir)/$(LIBC)/headers/prepare 51 $(curdir)/$(LIBC)/utils/prepare:=$(curdir)/$(LIBC)/headers/prepare 52endif 53 54ifndef DUMP_TARGET_DB 55ifneq ($(ARCH),) 56 $(TOOLCHAIN_DIR)/info.mk: .config 57 @for dir in $(TOOLCHAIN_DIR); do ( \ 58 $(if $(QUIET),,set -x;) \ 59 mkdir -p "$$dir"; \ 60 cd "$$dir"; \ 61 ln -nsf lib lib64; \ 62 ln -nsf lib lib32; \ 63 mkdir -p stamp lib usr/include usr/lib ; \ 64 ); done 65 @grep GCC_VERSION $@ >/dev/null 2>&1 || $(INSTALL_DATA) $(TOPDIR)/toolchain/info.mk $@ 66 @touch $@ 67endif 68endif 69 70# prerequisites for the individual targets 71$(curdir)/ := .config prereq 72$(curdir)//prepare = $(STAGING_DIR)/.prepared $(TOOLCHAIN_DIR)/info.mk $(tools/stamp-install) 73$(curdir)//compile = $(1)/prepare 74$(curdir)//install = $(1)/compile 75 76ifndef DUMP_TARGET_DB 77$(TOOLCHAIN_DIR)/stamp/.gcc-initial_installed: 78endif 79 80$(eval $(call stampfile,$(curdir),toolchain,install,$(TOOLCHAIN_DIR)/stamp/.gcc-initial_installed,,$(TOOLCHAIN_DIR))) 81$(eval $(call subdir,$(curdir))) 82 83