ronnie
2022-10-23 c843c92e9e45fb6ff0fc60f21f9832819bec8e23
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)