Merge pull request #282 from visualfc/runtime
build: check runtime link file
This commit is contained in:
9
c/c.go
9
c/c.go
@@ -97,15 +97,6 @@ func Qsort(base Pointer, count, elem uintptr, compar func(a, b Pointer) Int)
|
|||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
//go:linkname Stdin stdin
|
|
||||||
var Stdin FilePtr
|
|
||||||
|
|
||||||
//go:linkname Stdout stdout
|
|
||||||
var Stdout FilePtr
|
|
||||||
|
|
||||||
//go:linkname Stderr stderr
|
|
||||||
var Stderr FilePtr
|
|
||||||
|
|
||||||
//go:linkname Printf C.printf
|
//go:linkname Printf C.printf
|
||||||
func Printf(format *Char, __llgo_va_list ...any) Int
|
func Printf(format *Char, __llgo_va_list ...any) Int
|
||||||
|
|
||||||
|
|||||||
15
c/c_default.go
Normal file
15
c/c_default.go
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
//go:build !linux
|
||||||
|
// +build !linux
|
||||||
|
|
||||||
|
package c
|
||||||
|
|
||||||
|
import _ "unsafe"
|
||||||
|
|
||||||
|
//go:linkname Stdin __stdinp
|
||||||
|
var Stdin FilePtr
|
||||||
|
|
||||||
|
//go:linkname Stdout __stdoutp
|
||||||
|
var Stdout FilePtr
|
||||||
|
|
||||||
|
//go:linkname Stderr __stderrp
|
||||||
|
var Stderr FilePtr
|
||||||
15
c/c_linux.go
Normal file
15
c/c_linux.go
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
//go:build linux
|
||||||
|
// +build linux
|
||||||
|
|
||||||
|
package c
|
||||||
|
|
||||||
|
import _ "unsafe"
|
||||||
|
|
||||||
|
//go:linkname Stdin stdin
|
||||||
|
var Stdin FilePtr
|
||||||
|
|
||||||
|
//go:linkname Stdout stdout
|
||||||
|
var Stdout FilePtr
|
||||||
|
|
||||||
|
//go:linkname Stderr stderr
|
||||||
|
var Stderr FilePtr
|
||||||
@@ -145,11 +145,15 @@ func Do(args []string, conf *Config) {
|
|||||||
return rt[1].Types
|
return rt[1].Types
|
||||||
})
|
})
|
||||||
|
|
||||||
pkgs := buildAllPkgs(prog, initial, mode, verbose)
|
pkgs := buildAllPkgs(prog, initial, nil, mode, verbose)
|
||||||
|
|
||||||
var runtimeFiles []string
|
var runtimeFiles []string
|
||||||
if needRt {
|
if needRt {
|
||||||
dpkg := buildAllPkgs(prog, rt[:1], mode, verbose)
|
skip := make(map[string]bool)
|
||||||
|
for _, v := range pkgs {
|
||||||
|
skip[v.PkgPath] = true
|
||||||
|
}
|
||||||
|
dpkg := buildAllPkgs(prog, rt[:1], skip, mode, verbose)
|
||||||
for _, pkg := range dpkg {
|
for _, pkg := range dpkg {
|
||||||
if !strings.HasSuffix(pkg.ExportFile, ".ll") {
|
if !strings.HasSuffix(pkg.ExportFile, ".ll") {
|
||||||
continue
|
continue
|
||||||
@@ -188,7 +192,7 @@ func isNeedRuntimeOrPyInit(pkg *packages.Package) (needRuntime, needPyInit bool)
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildAllPkgs(prog llssa.Program, initial []*packages.Package, mode Mode, verbose bool) (pkgs []*aPackage) {
|
func buildAllPkgs(prog llssa.Program, initial []*packages.Package, skip map[string]bool, mode Mode, verbose bool) (pkgs []*aPackage) {
|
||||||
// Create SSA-form program representation.
|
// Create SSA-form program representation.
|
||||||
ssaProg, pkgs, errPkgs := allPkgs(initial, ssa.SanityCheckFunctions)
|
ssaProg, pkgs, errPkgs := allPkgs(initial, ssa.SanityCheckFunctions)
|
||||||
ssaProg.Build()
|
ssaProg.Build()
|
||||||
@@ -200,6 +204,10 @@ func buildAllPkgs(prog llssa.Program, initial []*packages.Package, mode Mode, ve
|
|||||||
}
|
}
|
||||||
for _, aPkg := range pkgs {
|
for _, aPkg := range pkgs {
|
||||||
pkg := aPkg.Package
|
pkg := aPkg.Package
|
||||||
|
if skip[pkg.PkgPath] {
|
||||||
|
pkg.ExportFile = ""
|
||||||
|
continue
|
||||||
|
}
|
||||||
switch kind, param := cl.PkgKindOf(pkg.Types); kind {
|
switch kind, param := cl.PkgKindOf(pkg.Types); kind {
|
||||||
case cl.PkgDeclOnly:
|
case cl.PkgDeclOnly:
|
||||||
// skip packages that only contain declarations
|
// skip packages that only contain declarations
|
||||||
@@ -294,7 +302,9 @@ func linkMainPkg(pkg *packages.Package, pkgs []*aPackage, runtimeFiles []string,
|
|||||||
|
|
||||||
dirty := false
|
dirty := false
|
||||||
if needRuntime && runtimeFiles != nil {
|
if needRuntime && runtimeFiles != nil {
|
||||||
args = append(args, runtimeFiles...)
|
for _, file := range runtimeFiles {
|
||||||
|
args = appendLinkFiles(args, file)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
dirty = true
|
dirty = true
|
||||||
fn := aPkg.LPkg.FuncOf(cl.RuntimeInit)
|
fn := aPkg.LPkg.FuncOf(cl.RuntimeInit)
|
||||||
|
|||||||
Reference in New Issue
Block a user