diff --git a/cl/compile.go b/cl/compile.go index c9ebfb86..1b9501c8 100644 --- a/cl/compile.go +++ b/cl/compile.go @@ -305,7 +305,8 @@ func NewPackage(prog llssa.Program, pkg *ssa.Package, files []*ast.File) (ret ll }) pkgTypes := pkg.Pkg - ret = prog.NewPackage(pkgTypes.Name(), pkgTypes.Path()) + pkgName, pkgPath := pkgTypes.Name(), pkgTypes.Path() + ret = prog.NewPackage(pkgName, pkgPath) ctx := &context{ prog: prog, @@ -316,7 +317,7 @@ func NewPackage(prog llssa.Program, pkg *ssa.Package, files []*ast.File) (ret ll link: make(map[string]string), loaded: make(map[*types.Package]none), } - ctx.initFiles(pkgTypes.Path(), files) + ctx.initFiles(pkgPath, files) for _, m := range members { member := m.val switch member := member.(type) { diff --git a/cl/import.go b/cl/import.go index 30a203a7..c3f175cb 100644 --- a/cl/import.go +++ b/cl/import.go @@ -106,7 +106,11 @@ func (p *context) initLinkname(pkgPath, line string) { } func fullName(pkg *types.Package, name string) string { - return pkg.Path() + "." + name + pkgPath := pkg.Name() + if pkgPath != "main" { + pkgPath = pkg.Path() + } + return pkgPath + "." + name } func funcName(pkg *types.Package, fn *ssa.Function) string { diff --git a/internal/build/build_install.go b/internal/build/build_install.go index 84075441..9b7f7617 100644 --- a/internal/build/build_install.go +++ b/internal/build/build_install.go @@ -50,7 +50,7 @@ const ( func Do(args []string, mode Mode) { flags, patterns, verbose := parseArgs(args) cfg := &packages.Config{ - Mode: loadSyntax | packages.NeedExportFile, + Mode: loadSyntax | packages.NeedDeps | packages.NeedExportFile, BuildFlags: flags, } @@ -61,7 +61,8 @@ func Do(args []string, mode Mode) { check(err) // Create SSA-form program representation. - _, pkgs, errPkgs := allPkgs(initial, ssa.SanityCheckFunctions) + ssaProg, pkgs, errPkgs := allPkgs(initial, ssa.SanityCheckFunctions) + ssaProg.Build() for _, errPkg := range errPkgs { log.Println("cannot build SSA for package", errPkg) } @@ -75,11 +76,11 @@ func Do(args []string, mode Mode) { prog := llssa.NewProgram(nil) llFiles := make([]string, 0, len(pkgs)) for _, pkg := range pkgs { - pkg.SSA.Build() llFiles = buildPkg(llFiles, prog, pkg, mode) } if mode == ModeInstall { - fmt.Fprintln(os.Stderr, "clang", llFiles) + // TODO(xsw): show work + // fmt.Fprintln(os.Stderr, "clang", llFiles) err = clang.New("").Exec(llFiles...) check(err) }