#!/bin/sh program="$0" prefix="@PREFIX@" libfix="@PREFIX@" config="" cc="@CC@" infile="" outfile="" idopts="" ccopts="" ldobjs="" idtype="program" idmain="false" cckill="true" dlsyms="false" static="false" gc_a="gc.a" _p="" fatal () { echo "$@" >&2 exit 1 } checkarg () { [ $# -gt 1 ] || fatal "option '$1' requires an argument" } banner () { echo "Id Compiler version 1.1" echo "Copyright (c) 2005, 2006, 2007 Ian Piumarta" } copyright () { banner echo "All rights reserved" cat <> .id.ldobjs;; *.a) ldobjs="$ldobjs $1"; echo "$1" >> .id.ldobjs;; *.dll) ldobjs="$ldobjs $1";; *) [ -z "$infile" ] || fatal "multiple input files"; infile="$1";; esac shift; done case "$config" in "arch") echo "@SYSARCH@"; exit;; "os") echo "@SYSOS@"; exit;; "IDST") echo "@IDST@"; exit;; "TARGET") echo "@TARGET@"; exit;; "PREFIX") echo "@PREFIX@"; exit;; "CC") echo "@CC@"; exit;; "CFLAGS") echo "@CFLAGS@"; exit;; "MFLAGS") echo "@MFLAGS@"; exit;; "OFLAGS") echo "@OFLAGS@"; exit;; "O3FLAGS") echo "@O3FLAGS@"; exit;; "CCFLAGS") echo "@CCFLAGS@"; exit;; "CCFLAGS_O") echo "@CCFLAGS_O@"; exit;; "CCFLAGS_SO") echo "@CCFLAGS_SO@"; exit;; "CCFLAGS_K") echo "@CCFLAGS_K@"; exit;; "LDFLAGS") echo "@LDFLAGS@"; exit;; "LDFLAGS_O") echo "@LDFLAGS_O@"; exit;; "LDFLAGS_SO") echo "@LDFLAGS_SO@"; exit;; "LDFLAGS_K") echo "@LDFLAGS_K@"; exit;; "LDLIBS") echo "@LDLIBS@"; exit;; "LDLIBS_O") echo "@LDLIBS_O@"; exit;; "LDLIBS_SO") echo "@LDLIBS_SO@"; exit;; "OBJEXT") echo "@OBJEXT@"; exit;; "OBJEXT_O") echo "@OBJEXT_O@"; exit;; "OBJEXT_SO") echo "@OBJEXT_SO@"; exit;; "GCDIR") echo "@GCDIR@"; exit;; "SYSARCH") echo "@SYSARCH@"; exit;; "SYSOS") echo "@SYSOS@"; exit;; ?*) echo "unknown config parameter: $config" >&2; exit 1;; esac case $idtype in program) idflags="-m" if $static; then ccflags="@CCFLAGS_K@" ccopts="$ccopts -DEMBEDDED=1 -I$IDST/system/include" ldflags="@LDFLAGS_K@" idlibs="libid_k.o" ldlibs="" else ccflags="@CFLAGS@ @MFLAGS@ @CCFLAGS@" ldflags="@LDFLAGS@" idlibs="libid$_p.o $gc_a" ldlibs="@LDLIBS@" fi soext="@OBJEXT@" ;; win32) idflags="-w" ccflags="@CFLAGS@ @MFLAGS@ @CCFLAGS@" ldflags="@LDFLAGS@" idlibs="libid$_p.o $gc_a" ldlibs="@LDLIBS@" soext="@OBJEXT@" ;; object) idflags="-c" if $static; then ccflags="@CCFLAGS_O@ @CCFLAGS_K@" ldflags="@LDFLAGS_O@" ldlibs="@LDLIBS_O@" else ccflags="@CFLAGS@ @MFLAGS@ @CCFLAGS_O@" ldflags="@LDFLAGS_O@" ldlibs="@LDLIBS_O@" fi soext="@OBJEXT_O@" ;; shared) idflags="" ccflags="@CFLAGS@ @MFLAGS@ @CCFLAGS_SO@" ldflags="@LDFLAGS_SO@" idlibs="" ldlibs="@LDLIBS_SO@" soext="@OBJEXT_SO@" ;; *) echo "this cannot happen" >&2 exit 1 ;; esac for lib in $idlibs; do plibs="${plibs} ${prefix}${lib}" done idlibs="$plibs" ccflags="$ccflags -I${prefix}" if test -s .id.ldobjs; then while read file; do ldobjs="$ldobjs `nm $file | fgrep __id__init__ | awk '{print \"-u\", $3}'`" done < .id.ldobjs fi if $dlsyms; then echo $idlibs | tr ' ' '\012' >> .id.ldobjs while read file; do nm $file 2>/dev/null | grep -w [TD] >> .id.dlsyms done < .id.ldobjs awk -f - .id.dlsyms > .id.dlsym.s <<-'EOF' BEGIN { print ".data" } { printf "_dl_%d: .asciz \"%s\"\n", NR, $3 } EOF awk -f - .id.dlsyms >> .id.dlsym.s <<-'EOF' BEGIN { print ".globl dlsym_tab"; print "dlsym_tab:" } { printf ".long _dl_%d, %s\n", NR, $3 } END { print ".long 0,0" } EOF as -o .id.dlsym.o .id.dlsym.s dlsyms=".id.dlsym.o" else dlsyms="" fi rm -f .id.ldobjs rm -f .id.dlsyms rm -f .id.dlsym.s $idmain && idflags="-m" if [ -z "$infile" ]; then [ -z "$outfile" ] && fatal "no output file specified" else [ -z "$outfile" ] && outfile=${infile%.st}$soext [ "$infile" = "$outfile" ] && fatal "input and output files are the same" ccfile="${outfile}.c" fi if $cckill; then cckill="rm -f" else cckill="true" fi trap "$run $cckill $ccfile; exit 1" 2 3 5 6 10 13 15 #for lib in $idlibs; do # plibs="${plibs} ${prefix}${lib}" #done #idlibs="$plibs" #ccflags="$ccflags -I${prefix}" [ -z "$prefix" ] || { libfix=${prefix} expr "//$libfix" : '///' >/dev/null || libfix="$PWD/$libfix" LD_LIBRARY_PATH=${LD_LIBRARY_PATH:-${libfix}} export LD_LIBRARY_PATH IDC_LIBDIR=${IDC_LIBDIR:-${libfix}} export IDC_LIBDIR } if [ ! -z "$infile" ]; then $verbose $run ${prefix}idc1 -I$prefix $idopts $idflags $infile -o $ccfile && $run $cc -I$prefix/include $ccflags $ccopts $ccfile -o $outfile $ldflags $dlsyms $ldobjs $idlibs $ldlibs && $run $cckill $ccfile else $verbose $run $cc -I$prefix/include $ccflags $ccopts -o $outfile $ldflags $dlsyms $ldobjs $idlibs $ldlibs fi