cpp-ccas
上传用户:qaz666999
上传日期:2022-08-06
资源大小:2570k
文件大小:3k
源码类别:

数学计算

开发平台:

Unix_Linux

  1. #!/bin/sh
  2. #
  3. # A helper script for Makeasm.am .S.lo rule.
  4. # Copyright 2001 Free Software Foundation, Inc.
  5. #
  6. # This file is part of the GNU MP Library.
  7. #
  8. # The GNU MP Library is free software; you can redistribute it and/or modify
  9. # it under the terms of the GNU Lesser General Public License as published by
  10. # the Free Software Foundation; either version 3 of the License, or (at your
  11. # option) any later version.
  12. #
  13. # The GNU MP Library is distributed in the hope that it will be useful, but
  14. # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  15. # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
  16. # License for more details.
  17. #
  18. # You should have received a copy of the GNU Lesser General Public License
  19. # along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.
  20. # Usage: cpp-cc --cpp=CPP CC ... file.S ...
  21. #
  22. # Process file.S with the given CPP command plus any -D options in the
  23. # rest of the arguments, then assemble with the given CC plus all
  24. # arguments.
  25. #
  26. # The CPP command must be in a single --cpp= argument, and will be
  27. # split on whitespace.  It should include -I options required.
  28. #
  29. # When CC is invoked, file.S is replaced with a temporary .s file
  30. # which is the CPP output.
  31. #
  32. # Any lines starting with "#" are removed from the CPP output, usually
  33. # these will be #line and #file markers from CPP, but they might also
  34. # be comments from the .S.
  35. #
  36. # To allow parallel builds, the temp file name is based on the .S file
  37. # name, which will be the output object filename for all uses we put
  38. # this script to.
  39. CPP=
  40. CPPDEFS=
  41. CC=
  42. S=
  43. SEEN_O=no
  44. for i in "$@"; do
  45.   case $i in
  46.     --cpp=*)
  47.       CPP=`echo "$i" | sed 's/^--cpp=//'`
  48.       ;;
  49.     -D*)
  50.       CPPDEFS="$CPPDEFS $i"
  51.       CC="$CC $i"
  52.       ;;
  53.     *.S)
  54.       if test -n "$S"; then
  55.         echo "Only one .S file permitted"
  56.         exit 1
  57.       fi
  58.       BASENAME=`echo "$i" | sed -e 's/.S$//' -e 's/^.*[\/:]//'`
  59.       S=$i
  60.       TMP_I=tmp-$BASENAME.i
  61.       TMP_S=tmp-$BASENAME.s
  62.       CC="$CC $TMP_S"
  63.       ;;
  64.     -o)
  65.       SEEN_O=yes
  66.       CC="$CC $i"
  67.       ;;
  68.     *)
  69.       CC="$CC $i"
  70.       ;;
  71.   esac
  72. done
  73. if test -z "$CPP"; then
  74.   echo "No --cpp specified"
  75.   exit 1
  76. fi
  77. if test -z "$S"; then
  78.   echo "No .S specified"
  79.   exit 1
  80. fi
  81. # Libtool adds it's own -o when sending output to .libs/foo.o, but not
  82. # when just wanting foo.o in the current directory.  We need an
  83. # explicit -o in both cases since we're assembling tmp-foo.s.
  84. #
  85. if test $SEEN_O = no; then
  86.   CC="$CC -o $BASENAME.o"
  87. fi
  88. echo "$CPP $CPPDEFS $S >$TMP_I"
  89. $CPP $CPPDEFS $S >$TMP_I || exit
  90. echo "grep -v '^#' $TMP_I >$TMP_S"
  91. grep -v '^#' $TMP_I >$TMP_S
  92. echo "$CC"
  93. $CC || exit
  94. # Comment this out to preserve .s intermediates
  95. rm -f $TMP