112 lines
3.7 KiB
Plaintext
112 lines
3.7 KiB
Plaintext
# Configure fragment invoked in the post-target section for subdirs
|
|
# wanting multilib support.
|
|
# The intent is to keep as much of this in one place as possible (and out
|
|
# of each subdirectory, eg: newlib, libio, etc.) until the right way to do
|
|
# this (ha ha) is decided upon.
|
|
|
|
# Only do this if --enable-multilib.
|
|
|
|
if [ "${enable_multilib}" = yes ]; then
|
|
|
|
if [ -z "${with_multisubdir}" ]; then
|
|
multisubdir=
|
|
else
|
|
multisubdir="/${with_multisubdir}"
|
|
# The '[^/][^/]*' appears that way to work around a SunOS sed bug.
|
|
dotdot=`echo ${with_multisubdir} | sed -e 's:[^/][^/]*:..:g'`
|
|
# TOP is used by newlib and should not be used elsewhere for this purpose.
|
|
# MULTITOP is the proper one to use.
|
|
# FIXME: newlib needs to be updated to use MULTITOP so we can delete TOP.
|
|
# Newlib may wish to continue to use TOP for its own purposes of course.
|
|
sed -e "s:^TOP[ ]*=[ ]*\([./]*\)[ ]*$:TOP = ${dotdot}/\1:" \
|
|
-e "s:^MULTITOP[ ]*=.*$:MULTITOP = ${dotdot}:" \
|
|
${Makefile} > Makefile.tem
|
|
rm -f ${Makefile}
|
|
mv Makefile.tem ${Makefile}
|
|
fi
|
|
|
|
# MULTIDIRS is non-empty for the cpu top level Makefile (eg: newlib/Makefile)
|
|
# and lists the subdirectories to recurse into.
|
|
# MULTISUBDIR is non-empty in each cpu subdirectory's Makefile
|
|
# (eg: newlib/h8300h/Makefile) and is the installed subdirectory name with
|
|
# a leading '/'.
|
|
# MULTIDO is used for targets like all, install, and check where
|
|
# $(FLAGS_TO_PASS) augmented with the subdir's compiler option is needed.
|
|
# MULTICLEAN is used for the *clean targets.
|
|
#
|
|
# ??? It is possible to merge MULTIDO and MULTICLEAN into one. They are
|
|
# currently kept separate because we don't want the *clean targets to require
|
|
# the existence of the compiler (which MULTIDO currently requires) and
|
|
# therefore we'd have to record the directory options as well as names
|
|
# (currently we just record the names and use --print-multi-lib to get the
|
|
# options).
|
|
|
|
sed -e "s:^MULTIDIRS[ ]*=.*$:MULTIDIRS = ${multidirs}:" \
|
|
-e "s:^MULTISUBDIR[ ]*=.*$:MULTISUBDIR = ${multisubdir}:" \
|
|
-e 's:^MULTIDO[ ]*=.*$:MULTIDO = $(MAKE):' \
|
|
-e 's:^MULTICLEAN[ ]*=.*$:MULTICLEAN = $(MAKE):' \
|
|
${Makefile} > Makefile.tem
|
|
rm -f ${Makefile}
|
|
mv Makefile.tem ${Makefile}
|
|
|
|
# ??? May wish to add a check to avoid appending this to Makefiles that
|
|
# don't need it. It's not necessary, but is cleaner.
|
|
|
|
cat > Multi.tem <<\EOF
|
|
|
|
# FIXME: There should be an @-sign in front of the `if'.
|
|
# Leave out until this is tested a bit more.
|
|
multi-do:
|
|
if [ -z "$(MULTIDIRS)" ]; then \
|
|
true; \
|
|
else \
|
|
rootpre=`pwd`/; export rootpre; \
|
|
srcrootpre=`cd $(srcdir); pwd`/; export srcrootpre; \
|
|
compiler="$(CC)"; \
|
|
for i in `$${compiler} --print-multi-lib 2>/dev/null`; do \
|
|
dir=`echo $$i | sed -e 's/;.*$$//'`; \
|
|
if [ "$${dir}" = "." ]; then \
|
|
true; \
|
|
else \
|
|
if [ -d $${dir} ]; then \
|
|
flags=`echo $$i | sed -e 's/^[^;]*;//' -e 's/@/ -/g'`; \
|
|
if (cd $${dir}; $(MAKE) $(FLAGS_TO_PASS) \
|
|
CFLAGS="$(CFLAGS) $${flags}" \
|
|
CXXFLAGS="$(CXXFLAGS) $${flags}" \
|
|
LIBCFLAGS="$(LIBCFLAGS) $${flags}" \
|
|
LIBCXXFLAGS="$(LIBCXXFLAGS) $${flags}" \
|
|
$(DO)); then \
|
|
true; \
|
|
else \
|
|
exit 1; \
|
|
fi; \
|
|
else true; \
|
|
fi; \
|
|
fi; \
|
|
done; \
|
|
fi
|
|
|
|
# FIXME: There should be an @-sign in front of the `if'.
|
|
# Leave out until this is tested a bit more.
|
|
multi-clean:
|
|
if [ -z "$(MULTIDIRS)" ]; then \
|
|
true; \
|
|
else \
|
|
for dir in Makefile $(MULTIDIRS); do \
|
|
if [ -f ./$$dir/Makefile ]; then \
|
|
if (cd ./$$dir; $(MAKE) $(FLAGS_TO_PASS) $(DO)); \
|
|
then true; \
|
|
else exit 1; \
|
|
fi; \
|
|
else true; \
|
|
fi; \
|
|
done; \
|
|
fi
|
|
EOF
|
|
|
|
cat ${Makefile} Multi.tem > Makefile.tem
|
|
rm -f ${Makefile} Multi.tem
|
|
mv Makefile.tem ${Makefile}
|
|
|
|
fi # "${enable_multilib}" = yes
|