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
25 # For musl, steps 2 and 4 are skipped, and step 3 is done after 5
29 # subdirectories to descend into
30 $(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
) $(if
$(CONFIG_USE_MOLD
),mold
)
32 # builddir dependencies
33 ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN
),)
35 $(curdir
)/gcc
/initial
/compile
:=$(curdir
)/binutils
/compile
36 $(curdir
)/kernel-headers
/compile
:=$(curdir
)/gcc
/initial
/compile
38 $(curdir
)/builddirs
+= $(LIBC
)/headers gcc
/minimal
39 $(curdir
)/gcc
/minimal
/compile
:=$(curdir
)/binutils
/compile
40 $(curdir
)/kernel-headers
/compile
:=$(curdir
)/gcc
/minimal
/compile
41 $(curdir
)/$(LIBC
)/headers
/compile
:=$(curdir
)/kernel-headers
/compile
42 $(curdir
)/gcc
/initial
/compile
:=$(curdir
)/$(LIBC
)/headers
/compile
45 $(curdir
)/$(LIBC
)/compile
:=$(curdir
)/gcc
/initial
/compile
$(curdir
)/kernel-headers
/compile
46 $(curdir
)/gcc
/final
/compile
:=$(curdir
)/$(LIBC
)/compile
51 $(TOOLCHAIN_DIR
)/info.mk
: .config
52 @for
dir in
$(TOOLCHAIN_DIR
); do
( \
53 $(if
$(QUIET
),,set
-x
;) \
58 mkdir
-p stamp lib usr
/include usr
/lib
; \
60 @grep GCC_VERSION
$@
>/dev
/null
2>&1 ||
$(INSTALL_DATA
) $(TOPDIR
)/toolchain
/info.mk
$@
66 ifneq ($(wildcard $(TOPDIR
)/.git
),)
67 $(TOOLCHAIN_DIR
)/stamp
/.ver_check
: $(TMP_DIR
)/.build
68 cd
"$(TOPDIR)"; git log
--format
=%h
-1 toolchain
> $(TMP_DIR
)/.ver_check
69 cmp
-s
$(TMP_DIR
)/.ver_check
$@ ||
{ \
70 rm -rf
$(BUILD_DIR
) $(STAGING_DIR
) $(TOOLCHAIN_DIR
) $(BUILD_DIR_TOOLCHAIN
); \
71 mkdir
-p
$(TOOLCHAIN_DIR
)/stamp
; \
72 mv
$(TMP_DIR
)/.ver_check
$@
; \
75 $(TOOLCHAIN_DIR
)/info.mk
$(STAGING_DIR
)/.prepared
: $(TOOLCHAIN_DIR
)/stamp
/.ver_check
79 # prerequisites for the individual targets
80 $(curdir
)/ := .config prereq
81 $(curdir
)//compile
= $(STAGING_DIR
)/.prepared
$(TOOLCHAIN_DIR
)/info.mk
$(tools
/stamp-compile
)
84 $(TOOLCHAIN_DIR
)/stamp
/.gcc_final_installed
:
87 $(curdir
)/install: $(curdir
)/compile
89 $(eval
$(call stampfile
,$(curdir
),toolchain
,compile
,$(TOOLCHAIN_DIR
)/stamp
/.gcc_final_installed
,,$(TOOLCHAIN_DIR
)))
90 $(eval
$(call stampfile
,$(curdir
),toolchain
,check,$(TMP_DIR
)/.build
))
91 $(eval
$(call subdir
,$(curdir
)))