@@ -66,6 +66,11 @@ type flagInfo struct {
66
66
handler func (string , []string )
67
67
}
68
68
69
+ type argPattern struct {
70
+ pattern string
71
+ finfo flagInfo
72
+ }
73
+
69
74
func skipBitcodeGeneration (pr parserResult ) bool {
70
75
if LLVMConfigureOnly != "" {
71
76
return true
@@ -261,43 +266,81 @@ func parse(argList []string) parserResult {
261
266
"-dead_strip" : {0 , pr .warningLinkUnaryCallback }, //iam: tor does this. We lose the bitcode :-(
262
267
}
263
268
264
- var argPatterns = map [string ]flagInfo {
265
- `^.+\.(c|cc|cpp|C|cxx|i|s|S|bc)$` : {0 , pr .inputFileCallback },
266
- `^.+\.([fF](|[0-9][0-9]|or|OR|pp|PP))$` : {0 , pr .inputFileCallback },
267
- `^.+\.(o|lo|So|so|po|a|dylib)$` : {0 , pr .objectFileCallback },
268
- `^.+\.dylib(\.\d)+$` : {0 , pr .objectFileCallback },
269
- `^.+\.(So|so)(\.\d)+$` : {0 , pr .objectFileCallback },
270
- `^-(l|L).+$` : {0 , pr .linkUnaryCallback },
271
- `^-I.+$` : {0 , pr .compileUnaryCallback },
272
- `^-D.+$` : {0 , pr .compileUnaryCallback },
273
- `^-B.+$` : {0 , pr .compileLinkUnaryCallback },
274
- `^-isystem.+$` : {0 , pr .compileLinkUnaryCallback },
275
- `^-U.+$` : {0 , pr .compileUnaryCallback },
276
- //iam: need to be careful here, not mix up linker and warning flags.
277
- `^-Wl,.+$` : {0 , pr .linkUnaryCallback },
278
- `^-W[^l].*$` : {0 , pr .compileUnaryCallback },
279
- `^-W[l][^,].*$` : {0 , pr .compileUnaryCallback }, //iam: tor has a few -Wl...
280
- `^-fsanitize=.+$` : {0 , pr .compileLinkUnaryCallback },
281
- `^-f.+$` : {0 , pr .compileUnaryCallback },
282
- `^-rtlib=.+$` : {0 , pr .linkUnaryCallback },
283
- `^-std=.+$` : {0 , pr .compileUnaryCallback },
284
- `^-stdlib=.+$` : {0 , pr .compileLinkUnaryCallback },
285
- `^-mtune=.+$` : {0 , pr .compileUnaryCallback },
286
- `^--sysroot=.+$` : {0 , pr .compileLinkUnaryCallback }, //both compile and link time
287
- `^-print-prog-name=.*$` : {0 , pr .compileUnaryCallback },
288
- `^-print-file-name=.*$` : {0 , pr .compileUnaryCallback },
289
- `^-mmacosx-version-min=.+$` : {0 , pr .compileLinkUnaryCallback },
290
- `^-mstack-alignment=.+$` : {0 , pr .compileUnaryCallback }, //iam: linux kernel stuff
291
- `^-march=.+$` : {0 , pr .compileUnaryCallback }, //iam: linux kernel stuff
292
- `^-mregparm=.+$` : {0 , pr .compileUnaryCallback }, //iam: linux kernel stuff
293
- `^-mcmodel=.+$` : {0 , pr .compileUnaryCallback }, //iam: linux kernel stuff
294
- `^-mpreferred-stack-boundary=.+$` : {0 , pr .compileUnaryCallback }, //iam: linux kernel stuff
295
- `^-mindirect-branch=.+$` : {0 , pr .compileUnaryCallback }, //iam: linux kernel stuff
296
- `^--param=.+$` : {0 , pr .compileUnaryCallback }, //iam: linux kernel stuff
297
- `^-fuse-ld=.+$` : {0 , pr .linkUnaryCallback }, //iam: musl stuff
298
-
269
+ var argPatterns = [... ]argPattern {
270
+ {`^.+\.(c|cc|cpp|C|cxx|i|s|S|bc)$` , flagInfo {0 , pr .inputFileCallback }},
271
+ {`^.+\.([fF](|[0-9][0-9]|or|OR|pp|PP))$` , flagInfo {0 , pr .inputFileCallback }},
272
+ {`^.+\.(o|lo|So|so|po|a|dylib)$` , flagInfo {0 , pr .objectFileCallback }},
273
+ {`^.+\.dylib(\.\d)+$` , flagInfo {0 , pr .objectFileCallback }},
274
+ {`^.+\.(So|so)(\.\d)+$` , flagInfo {0 , pr .objectFileCallback }},
275
+ {`^-(l|L).+$` , flagInfo {0 , pr .linkUnaryCallback }},
276
+ {`^-I.+$` , flagInfo {0 , pr .compileUnaryCallback }},
277
+ {`^-D.+$` , flagInfo {0 , pr .compileUnaryCallback }},
278
+ {`^-B.+$` , flagInfo {0 , pr .compileLinkUnaryCallback }},
279
+ {`^-isystem.+$` , flagInfo {0 , pr .compileLinkUnaryCallback }},
280
+ {`^-U.+$` , flagInfo {0 , pr .compileUnaryCallback }},
281
+ //iam, need to be careful here, not mix up linker and warning flags.
282
+ {`^-Wl,.+$` , flagInfo {0 , pr .linkUnaryCallback }},
283
+ {`^-W[^l].*$` , flagInfo {0 , pr .compileUnaryCallback }},
284
+ {`^-W[l][^,].*$` , flagInfo {0 , pr .compileUnaryCallback }}, //iam: tor has a few -Wl...
285
+ {`^-fsanitize=.+$` , flagInfo {0 , pr .compileLinkUnaryCallback }},
286
+ {`^-fuse-ld=.+$` , flagInfo {0 , pr .linkUnaryCallback }}, //iam: musl stuff
287
+ {`^-f.+$` , flagInfo {0 , pr .compileUnaryCallback }},
288
+ {`^-rtlib=.+$` , flagInfo {0 , pr .linkUnaryCallback }},
289
+ {`^-std=.+$` , flagInfo {0 , pr .compileUnaryCallback }},
290
+ {`^-stdlib=.+$` , flagInfo {0 , pr .compileLinkUnaryCallback }},
291
+ {`^-mtune=.+$` , flagInfo {0 , pr .compileUnaryCallback }},
292
+ {`^--sysroot=.+$` , flagInfo {0 , pr .compileLinkUnaryCallback }}, //both compile and link time
293
+ {`^-print-prog-name=.*$` , flagInfo {0 , pr .compileUnaryCallback }},
294
+ {`^-print-file-name=.*$` , flagInfo {0 , pr .compileUnaryCallback }},
295
+ {`^-mmacosx-version-min=.+$` , flagInfo {0 , pr .compileLinkUnaryCallback }},
296
+ {`^-mstack-alignment=.+$` , flagInfo {0 , pr .compileUnaryCallback }}, //iam, linux kernel stuff
297
+ {`^-march=.+$` , flagInfo {0 , pr .compileUnaryCallback }}, //iam: linux kernel stuff
298
+ {`^-mregparm=.+$` , flagInfo {0 , pr .compileUnaryCallback }}, //iam: linux kernel stuff
299
+ {`^-mcmodel=.+$` , flagInfo {0 , pr .compileUnaryCallback }}, //iam: linux kernel stuff
300
+ {`^-mpreferred-stack-boundary=.+$` , flagInfo {0 , pr .compileUnaryCallback }}, //iam: linux kernel stuff
301
+ {`^-mindirect-branch=.+$` , flagInfo {0 , pr .compileUnaryCallback }}, //iam: linux kernel stuff
302
+ {`^--param=.+$` , flagInfo {0 , pr .compileUnaryCallback }}, //iam: linux kernel stuff
299
303
}
300
304
305
+ /*
306
+ var argPatterns = map[string]flagInfo{
307
+ `^.+\.(c|cc|cpp|C|cxx|i|s|S|bc)$`: {0, pr.inputFileCallback},
308
+ `^.+\.([fF](|[0-9][0-9]|or|OR|pp|PP))$`: {0, pr.inputFileCallback},
309
+ `^.+\.(o|lo|So|so|po|a|dylib)$`: {0, pr.objectFileCallback},
310
+ `^.+\.dylib(\.\d)+$`: {0, pr.objectFileCallback},
311
+ `^.+\.(So|so)(\.\d)+$`: {0, pr.objectFileCallback},
312
+ `^-(l|L).+$`: {0, pr.linkUnaryCallback},
313
+ `^-I.+$`: {0, pr.compileUnaryCallback},
314
+ `^-D.+$`: {0, pr.compileUnaryCallback},
315
+ `^-B.+$`: {0, pr.compileLinkUnaryCallback},
316
+ `^-isystem.+$`: {0, pr.compileLinkUnaryCallback},
317
+ `^-U.+$`: {0, pr.compileUnaryCallback},
318
+ //iam: need to be careful here, not mix up linker and warning flags.
319
+ `^-Wl,.+$`: {0, pr.linkUnaryCallback},
320
+ `^-W[^l].*$`: {0, pr.compileUnaryCallback},
321
+ `^-W[l][^,].*$`: {0, pr.compileUnaryCallback}, //iam: tor has a few -Wl...
322
+ `^-fsanitize=.+$`: {0, pr.compileLinkUnaryCallback},
323
+ `^-f.+$`: {0, pr.compileUnaryCallback},
324
+ `^-rtlib=.+$`: {0, pr.linkUnaryCallback},
325
+ `^-std=.+$`: {0, pr.compileUnaryCallback},
326
+ `^-stdlib=.+$`: {0, pr.compileLinkUnaryCallback},
327
+ `^-mtune=.+$`: {0, pr.compileUnaryCallback},
328
+ `^--sysroot=.+$`: {0, pr.compileLinkUnaryCallback}, //both compile and link time
329
+ `^-print-prog-name=.*$`: {0, pr.compileUnaryCallback},
330
+ `^-print-file-name=.*$`: {0, pr.compileUnaryCallback},
331
+ `^-mmacosx-version-min=.+$`: {0, pr.compileLinkUnaryCallback},
332
+ `^-mstack-alignment=.+$`: {0, pr.compileUnaryCallback}, //iam: linux kernel stuff
333
+ `^-march=.+$`: {0, pr.compileUnaryCallback}, //iam: linux kernel stuff
334
+ `^-mregparm=.+$`: {0, pr.compileUnaryCallback}, //iam: linux kernel stuff
335
+ `^-mcmodel=.+$`: {0, pr.compileUnaryCallback}, //iam: linux kernel stuff
336
+ `^-mpreferred-stack-boundary=.+$`: {0, pr.compileUnaryCallback}, //iam: linux kernel stuff
337
+ `^-mindirect-branch=.+$`: {0, pr.compileUnaryCallback}, //iam: linux kernel stuff
338
+ `^--param=.+$`: {0, pr.compileUnaryCallback}, //iam: linux kernel stuff
339
+ `^-fuse-ld=.+$`: {0, pr.linkUnaryCallback}, //iam: musl stuff
340
+
341
+ }
342
+ */
343
+
301
344
for len (argList ) > 0 {
302
345
var elem = argList [0 ]
303
346
@@ -309,7 +352,10 @@ func parse(argList []string) parserResult {
309
352
} else {
310
353
var listShift = 0
311
354
var matched = false
312
- for pattern , fi := range argPatterns {
355
+
356
+ for _ , argPat := range argPatterns {
357
+ pattern := argPat .pattern
358
+ fi := argPat .finfo
313
359
var regExp = regexp .MustCompile (pattern )
314
360
if regExp .MatchString (elem ) {
315
361
fi .handler (elem , argList [1 :1 + fi .arity ])
@@ -318,6 +364,15 @@ func parse(argList []string) parserResult {
318
364
break
319
365
}
320
366
}
367
+ //for pattern, fi := range argPatterns {
368
+ // var regExp = regexp.MustCompile(pattern)
369
+ // if regExp.MatchString(elem) {
370
+ // fi.handler(elem, argList[1:1+fi.arity])
371
+ // listShift = fi.arity
372
+ // matched = true
373
+ // break
374
+ // }
375
+ //}
321
376
if ! matched {
322
377
LogWarning ("Did not recognize the compiler flag: %v\n " , elem )
323
378
pr .compileUnaryCallback (elem , argList [1 :1 ])
0 commit comments