2 # Construct makefile for libgcc.
3 # Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
5 # This file is part of GCC.
7 # Arguments, taken from the environment, since there are a lot
8 # of them, and positional args becomes quite ugly.
34 # EXTRA_MULTILIB_PARTS
45 # Make needs VPATH to be literal.
46 echo 'srcdir = @srcdir@'
47 echo 'VPATH = @srcdir@'
53 # Library members defined in libgcc2.c.
54 lib2funcs='_muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3
55 _cmpdi2 _ucmpdi2 _floatdidf _floatdisf _fixunsdfsi _fixunssfsi
56 _fixunsdfdi _fixdfdi _fixunssfdi _fixsfdi _fixxfdi _fixunsxfdi
57 _floatdixf _fixunsxfsi _fixtfdi _fixunstfdi _floatditf _clear_cache
58 _enable_execute_stack _trampoline __main _absvsi2 _absvdi2 _addvsi3
59 _addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 _ctors
60 _ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 _popcount_tab
61 _popcountsi2 _popcountdi2 _paritysi2 _paritydi2'
63 # Disable SHLIB_LINK if shared libgcc not enabled.
64 if [ "@enable_shared@" = "no" ]; then
70 gcc_compile='$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES)'
71 make_compile='$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \
72 AR_FOR_TARGET="$(AR_FOR_TARGET)" \
73 AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \
74 AR_EXTRACT_FOR_TARGET="$(AR_EXTRACT_FOR_TARGET)" \
75 AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \
76 CC="$(CC)" CFLAGS="$(CFLAGS)" \
77 BUILD_PREFIX="$(BUILD_PREFIX)" \
78 BUILD_PREFIX_1="$(BUILD_PREFIX_1)" \
79 LANGUAGES="$(LANGUAGES)"'
81 # Dependencies for libgcc2.c
82 libgcc2_c_dep='stmp-dirs $(srcdir)/libgcc2.c $(CONFIG_H) coretypes.h $(TM_H) $(MACHMODE_H) longlong.h gbl-ctors.h config.status stmp-int-hdrs tsystem.h'" $LIB2ADDEHDEP"
84 # Dependencies for libgcov.c
85 libgcov_c_dep='stmp-dirs $(srcdir)/libgcov.c $(CONFIG_H) coretypes.h $(TM_H) $(MACHMODE_H) longlong.h gbl-ctors.h config.status stmp-int-hdrs tsystem.h $(srcdir)/gcov-io.h $(srcdir)/gcov-io.c gcov-iov.h'
87 # Dependencies for fp-bit.c
88 fpbit_c_dep='stmp-dirs config.status tsystem.h'
91 # Build libgcc1 components.
96 for name in $LIB1ASMFUNCS; do
97 for ml in $MULTILIBS; do
98 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
99 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
100 out="libgcc/${dir}/${name}${objext}"
102 echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)'
103 echo " $gcc_compile" $flags -DL$name -xassembler-with-cpp \
104 -c '$(srcdir)/config/$(LIB1ASMSRC)' -o $out
106 # Remove any objects from lib2funcs and LIB2_DIVMOD_FUNCS that are
107 # defined as optimized assembly code in LIB1ASMFUNCS.
108 lib2funcs=`echo $lib2funcs | sed -e 's/^'$name' //' \
109 -e 's/ '$name' / /' \
111 LIB2_DIVMOD_FUNCS=`echo $LIB2_DIVMOD_FUNCS | sed -e 's/^'$name' //' \
112 -e 's/ '$name' / /' \
115 libgcc1_objs="$libgcc1_objs ${name}${objext}"
119 # Build libgcc2 components.
124 libgcc2_eh_static_objs=""
125 libgcc2_eh_shared_objs=""
127 for name in $lib2funcs; do
128 for ml in $MULTILIBS; do
129 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
130 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
131 out="libgcc/${dir}/${name}${objext}"
133 echo $out: $libgcc2_c_dep
134 echo " $gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \
135 -c '$(srcdir)/libgcc2.c' -o $out
137 libgcc2_objs="$libgcc2_objs ${name}${objext}"
140 for name in $LIB2FUNCS_ST; do
141 for ml in $MULTILIBS; do
142 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
143 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
144 out="libgcc/${dir}/${name}${objext}"
146 echo $out: $libgcc2_c_dep
147 echo " $gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \
148 -c '$(srcdir)/libgcc2.c' -o $out
150 libgcc2_st_objs="$libgcc2_st_objs ${name}${objext}"
153 for name in $LIB2_DIVMOD_FUNCS; do
154 for ml in $MULTILIBS; do
155 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
156 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
157 out="libgcc/${dir}/${name}${objext}"
159 echo $out: $libgcc2_c_dep
160 echo " $gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \
161 -c '$(srcdir)/libgcc2.c' -fexceptions -fnon-call-exceptions -o $out
163 libgcc2_objs="$libgcc2_objs ${name}${objext}"
166 if [ "$FPBIT" ]; then
167 for name in $FPBIT_FUNCS; do
168 for ml in $MULTILIBS; do
169 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
170 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
171 out="libgcc/${dir}/${name}${objext}"
173 echo $out: $FPBIT $fpbit_c_dep
174 echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
177 libgcc2_objs="$libgcc2_objs ${name}${objext}"
181 if [ "$DPBIT" ]; then
182 for name in $DPBIT_FUNCS; do
183 for ml in $MULTILIBS; do
184 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
185 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
186 out="libgcc/${dir}/${name}${objext}"
188 echo $out: $DPBIT $fpbit_c_dep
189 echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
192 libgcc2_objs="$libgcc2_objs ${name}${objext}"
196 if [ "$TPBIT" ]; then
197 for name in $TPBIT_FUNCS; do
198 for ml in $MULTILIBS; do
199 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
200 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
201 out="libgcc/${dir}/${name}${objext}"
203 echo $out: $TPBIT $fpbit_c_dep
204 echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \
207 libgcc2_objs="$libgcc2_objs ${name}${objext}"
211 for file in $LIB2ADD; do
212 name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'`
213 oname=`echo $name | sed -e 's,.*/,,'`
215 for ml in $MULTILIBS; do
216 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
217 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
218 out="libgcc/${dir}/${oname}${objext}"
219 if [ ${name}.asm = ${file} ]; then
220 flags="$flags -xassembler-with-cpp"
223 echo $out: stmp-dirs $file
224 echo " $gcc_compile" $flags -c $file -o $out
226 libgcc2_objs="$libgcc2_objs ${oname}${objext}"
229 for file in $LIB2ADDEH; do
230 name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'`
231 oname=`echo $name | sed -e 's,.*/,,'`
233 for ml in $MULTILIBS; do
234 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
235 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
236 out="libgcc/${dir}/${oname}${objext}"
237 if [ ${name}.asm = ${file} ]; then
238 flags="$flags -xassembler-with-cpp"
241 echo $out: stmp-dirs $file
242 echo " $gcc_compile" $flags -fexceptions -c $file -o $out
244 if [ -z "$SHLIB_LINK" ]; then
245 libgcc2_objs="$libgcc2_objs ${oname}${objext}"
249 # Flag whether we need eh_dummy.c
252 if [ "$SHLIB_LINK" ]; then
253 # Those should be in libgcc_eh.a.
254 for file in $LIB2ADDEHSTATIC; do
255 name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'`
256 oname=`echo $name | sed -e 's,.*/,,'`
257 libgcc2_eh_static_objs="$libgcc2_eh_static_objs ${oname}${objext}"
260 # Those should be in libgcc.so.
261 for file in $LIB2ADDEHSHARED; do
262 name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'`
263 oname=`echo $name | sed -e 's,.*/,,'`
264 libgcc2_eh_shared_objs="$libgcc2_eh_shared_objs ${oname}${objext}"
267 # If nothing went into libgcc_eh.a, create a dummy object -
268 # some linkers don't like totally empty archives.
269 if [ -z "$LIB2ADDEHSTATIC" ]; then
271 libgcc2_eh_static_objs="$libgcc2_eh_static_objs eh_dummy${objext}"
274 for ml in $MULTILIBS; do
275 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
276 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
277 out="libgcc/${dir}/eh_dummy${objext}"
279 echo $out: stmp-dirs $file
280 echo " $gcc_compile" $flags -fexceptions -c $file -o $out
285 for file in $LIB2ADD_ST; do
286 name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'`
287 oname=`echo $name | sed -e 's,.*/,,'`
289 for ml in $MULTILIBS; do
290 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
291 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
292 out="libgcc/${dir}/${oname}${objext}"
293 if [ ${name}.asm = ${file} ]; then
294 flags="$flags -xassembler-with-cpp"
297 echo $out: stmp-dirs $file
298 echo " $gcc_compile" $flags -c $file -o $out
300 libgcc2_st_objs="$libgcc2_st_objs ${oname}${objext}"
303 if [ "$SHLIB_LINK" ]; then
304 for file in $LIB2ADD_SH; do
305 name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'`
306 oname=`echo $name | sed -e 's,.*/,,'`
308 for ml in $MULTILIBS; do
309 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
310 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
311 out="libgcc/${dir}/${oname}${objext}"
312 if [ ${name}.asm = ${file} ]; then
313 flags="$flags -xassembler-with-cpp"
316 echo $out: stmp-dirs $file
317 echo " $gcc_compile" $flags -c $file -o $out
319 libgcc2_sh_objs="$libgcc2_sh_objs ${oname}${objext}"
323 if [ "$LIBUNWIND" ]; then
324 libunwind_static_objs=""
325 libunwind_shared_objs=""
326 for file in $LIBUNWIND; do
327 name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'`
328 oname=`echo $name | sed -e 's,.*/,,'`
330 for ml in $MULTILIBS; do
331 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
332 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
333 out="libgcc/${dir}/${oname}${objext}"
334 if [ ${name}.asm = ${file} ]; then
335 flags="$flags -xassembler-with-cpp"
338 echo $out: stmp-dirs $file $LIBUNWINDDEP
339 echo " $gcc_compile" $flags -fexceptions -c $file -o $out
340 echo ${out}s: stmp-dirs $file $LIBUNWINDDEP
341 echo " $gcc_compile" $flags -fexceptions -DSHARED -c $file -o ${out}s
343 libunwind_static_objs="$libunwind_static_objs ${oname}${objext}"
344 libunwind_shared_objs="$libunwind_shared_objs ${oname}${objext}s"
349 # build libgcov components
354 for name in $LIBGCOV; do
355 for ml in $MULTILIBS; do
356 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
357 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
358 out="libgcc/${dir}/${name}${objext}"
360 echo $out: $libgcov_c_dep
361 echo " $gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \
362 -c '$(srcdir)/libgcov.c' -o $out
364 libgcov_objs="$libgcov_objs ${name}${objext}"
370 for ml in $MULTILIBS; do
371 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
372 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
375 libgcc_eh_static_objs=""
376 libgcc_eh_shared_objs=""
377 for o in $libgcc1_objs; do
378 libgcc_objs="$libgcc_objs libgcc/${dir}/$o"
380 for o in $libgcc2_objs; do
381 libgcc_objs="$libgcc_objs libgcc/${dir}/$o"
383 for o in $libgcc2_eh_static_objs; do
384 libgcc_eh_static_objs="$libgcc_eh_static_objs libgcc/${dir}/$o"
386 for o in $libgcc2_eh_shared_objs; do
387 libgcc_eh_shared_objs="$libgcc_eh_shared_objs libgcc/${dir}/$o"
389 libgcc_sh_objs="$libgcc_objs $libgcc_eh_shared_objs"
390 for o in $libgcc2_sh_objs; do
391 libgcc_sh_objs="$libgcc_sh_objs libgcc/${dir}/$o"
393 shlib_deps="$libgcc_sh_objs"
396 for o in $libgcc2_st_objs; do
397 libgcc_st_objs="$libgcc_st_objs libgcc/${dir}/$o"
401 for o in $libgcov_objs; do
402 libgcov_a_objs="$libgcov_a_objs libgcc/${dir}/$o"
405 if [ "$LIBUNWIND" ]; then
407 for o in $libunwind_static_objs; do
408 libunwind_a_objs="$libunwind_a_objs libgcc/${dir}/$o"
411 for o in $libunwind_shared_objs; do
412 libunwind_sh_objs="$libunwind_sh_objs libgcc/${dir}/$o"
414 shlibunwind_deps="$libunwind_sh_objs"
417 if [ "$SHLIB_LINK" -a "$SHLIB_MKMAP" ]; then
418 mapfile="libgcc/${dir}/libgcc.map"
419 tmpmapfile="libgcc/${dir}/tmp-libgcc.map"
420 # This uses a here document instead of echos because some shells
421 # will convert the \1 in the second sed command to a control-A.
422 # The behavior of here documents is more predictable.
425 ${mapfile}: $SHLIB_MKMAP $SHLIB_MAPFILES $libgcc_sh_objs
426 { \$(NM_FOR_TARGET) $SHLIB_NM_FLAGS $libgcc_sh_objs; echo %%; \\
427 cat $SHLIB_MAPFILES \\
428 | sed -e '/^[ ]*#/d' \\
429 -e 's/^%\(if\|else\|elif\|endif\|define\)/#\1/' \\
430 | $gcc_compile $flags -E -xassembler-with-cpp -; \\
431 } | \$(AWK) -f $SHLIB_MKMAP $SHLIB_MKMAP_OPTS > ${tmpmapfile}
435 shlib_deps="$shlib_deps $mapfile"
437 # Depend on EXTRA_MULTILIB_PARTS, since that's where crtbegin/end
438 # usually are put in a true multilib situation.
439 for f in $EXTRA_MULTILIB_PARTS; do
440 shlib_deps="$shlib_deps $dir/$f"
443 libgcc_a_objs="$libgcc_objs $libgcc_st_objs"
445 if [ "@libgcc_visibility@" = yes -a "$SHLIB_LINK" ]; then
448 echo "libgcc/${dir}/stacknote.s: stmp-dirs"
449 echo ' @( echo | $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) '${flags}' -S -o - -xc - | grep .note.GNU-stack || : ) > $@.tmp'
450 echo ' @mv -f $@.tmp $@'
452 for o in $libgcc_objs $libgcc_st_objs; do
453 # .oS objects will have all non-local symbol definitions .hidden
454 oS=`echo ${o} | sed s~${objext}'$~.oS~g'`
455 echo "${oS}: stmp-dirs libgcc/${dir}/stacknote.s ${o}"
456 # non-GNU nm emits three fields even for undefined and typeless symbols,
457 # so explicitly omit them
458 echo ' ( $(NM_FOR_TARGET) '${SHLIB_NM_FLAGS} ${o}' | $(AWK) '\''NF == 3 && $$2 !~ /^[UN]$$/ { print "\t.hidden", $$3 }'\''; cat libgcc/${dir}/stacknote.s ) | $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) '${flags}' -r -nostdinc -nostdlib -o $@ '${o}' -xassembler -'
459 libgcc_a_objs="${libgcc_a_objs} ${oS}"
463 # Each of these .a files depends on stmp-dirs. It would seem that
464 # this dependency is redundant, since each of the object files
465 # itself depends on stmp-dirs. However, it is possible that there
466 # are in fact no object files. In that case, the stmp-dirs
467 # dependency is required; the directory containing the archive must
468 # exist before the archive itself can be created.
470 echo "${dir}/libgcc.a: stmp-dirs $libgcc_a_objs"
471 echo " -rm -rf ${dir}/libgcc.a"
472 echo ' $(AR_CREATE_FOR_TARGET)' ${dir}/libgcc.a $libgcc_a_objs
473 echo ' $(RANLIB_FOR_TARGET)' ${dir}/libgcc.a
476 echo "${dir}/libgcov.a: stmp-dirs $libgcov_a_objs"
477 echo " -rm -rf ${dir}/libgcov.a"
478 echo ' $(AR_CREATE_FOR_TARGET)' ${dir}/libgcov.a $libgcov_a_objs
479 echo ' $(RANLIB_FOR_TARGET)' ${dir}/libgcov.a
481 if [ "$LIBUNWIND" ]; then
483 echo "${dir}/libunwind.a: stmp-dirs $libunwind_a_objs"
484 echo " -rm -rf ${dir}/libunwind.a"
485 echo ' $(AR_CREATE_FOR_TARGET)' ${dir}/libunwind.a $libunwind_a_objs
486 echo ' $(RANLIB_FOR_TARGET)' ${dir}/libunwind.a
488 echo "${dir}/libgcc.a: ${dir}/libunwind.a"
491 if [ "$SHLIB_LINK" ]; then
494 echo "${dir}/libgcc_eh.a: stmp-dirs $libgcc_eh_static_objs"
495 echo " -rm -rf ${dir}/libgcc_eh.a"
496 echo ' $(AR_CREATE_FOR_TARGET)' ${dir}/libgcc_eh.a $libgcc_eh_static_objs
497 echo ' $(RANLIB_FOR_TARGET)' ${dir}/libgcc_eh.a
499 if [ -z "$SHLIB_MULTILIB" ]; then
500 if [ "$dir" = . ]; then
501 shlib_base_name=libgcc_s
502 shlibunwind_base_name=libunwind
504 shlib_base_name=libgcc_s_`echo $dir | sed s,/,_,g`
505 shlibunwind_base_name=libunwind_`echo $dir | sed s,/,_,g`
507 shlib_so_name="$shlib_base_name"
508 shlibunwind_so_name="$shlibunwind_base_name"
509 if [ "$LIBUNWIND" ]; then
510 shlib_deps="$shlib_deps ${dir}/${shlibunwind_base_name}${SHLIB_EXT}"
514 if [ -n "$MULTILIB_OSDIRNAMES" ]; then
515 if [ "$dir" != . ]; then
516 gcc_multilib_dir=`./xgcc -B./ $flags --print-multi-directory`
517 os_multilib_dir=`./xgcc -B./ $flags --print-multi-os-directory`
519 gcc_multilib_sup=`echo $gcc_multilib_dir | sed 's~^[^/]*/~~'`
520 os_multilib_base=`echo $os_multilib_dir | sed -n "s~/${gcc_multilib_sup}\$~~p"`
521 if [ -z "$os_multilib_base" ]; then
522 shlib_so_name=libgcc_s
523 shlibunwind_so_name=libunwind
524 if [ "$os_multilib_dir" != "." ]; then
525 shlib_slibdir_qual="/$os_multilib_dir"
528 shlib_so_name=libgcc_s_`echo $gcc_multilib_sup | sed s,/,_,g`
529 shlibunwind_so_name=libunwind_`echo $gcc_multilib_sup | sed s,/,_,g`
530 shlib_slibdir_qual="/$os_multilib_base"
535 echo "${dir}/${shlib_base_name}${SHLIB_EXT}: $shlib_deps"
536 echo " $SHLIB_LINK" \
537 | sed -e "s%@multilib_flags@%$flags%g" \
538 -e "s%@multilib_dir@%$dir%g" \
539 -e "s%@shlib_objs@%$libgcc_sh_objs%g" \
540 -e "s%@shlib_base_name@%$shlib_base_name%g" \
541 -e "s%@shlib_map_file@%$mapfile%g" \
542 -e "s%@shlib_so_name@%$shlib_so_name%g" \
543 -e "s%@shlib_dir@%$shlib_dir%g" \
544 -e "s%@shlib_slibdir_qual@%%g"
545 if [ "$LIBUNWIND" ]; then
547 echo "${dir}/${shlibunwind_base_name}${SHLIB_EXT}: $shlibunwind_deps"
548 echo " $SHLIBUNWIND_LINK" \
549 | sed -e "s%@multilib_flags@%$flags%g" \
550 -e "s%@multilib_dir@%$dir%g" \
551 -e "s%@shlib_objs@%$libunwind_sh_objs%g" \
552 -e "s%@shlib_base_name@%$shlibunwind_base_name%g" \
553 -e "s%@shlib_so_name@%$shlibunwind_so_name%g" \
554 -e "s%@shlib_dir@%$shlib_dir%g" \
555 -e "s%@shlib_slibdir_qual@%%g"
557 elif [ "$SHLIB_MULTILIB" = "$dir" ]; then
558 shlib_base_name="libgcc_s";
559 shlibunwind_base_name="libunwind";
561 echo "${shlib_base_name}${SHLIB_EXT}: $shlib_deps"
562 echo " $SHLIB_LINK" \
563 | sed -e "s%@multilib_flags@%$flags%g" \
564 -e "s%@multilib_dir@%$dir%g" \
565 -e "s%@shlib_objs@%$libgcc_sh_objs%g" \
566 -e "s%@shlib_base_name@%$shlib_base_name%g" \
567 -e "s%@shlib_map_file@%$mapfile%g" \
568 -e "s%@shlib_so_name@%$shlib_base_name%g" \
569 -e "s%@shlib_dir@%%g" \
570 -e "s%@shlib_slibdir_qual@%%g"
571 if [ "$LIBUNWIND" ]; then
573 echo "${shlibunwind_base_name}${SHLIB_EXT}: $shlibunwind_deps"
574 echo " $SHLIBUNWIND_LINK" \
575 | sed -e "s%@multilib_flags@%$flags%g" \
576 -e "s%@multilib_dir@%$dir%g" \
577 -e "s%@shlib_objs@%$libgcc_sh_objs%g" \
578 -e "s%@shlib_base_name@%$shlibunwind_base_name%g" \
579 -e "s%@shlib_so_name@%$shlibunwind_base_name%g" \
580 -e "s%@shlib_dir@%%g" \
581 -e "s%@shlib_slibdir_qual@%%g"
588 for ml in $MULTILIBS; do
589 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
590 if [ $dir != . ]; then
591 dirs="$dirs ${dir} libgcc/${dir}"
595 echo 'libgcc-stage-start:'
596 echo ' for dir in '"${dirs}"'; do \'
597 echo ' if [ -d $(stage)/$$dir ]; then true; else '$mkinstalldirs' $(stage)/$$dir; fi; \'
599 echo ' -for dir in '"${dirs}"'; do \'
600 echo ' mv $$dir/*'"${objext}"' $(stage)/$$dir; \'
601 echo ' mv $$dir/*'"${objext}s"' $(stage)/$$dir || true; \'
602 echo ' test ! -f $$dir/stacknote.s || mv $$dir/stacknote.s $(stage)/$$dir; \'
603 echo ' test ! -f $$dir/libgcc.a || mv $$dir/lib* $(stage)/$$dir; \'
610 for ml in $MULTILIBS; do
611 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
612 if [ $dir != . ]; then
613 dirs="$dirs ${dir} libgcc/${dir}"
615 all="$all ${dir}/libgcc.a ${dir}/libgcov.a"
616 if [ "$LIBUNWIND" ]; then
617 all="$all ${dir}/libunwind.a"
619 if [ "$SHLIB_LINK" ]; then
620 all="$all ${dir}/libgcc_eh.a"
621 if [ -z "$SHLIB_MULTILIB" ]; then
622 if [ "$dir" = "." ]; then
625 suff=_`echo $dir | sed s,/,_,g`
627 all="$all ${dir}/libgcc_s${suff}${SHLIB_EXT}"
628 if [ "$LIBUNWIND" ]; then
629 all="$all ${dir}/${dir}/libunwind${suff}${SHLIB_EXT}"
631 elif [ "$SHLIB_MULTILIB" = "$dir" ]; then
632 all="$all libgcc_s${SHLIB_EXT}"
633 if [ "$LIBUNWIND" ]; then
634 all="$all ${dir}/${dir}/libunwind${SHLIB_EXT}"
640 echo 'stmp-dirs: force'
641 echo ' for d in '"$dirs"'; do \'
642 echo ' if [ -d $$d ]; then true; else '$mkinstalldirs' $$d; fi; \'
644 echo ' if [ -f stmp-dirs ]; then true; else touch stmp-dirs; fi'
646 for f in $EXTRA_MULTILIB_PARTS; do
647 for ml in $MULTILIBS; do
648 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
649 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
652 *) out=$dir/$f ; t=$dir/ ;;
655 # Prevent `make' from interpreting $out as a macro assignment
656 *'$(EQ)'*) targ="T_TARGET=$out T_TARGET" ;;
661 echo " $make_compile" \\
662 echo ' LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)' $flags '" ' \\
663 echo ' MULTILIB_CFLAGS="'$flags'"' T=$t $targ
672 if [ "$need_eh_dummy" ]; then
674 echo " echo 'int __libgcc_eh_dummy;' > \$@"
679 for ml in $MULTILIBS; do
680 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
681 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`;
682 if [ $dir != . ]; then
683 ldir='$(DESTDIR)$(libsubdir)'/$dir
684 echo " if [ -d $ldir ]; then true; else $mkinstalldirs $ldir; chmod a+rx $ldir; fi;"
686 ldir='$(DESTDIR)$(libsubdir)'
688 echo ' $(INSTALL_DATA)' ${dir}/libgcc.a ${ldir}/
689 echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc.a
690 echo ' $(INSTALL_DATA)' ${dir}/libgcov.a ${ldir}/
691 echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcov.a
693 if [ "$SHLIB_LINK" ]; then
694 echo ' $(INSTALL_DATA)' ${dir}/libgcc_eh.a ${ldir}/
695 echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc_eh.a
697 if [ -z "$SHLIB_MULTILIB" ]; then
698 if [ "$dir" = . ]; then
699 shlib_base_name=libgcc_s
700 shlibunwind_base_name=libunwind
702 shlib_base_name=libgcc_s_`echo $dir | sed s,/,_,g`
703 shlibunwind_base_name=libunwind_`echo $dir | sed s,/,_,g`
705 shlib_so_name="$shlib_base_name"
706 shlibunwind_so_name="$shlibunwind_base_name"
709 if [ -n "$MULTILIB_OSDIRNAMES" ]; then
710 gcc_multilib_dir=`./xgcc -B./ $flags --print-multi-directory`
711 os_multilib_dir=`./xgcc -B./ $flags --print-multi-os-directory`
712 if [ "$dir" != . ]; then
715 gcc_multilib_sup=`echo $gcc_multilib_dir | sed 's~^[^/]*/~~'`
716 os_multilib_base=`echo $os_multilib_dir | sed -n "s~/${gcc_multilib_sup}\$~~p"`
717 if [ -z "$os_multilib_base" ]; then
718 shlib_so_name=libgcc_s
719 shlibunwind_so_name=libunwind
720 if [ "$os_multilib_dir" != "." ]; then
721 shlib_slibdir_qual="/$os_multilib_dir"
724 shlib_so_name=libgcc_s_`echo $gcc_multilib_sup | sed s,/,_,g`
725 shlibunwind_so_name=libunwind_`echo $gcc_multilib_sup | sed s,/,_,g`
726 shlib_slibdir_qual="/$os_multilib_base"
729 echo " $SHLIB_INSTALL" \
730 | sed -e "s%@shlib_base_name@%$shlib_base_name%g" \
731 -e "s%@shlib_so_name@%$shlib_so_name%g" \
732 -e "s%@shlib_dir@%$shlib_dir%g" \
733 -e "s%@shlib_slibdir_qual@%$shlib_slibdir_qual%g"
734 if [ "$LIBUNWIND" ]; then
735 echo " $SHLIBUNWIND_INSTALL" \
736 | sed -e "s%@shlib_base_name@%$shlibunwind_base_name%g" \
737 -e "s%@shlib_so_name@%$shlibunwind_so_name%g" \
738 -e "s%@shlib_dir@%$shlib_dir%g" \
739 -e "s%@shlib_slibdir_qual@%$shlib_slibdir_qual%g"
740 libunwinddir='$(DESTDIR)$(slibdir)$(shlib_slibdir_qual)/$(shlib_dir)'
741 echo ' $(INSTALL_DATA)' ${dir}/libunwind.a ${libunwinddir}/
742 echo ' $(RANLIB_FOR_TARGET)' ${libunwinddir}/libunwind.a
744 elif [ "$SHLIB_MULTILIB" = "$dir" ]; then
745 shlib_base_name="libgcc_s";
746 echo " $SHLIB_INSTALL" \
747 | sed -e "s%@shlib_base_name@%$shlib_base_name%g" \
748 -e "s%@shlib_so_name@%$shlib_base_name%g" \
749 -e "s%@shlib_dir@%%g" \
750 -e "s%@shlib_slibdir_qual@%%g"
751 if [ "$LIBUNWIND" ]; then
752 echo " $SHLIBUNWIND_INSTALL" \
753 | sed -e "s%@shlib_base_name@%$shlibunwind_base_name%g" \
754 -e "s%@shlib_so_name@%$shlibunwind_base_name%g" \
755 -e "s%@shlib_dir@%%g" \
756 -e "s%@shlib_slibdir_qual@%%g"
757 libunwinddir='$(DESTDIR)$(slibdir)'
758 echo ' $(INSTALL_DATA)' ${dir}/libunwind.a ${libunwinddir}/
759 echo ' $(RANLIB_FOR_TARGET)' ${libunwinddir}/libunwind.a
764 for f in $EXTRA_MULTILIB_PARTS; do
765 for ml in $MULTILIBS; do
766 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'`
767 if [ $dir != . ]; then
769 ldir='$(DESTDIR)$(libsubdir)'/$dir
772 ldir='$(DESTDIR)$(libsubdir)'
774 echo ' $(INSTALL_DATA)' $out $ldir/