reference, declarationdefinition
definition → references, declarations, derived classes, virtual overrides
reference to multiple definitions → definitions
unreferenced
    1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50
   51
   52
   53
   54
   55
   56
   57
   58
   59
   60
   61
   62
   63
   64
   65
   66
   67
   68
   69
   70
   71
   72
   73
   74
   75
   76
   77
   78
   79
   80
   81
   82
   83
   84
   85
   86
   87
   88
   89
   90
   91
   92
   93
   94
   95
   96
   97
   98
   99
  100
  101
  102
  103
  104
  105
  106
  107
  108
  109
  110
  111
  112
  113
  114
  115
  116
  117
  118
  119
  120
  121
  122
  123
  124
  125
  126
  127
  128
  129
  130
  131
  132
  133
  134
  135
  136
  137
  138
  139
  140
  141
  142
  143
  144
  145
#!/bin/csh -f

set pstatus = 0
onintr cleanup
alias usage 'echo "USAGE: $0:t [-h] [-n] [-obj obj-root] [gmake-flags] [VAR=...] [toolname (default: opt)]"; set pstatus = 1; goto cleanup'

set EXEC = opt
set GMAKE_OPTS = ""
set DEBUG = 0

## Search path for automatically finding the obj-root to use.
## Note: The src root directory ${LLVMDIR} will be prepended to this path later.
## 
set OBJROOTDIRLIST = ( )

set doit = 1
unset options_done
while ( !( $?options_done ) && ($#argv > 0))
    switch ($argv[1])
	case -h :
	    usage
	case -f :
	    if ($#argv < 2) usage
	    shift argv; set MFILE = $argv[1]; shift argv; breaksw
	case -n :
	    set doit = 0; shift argv; breaksw
	case -obj :
	    set OBJROOT = $argv[2]; shift argv; shift argv
	    if (! -d "$OBJROOT") then
		echo "FATAL: Illegal obj-root directory ${OBJROOT}"
		exit 1
	    endif
	    breaksw
	case -d :
	    set doit = 0; set DEBUG = 1; shift argv; breaksw
	case -* :
	    set GMAKE_OPTS = ( $GMAKE_OPTS $argv[1] ); shift argv; breaksw
	default :
	    set optarg = `echo -n $argv[1] | sed 's/^[^=]*$//'`
	    if ($#optarg) then
	        set GMAKE_OPTS = ( $GMAKE_OPTS $optarg )
	        shift argv
	    else
	        set options_done
	    endif
            breaksw
    endsw
end

if ($#argv > 1) then
    echo 'ERROR: More than one tool is not supported by "makellvm"'
    usage
endif
if ($#argv > 0) then
    set EXEC = $argv[1]
endif
if ($DEBUG) then
    echo "DEBUG: EXEC = $EXEC"
endif

## Compute LLVMDIR: the root of the current LLVM tree.
## It is recorded in the variable LEVEL in Makefile, to compute it
## 
if (! $?MFILE) then
    if (-f GNUmakefile) then
	set MFILE = GNUmakefile
    else if (-f makefile) then
	set MFILE = makefile
    else
	set MFILE = Makefile
    endif
endif
if ($DEBUG) then
    echo "DEBUG: MFILE = $MFILE"
endif
if (! -f $MFILE) then
    echo "Missing or invalid makefile: $MFILE"
    exit 1
endif

set LLVMDIR = `awk '/LEVEL[ 	]*=/ {print $NF}' $MFILE`
if ($DEBUG) then
    echo "DEBUG: LLVMDIR = $LLVMDIR"
endif

if ($#LLVMDIR == 0 || ! -d "$LLVMDIR") then
    echo "Unable to find LLVM src-root directory or directory is invalid."
    echo "Are you within a valid LLVM directory for running gmake?"
    exit 1
endif

## Try to determine the obj-root directory automatically if not specified
## 
set OBJROOTDIRLIST = ( ${LLVMDIR} $OBJROOTDIRLIST )	## add src dir
if ($?OBJROOT == 0) then
    ## Try to determine object root directory by looking for Makefile.config
    foreach objdir ( $OBJROOTDIRLIST )
	if (-f "${objdir}/Makefile.config") then
	    set OBJROOT = ${objdir}
            break
        endif
    end
    if ($?OBJROOT == 0) then
	echo "FATAL: Could not choose an obj-root directory from these choices:"
	echo "       ${OBJROOTDIRLIST}."
	echo "       You can specify it explicitly using '-obj obj-root'."
	exit 1
    endif
    echo "Using OBJ-ROOT = ${OBJROOT} (specify '-obj obj-root' to override)."
endif
if (${OBJROOT} == ${LLVMDIR}) then
    # run make in the source directory itself
    set BUILDROOT = .
else
    # run make in the in the obj-root tree, in the directory for $cwd
    set SRCROOT = `sh -c "cd $LLVMDIR; pwd | sed 's/\//\\\//g'"` 
    set CURSRCDIR = `echo $cwd | sed -e "s/${SRCROOT}//"`
    set BUILDROOT = ${OBJROOT}/${CURSRCDIR}
    unset SRCROOT CURSRCDIR
endif
if ($DEBUG) then
    echo "DEBUG: BUILDROOT = $BUILDROOT"
endif
if (! -d $BUILDROOT) then
    echo "FATAL: Invalid build directory: ${BUILDROOT}"
    exit 1
endif
cd $BUILDROOT 

set CMD = "make $GMAKE_OPTS && (cd $LLVMDIR/tools/$EXEC && make $GMAKE_OPTS)"

if ($doit == 1) then
    csh -f -c "$CMD"
    set pstatus = $?
else
    echo '(NOT EXECUTING) COMMAND:'
    echo "  $CMD"
endif


#=========================================================
# CODE TO BE EXECUTED IF INTERRUPT IS RECEIVED
#=========================================================
cleanup:
    exit($pstatus)