mklibgcc.in revision 132718
1457Serikj#!/bin/sh 21730Sihse# Construct makefile for libgcc. 3457Serikj# Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc. 4457Serikj# 5457Serikj# This file is part of GCC. 6457Serikj 7457Serikj# Arguments, taken from the environment, since there are a lot 8457Serikj# of them, and positional args becomes quite ugly. 9457Serikj# 10457Serikj# objext 11457Serikj# LIB1ASMFUNCS 12457Serikj# LIB2FUNCS_ST 13457Serikj# LIBGCOV 14457Serikj# LIB2ADD 15457Serikj# LIB2ADD_ST 16457Serikj# LIB2ADDEH 17457Serikj# LIB2ADDEHDEP 18457Serikj# FPBIT 19457Serikj# FPBIT_FUNCS 20457Serikj# LIB2_DIVMOD_FUNCS 21457Serikj# DPBIT 22457Serikj# DPBIT_FUNCS 23457Serikj# TPBIT 24457Serikj# TPBIT_FUNCS 25457Serikj# LIBGCC 26457Serikj# MULTILIBS 27457Serikj# EXTRA_MULTILIB_PARTS 281730Sihse# SHLIB_EXT 29837Sihse# SHLIB_LINK 30837Sihse# SHLIB_MULTILIB 31837Sihse# SHLIB_MKMAP 32837Sihse# SHLIB_MKMAP_OPTS 33837Sihse# SHLIB_MAPFILES 34837Sihse# SHLIB_NM_FLAGS 35837Sihse# SHLIB_INSTALL 36837Sihse# MULTILIB_OSDIRNAMES 37837Sihse 38837Sihse# Make needs VPATH to be literal. 39837Sihseecho 'srcdir = @srcdir@' 40837Sihseecho 'VPATH = @srcdir@' 41837Sihseecho 'EQ = =' 42837Sihseecho 43457Serikjecho 'force:' 44457Serikjecho 45457Serikj 46457Serikj# Library members defined in libgcc2.c. 471730Sihselib2funcs='_muldi3 _negdi2 _lshrdi3 _ashldi3 _ashrdi3 48457Serikj _cmpdi2 _ucmpdi2 _floatdidf _floatdisf _fixunsdfsi _fixunssfsi 491730Sihse _fixunsdfdi _fixdfdi _fixunssfdi _fixsfdi _fixxfdi _fixunsxfdi 501730Sihse _floatdixf _fixunsxfsi _fixtfdi _fixunstfdi _floatditf _clear_cache 511730Sihse _enable_execute_stack _trampoline __main _absvsi2 _absvdi2 _addvsi3 521730Sihse _addvdi3 _subvsi3 _subvdi3 _mulvsi3 _mulvdi3 _negvsi2 _negvdi2 _ctors 531730Sihse _ffssi2 _ffsdi2 _clz _clzsi2 _clzdi2 _ctzsi2 _ctzdi2 _popcount_tab 541730Sihse _popcountsi2 _popcountdi2 _paritysi2 _paritydi2' 551730Sihse 561730Sihse# Disable SHLIB_LINK if shared libgcc not enabled. 571730Sihseif [ "@enable_shared@" = "no" ]; then 581730Sihse SHLIB_LINK="" 59457Serikjfi 60457Serikj 61457Serikj# Build lines. 62457Serikj 63837Sihsegcc_compile='$(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) $(INCLUDES)' 64837Sihsemake_compile='$(MAKE) GCC_FOR_TARGET="$(GCC_FOR_TARGET)" \ 65457Serikj AR_FOR_TARGET="$(AR_FOR_TARGET)" \ 66837Sihse AR_CREATE_FOR_TARGET="$(AR_CREATE_FOR_TARGET)" \ 67837Sihse AR_EXTRACT_FOR_TARGET="$(AR_EXTRACT_FOR_TARGET)" \ 68837Sihse AR_FLAGS_FOR_TARGET="$(AR_FLAGS_FOR_TARGET)" \ 69837Sihse CC="$(CC)" CFLAGS="$(CFLAGS)" \ 70837Sihse BUILD_PREFIX="$(BUILD_PREFIX)" \ 71837Sihse BUILD_PREFIX_1="$(BUILD_PREFIX_1)" \ 72837Sihse LANGUAGES="$(LANGUAGES)"' 73504Stbell 74504Stbell# Dependencies for libgcc2.c 75504Stbelllibgcc2_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" 76504Stbell 77504Stbell# Dependencies for libgcov.c 78837Sihselibgcov_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' 79504Stbell 80504Stbell# Dependencies for fp-bit.c 81504Stbellfpbit_c_dep='stmp-dirs config.status tsystem.h' 82504Stbell 83837Sihse# 84504Stbell# Build libgcc1 components. 85837Sihse# 86457Serikj 871961Salanblibgcc1_objs="" 881961Salanb 891961Salanbfor name in $LIB1ASMFUNCS; do 901961Salanb for ml in $MULTILIBS; do 911961Salanb dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` 921961Salanb flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; 931961Salanb out="libgcc/${dir}/${name}${objext}" 941961Salanb 951961Salanb echo ${out}: stmp-dirs '$(srcdir)/config/$(LIB1ASMSRC)' 961961Salanb echo " $gcc_compile" $flags -DL$name -xassembler-with-cpp \ 971961Salanb -c '$(srcdir)/config/$(LIB1ASMSRC)' -o $out 981961Salanb 991961Salanb # Remove any objects from lib2funcs and LIB2_DIVMOD_FUNCS that are 1001961Salanb # defined as optimized assembly code in LIB1ASMFUNCS. 1011961Salanb lib2funcs=`echo $lib2funcs | sed -e 's/^'$name' //' \ 1021961Salanb -e 's/ '$name' / /' \ 1031961Salanb -e 's/ '$name'$//'` 1041961Salanb LIB2_DIVMOD_FUNCS=`echo $LIB2_DIVMOD_FUNCS | sed -e 's/^'$name' //' \ 1051961Salanb -e 's/ '$name' / /' \ 1061961Salanb -e 's/ '$name'$//'` 1071961Salanb done 1081961Salanb libgcc1_objs="$libgcc1_objs ${name}${objext}" 1091961Salanbdone 1101961Salanb 1111961Salanb# 1121961Salanb# Build libgcc2 components. 1131961Salanb# 1141961Salanb 1151961Salanblibgcc2_objs="" 1161961Salanblibgcc2_st_objs="" 1171961Salanblibgcc2_eh_objs="" 1181961Salanb 1191961Salanbfor name in $lib2funcs; do 1201961Salanb for ml in $MULTILIBS; do 1211961Salanb dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` 1221961Salanb flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; 1231961Salanb out="libgcc/${dir}/${name}${objext}" 1241961Salanb 1251961Salanb echo $out: $libgcc2_c_dep 1261961Salanb echo " $gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \ 1271961Salanb -c '$(srcdir)/libgcc2.c' -o $out 1281961Salanb done 1291961Salanb libgcc2_objs="$libgcc2_objs ${name}${objext}" 1301961Salanbdone 1311961Salanb 1321961Salanbfor name in $LIB2FUNCS_ST; do 1331961Salanb for ml in $MULTILIBS; do 1341961Salanb dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` 1351961Salanb flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; 1361961Salanb out="libgcc/${dir}/${name}${objext}" 1371961Salanb 1381961Salanb echo $out: $libgcc2_c_dep 1391961Salanb echo " $gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \ 140 -c '$(srcdir)/libgcc2.c' -o $out 141 done 142 libgcc2_st_objs="$libgcc2_st_objs ${name}${objext}" 143done 144 145for name in $LIB2_DIVMOD_FUNCS; do 146 for ml in $MULTILIBS; do 147 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` 148 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; 149 out="libgcc/${dir}/${name}${objext}" 150 151 echo $out: $libgcc2_c_dep 152 echo " $gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \ 153 -c '$(srcdir)/libgcc2.c' -fexceptions -fnon-call-exceptions -o $out 154 done 155 libgcc2_objs="$libgcc2_objs ${name}${objext}" 156done 157 158if [ "$FPBIT" ]; then 159 for name in $FPBIT_FUNCS; do 160 for ml in $MULTILIBS; do 161 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` 162 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; 163 out="libgcc/${dir}/${name}${objext}" 164 165 echo $out: $FPBIT $fpbit_c_dep 166 echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \ 167 -c $FPBIT -o $out 168 done 169 libgcc2_objs="$libgcc2_objs ${name}${objext}" 170 done 171fi 172 173if [ "$DPBIT" ]; then 174 for name in $DPBIT_FUNCS; do 175 for ml in $MULTILIBS; do 176 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` 177 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; 178 out="libgcc/${dir}/${name}${objext}" 179 180 echo $out: $DPBIT $fpbit_c_dep 181 echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \ 182 -c $DPBIT -o $out 183 done 184 libgcc2_objs="$libgcc2_objs ${name}${objext}" 185 done 186fi 187 188if [ "$TPBIT" ]; then 189 for name in $TPBIT_FUNCS; do 190 for ml in $MULTILIBS; do 191 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` 192 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; 193 out="libgcc/${dir}/${name}${objext}" 194 195 echo $out: $TPBIT $fpbit_c_dep 196 echo " $gcc_compile" -DFINE_GRAINED_LIBRARIES $flags -DL$name \ 197 -c $TPBIT -o $out 198 done 199 libgcc2_objs="$libgcc2_objs ${name}${objext}" 200 done 201fi 202 203for file in $LIB2ADD; do 204 name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'` 205 oname=`echo $name | sed -e 's,.*/,,'` 206 207 for ml in $MULTILIBS; do 208 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` 209 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; 210 out="libgcc/${dir}/${oname}${objext}" 211 if [ ${name}.asm = ${file} ]; then 212 flags="$flags -xassembler-with-cpp" 213 fi 214 215 echo $out: stmp-dirs $file 216 echo " $gcc_compile" $flags -c $file -o $out 217 done 218 libgcc2_objs="$libgcc2_objs ${oname}${objext}" 219done 220 221for file in $LIB2ADDEH; do 222 name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'` 223 oname=`echo $name | sed -e 's,.*/,,'` 224 225 for ml in $MULTILIBS; do 226 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` 227 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; 228 out="libgcc/${dir}/${oname}${objext}" 229 if [ ${name}.asm = ${file} ]; then 230 flags="$flags -xassembler-with-cpp" 231 fi 232 233 echo $out: stmp-dirs $file 234 echo " $gcc_compile" $flags -fexceptions -c $file -o $out 235 done 236 if [ "$SHLIB_LINK" ]; then 237 libgcc2_eh_objs="$libgcc2_eh_objs ${oname}${objext}" 238 else 239 libgcc2_objs="$libgcc2_objs ${oname}${objext}" 240 fi 241done 242 243for file in $LIB2ADD_ST; do 244 name=`echo $file | sed -e 's/[.][cSo]$//' -e 's/[.]asm$//' -e 's/[.]txt$//'` 245 oname=`echo $name | sed -e 's,.*/,,'` 246 247 for ml in $MULTILIBS; do 248 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` 249 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; 250 out="libgcc/${dir}/${oname}${objext}" 251 if [ ${name}.asm = ${file} ]; then 252 flags="$flags -xassembler-with-cpp" 253 fi 254 255 echo $out: stmp-dirs $file 256 echo " $gcc_compile" $flags -c $file -o $out 257 done 258 libgcc2_st_objs="$libgcc2_st_objs ${oname}${objext}" 259done 260 261# 262# build libgcov components 263# 264 265libgcov_objs="" 266 267for name in $LIBGCOV; do 268 for ml in $MULTILIBS; do 269 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` 270 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; 271 out="libgcc/${dir}/${name}${objext}" 272 273 echo $out: $libgcov_c_dep 274 echo " $gcc_compile" '$(MAYBE_USE_COLLECT2)' $flags -DL$name \ 275 -c '$(srcdir)/libgcov.c' -o $out 276 done 277 libgcov_objs="$libgcov_objs ${name}${objext}" 278done 279 280# SHLIB_MKMAP 281# SHLIB_MKMAP_OPTS 282# SHLIB_MAPFILES 283for ml in $MULTILIBS; do 284 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` 285 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; 286 287 libgcc_objs="" 288 libgcc_eh_objs="" 289 for o in $libgcc1_objs; do 290 libgcc_objs="$libgcc_objs libgcc/${dir}/$o" 291 done 292 for o in $libgcc2_objs; do 293 libgcc_objs="$libgcc_objs libgcc/${dir}/$o" 294 done 295 for o in $libgcc2_eh_objs; do 296 libgcc_eh_objs="$libgcc_eh_objs libgcc/${dir}/$o" 297 done 298 libgcc_sh_objs="$libgcc_objs $libgcc_eh_objs" 299 shlib_deps="$libgcc_sh_objs" 300 301 libgcc_st_objs="" 302 for o in $libgcc2_st_objs; do 303 libgcc_st_objs="$libgcc_st_objs libgcc/${dir}/$o" 304 done 305 306 libgcov_a_objs="" 307 for o in $libgcov_objs; do 308 libgcov_a_objs="$libgcov_a_objs libgcc/${dir}/$o" 309 done 310 311 if [ "$SHLIB_LINK" -a "$SHLIB_MKMAP" ]; then 312 mapfile="libgcc/${dir}/libgcc.map" 313 tmpmapfile="libgcc/${dir}/tmp-libgcc.map" 314 # This uses a here document instead of echos because some shells 315 # will convert the \1 in the second sed command to a control-A. 316 # The behavior of here documents is more predictable. 317 cat <<EOF 318 319${mapfile}: $SHLIB_MKMAP $SHLIB_MAPFILES $libgcc_sh_objs 320 { \$(NM_FOR_TARGET) $SHLIB_NM_FLAGS $libgcc_sh_objs; echo %%; \\ 321 cat $SHLIB_MAPFILES \\ 322 | sed -e '/^[ ]*#/d' \\ 323 -e 's/^%\(if\|else\|elif\|endif\|define\)/#\1/' \\ 324 | $gcc_compile $flags -E -xassembler-with-cpp -; \\ 325 } | \$(AWK) -f $SHLIB_MKMAP $SHLIB_MKMAP_OPTS > ${tmpmapfile} 326 mv '$tmpmapfile' \$@ 327EOF 328 fi 329 shlib_deps="$shlib_deps $mapfile" 330 331 # Depend on EXTRA_MULTILIB_PARTS, since that's where crtbegin/end 332 # usually are put in a true multilib situation. 333 for f in $EXTRA_MULTILIB_PARTS; do 334 shlib_deps="$shlib_deps $dir/$f" 335 done 336 337 libgcc_a_objs="$libgcc_objs $libgcc_st_objs" 338 339 if [ "@libgcc_visibility@" = yes -a "$SHLIB_LINK" ]; then 340 libgcc_a_objs= 341 echo "" 342 echo "libgcc/${dir}/stacknote.s: stmp-dirs" 343 echo ' @( echo | $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) '${flags}' -S -o - -xc - | grep .note.GNU-stack || : ) > $@.tmp' 344 echo ' @mv -f $@.tmp $@' 345 echo "" 346 for o in $libgcc_objs $libgcc_st_objs; do 347 # .oS objects will have all non-local symbol definitions .hidden 348 oS=`echo ${o} | sed s~${objext}'$~.oS~g'` 349 echo "${oS}: stmp-dirs libgcc/${dir}/stacknote.s ${o}" 350 # non-GNU nm emits three fields even for undefined and typeless symbols, 351 # so explicitly omit them 352 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 -' 353 libgcc_a_objs="${libgcc_a_objs} ${oS}" 354 done 355 fi 356 357 # Each of these .a files depends on stmp-dirs. It would seem that 358 # this dependency is redundant, since each of the object files 359 # itself depends on stmp-dirs. However, it is possible that there 360 # are in fact no object files. In that case, the stmp-dirs 361 # dependency is required; the directory containing the archive must 362 # exist before the archive itself can be created. 363 echo "" 364 echo "${dir}/libgcc.a: stmp-dirs $libgcc_a_objs" 365 echo " -rm -rf ${dir}/libgcc.a" 366 echo ' $(AR_CREATE_FOR_TARGET)' ${dir}/libgcc.a $libgcc_a_objs 367 echo ' $(RANLIB_FOR_TARGET)' ${dir}/libgcc.a 368 369 echo "" 370 echo "${dir}/libgcov.a: stmp-dirs $libgcov_a_objs" 371 echo " -rm -rf ${dir}/libgcov.a" 372 echo ' $(AR_CREATE_FOR_TARGET)' ${dir}/libgcov.a $libgcov_a_objs 373 echo ' $(RANLIB_FOR_TARGET)' ${dir}/libgcov.a 374 375 if [ "$SHLIB_LINK" ]; then 376 377 echo "" 378 echo "${dir}/libgcc_eh.a: stmp-dirs $libgcc_eh_objs" 379 echo " -rm -rf ${dir}/libgcc_eh.a" 380 echo ' $(AR_CREATE_FOR_TARGET)' ${dir}/libgcc_eh.a $libgcc_eh_objs 381 echo ' $(RANLIB_FOR_TARGET)' ${dir}/libgcc_eh.a 382 383 if [ -z "$SHLIB_MULTILIB" ]; then 384 if [ "$dir" = . ]; then 385 shlib_base_name=libgcc_s 386 else 387 shlib_base_name=libgcc_s_`echo $dir | sed s,/,_,g` 388 fi 389 shlib_so_name="$shlib_base_name" 390 shlib_dir= 391 shlib_slibdir_qual= 392 if [ -n "$MULTILIB_OSDIRNAMES" ]; then 393 if [ "$dir" != . ]; then 394 gcc_multilib_dir=`./xgcc -B./ $flags --print-multi-directory` 395 os_multilib_dir=`./xgcc -B./ $flags --print-multi-os-directory` 396 shlib_dir="$dir"/ 397 gcc_multilib_sup=`echo $gcc_multilib_dir | sed 's~^[^/]*/~~'` 398 os_multilib_base=`echo $os_multilib_dir | sed -n "s~/${gcc_multilib_sup}\$~~p"` 399 if [ -z "$os_multilib_base" ]; then 400 shlib_so_name=libgcc_s 401 if [ "$os_multilib_dir" != "." ]; then 402 shlib_slibdir_qual="/$os_multilib_dir" 403 fi 404 else 405 shlib_so_name=libgcc_s_`echo $gcc_multilib_sup | sed s,/,_,g` 406 shlib_slibdir_qual="/$os_multilib_base" 407 fi 408 fi 409 fi 410 echo "" 411 echo "${dir}/${shlib_base_name}${SHLIB_EXT}: $shlib_deps" 412 echo " $SHLIB_LINK" \ 413 | sed -e "s%@multilib_flags@%$flags%g" \ 414 -e "s%@multilib_dir@%$dir%g" \ 415 -e "s%@shlib_objs@%$libgcc_sh_objs%g" \ 416 -e "s%@shlib_base_name@%$shlib_base_name%g" \ 417 -e "s%@shlib_map_file@%$mapfile%g" \ 418 -e "s%@shlib_so_name@%$shlib_so_name%g" \ 419 -e "s%@shlib_dir@%$shlib_dir%g" \ 420 -e "s%@shlib_slibdir_qual@%%g" 421 elif [ "$SHLIB_MULTILIB" = "$dir" ]; then 422 shlib_base_name="libgcc_s"; 423 echo "" 424 echo "${shlib_base_name}${SHLIB_EXT}: $shlib_deps" 425 echo " $SHLIB_LINK" \ 426 | sed -e "s%@multilib_flags@%$flags%g" \ 427 -e "s%@multilib_dir@%$dir%g" \ 428 -e "s%@shlib_objs@%$libgcc_sh_objs%g" \ 429 -e "s%@shlib_base_name@%$shlib_base_name%g" \ 430 -e "s%@shlib_map_file@%$mapfile%g" \ 431 -e "s%@shlib_so_name@%$shlib_base_name%g" \ 432 -e "s%@shlib_dir@%%g" \ 433 -e "s%@shlib_slibdir_qual@%%g" 434 fi 435 fi 436done 437 438dirs=libgcc 439for ml in $MULTILIBS; do 440 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` 441 if [ $dir != . ]; then 442 dirs="$dirs ${dir} libgcc/${dir}" 443 fi 444done 445echo '' 446echo 'libgcc-stage-start:' 447echo ' for dir in '"${dirs}"'; do \' 448echo ' if [ -d $(stage)/$$dir ]; then true; else '$mkinstalldirs' $(stage)/$$dir; fi; \' 449echo ' done' 450echo ' -for dir in '"${dirs}"'; do \' 451echo ' mv $$dir/*'"${objext}"' $(stage)/$$dir; \' 452echo ' test ! -f $$dir/stacknote.s || mv $$dir/stacknote.s $(stage)/$$dir; \' 453echo ' test ! -f $$dir/libgcc.a || mv $$dir/lib* $(stage)/$$dir; \' 454echo ' done' 455 456echo "" 457all=stmp-dirs 458dirs=libgcc 459 460for ml in $MULTILIBS; do 461 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` 462 if [ $dir != . ]; then 463 dirs="$dirs ${dir} libgcc/${dir}" 464 fi 465 all="$all ${dir}/libgcc.a ${dir}/libgcov.a" 466 if [ "$SHLIB_LINK" ]; then 467 all="$all ${dir}/libgcc_eh.a" 468 if [ -z "$SHLIB_MULTILIB" ]; then 469 if [ "$dir" = "." ]; then 470 suff=""; 471 else 472 suff=_`echo $dir | sed s,/,_,g` 473 fi 474 all="$all ${dir}/libgcc_s${suff}${SHLIB_EXT}" 475 elif [ "$SHLIB_MULTILIB" = "$dir" ]; then 476 all="$all libgcc_s${SHLIB_EXT}" 477 fi 478 fi 479done 480 481echo 'stmp-dirs: force' 482echo ' for d in '"$dirs"'; do \' 483echo ' if [ -d $$d ]; then true; else '$mkinstalldirs' $$d; fi; \' 484echo ' done' 485echo ' if [ -f stmp-dirs ]; then true; else touch stmp-dirs; fi' 486 487for f in $EXTRA_MULTILIB_PARTS; do 488 for ml in $MULTILIBS; do 489 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` 490 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; 491 case $dir in 492 .) out=$f ; t= ;; 493 *) out=$dir/$f ; t=$dir/ ;; 494 esac 495 case $out in 496 # Prevent `make' from interpreting $out as a macro assignment 497 *'$(EQ)'*) targ="T_TARGET=$out T_TARGET" ;; 498 *) targ=$out ;; 499 esac 500 501 echo $out: stmp-dirs 502 echo " $make_compile" \\ 503 echo ' LIBGCC2_CFLAGS="$(LIBGCC2_CFLAGS)' $flags '" ' \\ 504 echo ' MULTILIB_CFLAGS="'$flags'"' T=$t $targ 505 506 all="$all $out" 507 done 508done 509 510echo "" 511echo "all: $all" 512 513echo "" 514echo "install: $all" 515for ml in $MULTILIBS; do 516 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` 517 flags=`echo ${ml} | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; 518 if [ $dir != . ]; then 519 ldir='$(DESTDIR)$(libsubdir)'/$dir 520 echo " if [ -d $ldir ]; then true; else $mkinstalldirs $ldir; chmod a+rx $ldir; fi;" 521 else 522 ldir='$(DESTDIR)$(libsubdir)' 523 fi 524 echo ' $(INSTALL_DATA)' ${dir}/libgcc.a ${ldir}/ 525 echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc.a 526 echo ' $(INSTALL_DATA)' ${dir}/libgcov.a ${ldir}/ 527 echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcov.a 528 529 if [ "$SHLIB_LINK" ]; then 530 echo ' $(INSTALL_DATA)' ${dir}/libgcc_eh.a ${ldir}/ 531 echo ' $(RANLIB_FOR_TARGET)' ${ldir}/libgcc_eh.a 532 533 if [ -z "$SHLIB_MULTILIB" ]; then 534 if [ "$dir" = . ]; then 535 shlib_base_name=libgcc_s 536 else 537 shlib_base_name=libgcc_s_`echo $dir | sed s,/,_,g` 538 fi 539 shlib_so_name="$shlib_base_name" 540 shlib_dir= 541 shlib_slibdir_qual= 542 if [ -n "$MULTILIB_OSDIRNAMES" ]; then 543 gcc_multilib_dir=`./xgcc -B./ $flags --print-multi-directory` 544 os_multilib_dir=`./xgcc -B./ $flags --print-multi-os-directory` 545 if [ "$dir" != . ]; then 546 shlib_dir="$dir"/ 547 fi 548 gcc_multilib_sup=`echo $gcc_multilib_dir | sed 's~^[^/]*/~~'` 549 os_multilib_base=`echo $os_multilib_dir | sed -n "s~/${gcc_multilib_sup}\$~~p"` 550 if [ -z "$os_multilib_base" ]; then 551 shlib_so_name=libgcc_s 552 if [ "$os_multilib_dir" != "." ]; then 553 shlib_slibdir_qual="/$os_multilib_dir" 554 fi 555 else 556 shlib_so_name=libgcc_s_`echo $gcc_multilib_sup | sed s,/,_,g` 557 shlib_slibdir_qual="/$os_multilib_base" 558 fi 559 fi 560 echo " $SHLIB_INSTALL" \ 561 | sed -e "s%@shlib_base_name@%$shlib_base_name%g" \ 562 -e "s%@shlib_so_name@%$shlib_so_name%g" \ 563 -e "s%@shlib_dir@%$shlib_dir%g" \ 564 -e "s%@shlib_slibdir_qual@%$shlib_slibdir_qual%g" 565 elif [ "$SHLIB_MULTILIB" = "$dir" ]; then 566 shlib_base_name="libgcc_s"; 567 echo " $SHLIB_INSTALL" \ 568 | sed -e "s%@shlib_base_name@%$shlib_base_name%g" \ 569 -e "s%@shlib_so_name@%$shlib_base_name%g" \ 570 -e "s%@shlib_dir@%%g" \ 571 -e "s%@shlib_slibdir_qual@%%g" 572 fi 573 fi 574done 575for f in $EXTRA_MULTILIB_PARTS; do 576 for ml in $MULTILIBS; do 577 dir=`echo ${ml} | sed -e 's/;.*$//' -e 's/=/$(EQ)/g'` 578 if [ $dir != . ]; then 579 out=${dir}/$f 580 ldir='$(DESTDIR)$(libsubdir)'/$dir 581 else 582 out=$f 583 ldir='$(DESTDIR)$(libsubdir)' 584 fi 585 echo ' $(INSTALL_DATA)' $out $ldir/ 586 done 587done 588