added configure support
This commit is contained in:
		
							parent
							
								
									5647993e79
								
							
						
					
					
						commit
						dd56ab8c77
					
				
					 5 changed files with 307 additions and 5 deletions
				
			
		|  | @ -8,6 +8,7 @@ version 0.9.17: | |||
| - sanitized string and character constant parsing | ||||
| - fixed comment parse (signaled by Damian M Gryski) | ||||
| - fixed macro function bug (signaled by Philippe Ribet) | ||||
| - added configure (initial patch by Mitchell N Charity) | ||||
| 
 | ||||
| version 0.9.16: | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										11
									
								
								README
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								README
									
										
									
									
									
								
							|  | @ -32,13 +32,14 @@ Documentation: | |||
| 
 | ||||
| *** TCC currently only works on Linux x86 with glibc >= 2.1 ***. | ||||
| 
 | ||||
| Type 'make install' to compile and install tcc in /usr/local/bin and | ||||
| /usr/local/lib/tcc. | ||||
|    ./configure | ||||
|    make | ||||
|    make test | ||||
|    make install | ||||
| 
 | ||||
| Or type 'make all' to only compile it. | ||||
| By default, tcc is installed in /usr/local/bin. | ||||
| ./configure --help  shows configuration options. | ||||
| 
 | ||||
| Type 'make libinstall' to compile and install libtcc. | ||||
| Or type 'make libtcc_test' to only compile it. | ||||
| 
 | ||||
| 2) Introduction | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										4
									
								
								TODO
									
										
									
									
									
								
							
							
						
						
									
										4
									
								
								TODO
									
										
									
									
									
								
							|  | @ -1,5 +1,9 @@ | |||
| TODO list: | ||||
| 
 | ||||
| - '-b' bug. | ||||
| - atexit (Nigel Horne) | ||||
| - see -lxxx bug (Michael Charity). | ||||
| - empty 'default:' in switch. | ||||
| - fix asm without input/output (no % preprocessing) | ||||
| - handle inline functions as macros. | ||||
| - see transparent union pb in /urs/include/sys/socket.h | ||||
|  |  | |||
							
								
								
									
										1
									
								
								VERSION
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								VERSION
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| 0.9.17 | ||||
							
								
								
									
										295
									
								
								configure
									
										
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										295
									
								
								configure
									
										
									
									
										vendored
									
									
										Executable file
									
								
							|  | @ -0,0 +1,295 @@ | |||
| #!/bin/sh | ||||
| # | ||||
| # tcc configure script (c) 2003 Fabrice Bellard | ||||
| # | ||||
| # set temporary file name | ||||
| if test ! -z "$TMPDIR" ; then | ||||
|     TMPDIR1="${TMPDIR}" | ||||
| elif test ! -z "$TEMPDIR" ; then | ||||
|     TMPDIR1="${TEMPDIR}" | ||||
| else | ||||
|     TMPDIR1="/tmp" | ||||
| fi | ||||
| 
 | ||||
| TMPC="${TMPDIR1}/tcc-conf-${RANDOM}-$$-${RANDOM}.c" | ||||
| TMPO="${TMPDIR1}/tcc-conf-${RANDOM}-$$-${RANDOM}.o" | ||||
| TMPE="${TMPDIR1}/tcc-conf-${RANDOM}-$$-${RANDOM}" | ||||
| TMPS="${TMPDIR1}/tcc-conf-${RANDOM}-$$-${RANDOM}.S" | ||||
| TMPH="${TMPDIR1}/tcc-conf-${RANDOM}-$$-${RANDOM}.h" | ||||
| 
 | ||||
| # default parameters | ||||
| prefix="/usr/local" | ||||
| execprefix="" | ||||
| bindir="" | ||||
| libdir="" | ||||
| includedir="" | ||||
| mandir="" | ||||
| cross_prefix="" | ||||
| cc="gcc" | ||||
| host_cc="gcc" | ||||
| ar="ar" | ||||
| make="make" | ||||
| strip="strip" | ||||
| cpu=`uname -m` | ||||
| case "$cpu" in | ||||
|   i386|i486|i586|i686|i86pc|BePC) | ||||
|     cpu="x86" | ||||
|   ;; | ||||
|   armv4l) | ||||
|     cpu="armv4l" | ||||
|   ;; | ||||
|   alpha) | ||||
|     cpu="alpha" | ||||
|   ;; | ||||
|   "Power Macintosh"|ppc|ppc64) | ||||
|     cpu="powerpc" | ||||
|   ;; | ||||
|   mips) | ||||
|     cpu="mips" | ||||
|   ;; | ||||
|   s390) | ||||
|     cpu="s390" | ||||
|   ;; | ||||
|   *) | ||||
|     cpu="unknown" | ||||
|   ;; | ||||
| esac | ||||
| gprof="no" | ||||
| bigendian="no" | ||||
| 
 | ||||
| # OS specific | ||||
| targetos=`uname -s` | ||||
| case $targetos in | ||||
| *) ;; | ||||
| esac | ||||
| 
 | ||||
| # find source path | ||||
| # XXX: we assume an absolute path is given when launching configure,  | ||||
| # except in './configure' case. | ||||
| source_path=${0%configure} | ||||
| source_path=${source_path%/} | ||||
| source_path_used="yes" | ||||
| if test -z "$source_path" -o "$source_path" = "." ; then | ||||
|     source_path=`pwd` | ||||
|     source_path_used="no" | ||||
| fi | ||||
| 
 | ||||
| for opt do | ||||
|   case "$opt" in | ||||
|   --prefix=*) prefix=`echo $opt | cut -d '=' -f 2` | ||||
|   ;; | ||||
|   --exec-prefix=*) execprefix=`echo $opt | cut -d '=' -f 2` | ||||
|   ;; | ||||
|   --bindir=*) bindir=`echo $opt | cut -d '=' -f 2` | ||||
|   ;; | ||||
|   --libdir=*) libdir=`echo $opt | cut -d '=' -f 2` | ||||
|   ;; | ||||
|   --includedir=*) includedir=`echo $opt | cut -d '=' -f 2` | ||||
|   ;; | ||||
|   --mandir=*) mandir=`echo $opt | cut -d '=' -f 2` | ||||
|   ;; | ||||
|   --source-path=*) source_path=`echo $opt | cut -d '=' -f 2` | ||||
|   ;; | ||||
|   --cross-prefix=*) cross_prefix=`echo $opt | cut -d '=' -f 2` | ||||
|   ;; | ||||
|   --cc=*) cc=`echo $opt | cut -d '=' -f 2` | ||||
|   ;; | ||||
|   --make=*) make=`echo $opt | cut -d '=' -f 2` | ||||
|   ;; | ||||
|   --extra-cflags=*) CFLAGS="${opt#--extra-cflags=}" | ||||
|   ;; | ||||
|   --extra-ldflags=*) LDFLAGS="${opt#--extra-ldflags=}" | ||||
|   ;; | ||||
|   --extra-libs=*) extralibs=${opt#--extra-libs=} | ||||
|   ;; | ||||
|   --cpu=*) cpu=`echo $opt | cut -d '=' -f 2` | ||||
|   ;; | ||||
|   --enable-gprof) gprof="yes" | ||||
|   ;; | ||||
|   esac | ||||
| done | ||||
| 
 | ||||
| # Checking for CFLAGS | ||||
| if test -z "$CFLAGS"; then | ||||
|     CFLAGS="-O2" | ||||
| fi | ||||
| 
 | ||||
| cc="${cross_prefix}${cc}" | ||||
| ar="${cross_prefix}${ar}" | ||||
| strip="${cross_prefix}${strip}" | ||||
| 
 | ||||
| if test -z "$cross_prefix" ; then | ||||
| 
 | ||||
| # --- | ||||
| # big/little endian test | ||||
| cat > $TMPC << EOF | ||||
| #include <inttypes.h> | ||||
| int main(int argc, char ** argv){ | ||||
| 	volatile uint32_t i=0x01234567; | ||||
| 	return (*((uint8_t*)(&i))) == 0x67; | ||||
| } | ||||
| EOF | ||||
| 
 | ||||
| if $cc -o $TMPE $TMPC 2>/dev/null ; then | ||||
| $TMPE && bigendian="yes" | ||||
| else | ||||
| echo big/little test failed | ||||
| fi | ||||
| 
 | ||||
| else | ||||
| 
 | ||||
| # if cross compiling, cannot launch a program, so make a static guess | ||||
| if test "$cpu" = "powerpc" -o "$cpu" = "mips" -o "$cpu" = "s390" ; then | ||||
|     bigendian="yes" | ||||
| fi | ||||
| 
 | ||||
| fi | ||||
| 
 | ||||
| # check gcc version | ||||
| cat > $TMPC <<EOF | ||||
| int main(void) { | ||||
| #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 2) | ||||
| return 0; | ||||
| #else | ||||
| #error gcc < 3.2 | ||||
| #endif | ||||
| } | ||||
| EOF | ||||
| 
 | ||||
| gcc_major="2" | ||||
| if $cc -o $TMPO $TMPC 2> /dev/null ; then | ||||
|    gcc_major="3" | ||||
| fi | ||||
| 
 | ||||
| if test x"$1" = x"-h" -o x"$1" = x"--help" ; then | ||||
| cat << EOF | ||||
| 
 | ||||
| Usage: configure [options] | ||||
| Options: [defaults in brackets after descriptions] | ||||
| 
 | ||||
| EOF | ||||
| echo "Standard options:" | ||||
| echo "  --help                   print this message" | ||||
| echo "  --prefix=PREFIX          install in PREFIX [$prefix]" | ||||
| echo "  --exec-prefix=EPREFIX    install architecture-dependent files in EPREFIX" | ||||
| echo "                           [same as prefix]" | ||||
| echo "  --bindir=DIR             user executables in DIR [EPREFIX/bin]" | ||||
| echo "  --libdir=DIR             object code libraries in DIR [EPREFIX/lib]" | ||||
| echo "  --includedir=DIR         C header files in DIR [PREFIX/include]" | ||||
| echo "  --mandir=DIR             man documentation in DIR [PREFIX/man]" | ||||
| echo "" | ||||
| echo "Advanced options (experts only):" | ||||
| echo "  --source-path=PATH       path of source code [$source_path]" | ||||
| echo "  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]" | ||||
| echo "  --cc=CC                  use C compiler CC [$cc]" | ||||
| echo "  --make=MAKE              use specified make [$make]" | ||||
| echo "" | ||||
| #echo "NOTE: The object files are build at the place where configure is launched" | ||||
| exit 1 | ||||
| fi | ||||
| 
 | ||||
| if test x"$execprefix" = x""; then | ||||
| execprefix="${prefix}" | ||||
| fi | ||||
| if test x"$bindir" = x""; then | ||||
| bindir="${execprefix}/bin" | ||||
| fi | ||||
| if test x"$libdir" = x""; then | ||||
| libdir="${execprefix}/lib" | ||||
| fi | ||||
| if test x"$includedir" = x""; then | ||||
| includedir="${prefix}/include" | ||||
| fi | ||||
| if test x"$mandir" = x""; then | ||||
| mandir="${prefix}/man" | ||||
| fi | ||||
| 
 | ||||
| echo "Binary  directory   $bindir" | ||||
| echo "Library directory   $libdir" | ||||
| echo "Include directory   $includedir" | ||||
| echo "Manual  directory   $mandir" | ||||
| echo "Source path      $source_path" | ||||
| echo "C compiler       $cc" | ||||
| echo "make             $make" | ||||
| echo "CPU              $cpu" | ||||
| echo "Big Endian       $bigendian" | ||||
| echo "gprof enabled    $gprof" | ||||
| 
 | ||||
| echo "Creating config.mak and config.h" | ||||
| 
 | ||||
| echo "# Automatically generated by configure - do not modify" > config.mak | ||||
| echo "/* Automatically generated by configure - do not modify */" > $TMPH | ||||
| 
 | ||||
| echo "prefix=$prefix" >> config.mak | ||||
| echo "bindir=$bindir" >> config.mak | ||||
| echo "libdir=$libdir" >> config.mak | ||||
| echo "includedir=$includedir" >> config.mak | ||||
| echo "mandir=$mandir" >> config.mak | ||||
| echo "#define CONFIG_TCC_LIBDIR \"$libdir\"" >> $TMPH | ||||
| echo "MAKE=$make" >> config.mak | ||||
| echo "CC=$cc" >> config.mak | ||||
| echo "GCC_MAJOR=$gcc_major" >> config.mak | ||||
| echo "#define GCC_MAJOR $gcc_major" >> $TMPH | ||||
| echo "HOST_CC=$host_cc" >> config.mak | ||||
| echo "AR=$ar" >> config.mak | ||||
| echo "STRIP=$strip -s -R .comment -R .note" >> config.mak | ||||
| echo "CFLAGS=$CFLAGS" >> config.mak | ||||
| echo "LDFLAGS=$LDFLAGS" >> config.mak | ||||
| if test "$cpu" = "x86" ; then | ||||
|   echo "ARCH=i386" >> config.mak | ||||
|   echo "#define HOST_I386 1" >> $TMPH | ||||
| elif test "$cpu" = "armv4l" ; then | ||||
|   echo "ARCH=arm" >> config.mak | ||||
|   echo "#define HOST_ARM 1" >> $TMPH | ||||
| elif test "$cpu" = "powerpc" ; then | ||||
|   echo "ARCH=ppc" >> config.mak | ||||
|   echo "#define HOST_PPC 1" >> $TMPH | ||||
| elif test "$cpu" = "mips" ; then | ||||
|   echo "ARCH=mips" >> config.mak | ||||
|   echo "#define HOST_MIPS 1" >> $TMPH | ||||
| elif test "$cpu" = "s390" ; then | ||||
|   echo "ARCH=s390" >> config.mak | ||||
|   echo "#define HOST_S390 1" >> $TMPH | ||||
| elif test "$cpu" = "alpha" ; then | ||||
|   echo "ARCH=alpha" >> config.mak | ||||
|   echo "#define HOST_ALPHA 1" >> $TMPH | ||||
| else | ||||
|   echo "Unsupported CPU" | ||||
|   exit 1 | ||||
| fi | ||||
| if test "$bigendian" = "yes" ; then | ||||
|   echo "WORDS_BIGENDIAN=yes" >> config.mak | ||||
|   echo "#define WORDS_BIGENDIAN 1" >> $TMPH | ||||
| fi | ||||
| if test "$gprof" = "yes" ; then | ||||
|   echo "TARGET_GPROF=yes" >> config.mak | ||||
|   echo "#define HAVE_GPROF 1" >> $TMPH | ||||
| fi | ||||
| echo -n "VERSION=" >>config.mak | ||||
| head $source_path/VERSION >>config.mak | ||||
| echo "" >>config.mak | ||||
| echo -n "#define TCC_VERSION \"" >> $TMPH | ||||
| head $source_path/VERSION >> $TMPH | ||||
| echo "\"" >> $TMPH | ||||
| 
 | ||||
| # build tree in object directory if source path is different from current one | ||||
| if test "$source_path_used" = "yes" ; then | ||||
|     DIRS="tests" | ||||
|     FILES="Makefile tests/Makefile" | ||||
|     for dir in $DIRS ; do | ||||
|             mkdir -p $dir | ||||
|     done | ||||
|     for f in $FILES ; do | ||||
|         ln -sf $source_path/$f $f | ||||
|     done | ||||
| fi | ||||
| echo "SRC_PATH=$source_path" >> config.mak | ||||
| 
 | ||||
| diff $TMPH config.h >/dev/null 2>&1 | ||||
| if test $? -ne 0 ; then | ||||
| 	mv -f $TMPH config.h | ||||
| else | ||||
| 	echo "config.h is unchanged" | ||||
| fi | ||||
| 
 | ||||
| rm -f $TMPO $TMPC $TMPE $TMPS $TMPH | ||||
		Loading…
	
	Add table
		
		Reference in a new issue