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/compile
11 # build & install binutils
12 # 2) toolchain/gcc/minimal/compile
13 # build & install a minimal gcc, needed for steps 3 & 4
14 # 3) toolchain/kernel-headers/compile
15 # install kernel headers, needed for step 4
16 # 4) toolchain/libc/headers/compile
17 # build & install libc headers & support files, needed for step 5
18 # 5) toolchain/gcc/initial/compile
19 # build & install an initial gcc, needed for step 6
20 # 6) toolchain/libc/compile
21 # build & install the final libc
22 # 7) toolchain/gcc/final/compile
23 # build & install the final gcc
24 # 8) toolchain/libc/utils/compile
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_EXTERNAL_TOOLCHAIN
),wrapper
,kernel-headers binutils gcc
/initial gcc
/final
$(LIBC
) fortify-headers
) $(if
$(CONFIG_NASM
),nasm
)
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
/compile
41 $(curdir
)/$(LIBC
)/compile
:=$(curdir
)/kernel-headers
/compile
43 $(curdir
)/builddirs
+= $(LIBC
)/headers gcc
/minimal
44 $(curdir
)/gcc
/minimal
/compile
:=$(curdir
)/binutils
/compile
45 $(curdir
)/kernel-headers
/compile
:=$(curdir
)/gcc
/minimal
/compile
46 $(curdir
)/$(LIBC
)/headers
/compile
:=$(curdir
)/kernel-headers
/compile
47 $(curdir
)/gcc
/initial
/compile
:=$(curdir
)/$(LIBC
)/headers
/compile
50 $(curdir
)/gcc
/initial
/compile
+=$(curdir
)/binutils
/compile
51 $(curdir
)/$(LIBC
)/compile
:=$(curdir
)/gcc
/initial
/compile
52 $(curdir
)/gcc
/final
/compile
:=$(curdir
)/$(LIBC
)/compile
53 $(curdir
)/$(LIBC
)/utils
/compile
:=$(curdir
)/gcc
/final
/compile
58 $(TOOLCHAIN_DIR
)/info.mk
: .config
59 @for
dir in
$(TOOLCHAIN_DIR
); do
( \
60 $(if
$(QUIET
),,set
-x
;) \
65 mkdir
-p stamp lib usr
/include usr
/lib
; \
67 @grep GCC_VERSION
$@
>/dev
/null
2>&1 ||
$(INSTALL_DATA
) $(TOPDIR
)/toolchain
/info.mk
$@
73 ifneq ($(wildcard $(TOPDIR
)/.git
),)
74 $(TOOLCHAIN_DIR
)/stamp
/.ver_check
: $(TMP_DIR
)/.build
75 cd
"$(TOPDIR)"; git log
--format
=%h
-1 toolchain
> $(TMP_DIR
)/.ver_check
76 cmp
-s
$(TMP_DIR
)/.ver_check
$@ ||
{ \
77 rm -rf
$(BUILD_DIR
) $(STAGING_DIR
) $(TOOLCHAIN_DIR
) $(BUILD_DIR_TOOLCHAIN
); \
78 mkdir
-p
$(TOOLCHAIN_DIR
)/stamp
; \
79 mv
$(TMP_DIR
)/.ver_check
$@
; \
82 $(TOOLCHAIN_DIR
)/info.mk
$(STAGING_DIR
)/.prepared
: $(TOOLCHAIN_DIR
)/stamp
/.ver_check
86 # prerequisites for the individual targets
87 $(curdir
)/ := .config prereq
88 $(curdir
)//compile
= $(STAGING_DIR
)/.prepared
$(TOOLCHAIN_DIR
)/info.mk
$(tools
/stamp-compile
)
91 $(TOOLCHAIN_DIR
)/stamp
/.gcc-initial_installed
:
94 $(curdir
)/install: $(curdir
)/compile
96 $(eval
$(call stampfile
,$(curdir
),toolchain
,compile
,$(TOOLCHAIN_DIR
)/stamp
/.gcc-initial_installed
,,$(TOOLCHAIN_DIR
)))
97 $(eval
$(call stampfile
,$(curdir
),toolchain
,check,$(TMP_DIR
)/.build
))
98 $(eval
$(call subdir
,$(curdir
)))