aboutsummaryrefslogtreecommitdiff
path: root/cfg-ml-pos.in
blob: c0798a38c35ff7c6821d581e76e4c8dae0abd647 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
# 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}"
  # FIXME: following line needs testing in multilevel dir (eg: m68k).
  dotdot=`echo ${multisubdir} | sed -e 's:/[^/]*:../:g'`
  sed -e "s:^TOP[ 	]*=[ 	]*\([./]*\)[ 	]*$:TOP = ${dotdot}\1:" \
      -e "s:^MULTITOP[ 	]*=[ 	]*\([./]*\)[ 	]*$:MULTITOP = ${dotdot}\1:" \
	${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 trailing '/'.
# XXX_MULTI is a set of helpers for all, install, etc.
# Makefile.in is free to override them since these are prepended to the top.

cat > Multi.tem <<EOF
MULTIDIRS = ${multidirs}
MULTISUBDIR = ${multisubdir}
EOF
cat Multi.tem ${Makefile} > Makefile.tem
rm -f Multi.tem ${Makefile}
mv Makefile.tem ${Makefile}

# Add default definitions for all, install, clean, etc.
# if the Makefile uses them.

if grep ALL_MULTI ${Makefile} >/dev/null 2>/dev/null
then
	cat > Multi.tem <<EOF
ALL_MULTI = all-multi
INSTALL_MULTI = install-multi
MOSTLYCLEAN_MULTI = mostlyclean-multi
CLEAN_MULTI = clean-multi
DISTCLEAN_MULTI = distclean-multi
EOF

	cat Multi.tem ${Makefile} > Makefile.tem
	rm -f Multi.tem ${Makefile}
	mv Makefile.tem ${Makefile}

	cat > Multi.tem <<\EOF

# FIXME: We use --print-multi-lib but the others don't.  Standardize.
all-multi:
	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}" \
				all); then \
		  true; \
		else \
		  exit 1; \
		fi; \
	      else true; \
	      fi; \
	    fi; \
	  done; \
	fi

install-multi mostlyclean-multi clean-multi distclean-multi realclean-multi:
	if [ -n "$(MULTIDIRS)" ]; then \
	  rootpre=`pwd`/; export rootpre; \
	  srcrootpre=`cd $(srcdir); pwd`/; export srcrootpre; \
	  $(MAKE) DO=`echo $@ | sed -e 's/-multi$$//'` DODIRS="$(MULTIDIRS)" $(FLAGS_TO_PASS) multi_subdir_do; \
	else true; fi

multi_subdir_do:
	for i in $(DODIRS); do \
		if [ -f ./$$i/Makefile ] ; then \
			if (cd ./$$i; $(MAKE) $(FLAGS_TO_PASS) $(DO)) ; \
			then true ; \
			else exit 1 ; \
			fi ; \
		else true; \
		fi ; \
	done
EOF

	cat ${Makefile} Multi.tem > Makefile.tem
	rm -f ${Makefile} Multi.tem
	mv Makefile.tem ${Makefile}
fi

fi # "${enable_multilib}" = yes