Merge pull request #906 from visualfc/llccheck
[WIP] build: env LLGO_CHECK=1 for llc check module
This commit is contained in:
@@ -17,6 +17,7 @@
|
|||||||
package build
|
package build
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
"debug/macho"
|
"debug/macho"
|
||||||
"fmt"
|
"fmt"
|
||||||
"go/ast"
|
"go/ast"
|
||||||
@@ -533,6 +534,22 @@ func buildPkg(ctx *context, aPkg *aPackage, verbose bool) (cgoLdflags []string,
|
|||||||
if debugBuild || verbose {
|
if debugBuild || verbose {
|
||||||
fmt.Fprintf(os.Stderr, "==> Export %s: %s\n", aPkg.PkgPath, pkg.ExportFile)
|
fmt.Fprintf(os.Stderr, "==> Export %s: %s\n", aPkg.PkgPath, pkg.ExportFile)
|
||||||
}
|
}
|
||||||
|
if IsCheckEnable() {
|
||||||
|
if err, msg := llcCheck(ctx.env, pkg.ExportFile); err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "==> lcc %v: %v\n%v\n", pkg.PkgPath, pkg.ExportFile, msg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func llcCheck(env *llvm.Env, exportFile string) (err error, msg string) {
|
||||||
|
bin := filepath.Join(env.BinDir(), "llc")
|
||||||
|
cmd := exec.Command(bin, "-filetype=null", exportFile)
|
||||||
|
var buf bytes.Buffer
|
||||||
|
cmd.Stderr = &buf
|
||||||
|
if err = cmd.Run(); err != nil {
|
||||||
|
msg = buf.String()
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -639,6 +656,7 @@ var (
|
|||||||
|
|
||||||
const llgoDebug = "LLGO_DEBUG"
|
const llgoDebug = "LLGO_DEBUG"
|
||||||
const llgoOptimize = "LLGO_OPTIMIZE"
|
const llgoOptimize = "LLGO_OPTIMIZE"
|
||||||
|
const llgoCheck = "LLGO_CHECK"
|
||||||
|
|
||||||
func isEnvOn(env string, defVal bool) bool {
|
func isEnvOn(env string, defVal bool) bool {
|
||||||
envVal := strings.ToLower(os.Getenv(env))
|
envVal := strings.ToLower(os.Getenv(env))
|
||||||
@@ -656,6 +674,10 @@ func IsOptimizeEnabled() bool {
|
|||||||
return isEnvOn(llgoOptimize, true)
|
return isEnvOn(llgoOptimize, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func IsCheckEnable() bool {
|
||||||
|
return isEnvOn(llgoCheck, false)
|
||||||
|
}
|
||||||
|
|
||||||
func ParseArgs(args []string, swflags map[string]bool) (flags, patterns []string, verbose bool) {
|
func ParseArgs(args []string, swflags map[string]bool) (flags, patterns []string, verbose bool) {
|
||||||
n := len(args)
|
n := len(args)
|
||||||
for i := 0; i < n; i++ {
|
for i := 0; i < n; i++ {
|
||||||
|
|||||||
Reference in New Issue
Block a user