ssa: record NeedRuntime, NeedPyInit in Package to compatible multi-packages building
This commit is contained in:
@@ -275,7 +275,6 @@ type context struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func buildAllPkgs(ctx *context, initial []*packages.Package, verbose bool) (pkgs []*aPackage, err error) {
|
func buildAllPkgs(ctx *context, initial []*packages.Package, verbose bool) (pkgs []*aPackage, err error) {
|
||||||
prog := ctx.prog
|
|
||||||
pkgs, errPkgs := allPkgs(ctx, initial, verbose)
|
pkgs, errPkgs := allPkgs(ctx, initial, verbose)
|
||||||
for _, errPkg := range errPkgs {
|
for _, errPkg := range errPkgs {
|
||||||
for _, err := range errPkg.Errors {
|
for _, err := range errPkg.Errors {
|
||||||
@@ -364,7 +363,7 @@ func buildAllPkgs(ctx *context, initial []*packages.Package, verbose bool) (pkgs
|
|||||||
if aPkg.AltPkg != nil {
|
if aPkg.AltPkg != nil {
|
||||||
aPkg.LinkArgs = append(aPkg.LinkArgs, concatPkgLinkFiles(ctx, aPkg.AltPkg.Package, verbose)...)
|
aPkg.LinkArgs = append(aPkg.LinkArgs, concatPkgLinkFiles(ctx, aPkg.AltPkg.Package, verbose)...)
|
||||||
}
|
}
|
||||||
setNeedRuntimeOrPyInit(ctx, pkg, prog.NeedRuntime, prog.NeedPyInit)
|
setNeedRuntimeOrPyInit(ctx, pkg, aPkg.LPkg.NeedRuntime, aPkg.LPkg.NeedPyInit)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -204,9 +204,7 @@ type aProgram struct {
|
|||||||
|
|
||||||
ptrSize int
|
ptrSize int
|
||||||
|
|
||||||
NeedRuntime bool
|
is32Bits bool
|
||||||
NeedPyInit bool
|
|
||||||
is32Bits bool
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// A Program presents a program.
|
// A Program presents a program.
|
||||||
@@ -281,7 +279,6 @@ func (p Program) runtime() *types.Package {
|
|||||||
if p.rt == nil {
|
if p.rt == nil {
|
||||||
p.rt = p.rtget()
|
p.rt = p.rtget()
|
||||||
}
|
}
|
||||||
p.NeedRuntime = true
|
|
||||||
return p.rt
|
return p.rt
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -393,7 +390,6 @@ func (p Program) NewPackage(name, pkgPath string) Package {
|
|||||||
goStrs := make(map[string]llvm.Value)
|
goStrs := make(map[string]llvm.Value)
|
||||||
chkabi := make(map[types.Type]bool)
|
chkabi := make(map[types.Type]bool)
|
||||||
glbDbgVars := make(map[Expr]bool)
|
glbDbgVars := make(map[Expr]bool)
|
||||||
p.NeedRuntime = false
|
|
||||||
// Don't need reset p.needPyInit here
|
// Don't need reset p.needPyInit here
|
||||||
// p.needPyInit = false
|
// p.needPyInit = false
|
||||||
ret := &aPackage{
|
ret := &aPackage{
|
||||||
@@ -656,11 +652,15 @@ type aPackage struct {
|
|||||||
fnlink func(string) string
|
fnlink func(string) string
|
||||||
|
|
||||||
iRoutine int
|
iRoutine int
|
||||||
|
|
||||||
|
NeedRuntime bool
|
||||||
|
NeedPyInit bool
|
||||||
}
|
}
|
||||||
|
|
||||||
type Package = *aPackage
|
type Package = *aPackage
|
||||||
|
|
||||||
func (p Package) rtFunc(fnName string) Expr {
|
func (p Package) rtFunc(fnName string) Expr {
|
||||||
|
p.NeedRuntime = true
|
||||||
fn := p.Prog.runtime().Scope().Lookup(fnName).(*types.Func)
|
fn := p.Prog.runtime().Scope().Lookup(fnName).(*types.Func)
|
||||||
name := FullName(fn.Pkg(), fnName)
|
name := FullName(fn.Pkg(), fnName)
|
||||||
sig := fn.Type().(*types.Signature)
|
sig := fn.Type().(*types.Signature)
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ func (p Program) SetPython(py any) {
|
|||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
func (p Package) pyFunc(fullName string, sig *types.Signature) Expr {
|
func (p Package) pyFunc(fullName string, sig *types.Signature) Expr {
|
||||||
p.Prog.NeedPyInit = true
|
p.NeedPyInit = true
|
||||||
return p.NewFunc(fullName, sig, InC).Expr
|
return p.NewFunc(fullName, sig, InC).Expr
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -420,7 +420,7 @@ func (p Package) PyNewFunc(name string, sig *types.Signature, doInit bool) PyObj
|
|||||||
prog := p.Prog
|
prog := p.Prog
|
||||||
obj := p.NewVar(name, prog.PyObjectPtrPtr().RawType(), InC)
|
obj := p.NewVar(name, prog.PyObjectPtrPtr().RawType(), InC)
|
||||||
if doInit {
|
if doInit {
|
||||||
prog.NeedPyInit = true
|
p.NeedPyInit = true
|
||||||
obj.InitNil()
|
obj.InitNil()
|
||||||
obj.impl.SetLinkage(llvm.LinkOnceAnyLinkage)
|
obj.impl.SetLinkage(llvm.LinkOnceAnyLinkage)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -234,7 +234,7 @@ source_filename = "foo/bar"
|
|||||||
|
|
||||||
@a = external global {}, align 1
|
@a = external global {}, align 1
|
||||||
`)
|
`)
|
||||||
if prog.NeedRuntime {
|
if pkg.NeedRuntime {
|
||||||
t.Fatal("NeedRuntime?")
|
t.Fatal("NeedRuntime?")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user