summaryrefslogtreecommitdiff
path: root/utils/makellvm
blob: ae77712941a27b4274c9bc0018ecd97c544d56dc (plain)
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)