]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blob - src/uClibc/make/binutils.mk
09b5b675580a5f96e2b37214bf267639b7e33fcd
[people/pmueller/ipfire-2.x.git] / src / uClibc / make / binutils.mk
1 #############################################################
2 #
3 # build binutils for use on the host system
4 #
5 #############################################################
6 #BINUTILS_SITE:=http://ftp.kernel.org/pub/linux/devel/binutils
7 BINUTILS_SOURCE:=binutils-2.15.90.0.3.tar.bz2
8 BINUTILS_DIR:=$(TOOL_BUILD_DIR)/binutils-2.15.90.0.3
9 BINUTILS_CAT:=bzcat
10
11 BINUTILS_DIR1:=$(TOOL_BUILD_DIR)/binutils-build
12
13 $(DL_DIR)/$(BINUTILS_SOURCE):
14 # $(WGET) -P $(DL_DIR) $(BINUTILS_SITE)/$(BINUTILS_SOURCE)
15
16 $(BINUTILS_DIR)/.unpacked: $(DL_DIR)/$(BINUTILS_SOURCE)
17 mkdir -p $(TOOL_BUILD_DIR)
18 mkdir -p $(DL_DIR)
19 mkdir -p $(STAGING_DIR)
20 mkdir -p $(STAGING_DIR)/lib/gcc-lib
21 mkdir -p $(STAGING_DIR)/usr/bin;
22 mkdir -p $(STAGING_DIR)/$(GNU_TARGET_NAME)/
23 (cd $(STAGING_DIR)/$(GNU_TARGET_NAME); ln -fs ../lib)
24 (cd $(STAGING_DIR)/$(GNU_TARGET_NAME); ln -fs ../include)
25 (cd $(STAGING_DIR)/$(GNU_TARGET_NAME); ln -fs ../include sys-include)
26 $(BINUTILS_CAT) $(DL_DIR)/$(BINUTILS_SOURCE) | tar -C $(TOOL_BUILD_DIR) -xvf -
27 touch $(BINUTILS_DIR)/.unpacked
28
29 $(BINUTILS_DIR)/.patched: $(BINUTILS_DIR)/.unpacked
30 # Apply any files named binutils-*.patch from the source directory to binutils
31 $(SOURCE_DIR)/patch-kernel.sh $(BINUTILS_DIR) $(SOURCE_DIR) binutils-*.patch
32 touch $(BINUTILS_DIR)/.patched
33
34 $(BINUTILS_DIR1)/.configured: $(BINUTILS_DIR)/.patched
35 mkdir -p $(BINUTILS_DIR1)
36 (cd $(BINUTILS_DIR1); CC="$(HOSTCC)" \
37 CC_FOR_HOST="$(HOSTCC)" \
38 CXX_FOR_HOST="$(HOSTCC)" \
39 LDFLAGS="$(HOSTLDFLAGS)" \
40 $(BINUTILS_DIR)/configure \
41 --target=$(GNU_TARGET_NAME) \
42 --host=$(GNU_HOST_NAME) \
43 --build=$(GNU_HOST_NAME) \
44 --prefix=$(STAGING_DIR) \
45 --exec-prefix=$(STAGING_DIR) \
46 --bindir=$(STAGING_DIR)/bin \
47 --sbindir=$(STAGING_DIR)/sbin \
48 --sysconfdir=$(STAGING_DIR)/etc \
49 --datadir=$(STAGING_DIR)/share \
50 --includedir=$(STAGING_DIR)/include \
51 --libdir=$(STAGING_DIR)/lib \
52 --localstatedir=$(STAGING_DIR)/var \
53 --mandir=$(STAGING_DIR)/man \
54 --infodir=$(STAGING_DIR)/info \
55 --enable-targets=$(GNU_TARGET_NAME) \
56 --with-sysroot=$(STAGING_DIR) \
57 $(MULTILIB) \
58 $(SOFT_FLOAT_CONFIG_OPTION) \
59 --program-prefix=$(ARCH)-linux-);
60 touch $(BINUTILS_DIR1)/.configured
61
62 $(BINUTILS_DIR1)/binutils/objdump: $(BINUTILS_DIR1)/.configured
63 $(MAKE) $(JLEVEL) CC_FOR_HOST="$(HOSTCC)" \
64 CXX_FOR_HOST="$(HOSTCC)" LDFLAGS="$(HOSTLDFLAGS)" \
65 -C $(BINUTILS_DIR1);
66
67 $(STAGING_DIR)/$(GNU_TARGET_NAME)/bin/ld: $(BINUTILS_DIR1)/binutils/objdump
68 $(MAKE) $(JLEVEL) CC_FOR_HOST="$(HOSTCC)" \
69 CXX_FOR_HOST="$(HOSTCC)" LDFLAGS="$(HOSTLDFLAGS)" \
70 -C $(BINUTILS_DIR1) install;
71 rm -rf $(STAGING_DIR)/info $(STAGING_DIR)/man $(STAGING_DIR)/share/doc \
72 $(STAGING_DIR)/share/locale
73 mkdir -p $(STAGING_DIR)/usr/bin;
74 set -e; \
75 for app in addr2line ar as c++filt gprof ld nm objcopy \
76 objdump ranlib readelf size strings strip ; \
77 do \
78 if [ -x $(STAGING_DIR)/bin/$(ARCH)-linux-$${app} ] ; then \
79 (cd $(STAGING_DIR)/$(GNU_TARGET_NAME)/bin; \
80 ln -fs ../../bin/$(ARCH)-linux-$${app} $${app}; \
81 ); \
82 (cd $(STAGING_DIR)/usr/bin; \
83 ln -fs ../../bin/$(ARCH)-linux-$${app} $${app}; \
84 ); \
85 fi; \
86 done;
87
88 $(STAGING_DIR)/lib/libg.a:
89 mkdir -p $(STAGING_DIR)/$(GNU_TARGET_NAME)/bin
90 mkdir -p $(STAGING_DIR)/usr/include/
91 mkdir -p $(STAGING_DIR)/usr/lib/
92 $(TARGET_CROSS)ar rv $(STAGING_DIR)/lib/libg.a;
93 cp $(BINUTILS_DIR)/include/ansidecl.h $(STAGING_DIR)/usr/include/
94 cp $(BINUTILS_DIR)/include/bfdlink.h $(STAGING_DIR)/usr/include/
95 cp $(BINUTILS_DIR)/include/dis-asm.h $(STAGING_DIR)/usr/include/
96 cp $(BINUTILS_DIR)/include/libiberty.h $(STAGING_DIR)/usr/include/
97 cp $(BINUTILS_DIR)/include/symcat.h $(STAGING_DIR)/usr/include/
98 cp $(BINUTILS_DIR1)/bfd/bfd.h $(STAGING_DIR)/usr/include/
99 cp -a $(BINUTILS_DIR1)/bfd/.libs/* $(STAGING_DIR)/usr/lib/
100 cp -a $(BINUTILS_DIR1)/opcodes/.libs/* $(STAGING_DIR)/usr/lib/
101 cp -a $(BINUTILS_DIR1)/libiberty/libiberty.a $(STAGING_DIR)/usr/lib/
102
103 binutils: $(STAGING_DIR)/$(GNU_TARGET_NAME)/bin/ld $(STAGING_DIR)/lib/libg.a
104
105 binutils-source: $(DL_DIR)/$(BINUTILS_SOURCE)
106
107 binutils-clean:
108 rm -f $(STAGING_DIR)/bin/$(GNU_TARGET_NAME)*
109 -$(MAKE) -C $(BINUTILS_DIR1) clean
110
111 binutils-dirclean:
112 rm -rf $(BINUTILS_DIR1)
113
114
115
116 #############################################################
117 #
118 # build binutils for use on the target system
119 #
120 #############################################################
121 BINUTILS_DIR2:=$(BUILD_DIR)/binutils-target
122 $(BINUTILS_DIR2)/.configured: $(BINUTILS_DIR)/.patched
123 mkdir -p $(BINUTILS_DIR2)
124 mkdir -p $(TARGET_DIR)/usr/include
125 mkdir -p $(TARGET_DIR)/usr/$(GNU_TARGET_NAME)/
126 (cd $(BINUTILS_DIR2); \
127 $(TARGET_CONFIGURE_OPTS) \
128 CFLAGS="$(TARGET_CFLAGS)" \
129 CC_FOR_BUILD="$(HOSTCC)" \
130 CXX_FOR_BUILD="$(HOSTCC)" \
131 LDFLAGS="$(HOSTLDFLAGS)" \
132 AR_FOR_TARGET=$(TARGET_CROSS)ar \
133 AS_FOR_TARGET=$(TARGET_CROSS)as \
134 LD_FOR_TARGET=$(TARGET_CROSS)ld \
135 NM_FOR_TARGET=$(TARGET_CROSS)nm \
136 CC_FOR_TARGET=$(TARGET_CROSS)gcc$(TARGET_SOFT_FLOAT) \
137 GCC_FOR_TARGET=$(TARGET_CROSS)gcc$(TARGET_SOFT_FLOAT) \
138 CXX_FOR_TARGET=$(TARGET_CROSS)g++$(TARGET_SOFT_FLOAT) \
139 RANLIB_FOR_TARGET=$(TARGET_CROSS)ranlib \
140 $(BINUTILS_DIR)/configure \
141 --target=$(GNU_TARGET_NAME) \
142 --host=$(GNU_TARGET_NAME) \
143 --build=$(ARCH)-linux \
144 --prefix=/usr \
145 --mandir=/usr/man \
146 --infodir=/usr/info \
147 $(MULTILIB) \
148 $(SOFT_FLOAT_CONFIG_OPTION) \
149 );
150 touch $(BINUTILS_DIR2)/.configured
151
152 $(BINUTILS_DIR2)/binutils/objdump: $(BINUTILS_DIR2)/.configured
153 $(MAKE) $(JLEVEL) -C $(BINUTILS_DIR2) \
154 CC_FOR_BUILD="$(HOSTCC)" \
155 CXX_FOR_BUILD="$(HOSTCC)" \
156 LDFLAGS="$(HOSTLDFLAGS)" \
157 AR_FOR_TARGET=$(TARGET_CROSS)ar \
158 AS_FOR_TARGET=$(TARGET_CROSS)as \
159 LD_FOR_TARGET=$(TARGET_CROSS)ld \
160 NM_FOR_TARGET=$(TARGET_CROSS)nm \
161 CC_FOR_TARGET=$(TARGET_CROSS)gcc$(TARGET_SOFT_FLOAT) \
162 GCC_FOR_TARGET=$(TARGET_CROSS)gcc$(TARGET_SOFT_FLOAT) \
163 CXX_FOR_TARGET=$(TARGET_CROSS)g++$(TARGET_SOFT_FLOAT) \
164 RANLIB_FOR_TARGET=$(TARGET_CROSS)ranlib
165 touch -c $(BINUTILS_DIR2)/binutils/objdump
166
167 $(TARGET_DIR)/usr/bin/ld: $(BINUTILS_DIR2)/binutils/objdump
168 $(MAKE) $(JLEVEL) -C $(BINUTILS_DIR2) \
169 CC_FOR_BUILD="$(HOSTCC)" \
170 CXX_FOR_BUILD="$(HOSTCC)" \
171 LDFLAGS="$(HOSTLDFLAGS)" \
172 AR_FOR_TARGET=$(TARGET_CROSS)ar \
173 AS_FOR_TARGET=$(TARGET_CROSS)as \
174 LD_FOR_TARGET=$(TARGET_CROSS)ld \
175 NM_FOR_TARGET=$(TARGET_CROSS)nm \
176 CC_FOR_TARGET=$(TARGET_CROSS)gcc$(TARGET_SOFT_FLOAT) \
177 GCC_FOR_TARGET=$(TARGET_CROSS)gcc$(TARGET_SOFT_FLOAT) \
178 CXX_FOR_TARGET=$(TARGET_CROSS)g++$(TARGET_SOFT_FLOAT) \
179 RANLIB_FOR_TARGET=$(TARGET_CROSS)ranlib \
180 prefix=/usr \
181 infodir=/usr/info \
182 mandir=/usr/man \
183 DESTDIR=$(TARGET_DIR) install
184 rm -rf $(TARGET_DIR)/share/locale $(TARGET_DIR)/usr/info \
185 $(TARGET_DIR)/usr/man $(TARGET_DIR)/usr/share/doc
186 -$(STRIP) $(TARGET_DIR)/usr/$(GNU_TARGET_NAME)/bin/* > /dev/null 2>&1
187 -$(STRIP) $(TARGET_DIR)/usr/bin/* > /dev/null 2>&1
188
189 $(TARGET_DIR)/usr/lib/libg.a:
190 $(TARGET_CROSS)ar rv $(TARGET_DIR)/usr/lib/libg.a;
191 cp $(BINUTILS_DIR)/include/ansidecl.h $(TARGET_DIR)/usr/include/
192 cp $(BINUTILS_DIR)/include/bfdlink.h $(TARGET_DIR)/usr/include/
193 cp $(BINUTILS_DIR)/include/dis-asm.h $(TARGET_DIR)/usr/include/
194 cp $(BINUTILS_DIR)/include/libiberty.h $(TARGET_DIR)/usr/include/
195 cp $(BINUTILS_DIR)/include/symcat.h $(TARGET_DIR)/usr/include/
196 cp $(BINUTILS_DIR2)/bfd/bfd.h $(TARGET_DIR)/usr/include/
197 cp -a $(BINUTILS_DIR2)/bfd/.libs/* $(TARGET_DIR)/usr/lib/
198 cp -a $(BINUTILS_DIR2)/opcodes/.libs/* $(TARGET_DIR)/usr/lib/
199 cp -a $(BINUTILS_DIR2)/libiberty/libiberty.a $(TARGET_DIR)/usr/lib/
200
201 binutils_target: $(GCC_DEPENDANCY) $(TARGET_DIR)/usr/bin/ld $(TARGET_DIR)/usr/lib/libg.a
202
203 binutils_target-clean:
204 rm -f $(TARGET_DIR)/bin/$(GNU_TARGET_NAME)*
205 -$(MAKE) -C $(BINUTILS_DIR2) clean
206
207 binutils_target-dirclean:
208 rm -rf $(BINUTILS_DIR2)
209