mirror of
https://forge.sourceware.org/marek/gcc.git
synced 2026-02-22 12:00:11 -05:00
136 lines
3.4 KiB
Bash
136 lines
3.4 KiB
Bash
#!/bin/sh
|
|
|
|
# makeSystem creates a target SYSTEM.def using the appropriate dialect template.
|
|
|
|
# Copyright (C) 2008-2026 Free Software Foundation, Inc.
|
|
# Contributed by Gaius Mulley <gaius.mulley@southwales.ac.uk>.
|
|
#
|
|
# This file is part of GNU Modula-2.
|
|
#
|
|
# GNU Modula-2 is free software; you can redistribute it and/or modify it under
|
|
# the terms of the GNU General Public License as published by the Free
|
|
# Software Foundation; either version 3, or (at your option) any later
|
|
# version.
|
|
#
|
|
# GNU Modula-2 is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
# for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with GCC; see the file COPYING3. If not see
|
|
# <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
Usage () {
|
|
echo "Usage: makesystem [-gdb] dialectflag SYSTEM.def SYSTEM.mod { librarypath } compiler"
|
|
}
|
|
|
|
if [ $# -lt 6 ] ; then
|
|
Usage
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$1" = "-gdb" ] ; then
|
|
DEBUG=$1
|
|
shift
|
|
else
|
|
DEBUG=""
|
|
fi
|
|
DIALECT=$1
|
|
SYSTEMDEF=$2
|
|
SYSTEMMOD=$3
|
|
shift 3
|
|
LIBRARY=""
|
|
while [ $# -gt 2 ] ; do
|
|
if [ "$LIBRARY" = "" ] ; then
|
|
LIBRARY=$1
|
|
else
|
|
LIBRARY="${LIBRARY} $1"
|
|
fi
|
|
shift
|
|
done
|
|
COMPILER=$1
|
|
OUTPUTFILE=$2
|
|
|
|
if [ "$COMPILER" = "" ] ; then
|
|
echo "parameter 5 of makeSystem is incorrect, GM2_FOR_TARGET was unset"
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$DIALECT" != "-fiso" -a "$DIALECT" != "-fpim" ] ; then
|
|
Usage
|
|
echo "dialect must be -fiso or -fpim"
|
|
exit 1
|
|
fi
|
|
|
|
displayExportedTypes () {
|
|
n=1
|
|
c=0
|
|
for i in ${types} ; do
|
|
if [ $n -eq 1 ] ; then
|
|
n=0
|
|
echo -n " " >> ${OUTPUTFILE}
|
|
fi
|
|
echo -n "$i, " >> ${OUTPUTFILE}
|
|
if [ $c -eq 4 ] ; then
|
|
echo " " >> ${OUTPUTFILE}
|
|
n=1
|
|
c=0
|
|
fi
|
|
c=`expr $c + 1`
|
|
done
|
|
echo " " >> ${OUTPUTFILE}
|
|
}
|
|
|
|
displayBuiltinTypes () {
|
|
for i in ${types} ; do
|
|
echo " $i ; " >> ${OUTPUTFILE}
|
|
done
|
|
}
|
|
|
|
displayStart () {
|
|
sed -e "1,/@SYSTEM_DATATYPES@/!d" < ${SYSTEMDEF} | \
|
|
sed -e "/@SYSTEM_DATATYPES@/d" >> ${OUTPUTFILE}
|
|
}
|
|
|
|
displayMiddle () {
|
|
sed -e "1,/@SYSTEM_DATATYPES@/d" < ${SYSTEMDEF} | \
|
|
sed -e "1,/@SYSTEM_TYPES@/!d" | \
|
|
sed -e "/@SYSTEM_TYPES@/d" >> ${OUTPUTFILE}
|
|
}
|
|
|
|
displayEnd () {
|
|
sed -e "1,/@SYSTEM_TYPES@/d" < ${SYSTEMDEF} >> ${OUTPUTFILE}
|
|
}
|
|
|
|
MINIMAL="-fno-scaffold-main -fno-scaffold-dynamic -fno-scaffold-static -fno-m2-plugin"
|
|
|
|
rm -f ${OUTPUTFILE}
|
|
|
|
if [ "$DEBUG" != "" ] ; then
|
|
echo "entering gdb to debug cc1gm2 when using -fdump-system-exports"
|
|
${COMPILER} ${DIALECT} ${LIBRARY} ${MINIMAL} \
|
|
-c -fdump-system-exports ${SYSTEMMOD} -wrapper gdb,--args
|
|
exit $?
|
|
fi
|
|
|
|
${COMPILER} ${DIALECT} ${LIBRARY} ${MINIMAL} \
|
|
-S -fdump-system-exports ${SYSTEMMOD} -o /dev/null 2>&1 > /dev/null
|
|
res=$?
|
|
if [ ${res} -eq 0 ] ; then
|
|
types=`${COMPILER} ${DIALECT} ${LIBRARY} ${MINIMAL} -fno-m2-plugin -S -fdump-system-exports ${SYSTEMMOD} -o /dev/null | cut -f5 -d' '`
|
|
touch ${OUTPUTFILE}
|
|
displayStart
|
|
displayExportedTypes
|
|
displayMiddle
|
|
displayBuiltinTypes
|
|
displayEnd
|
|
else
|
|
echo "the command below failed:"
|
|
echo "${COMPILER} ${DIALECT} ${LIBRARY} ${MINIMAL} -S -fdump-system-exports ${SYSTEMMOD}"
|
|
echo "to debug the command use"
|
|
echo "${COMPILER} ${DIALECT} ${LIBRARY} ${MINIMAL} -S -fdump-system-exports ${SYSTEMMOD} -wrapper gdb,--args"
|
|
exit $res
|
|
fi
|