scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | README | LICENSE

gcc-scc.sh (1318B)


      1 #!/bin/sh
      2 
      3 set -e
      4 
      5 while getopts gr:O:a:s:o:c o
      6 do
      7 	case $o in
      8 	g)
      9 		g=-g
     10 		;;
     11 	O)
     12 		opti=-O1
     13 		;;
     14 	r)
     15 		root=$OPTARG
     16 		;;
     17 	a)
     18 		abi=$OPTARG
     19 		;;
     20 	s)
     21 		sys=$OPTARG
     22 		;;
     23 	o)
     24 		out=$OPTARG
     25 		;;
     26 	c)
     27 		onlycc=1
     28 		;;
     29 	*)
     30 		echo >&2 "usage: gcc-scc [-o outfile] [-c] [-r root] [-a abi] [-s sys] file"
     31 		exit 1
     32 		;;
     33 	esac
     34 done
     35 shift $((OPTIND-1))
     36 
     37 sys=${sys:-`uname | tr 'A-Z' 'a-z'`}
     38 abi=${abi:-amd64}
     39 out=${out:-a.out}
     40 root=${root:-${SCCPREFIX:-`dirname $0`/..}}
     41 inc=$root/include/scc
     42 arch_inc=$inc/bits/$abi
     43 sys_inc=$inc/bits/$sys
     44 sys_arch_inc=$inc/bits/$sys/$abi
     45 lib=$root/lib/scc/${abi}-${sys}
     46 crt=$root/lib/scc/${abi}-${sys}/crt.o
     47 obj=${1%.c}.o
     48 cc=${CROSS_COMPILE}cc
     49 ld=${CROSS_COMPILE}ld
     50 
     51 case `uname` in
     52 OpenBSD)
     53 	nopie=-no-pie
     54 	;;
     55 esac
     56 
     57 includes="-nostdinc -I$inc -I$arch_inc -I$sys_inc -I$sys_arch_inc"
     58 cflags="$opti -std=c99 -w -fno-pie -fno-stack-protector -ffreestanding -static"
     59 ldflags="-z nodefaultlib -static -L$lib"
     60 
     61 if test ${onlycc:-0} -eq 1
     62 then
     63 	$cc $cflags $includes -c "$@"
     64 else
     65 	for i
     66 	do
     67 		case $i in
     68 		*.c)
     69 			$cc $g $cflags $includes -c "$i"
     70 			;;
     71 		esac
     72 	done
     73 
     74 	# convert *.c args to *.o while correctly maintaing IFS chars
     75 	for i
     76 	do
     77 		shift
     78 		case $i in
     79 		*.c)
     80 			set -- "$@" "${i%c}o"
     81 			;;
     82 		*)
     83 			set -- "$@" "$i"
     84 			;;
     85 		esac
     86 	done
     87 
     88 	$ld $g $ldflags $nopie $crt "$@" -lc -lcrt -o "$out"
     89 fi