build: separate compiler and libs
This commit is contained in:
33
compiler/cl/internal/foo/foo.go
Normal file
33
compiler/cl/internal/foo/foo.go
Normal file
@@ -0,0 +1,33 @@
|
||||
package foo
|
||||
|
||||
func Bar() any {
|
||||
return struct{ V int }{1}
|
||||
}
|
||||
|
||||
func F() any {
|
||||
return struct{ v int }{1}
|
||||
}
|
||||
|
||||
type Foo struct {
|
||||
pb *byte
|
||||
F float32
|
||||
}
|
||||
|
||||
func (v Foo) Pb() *byte {
|
||||
return v.pb
|
||||
}
|
||||
|
||||
type Gamer interface {
|
||||
initGame()
|
||||
Load()
|
||||
}
|
||||
|
||||
type Game struct {
|
||||
}
|
||||
|
||||
func (g *Game) initGame() {
|
||||
}
|
||||
|
||||
func (g *Game) Load() {
|
||||
println("load")
|
||||
}
|
||||
14
compiler/cl/internal/libc/libc.go
Normal file
14
compiler/cl/internal/libc/libc.go
Normal file
@@ -0,0 +1,14 @@
|
||||
package libc
|
||||
|
||||
import "C"
|
||||
import _ "unsafe"
|
||||
|
||||
const (
|
||||
LLGoPackage = "decl"
|
||||
)
|
||||
|
||||
//go:linkname Printf C.printf
|
||||
func Printf(format *int8, __llgo_va_list ...any)
|
||||
|
||||
//go:linkname Strlen C.strlen
|
||||
func Strlen(str *int8) C.int
|
||||
23
compiler/cl/internal/linktarget/foo.go
Normal file
23
compiler/cl/internal/linktarget/foo.go
Normal file
@@ -0,0 +1,23 @@
|
||||
package linktarget
|
||||
|
||||
import (
|
||||
"github.com/goplus/llgo/c"
|
||||
)
|
||||
|
||||
func F(a, b *c.Char) {
|
||||
c.Printf(c.Str("a: %s, b: %s\n"), a, b)
|
||||
}
|
||||
|
||||
var _ m
|
||||
|
||||
type m struct {
|
||||
s string
|
||||
}
|
||||
|
||||
func (t m) info() string {
|
||||
return t.s
|
||||
}
|
||||
|
||||
func (t *m) setInfo(s string) {
|
||||
t.s = s
|
||||
}
|
||||
55
compiler/cl/internal/linktarget/out.ll
Normal file
55
compiler/cl/internal/linktarget/out.ll
Normal file
@@ -0,0 +1,55 @@
|
||||
; ModuleID = 'github.com/goplus/llgo/cl/internal/linktarget'
|
||||
source_filename = "github.com/goplus/llgo/cl/internal/linktarget"
|
||||
|
||||
%"github.com/goplus/llgo/internal/runtime.String" = type { ptr, i64 }
|
||||
%"github.com/goplus/llgo/cl/internal/linktarget.m" = type { %"github.com/goplus/llgo/internal/runtime.String" }
|
||||
|
||||
@"github.com/goplus/llgo/cl/internal/linktarget.init$guard" = global ptr null
|
||||
@0 = private unnamed_addr constant [14 x i8] c"a: %s, b: %s\0A\00", align 1
|
||||
|
||||
define void @"github.com/goplus/llgo/cl/internal/linktarget.F"(ptr %0, ptr %1) {
|
||||
_llgo_0:
|
||||
%2 = call i32 (ptr, ...) @printf(ptr @0, ptr %0, ptr %1)
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @"github.com/goplus/llgo/cl/internal/linktarget.init"() {
|
||||
_llgo_0:
|
||||
%0 = load i1, ptr @"github.com/goplus/llgo/cl/internal/linktarget.init$guard", align 1
|
||||
br i1 %0, label %_llgo_2, label %_llgo_1
|
||||
|
||||
_llgo_1: ; preds = %_llgo_0
|
||||
store i1 true, ptr @"github.com/goplus/llgo/cl/internal/linktarget.init$guard", align 1
|
||||
br label %_llgo_2
|
||||
|
||||
_llgo_2: ; preds = %_llgo_1, %_llgo_0
|
||||
ret void
|
||||
}
|
||||
|
||||
define %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/cl/internal/linktarget.m.info"(%"github.com/goplus/llgo/cl/internal/linktarget.m" %0) {
|
||||
_llgo_0:
|
||||
%1 = alloca %"github.com/goplus/llgo/cl/internal/linktarget.m", align 8
|
||||
%2 = call ptr @"github.com/goplus/llgo/internal/runtime.Zeroinit"(ptr %1, i64 16)
|
||||
store %"github.com/goplus/llgo/cl/internal/linktarget.m" %0, ptr %2, align 8
|
||||
%3 = getelementptr inbounds %"github.com/goplus/llgo/cl/internal/linktarget.m", ptr %2, i32 0, i32 0
|
||||
%4 = load %"github.com/goplus/llgo/internal/runtime.String", ptr %3, align 8
|
||||
ret %"github.com/goplus/llgo/internal/runtime.String" %4
|
||||
}
|
||||
|
||||
define %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/cl/internal/linktarget.(*m).info"(ptr %0) {
|
||||
_llgo_0:
|
||||
%1 = load %"github.com/goplus/llgo/cl/internal/linktarget.m", ptr %0, align 8
|
||||
%2 = call %"github.com/goplus/llgo/internal/runtime.String" @"github.com/goplus/llgo/cl/internal/linktarget.m.info"(%"github.com/goplus/llgo/cl/internal/linktarget.m" %1)
|
||||
ret %"github.com/goplus/llgo/internal/runtime.String" %2
|
||||
}
|
||||
|
||||
define void @"github.com/goplus/llgo/cl/internal/linktarget.(*m).setInfo"(ptr %0, %"github.com/goplus/llgo/internal/runtime.String" %1) {
|
||||
_llgo_0:
|
||||
%2 = getelementptr inbounds %"github.com/goplus/llgo/cl/internal/linktarget.m", ptr %0, i32 0, i32 0
|
||||
store %"github.com/goplus/llgo/internal/runtime.String" %1, ptr %2, align 8
|
||||
ret void
|
||||
}
|
||||
|
||||
declare i32 @printf(ptr, ...)
|
||||
|
||||
declare ptr @"github.com/goplus/llgo/internal/runtime.Zeroinit"(ptr, i64)
|
||||
20
compiler/cl/internal/qsort/qsort.go
Normal file
20
compiler/cl/internal/qsort/qsort.go
Normal file
@@ -0,0 +1,20 @@
|
||||
package qsort
|
||||
|
||||
import (
|
||||
_ "unsafe"
|
||||
|
||||
"github.com/goplus/llgo/c"
|
||||
)
|
||||
|
||||
const (
|
||||
LLGoPackage = "decl"
|
||||
)
|
||||
|
||||
// llgo:type C
|
||||
type Comp func(a, b c.Pointer) c.Int
|
||||
|
||||
//go:linkname Qsort C.qsort
|
||||
func Qsort(base c.Pointer, count, elem uintptr, compar Comp)
|
||||
|
||||
//go:linkname Qsort2 C.qsort
|
||||
func Qsort2(base c.Pointer, count, elem uintptr, compar func(a, b c.Pointer) c.Int)
|
||||
17
compiler/cl/internal/stdio/printf.go
Normal file
17
compiler/cl/internal/stdio/printf.go
Normal file
@@ -0,0 +1,17 @@
|
||||
package stdio
|
||||
|
||||
import _ "unsafe"
|
||||
|
||||
const (
|
||||
LLGoPackage = true
|
||||
)
|
||||
|
||||
//go:linkname Printf C.printf
|
||||
func Printf(format *int8, __llgo_va_list ...any)
|
||||
|
||||
func Max(a, b int) int {
|
||||
if a > b {
|
||||
return a
|
||||
}
|
||||
return b
|
||||
}
|
||||
Reference in New Issue
Block a user