#! stdtmpl(subsChar='?') | standard #proc generateBuildShellScript(c: TConfigData): string = # result = "#! /bin/sh\n# Generated from niminst\n" & # "# Template is in tools/buildsh.tmpl\n" & # "# To regenerate run ``niminst csource`` or ``koch csource``\n" set -e while : do case "$1" in --extraBuildArgs) extraBuildArgs=" $2" shift 2 ;; --) # End of all options shift break; ;; -*) echo "Error: Unknown option: $1" >&2 exit 1 ;; *) # No more options break ;; esac done CC="gcc" LINKER="gcc" COMP_FLAGS="?{c.ccompiler.flags}$extraBuildArgs" LINK_FLAGS="?{c.linker.flags}" # add(result, "# platform detection\n") ucpu=`uname -m` uos=`uname` # add(result, "# bin dir detection\n") binDir=?{firstBinPath(c).toUnix} if [ -s ../koch.nim ]; then binDir="../bin" fi if [ ! -d $binDir ]; then mkdir $binDir fi # add(result, "# convert to lower case:\n") ucpu=`echo $ucpu | tr "[:upper:]" "[:lower:]"` uos=`echo $uos | tr "[:upper:]" "[:lower:]"` case $uos in *linux* ) myos="linux" LINK_FLAGS="$LINK_FLAGS -ldl -lm" ;; *freebsd* | *dragonfly* ) myos="freebsd" LINK_FLAGS="$LINK_FLAGS -lm" ;; *openbsd* ) myos="openbsd" LINK_FLAGS="$LINK_FLAGS -lm" ;; *netbsd* ) myos="netbsd" LINK_FLAGS="$LINK_FLAGS -lm" ;; *darwin* ) myos="macosx" CC="clang" LINKER="clang" LINK_FLAGS="$LINK_FLAGS -ldl -lm" if [ "$HOSTTYPE" = "x86_64" ] ; then ucpu="amd64" fi ;; *aix* ) myos="aix" LINK_FLAGS="$LINK_FLAGS -ldl -lm" ;; *solaris* | *sun* ) myos="solaris" LINK_FLAGS="$LINK_FLAGS -ldl -lm -lsocket -lnsl" ;; *haiku* ) myos="haiku" ;; *) echo "Error: unknown operating system: $uos" exit 1 ;; esac case $ucpu in *i386* | *i486* | *i586* | *i686* | *bepc* | *i86pc* ) mycpu="i386" ;; *amd*64* | *x86-64* | *x86_64* ) mycpu="amd64" ;; *sparc*|*sun* ) mycpu="sparc" ;; *ppc64* ) if [ "$myos" = "linux" ] ; then COMP_FLAGS="$COMP_FLAGS -m64" LINK_FLAGS="$LINK_FLAGS -m64" fi mycpu="powerpc64" ;; *power*|*Power*|*ppc* ) mycpu="powerpc" ;; *mips* ) mycpu="mips" ;; *arm*|*armv6l* ) mycpu="arm" ;; *) echo "Error: unknown processor: $ucpu" exit 1 ;; esac # add(result, "# call the compiler:\n") case $myos in # for osA in 1..c.oses.len: ?{c.oses[osA-1]}) case $mycpu in # for cpuA in 1..c.cpus.len: ?{c.cpus[cpuA-1]}) # var linkCmd = "" # for ff in items(c.cfiles[osA][cpuA]): # let f = ff.toUnix echo "$CC $COMP_FLAGS -Ic_code -c ?{f} -o ?{changeFileExt(f, "o")}" $CC $COMP_FLAGS -Ic_code -c ?{f} -o ?{changeFileExt(f, "o")} # add(linkCmd, " \\\n" & changeFileExt(f, "o")) # end for echo "$LINKER -o ?{"$binDir/" & toLower(c.name)} ?linkCmd $LINK_FLAGS" $LINKER -o ?{"$binDir/" & toLower(c.name)} ?linkCmd $LINK_FLAGS ;; # end for *) echo "Error: no C code generated for: [$myos: $mycpu]" exit 1 ;; esac ;; # end for *) echo "Error: no C code generated for: [$myos: $mycpu]" exit 1 ;; esac echo "SUCCESS"