]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/mklibgcc.in
configure.in (libgcc_visibility): Substitute.
[thirdparty/gcc.git] / gcc / mklibgcc.in
CommitLineData
3ec83fc2
RH
1#!/bin/sh
2# Construct makefile for libgcc.
f0df8029 3# Copyright (C) 2000, 2002 Free Software Foundation, Inc.
3ec83fc2 4#
1322177d 5# This file is part of GCC.
3ec83fc2
RH
6
7# Arguments, taken from the environment, since there are a lot
8# of them, and positional args becomes quite ugly.
9#
10# objext
3ec83fc2 11# LIB1ASMFUNCS
f0df8029
DR
12# LIB2FUNCS_1
13# LIB2FUNCS_2
3fe68d0a 14# LIB2FUNCS_ST
3ec83fc2 15# LIB2ADD
fa9518de 16# LIB2ADD_ST
52a11cbf
RH
17# LIB2ADDEH
18# LIB2ADDEHDEP
3ec83fc2
RH
19# FPBIT
20# FPBIT_FUNCS
fc6aa0a9 21# LIB2_DIVMOD_FUNCS
3ec83fc2
RH
22# DPBIT
23# DPBIT_FUNCS
24# LIBGCC
25# MULTILIBS
26# EXTRA_MULTILIB_PARTS
aefa45d3 27# SHLIB_EXT
50503ac8 28# SHLIB_LINK
50503ac8 29# SHLIB_MULTILIB
83dad10c
RH
30# SHLIB_MKMAP
31# SHLIB_MAPFILES
0ad7574f 32# SHLIB_NM_FLAGS
2bbea3a6 33# SHLIB_INSTALL
3ec83fc2
RH
34
35# Make needs VPATH to be literal.
36echo 'srcdir = @srcdir@'
37echo 'VPATH = @srcdir@'
842391df 38echo 'EQ = ='
3ec83fc2 39echo
3378216a
JM
40echo 'force:'
41echo
3ec83fc2 42
50503ac8
RH
43# Disable SHLIB_LINK if shared libgcc not enabled.
44if [ "@enable_shared@" = "no" ]; then
45 SHLIB_LINK=""
46fi
3ec83fc2 47
8e9bf55e
RH
48# Build lines.
49
50gcc_compile='$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES)'
8e9bf55e
RH
51make_compile='$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
52 AR_FOR_TARGET="$(AR_FOR_TARGET)" \
53 AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \
54 AR_EXTRACT_FOR_TARGET="$(AR_EXTRACT_FOR_TARGET)" \
55 AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \
56 CC="$(CC)" CFLAGS="$(CFLAGS)" \
57 HOST_PREFIX="$(HOST_PREFIX)" \
58 HOST_PREFIX_1="$(HOST_PREFIX_1)" \
59 LANGUAGES="$(LANGUAGES)"'
3ec83fc2 60
7857f134 61# Dependencies for libgcc2.c
52a11cbf 62libgcc2_c_dep='stmp-dirs $(srcdir)/libgcc2.c $(CONFIG_H) $(MACHMODE_H) longlong.h gbl-ctors.h config.status stmp-int-hdrs tsystem.h'" $LIB2ADDEHDEP"
3ec83fc2 63
7857f134 64# Dependencies for fp-bit.c
2aceb30d 65fpbit_c_dep='stmp-dirs config.status tsystem.h'
3ec83fc2
RH
66
67#
68# Build libgcc1 components.
69#
70
71libgcc1_objs=""
72
7857f134
ZW
73for name in $LIB1ASMFUNCS; do
74 for ml in $MULTILIBS; do
75 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
76 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
77 out="libgcc/${dir}/${name}${objext}"
3ec83fc2 78
7857f134
ZW
79 echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
80 echo " $gcc_compile" $flags -DL$name -xassembler-with-cpp \
8e9bf55e 81 -c '$(srcdir)/config/$(LIB1ASMSRC)' -o $out
ee95744f 82
9e23c02d
HB
83 # Remove any objects from LIB2FUNCS and LIB2_DIVMOD_FUNCS that are
84 # defined as optimized assembly code in LIB1ASMFUNCS.
f0df8029
DR
85 LIB2FUNCS_1=`echo $LIB2FUNCS_1 | sed -e 's/^'$name' //' \
86 -e 's/ '$name' / /' \
87 -e 's/ '$name'$//'`
88 LIB2FUNCS_2=`echo $LIB2FUNCS_2 | sed -e 's/^'$name' //' \
89 -e 's/ '$name' / /' \
90 -e 's/ '$name'$//'`
9e23c02d
HB
91 LIB2_DIVMOD_FUNCS=`echo $LIB2_DIVMOD_FUNCS | sed -e 's/^'$name' //' \
92 -e 's/ '$name' / /' \
93 -e 's/ '$name'$//'`
7857f134
ZW
94 done
95 libgcc1_objs="$libgcc1_objs ${name}${objext}"
96done
3ec83fc2
RH
97
98#
99# Build libgcc2 components.
100#
101
102libgcc2_objs=""
3fe68d0a 103libgcc2_st_objs=""
275b60d6 104libgcc2_eh_objs=""
3ec83fc2 105
f0df8029 106for name in $LIB2FUNCS_1 $LIB2FUNCS_2; do
3ec83fc2 107 for ml in $MULTILIBS; do
842391df 108 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
3ec83fc2
RH
109 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
110 out="libgcc/${dir}/${name}${objext}"
111
2aceb30d 112 echo $out: $libgcc2_c_dep
8e9bf55e
RH
113 echo " $gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \
114 -c '$(srcdir)/libgcc2.c' -o $out
3ec83fc2
RH
115 done
116 libgcc2_objs="$libgcc2_objs ${name}${objext}"
117done
118
3fe68d0a
ZW
119for name in $LIB2FUNCS_ST; do
120 for ml in $MULTILIBS; do
121 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
122 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
123 out="libgcc/${dir}/${name}${objext}"
124
125 echo $out: $libgcc2_c_dep
126 echo " $gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \
127 -c '$(srcdir)/libgcc2.c' -o $out
128 done
129 libgcc2_st_objs="$libgcc2_st_objs ${name}${objext}"
130done
131
fc6aa0a9
AH
132for name in $LIB2_DIVMOD_FUNCS; do
133 for ml in $MULTILIBS; do
134 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
135 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
136 out="libgcc/${dir}/${name}${objext}"
137
138 echo $out: $libgcc2_c_dep
139 echo " $gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \
140 -c '$(srcdir)/libgcc2.c' -fexceptions -fnon-call-exceptions -o $out
141 done
142 libgcc2_objs="$libgcc2_objs ${name}${objext}"
143done
144
3ec83fc2
RH
145if [ "$FPBIT" ]; then
146 for name in $FPBIT_FUNCS; do
147 for ml in $MULTILIBS; do
842391df 148 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
3ec83fc2
RH
149 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
150 out="libgcc/${dir}/${name}${objext}"
151
2aceb30d 152 echo $out: $FPBIT $fpbit_c_dep
8e9bf55e
RH
153 echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
154 -c $FPBIT -o $out
3ec83fc2
RH
155 done
156 libgcc2_objs="$libgcc2_objs ${name}${objext}"
157 done
158fi
159
160if [ "$DPBIT" ]; then
161 for name in $DPBIT_FUNCS; do
162 for ml in $MULTILIBS; do
842391df 163 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
3ec83fc2
RH
164 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
165 out="libgcc/${dir}/${name}${objext}"
166
2aceb30d 167 echo $out: $DPBIT $fpbit_c_dep
8e9bf55e
RH
168 echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
169 -c $DPBIT -o $out
3ec83fc2
RH
170 done
171 libgcc2_objs="$libgcc2_objs ${name}${objext}"
172 done
173fi
174
175for file in $LIB2ADD; do
176 name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'`
177 oname=`echo $name | sed -e 's,.*/,,'`
178
1854631b
RH
179 for ml in $MULTILIBS; do
180 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
181 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
182 out="libgcc/${dir}/${oname}${objext}"
183 if [ ${name}.asm = ${file} ]; then
184 flags="$flags -xassembler-with-cpp"
185 fi
3ec83fc2 186
1854631b
RH
187 echo $out: stmp-dirs $file
188 echo " $gcc_compile" $flags -c $file -o $out
189 done
190 libgcc2_objs="$libgcc2_objs ${oname}${objext}"
3ec83fc2
RH
191done
192
52a11cbf
RH
193for file in $LIB2ADDEH; do
194 name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'`
195 oname=`echo $name | sed -e 's,.*/,,'`
196
197 for ml in $MULTILIBS; do
198 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
199 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
200 out="libgcc/${dir}/${oname}${objext}"
201 if [ ${name}.asm = ${file} ]; then
202 flags="$flags -xassembler-with-cpp"
203 fi
204
205 echo $out: stmp-dirs $file
206 echo " $gcc_compile" $flags -fexceptions -c $file -o $out
207 done
275b60d6
JJ
208 if [ "$SHLIB_LINK" ]; then
209 libgcc2_eh_objs="$libgcc2_eh_objs ${oname}${objext}"
210 else
211 libgcc2_objs="$libgcc2_objs ${oname}${objext}"
212 fi
52a11cbf
RH
213done
214
fa9518de
FS
215for file in $LIB2ADD_ST; do
216 name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'`
217 oname=`echo $name | sed -e 's,.*/,,'`
218
219 for ml in $MULTILIBS; do
220 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
221 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
222 out="libgcc/${dir}/${oname}${objext}"
223 if [ ${name}.asm = ${file} ]; then
224 flags="$flags -xassembler-with-cpp"
225 fi
226
227 echo $out: stmp-dirs $file
228 echo " $gcc_compile" $flags -c $file -o $out
229 done
230 libgcc2_st_objs="$libgcc2_st_objs ${oname}${objext}"
231done
232
83dad10c
RH
233# SHLIB_MKMAP
234# SHLIB_MAPFILES
3ec83fc2 235for ml in $MULTILIBS; do
842391df 236 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
50503ac8 237 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
3ec83fc2
RH
238
239 libgcc_objs=""
275b60d6 240 libgcc_eh_objs=""
3ec83fc2 241 for o in $libgcc1_objs; do
7857f134 242 libgcc_objs="$libgcc_objs libgcc/${dir}/$o"
3ec83fc2
RH
243 done
244 for o in $libgcc2_objs; do
245 libgcc_objs="$libgcc_objs libgcc/${dir}/$o"
246 done
275b60d6
JJ
247 for o in $libgcc2_eh_objs; do
248 libgcc_eh_objs="$libgcc_eh_objs libgcc/${dir}/$o"
249 done
250 libgcc_sh_objs="$libgcc_objs $libgcc_eh_objs"
251 shlib_deps="$libgcc_sh_objs"
83dad10c 252
fa9518de
FS
253 libgcc_st_objs=""
254 for o in $libgcc2_st_objs; do
255 libgcc_st_objs="$libgcc_st_objs libgcc/${dir}/$o"
256 done
257
83dad10c
RH
258 if [ "$SHLIB_LINK" -a "$SHLIB_MKMAP" -a -z "$mapfile" ]; then
259 mapfile="libgcc.map"
83dad10c 260 echo ""
275b60d6
JJ
261 echo "${mapfile}: $SHLIB_MKMAP $SHLIB_MAPFILES $libgcc_sh_objs"
262 echo ' { $(NM_FOR_TARGET)'" $SHLIB_NM_FLAGS $libgcc_sh_objs; echo %%; cat $SHLIB_MAPFILES; } | "'$(AWK)'" -f $SHLIB_MKMAP > "'tmp-$@'
83dad10c
RH
263 echo ' mv tmp-$@ $@'
264 fi
aefa45d3 265 shlib_deps="$shlib_deps $mapfile"
83dad10c
RH
266
267 # Depend on EXTRA_MULTILIB_PARTS, since that's where crtbegin/end
268 # usually are put in a true multilib situation.
269 for f in $EXTRA_MULTILIB_PARTS; do
270 shlib_deps="$shlib_deps $dir/$f"
271 done
3ec83fc2 272
9e944a16
JJ
273 libgcc_a_objs="$libgcc_objs $libgcc_st_objs"
274
275 if [ "@libgcc_visibility@" = yes ]; then
276 libgcc_a_objs=`echo "${libgcc_a_objs} " | sed s~${objext}' ~.oS ~g'`
277
278 # .oS objects will have all non-local symbol definitions .hidden
279 echo ""
280 echo "$libgcc_a_objs: libgcc/${dir}/%.oS: libgcc/${dir}/%${objext}"
281 echo " @\$(NM_FOR_TARGET) $SHLIB_NM_FLAGS \$^" \\
282 echo " | \$(AWK) 'NF == 3 { printf \".hidden %s\\n\", \$\$3 }'" \\
283 echo ' | $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -Wl,-r -nostdinc' \\
284 echo ' -nostdlib -o $@ $^ -xassembler -'
285 fi
286
3ec83fc2 287 echo ""
9e944a16 288 echo "${dir}/libgcc.a: $libgcc_a_objs"
3ec83fc2 289 echo " -rm -rf ${dir}/libgcc.a"
9e944a16 290 echo ' $(AR_CREATE_FOR_TARGET)' ${dir}/libgcc.a $libgcc_a_objs
3ec83fc2
RH
291 echo ' if $(RANLIB_TEST_FOR_TARGET) ; then' \\
292 echo ' $(RANLIB_FOR_TARGET)' ${dir}/libgcc.a ';' \\
293 echo ' else true; fi;'
50503ac8
RH
294
295 if [ "$SHLIB_LINK" ]; then
275b60d6
JJ
296
297 echo ""
298 echo "${dir}/libgcc_eh.a: $libgcc_eh_objs"
299 echo " -rm -rf ${dir}/libgcc_eh.a"
300 echo ' $(AR_CREATE_FOR_TARGET)' ${dir}/libgcc_eh.a $libgcc_eh_objs
301 echo ' if $(RANLIB_TEST_FOR_TARGET) ; then' \\
302 echo ' $(RANLIB_FOR_TARGET)' ${dir}/libgcc_eh.a ';' \\
303 echo ' else true; fi;'
304
50503ac8
RH
305 if [ -z "$SHLIB_MULTILIB" ]; then
306 if [ "$dir" = "." ]; then
307 shlib_base_name="libgcc_s";
308 else
309 shlib_base_name=libgcc_s_`echo $dir | sed s,/,_,g`
310 fi
311 echo ""
aefa45d3
RH
312 echo "${dir}/${shlib_base_name}${SHLIB_EXT}: $shlib_deps"
313 echo " $SHLIB_LINK" \
314 | sed -e "s%@multilib_flags@%$flags%g" \
315 -e "s%@multilib_dir@%$dir%g" \
275b60d6 316 -e "s%@shlib_objs@%$libgcc_sh_objs%g" \
aefa45d3
RH
317 -e "s%@shlib_base_name@%$shlib_base_name%g" \
318 -e "s%@shlib_map_file@%$mapfile%g"
50503ac8
RH
319 elif [ "$SHLIB_MULTILIB" = "$dir" ]; then
320 shlib_base_name="libgcc_s";
321 echo ""
aefa45d3
RH
322 echo "${shlib_base_name}${SHLIB_EXT}: $shlib_deps"
323 echo " $SHLIB_LINK" \
324 | sed -e "s%@multilib_flags@%$flags%g" \
325 -e "s%@multilib_dir@%$dir%g" \
275b60d6 326 -e "s%@shlib_objs@%$libgcc_sh_objs%g" \
aefa45d3
RH
327 -e "s%@shlib_base_name@%$shlib_base_name%g" \
328 -e "s%@shlib_map_file@%$mapfile%g"
50503ac8
RH
329 fi
330 fi
3ec83fc2
RH
331done
332
f472a17c
AS
333dirs=libgcc
334for ml in $MULTILIBS; do
335 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
336 if [ $dir != . ]; then
337 dirs="$dirs libgcc/${dir}"
338 fi
339done
340echo ''
341echo 'libgcc-stage-start:'
342echo ' for dir in '"${dirs}"'; do \'
343echo ' if [ -d $(stage)/$$dir ]; then true; else mkdir $(stage)/$$dir; fi; \'
344echo ' done'
345echo ' -for dir in '"${dirs}"'; do \'
346echo ' mv $$dir/*'"${objext}"' $(stage)/$$dir; \'
347echo ' done'
348
3ec83fc2 349echo ""
2aceb30d
JM
350all=stmp-dirs
351dirs=libgcc
3ec83fc2
RH
352
353for ml in $MULTILIBS; do
842391df 354 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
34840988 355 if [ $dir != . ]; then
2aceb30d 356 dirs="$dirs ${dir} libgcc/${dir}"
3ec83fc2
RH
357 fi
358 all="$all ${dir}/libgcc.a"
50503ac8 359 if [ "$SHLIB_LINK" ]; then
275b60d6 360 all="$all ${dir}/libgcc_eh.a"
50503ac8
RH
361 if [ -z "$SHLIB_MULTILIB" ]; then
362 if [ "$dir" = "." ]; then
363 suff="";
364 else
365 suff=_`echo $dir | sed s,/,_,g`
366 fi
aefa45d3 367 all="$all ${dir}/libgcc_s${suff}${SHLIB_EXT}"
50503ac8 368 elif [ "$SHLIB_MULTILIB" = "$dir" ]; then
aefa45d3 369 all="$all libgcc_s${SHLIB_EXT}"
50503ac8 370 fi
50503ac8 371 fi
3ec83fc2
RH
372done
373
2aceb30d
JM
374echo 'stmp-dirs: force'
375echo ' for d in '"$dirs"'; do \'
20266bb1 376echo ' if [ -d $$d ]; then true; else '$mkinstalldirs' $$d; fi; \'
2aceb30d
JM
377echo ' done'
378echo ' if [ -f stmp-dirs ]; then true; else touch stmp-dirs; fi'
379
3ec83fc2 380for f in $EXTRA_MULTILIB_PARTS; do
3ec83fc2 381 for ml in $MULTILIBS; do
842391df 382 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
3ec83fc2 383 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
673887d5
AO
384 case $dir in
385 .) out=$f ; t= ;;
6c80a645
AO
386 *) out=$dir/$f ; t=$dir/ ;;
387 esac
388 case $out in
389 # Prevent `make' from interpreting $out as a macro assignment
390 *'$(EQ)'*) targ="T_TARGET=$out T_TARGET" ;;
391 *) targ=$out ;;
673887d5 392 esac
3ec83fc2 393
673887d5 394 echo $out: stmp-dirs
8e9bf55e
RH
395 echo " $make_compile" \\
396 echo ' LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)' $flags '" ' \\
6c80a645 397 echo ' MULTILIB_CFLAGS="'$flags'"' T=$t $targ
3ec83fc2
RH
398
399 all="$all $out"
3ec83fc2
RH
400 done
401done
402
403echo ""
404echo "all: $all"
2bbea3a6
RH
405
406echo ""
407echo "install: $all"
408for ml in $MULTILIBS; do
409 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
410 if [ $dir != . ]; then
411 ldir='$(libsubdir)'/$dir
412 echo " if [ -d $ldir ]; then true; else mkdir $ldir; chmod a+rx $ldir; fi;"
413 else
414 ldir='$(libsubdir)'
415 fi
416 echo ' $(INSTALL_DATA)' ${dir}/libgcc.a ${ldir}/
417 echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc.a
418
419 if [ "$SHLIB_LINK" ]; then
275b60d6
JJ
420 echo ' $(INSTALL_DATA)' ${dir}/libgcc_eh.a ${ldir}/
421 echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc_eh.a
422
2bbea3a6
RH
423 if [ -z "$SHLIB_MULTILIB" ]; then
424 if [ "$dir" = "." ]; then
425 shlib_base_name="libgcc_s";
426 else
427 shlib_base_name=libgcc_s_`echo $dir | sed s,/,_,g`
428 fi
429 echo " $SHLIB_INSTALL" \
430 | sed -e "s%@shlib_base_name@%$shlib_base_name%g"
431 elif [ "$SHLIB_MULTILIB" = "$dir" ]; then
432 shlib_base_name="libgcc_s";
433 echo " $SHLIB_INSTALL" \
434 | sed -e "s%@shlib_base_name@%$shlib_base_name%g"
435 fi
436 fi
437done
438for f in $EXTRA_MULTILIB_PARTS; do
439 for ml in $MULTILIBS; do
440 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
441 if [ $dir != . ]; then
442 out=${dir}/$f
443 ldir='$(libsubdir)'/$dir
444 else
445 out=$f
446 ldir='$(libsubdir)'
447 fi
448 echo ' $(INSTALL_DATA)' $out $ldir/
449 done
450done