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