summaryrefslogtreecommitdiff
path: root/toolchain/Makefile
blob: 0ac3a5dbab714621397bf485153504cf38086904 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
# This file is part of the OpenADK project. OpenADK is copyrighted
# material, please see the LICENCE file in the top-level directory.

# Steps to build toolchains
# 1) build and install binutils
# 2) build and install mpfr, mpc, libelf and gmp
# 3) build and install initial gcc
# 4) install kernel-headers
# 5) build and install full libc
# 6) build and install full gcc
# 7) build and install gdb debugger

include $(ADK_TOPDIR)/rules.mk

TARGETS:=binutils gmp mpfr mpc libelf

ifeq ($(ADK_BUILD_COMPILER_GCC),y)
TARGETS+=gcc
COMPILER:=gcc
endif
ifeq ($(ADK_BUILD_COMPILER_LLVM),y)
TARGETS+=llvm
COMPILER:=llvm
endif

ifeq ($(ADK_TARGET_LIB_GLIBC),y)
TARGETS+=glibc
CLIB:=glibc
endif
ifeq ($(ADK_TARGET_LIB_UCLIBC_NG),y)
TARGETS+=uclibc-ng
CLIB:=uclibc-ng
endif
ifeq ($(ADK_TARGET_LIB_MUSL),y)
TARGETS+=musl
CLIB:=musl
endif
ifeq ($(ADK_TARGET_LIB_NEWLIB),y)
TARGETS+=newlib
CLIB:=newlib
endif

ifeq ($(ADK_TARGET_BINFMT_FLAT),y)
TARGETS+=elf2flt
ELF2FLT:=elf2flt-install
endif

ifeq ($(ADK_TOOLCHAIN_WITH_GDB),y)
# disable gdb for some architectures
ifeq ($(ADK_TARGET_ARCH_ARC)$(ADK_TARGET_ARCH_CR16)$(ADK_TARGET_ARCH_EPIPHANY)$(ADK_TARGET_ARCH_METAG)$(ADK_TARGET_ARCH_NDS32)$(ADK_TARGET_ARCH_OR1K),)
TARGETS+=gdb
GDB:=gdb-install
endif
endif

ifeq (${ADK_PRELINK},y)
TARGETS+=prelink-cross
endif

DOWNLOAD:=kernel-headers-download $(patsubst %,%-download,$(TARGETS))
TARGETS_INSTALL:=$(patsubst %,%-install,$(TARGETS))
FINAL:=$(patsubst %,%-final,$(COMPILER))
TARGETS_CLEAN:=$(patsubst %,%-clean,$(TARGETS))

install: $(TARGETS_INSTALL)
clean: $(TARGETS_CLEAN)
download: $(DOWNLOAD)
final: $(FINAL)

$(COMPILER)-configure: binutils-install gmp-install mpfr-install mpc-install libelf-install
ifeq ($(ADK_TARGET_LIB_NEWLIB),y)
$(CLIB)-install: $(COMPILER)-configure
else
$(CLIB)-install: $(COMPILER)-configure kernel-headers-configure
endif
$(COMPILER)-install: $(ELF2FLT) $(CLIB)-install
$(COMPILER)-final: $(COMPILER)-install $(GDB)

%-download:
	$(START_TRACE) "toolchain/$(patsubst %-download,%,$@)/download.. "
	$(MAKE) -C $(patsubst %-download,%,$@) fetch
	$(CMD_TRACE) " done"
	$(END_TRACE)

%-prepare:
	$(START_TRACE) "toolchain/$(patsubst %-prepare,%,$@)/prepare.. "
	@if test x"$(patsubst %-prepare,%,$@)" = x"$(CLIB)"; then \
		$(MAKE) -C $(patsubst %-prepare,%,$@) prepare \
		    $(MAKE_TRACE); \
	else \
		$(MAKE) -C $(patsubst %-prepare,%,$@) prepare \
		    CC='$(HOST_CC)' CFLAGS='$(HOST_CFLAGS)' $(MAKE_TRACE); \
	fi
	$(CMD_TRACE) " done"
	$(END_TRACE)

%-configure: %-prepare
	$(START_TRACE) "toolchain/$(patsubst %-configure,%,$@)/configure.. "
	@if test x"$(patsubst %-configure,%,$@)" = x"$(CLIB)"; then \
		$(MAKE) -C $(patsubst %-configure,%,$@) configure \
		    $(MAKE_TRACE); \
	else \
		$(MAKE) -C $(patsubst %-configure,%,$@) configure \
		    CC='$(HOST_CC)' CFLAGS='$(HOST_CFLAGS)' $(MAKE_TRACE); \
	fi
	$(CMD_TRACE) " done"
	$(END_TRACE)

%-compile: %-configure
	$(START_TRACE) "toolchain/$(patsubst %-compile,%,$@)/compile.. "
	@if test x"$(patsubst %-compile,%,$@)" = x"$(CLIB)"; then \
		$(MAKE) -C $(patsubst %-compile,%,$@) compile \
		    $(MAKE_TRACE); \
	else \
		$(MAKE) -C $(patsubst %-compile,%,$@) compile \
		    CC='$(HOST_CC)' CFLAGS='$(HOST_CFLAGS)' CXXFLAGS='$(HOST_STATIC_CXXFLAGS)' $(MAKE_TRACE); \
	fi
	$(CMD_TRACE) " done"
	$(END_TRACE)

%-install: %-compile
	$(START_TRACE) "toolchain/$(patsubst %-install,%,$@)/install.. "
	@if test x"$(patsubst %-install,%,$@)" = x"$(CLIB)"; then \
		$(MAKE) -C $(patsubst %-install,%,$@) install \
		    $(MAKE_TRACE); \
	else \
		$(MAKE) -C $(patsubst %-install,%,$@) install \
		    CC='$(HOST_CC)' CFLAGS='$(HOST_CFLAGS)' CXXFLAGS='$(HOST_STATIC_CXXFLAGS)' $(MAKE_TRACE); \
	fi
	$(CMD_TRACE) " done"
	$(END_TRACE)

%-final: %-install
	$(START_TRACE) "toolchain/$(patsubst %-final,%,$@)/final.. "
	@$(MAKE) -C $(patsubst %-final,%,$@) final $(MAKE_TRACE)
	$(CMD_TRACE) " done"
	$(END_TRACE)

%-clean:
	$(START_TRACE) "toolchain/$(patsubst %-clean,%,$@)/clean.. "
	@$(MAKE) -C $(patsubst %-clean,%,$@) clean $(MAKE_TRACE)
	$(CMD_TRACE) " done"
	$(END_TRACE)