@@ -66,6 +66,11 @@ type flagInfo struct {
6666 handler func (string , []string )
6767}
6868
69+ type argPattern struct {
70+ pattern string
71+ finfo flagInfo
72+ }
73+
6974func skipBitcodeGeneration (pr parserResult ) bool {
7075 if LLVMConfigureOnly != "" {
7176 return true
@@ -261,43 +266,81 @@ func parse(argList []string) parserResult {
261266 "-dead_strip" : {0 , pr .warningLinkUnaryCallback }, //iam: tor does this. We lose the bitcode :-(
262267 }
263268
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
299303 }
300304
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+
301344 for len (argList ) > 0 {
302345 var elem = argList [0 ]
303346
@@ -309,7 +352,10 @@ func parse(argList []string) parserResult {
309352 } else {
310353 var listShift = 0
311354 var matched = false
312- for pattern , fi := range argPatterns {
355+
356+ for _ , argPat := range argPatterns {
357+ pattern := argPat .pattern
358+ fi := argPat .finfo
313359 var regExp = regexp .MustCompile (pattern )
314360 if regExp .MatchString (elem ) {
315361 fi .handler (elem , argList [1 :1 + fi .arity ])
@@ -318,6 +364,15 @@ func parse(argList []string) parserResult {
318364 break
319365 }
320366 }
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+ //}
321376 if ! matched {
322377 LogWarning ("Did not recognize the compiler flag: %v\n " , elem )
323378 pr .compileUnaryCallback (elem , argList [1 :1 ])
0 commit comments