2 # Copyright (C) 2007-2009 OpenWrt.org
4 # This is free software, licensed under the GNU General Public License v2.
5 # See /LICENSE for more information.
7 # Main makefile for the toolchain
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
27 # For musl, steps 2 and 4 are skipped, and step 3 is done after 5
31 # subdirectories to descend into
32 $(curdir
)/builddirs
:= $(if
$(CONFIG_GDB
),gdb
) $(if
$(CONFIG_INSIGHT
),insight
) $(if
$(CONFIG_EXTERNAL_TOOLCHAIN
),wrapper
,kernel-headers binutils gcc
/initial gcc
/final
$(LIBC
) fortify-headers
) $(if
$(CONFIG_YASM
),yasm
)
33 ifdef CONFIG_USE_UCLIBC
34 $(curdir
)/builddirs
+= $(LIBC
)/utils
37 # builddir dependencies
38 ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN
),)
40 $(curdir
)/kernel-headers
/compile
:=$(curdir
)/gcc
/initial
/install
41 $(curdir
)/$(LIBC
)/compile
:=$(curdir
)/kernel-headers
/install
43 $(curdir
)/builddirs
+= $(LIBC
)/headers gcc
/minimal
44 $(curdir
)/gcc
/minimal
/compile
:=$(curdir
)/binutils
/install
45 $(curdir
)/kernel-headers
/compile
:=$(curdir
)/gcc
/minimal
/install
46 $(curdir
)/gcc
/initial
/prepare
:=$(curdir
)/gcc
/minimal
/prepare
47 $(curdir
)/$(LIBC
)/prepare
:=$(curdir
)/$(LIBC
)/headers
/prepare
48 $(curdir
)/$(LIBC
)/headers
/compile
:=$(curdir
)/kernel-headers
/install
49 $(curdir
)/gcc
/initial
/compile
:=$(curdir
)/$(LIBC
)/headers
/install
52 $(curdir
)/gcc
/initial
/compile
+=$(curdir
)/binutils
/install
53 $(curdir
)/gcc
/final
/prepare
:=$(curdir
)/gcc
/initial
/prepare
54 $(curdir
)/$(LIBC
)/compile
:=$(curdir
)/gcc
/initial
/install
55 $(curdir
)/gcc
/final
/compile
:=$(curdir
)/$(LIBC
)/install
56 $(curdir
)/$(LIBC
)/utils
/compile
:=$(curdir
)/gcc
/final
/install
57 $(curdir
)/$(LIBC
)/utils
/prepare
:=$(curdir
)/$(LIBC
)/headers
/prepare
60 $(curdir
)/builddirs-compile
:=$($(curdir
)/builddirs-prepare
)
61 $(curdir
)/builddirs-install
:=$($(curdir
)/builddirs-compile
)
65 $(TOOLCHAIN_DIR
)/info.mk
: .config
66 @for
dir in
$(TOOLCHAIN_DIR
); do
( \
67 $(if
$(QUIET
),,set
-x
;) \
72 mkdir
-p stamp lib usr
/include usr
/lib
; \
74 @grep GCC_VERSION
$@
>/dev
/null
2>&1 ||
$(INSTALL_DATA
) $(TOPDIR
)/toolchain
/info.mk
$@
79 # prerequisites for the individual targets
80 $(curdir
)/ := .config prereq
81 $(curdir
)//prepare
= $(STAGING_DIR
)/.prepared
$(TOOLCHAIN_DIR
)/info.mk
$(tools
/stamp-install
)
82 $(curdir
)//compile
= $(1)/prepare
83 $(curdir
)//install = $(1)/compile
86 $(TOOLCHAIN_DIR
)/stamp
/.gcc-initial_installed
:
89 $(eval
$(call stampfile
,$(curdir
),toolchain
,install,$(TOOLCHAIN_DIR
)/stamp
/.gcc-initial_installed
,,$(TOOLCHAIN_DIR
)))
90 $(eval
$(call stampfile
,$(curdir
),toolchain
,check,$(TMP_DIR
)/.build
))
91 $(eval
$(call subdir
,$(curdir
)))