18
18
_logger = logConfig (__name__ )
19
19
20
20
21
- def wcompile (isCXX ):
21
+ def wcompile (mode ):
22
22
""" The workhorse, called from wllvm and wllvm++.
23
23
"""
24
24
@@ -27,13 +27,13 @@ def wcompile(isCXX):
27
27
try :
28
28
cmd = list (sys .argv )
29
29
cmd = cmd [1 :]
30
- builder = getBuilder (cmd , isCXX )
30
+ builder = getBuilder (cmd , mode )
31
31
rc = buildObject (builder )
32
32
33
33
if rc == 0 and not os .environ .get ('WLLVM_CONFIGURE_ONLY' , False ):
34
34
buildAndAttachBitcode (builder )
35
35
except Exception as e :
36
- _logger .debug ('%s: exception case: %s' , "wllvm++" if isCXX else "wllvm" , str (e ))
36
+ _logger .debug ('%s: exception case: %s' , mode , str (e ))
37
37
38
38
return rc
39
39
@@ -133,9 +133,9 @@ def attachBitcodePathToObject(bcPath, outFileName):
133
133
sys .exit (- 1 )
134
134
135
135
class BuilderBase (object ):
136
- def __init__ (self , cmd , isCxx , prefixPath = None ):
136
+ def __init__ (self , cmd , mode , prefixPath = None ):
137
137
self .cmd = cmd
138
- self .isCxx = isCxx
138
+ self .mode = mode
139
139
140
140
# Used as prefix path for compiler
141
141
if prefixPath :
@@ -158,15 +158,15 @@ def getBitcodeCompiler(self):
158
158
return cc + ['-emit-llvm' ]
159
159
160
160
def getCompiler (self ):
161
- if self .isCxx :
162
- cxx = os . getenv ( 'LLVM_CXX_NAME' )
163
- if cxx :
164
- return [ '{0}{1}' . format ( self . prefixPath , cxx )]
165
- return [ '{0}clang++' . format ( self .prefixPath )]
166
- cc = os . getenv ( 'LLVM_CC_NAME' )
167
- if cc :
168
- return [ ' {0}{1}' .format (self .prefixPath , cc )]
169
- return ['{0}clang ' .format (self .prefixPath )]
161
+ if self .mode == "wllvm++" :
162
+ env , prog = 'LLVM_CXX_NAME' , 'clang++'
163
+ elif self . mode == "wllvm" :
164
+ env , prog = 'LLVM_CC_NAME' , 'clang'
165
+ elif self .mode == "wfortran" :
166
+ env , prog = 'LLVM_F77_NAME' , 'flang'
167
+ else :
168
+ raise Exception ( "Unknown mode {0}" .format (self .mode ))
169
+ return ['{0}{1} ' .format (self .prefixPath , os . getenv ( env ) or prog )]
170
170
171
171
def getBitcodeArglistFilter (self ):
172
172
return ClangBitcodeArgumentListFilter (self .cmd )
@@ -187,14 +187,20 @@ def getCompiler(self):
187
187
if os .getenv ('LLVM_GCC_PREFIX' ) is not None :
188
188
pfx = os .getenv ('LLVM_GCC_PREFIX' )
189
189
190
- if self .isCxx :
191
- return ['{0}{1}g++' .format (self .prefixPath , pfx )]
192
- return ['{0}{1}gcc' .format (self .prefixPath , pfx )]
190
+ if self .mode == "wllvm++" :
191
+ mode = 'g++'
192
+ elif self .mode == "wllvm" :
193
+ mode = 'gcc'
194
+ elif self .mode == "wfortran" :
195
+ mode = 'gfortran'
196
+ else :
197
+ raise Exception ("Unknown mode {0}" .format (self .mode ))
198
+ return ['{0}{1}{2}' .format (self .prefixPath , pfx , mode )]
193
199
194
200
def getBitcodeArglistFilter (self ):
195
201
return ArgumentListFilter (self .cmd )
196
202
197
- def getBuilder (cmd , isCxx ):
203
+ def getBuilder (cmd , mode ):
198
204
compilerEnv = 'LLVM_COMPILER'
199
205
cstring = os .getenv (compilerEnv )
200
206
pathPrefix = os .getenv (llvmCompilerPathEnv ) # Optional
@@ -203,9 +209,9 @@ def getBuilder(cmd, isCxx):
203
209
_logger .info ('WLLVM compiler path prefix "%s"' , pathPrefix )
204
210
205
211
if cstring == 'clang' :
206
- return ClangBuilder (cmd , isCxx , pathPrefix )
212
+ return ClangBuilder (cmd , mode , pathPrefix )
207
213
elif cstring == 'dragonegg' :
208
- return DragoneggBuilder (cmd , isCxx , pathPrefix )
214
+ return DragoneggBuilder (cmd , mode , pathPrefix )
209
215
elif cstring is None :
210
216
errorMsg = ' No compiler set. Please set environment variable %s'
211
217
_logger .critical (errorMsg , compilerEnv )
0 commit comments