diff --git a/_demo/cabi/main.go b/_demo/cabi/main.go deleted file mode 100644 index b64d06cc71..0000000000 --- a/_demo/cabi/main.go +++ /dev/null @@ -1,395 +0,0 @@ -package main - -import ( - _ "unsafe" -) - -const ( - LLGoFiles = "wrap/wrap.c" -) - -type point struct { - x int32 - y int32 -} - -//go:linkname pt C.pt -func pt(pt point) point - -type point1 struct { - x int32 - y int32 - z int32 -} - -//go:linkname pt1 C.pt1 -func pt1(pt point1) point1 - -type point2 struct { - x int8 - y int32 - z int32 -} - -//go:linkname pt2 C.pt2 -func pt2(pt point2) point2 - -type point3 struct { - x int8 - y int8 - z int8 -} - -//go:linkname pt3 C.pt3 -func pt3(pt point3) point3 - -type point4 struct { - x int8 - y int8 - z int8 - m int32 -} - -//go:linkname pt4 C.pt4 -func pt4(pt point4) point4 - -type point5 struct { - x int8 - y int8 - z int8 - m int8 - n int8 -} - -//go:linkname pt5 C.pt5 -func pt5(pt point5) point5 - -type point6 struct { - x int8 - y int8 - z int8 - m int8 - n int8 - k int32 -} - -//go:linkname pt6 C.pt6 -func pt6(pt point6) point6 - -type point7 struct { - x int8 - y int8 - z int8 - m int8 - n int8 - k int32 - o int8 -} - -//go:linkname pt7 C.pt7 -func pt7(pt point7) point7 - -type data1 struct { - x int8 - y int64 -} - -//go:linkname fn1 C.fn1 -func fn1(data1) data1 - -type data2 struct { - x int32 - y int64 -} - -//go:linkname fn2 C.fn2 -func fn2(data2) data2 - -type data3 struct { - x int64 - y int8 -} - -//go:linkname fn3 C.fn3 -func fn3(data3) data3 - -type fdata1 struct { - x float32 -} - -//go:linkname ff1 C.ff1 -func ff1(fdata1) fdata1 - -type fdata2 struct { - x float32 - y float32 -} - -//go:linkname ff2 C.ff2 -func ff2(fdata2) fdata2 - -type fdata2i struct { - x float32 - y int32 -} - -//go:linkname ff2i C.ff2i -func ff2i(fdata2i) fdata2i - -type fdata3 struct { - x float32 - y float32 - z float32 -} - -//go:linkname ff3 C.ff3 -func ff3(fdata3) fdata3 - -type fdata4 struct { - x float32 - y float32 - z float32 - m float32 -} - -//go:linkname ff4 C.ff4 -func ff4(fdata4) fdata4 - -type fdata5 struct { - x float32 - y float32 - z float32 - m float32 - n float32 -} - -//go:linkname ff5 C.ff5 -func ff5(fdata5) fdata5 - -type fdata2id struct { - x int8 - y int8 - z float64 -} - -//go:linkname ff2id C.ff2id -func ff2id(fdata2id) fdata2id - -type fdata7if struct { - x [7]int8 - y float32 -} - -//go:linkname ff7if C.ff7if -func ff7if(fdata7if) fdata7if - -type fdata4if struct { - x float32 - y int8 - z float32 - m float32 -} - -//go:linkname ff4if C.ff4if -func ff4if(fdata4if) fdata4if - -type array struct { - x [8]int32 -} - -//go:linkname demo64 C.demo64 -func demo64(n int64) int64 - -//go:linkname demo32 C.demo32 -func demo32(n int32) int32 - -type struct32 struct { - v int32 -} - -//go:linkname demo32s C.demo32s -func demo32s(v struct32) struct32 - -type point64 struct { - x int64 - y int64 -} - -//go:linkname pt64 C.pt64 -func pt64(pt point64) point64 - -//go:linkname demo C.demo -func demo(a array) array - -//go:linkname demo2 C.demo2 -func demo2(x int32) array - -type ddata1 struct { - x float64 -} - -//go:linkname dd1 C.dd1 -func dd1(d ddata1) ddata1 - -type ddata2 struct { - x float64 - y float64 -} - -//go:linkname dd2 C.dd2 -func dd2(d ddata2) ddata2 - -type ddata3 struct { - x float64 - y float64 - z float64 -} - -//go:linkname dd3 C.dd3 -func dd3(d ddata3) ddata3 - -//llgo:type C -type Callback func(array, point, point1) array - -//go:linkname callback C.callback -func callback(fn Callback, ar array) - -//llgo:type C -type Callback1 func(array, point, point1) point - -//go:linkname callback1 C.callback1 -func callback1(fn Callback1, ar array) - -//go:linkname mycallback C.mycallback -func mycallback(ar array, pt point, pt1 point1) point - -func myfn1(ar array, pt point, pt1 point1) point { - println("=>", ar.x[0], ar.x[1], ar.x[7], pt.x, pt.y, pt1.x, pt1.y, pt1.z) - return point{100, 200} -} - -//export export_demo -func export_demo(ar array) array { - println("=> export", ar.x[0], ar.x[1], ar.x[7]) - return ar -} - -func main() { - cabi_demo() - callback_demo() -} - -func callback_demo() { - export_demo(array{x: [8]int32{1, 2, 3, 4, 5, 6, 7, 8}}) - - callback(func(ar array, pt point, pt1 point1) array { - println("=> callback", ar.x[0], ar.x[1], ar.x[7], pt.x, pt.y, pt1.x, pt1.y, pt1.z) - return array{x: [8]int32{8, 7, 6, 5, 4, 3, 2, 1}} - }, array{x: [8]int32{1, 2, 3, 4, 5, 6, 7, 8}}) - - callback1(func(ar array, pt point, pt1 point1) point { - println("=> callback1", ar.x[0], ar.x[1], ar.x[7], pt.x, pt.y, pt1.x, pt1.y, pt1.z) - return point{100, 200} - }, array{x: [8]int32{1, 2, 3, 4, 5, 6, 7, 8}}) - ret := mycallback(array{x: [8]int32{1, 2, 3, 4, 5, 6, 7, 8}}, point{1, 2}, point1{1, 2, 3}) - println("=> mycallback", ret.x, ret.y) - callback1(myfn1, array{x: [8]int32{1, 2, 3, 4, 5, 6, 7, 8}}) - callback1(myfn1, array{x: [8]int32{8, 7, 6, 5, 4, 3, 2, 1}}) - callback1(mycallback, array{x: [8]int32{10, 20, 30, 40, 50, 60, 70, 80}}) -} - -func cabi_demo() { - i32 := demo32(1024) - println("=> demo32", i32) - - s32 := demo32s(struct32{100}) - println("=> demo32s", s32.v) - - i64 := demo64(1024) - println("=> demo64", i64) - - p64 := pt64(point64{1024, -1024}) - println("=> pt64", p64.x, p64.y) - - r := demo(array{x: [8]int32{1, 2, 3, 4, 5, 6, 7, 8}}) - println("=> demo", r.x[0], r.x[1]) - - r2 := demo2(100) - println("=> demo2", r2.x[0], r2.x[1], r2.x[7]) - - p0 := pt(point{1, 2}) - println("=> pt0", p0.x, p0.y) - - p1 := pt1(point1{1, 2, 3}) - println("=> pt1", p1.x, p1.y, p1.z) - - p2 := pt2(point2{1, 2, 3}) - println("=> pt2", p2.x, p2.y, p2.z) - - p3 := pt3(point3{1, 2, 3}) - println("=> pt3", p3.x, p3.y, p3.z) - - p4 := pt4(point4{1, 2, 3, 4}) - println("=> pt4", p4.x, p4.y, p4.z, p4.m) - - p5 := pt5(point5{1, 2, 3, 4, 5}) - println("=> pt5", p5.x, p5.y, p5.z, p5.m, p5.n) - - p6 := pt6(point6{1, 2, 3, 4, 5, 6}) - println("=> pt6", p6.x, p6.y, p6.z, p6.m, p6.n, p6.k) - - p7 := pt7(point7{1, 2, 3, 4, 5, 6, 7}) - println("=> pt7", p7.x, p7.y, p7.z, p7.m, p7.n, p7.k, p7.o) - - // skip wrap - fd1 := fn1(data1{1, 2}) - println("=> fd1", fd1.x, fd1.y) - - fd2 := fn2(data2{1, 2}) - println("=> fd2", fd2.x, fd2.y) - - fd3 := fn3(data3{1, 2}) - println("=> fd3", fd3.x, fd3.y) - - // float - f1 := ff1(fdata1{1.1}) - println("=> f1", f1.x) - - // float - f2 := ff2(fdata2{1.1, 2.1}) - println("=> f2", f2.x, f2.y) - - // float - f2i := ff2i(fdata2i{1.1, 2}) - println("=> f2i", f2i.x, f2i.y) - - // float - f3 := ff3(fdata3{1.1, 2.1, 3.1}) - println("=> f3", f3.x, f3.y, f3.z) - - // float - f4 := ff4(fdata4{1.1, 2.1, 3.1, 4.1}) - println("=> f4", f4.x, f4.y, f4.z, f4.m) - - // float - f5 := ff5(fdata5{1.1, 2.1, 3.1, 4.1, 5.1}) - println("=> f5", f5.x, f5.y, f5.z, f5.m, f5.n) - - f2id := ff2id(fdata2id{1, 2, 3.1}) - println("=> f2id", f2id.x, f2id.y, f2id.z) - - f7if := ff7if(fdata7if{[7]int8{1, 2, 3, 4, 5, 6, 7}, 3.1}) - println("=> f7if", f7if.x[0], f7if.x[1], f7if.y) - - f4if := ff4if(fdata4if{1.1, 2, 3.1, 4.1}) - println("=> f4if", f4if.x, f4if.y, f4if.z, f4if.m) - - d1 := dd1(ddata1{1.1}) - println("=> dd1", d1.x) - - d2 := dd2(ddata2{1.1, 2.1}) - println("=> dd2", d2.x, d2.y) - - d3 := dd3(ddata3{1.1, 2.1, 3.1}) - println("=> dd3", d3.x, d3.y, d3.z) -} diff --git a/_demo/cabi/wrap/wrap.c b/_demo/cabi/wrap/wrap.c deleted file mode 100644 index e551911851..0000000000 --- a/_demo/cabi/wrap/wrap.c +++ /dev/null @@ -1,325 +0,0 @@ -extern int printf(const char *format, ...); - -int demo32(int v) { - return v+100; -} - -long long demo64(long long v) { - return v+100; -} - -struct struct32 { - int v; -}; - -struct point64 { - long long x; - long long y; -}; - -struct point64 pt64(struct point64 pt) { - printf("point64: %lld %lld\n",pt.x,pt.y); - return pt; -} - -struct struct32 demo32s(struct struct32 v) { - printf("struct32: %d\n",v.v); - struct struct32 v2 = {v.v+100}; - return v2; -} - -struct point { - int x; - int y; -}; - -struct point pt(struct point pt) { - printf("point: %d %d\n",pt.x,pt.y); - return pt; -} - -struct point1 { - int x; - int y; - int z; -}; - -struct point1 pt1(struct point1 pt) { - printf("point1: %d %d %d\n",pt.x,pt.y,pt.z); - return pt; -} - -struct point2 { - char x; - int y; - int z; -}; - -struct point2 pt2(struct point2 pt) { - printf("point2: %d %d %d\n",pt.x,pt.y,pt.z); - return pt; -} - -struct point3 { - char x; - char y; - char z; -}; - -struct point3 pt3(struct point3 pt) { - printf("point3: %d %d %d\n",pt.x,pt.y,pt.z); - return pt; -} - -struct point4 { - char x; - char y; - char z; - int m; -}; - -struct point4 pt4(struct point4 pt) { - printf("point4: %d %d %d %d\n",pt.x,pt.y,pt.z,pt.m); - return pt; -} - -struct point5 { - char x; - char y; - char z; - char m; - char n; -}; - -struct point5 pt5(struct point5 pt) { - printf("point5: %d %d %d %d %d\n",pt.x,pt.y,pt.z,pt.m,pt.n); - return pt; -} - -struct point6 { - char x; - char y; - char z; - char m; - char n; - int k; -}; - -struct point6 pt6(struct point6 pt) { - printf("point6: %d %d %d %d %d %d\n",pt.x,pt.y,pt.z,pt.m,pt.n,pt.k); - return pt; -} - -struct point7 { - char x; - char y; - char z; - char m; - char n; - int k; - char o; -}; - -struct point7 pt7(struct point7 pt) { - printf("point7: %d %d %d %d %d %d %d\n",pt.x,pt.y,pt.z,pt.m,pt.n,pt.k,pt.o); - return pt; -} - -struct data1 { - char x; - long long y; -}; - -struct data1 fn1(struct data1 pt) { - printf("data1: %d %lld\n",pt.x,pt.y); - return pt; -} - -struct data2 { - int x; - long long y; -}; - -struct data2 fn2(struct data2 pt) { - printf("data2: %d %lld\n",pt.x,pt.y); - return pt; -} - -struct data3 { - long long x; - char y; -}; - -struct data3 fn3(struct data3 pt) { - printf("data3: %lld %d\n",pt.x,pt.y); - return pt; -} - -struct fdata1 { - float x; -}; - -struct fdata1 ff1(struct fdata1 pt) { - printf("ff1: %f\n",pt.x); - return pt; -} - -struct ddata1 { - double x; -}; - -struct ddata1 dd1(struct ddata1 pt) { - printf("dd1: %f\n",pt.x); - return pt; -} - -struct ddata2 { - double x; - double y; -}; - -struct ddata2 dd2(struct ddata2 pt) { - printf("dd2: %f %f\n",pt.x,pt.y); - return pt; -} - -struct ddata3 { - double x; - double y; - double z; -}; - -struct ddata3 dd3(struct ddata3 pt) { - printf("dd3: %f %f %f\n",pt.x,pt.y,pt.z); - return pt; -} - -struct fdata2i { - float x; - int y; -}; - -struct fdata2i ff2i(struct fdata2i pt) { - printf("ff2i: %f %d\n",pt.x,pt.y); - return pt; -} - -struct fdata2 { - float x; - float y; -}; - -struct fdata2 ff2(struct fdata2 pt) { - printf("ff2: %f %f\n",pt.x,pt.y); - return pt; -} - -struct fdata3 { - float x; - float y; - float z; -}; - -struct fdata3 ff3(struct fdata3 pt) { - printf("ff3: %f %f %f\n",pt.x,pt.y,pt.z); - return pt; -} - -struct fdata4 { - float x; - float y; - float z; - float m; -}; - -struct fdata4 ff4(struct fdata4 pt) { - printf("ff4: %f %f %f %f\n",pt.x,pt.y,pt.z,pt.m); - return pt; -} - -struct fdata5 { - float x; - float y; - float z; - float m; - float n; -}; - -struct fdata5 ff5(struct fdata5 pt) { - printf("ff5: %f %f %f %f %f\n",pt.x,pt.y,pt.z,pt.m,pt.n); - return pt; -} - -struct fdata2id { - char x; - char y; - double z; -}; - -struct fdata2id ff2id(struct fdata2id pt) { - printf("ff6: %d %d %f\n",pt.x,pt.y,pt.z); - return pt; -} - -struct fdata7if { - char x[7]; - float z; -}; - -struct fdata7if ff7if(struct fdata7if pt) { - printf("ff7if: %d %d %f\n",pt.x[0],pt.x[1],pt.z); - return pt; -} - -struct fdata4if { - float x; - char y; - float z; - float m; -}; - -struct fdata4if ff4if(struct fdata4if pt) { - printf("ff4if: %f %d %f %f\n",pt.x,pt.y,pt.z,pt.m); - return pt; -} - -struct array { - int x[8]; -}; - -struct array demo(struct array a) { - printf("demo: %d %d %d\n",a.x[0],a.x[1],a.x[2]); - return a; -} - -struct array demo2(int a1){ - struct array x; - for (int i = 0; i < 8; i++) { - x.x[i] = i+a1; - } - return x; -} - -void callback(struct array (*fn)(struct array ar, struct point pt, struct point1 pt1), struct array ar) { - demo(ar); - struct point pt = {1,2}; - struct point1 pt1 = {1,2,3}; - struct array ret = fn(ar,pt,pt1); - demo(ret); -} - -void callback1(struct point (*fn)(struct array ar, struct point pt, struct point1 pt1), struct array ar) { - printf("callback1 array: %d %d %d\n",ar.x[0],ar.x[1],ar.x[7]); - struct point pt = {1,2}; - struct point1 pt1 = {1,2,3}; - struct point ret = fn(ar,pt,pt1); - printf("callback1 ret: %d,%d\n",ret.x,ret.y); -} - -struct point mycallback(struct array ar, struct point pt, struct point1 pt1) { - printf("mycallback array: %d %d %d\n",ar.x[0],ar.x[1],ar.x[7]); - printf("mycallback pt: %d %d\n",pt.x,pt.y); - printf("mycallback pt1: %d %d %d\n",pt1.x,pt1.y,pt1.z); - struct point ret = {pt.x+pt1.x, pt.y+pt1.y}; - return ret; -} diff --git a/cmd/internal/flags/flags.go b/cmd/internal/flags/flags.go index 4159e58f62..b680bbb000 100644 --- a/cmd/internal/flags/flags.go +++ b/cmd/internal/flags/flags.go @@ -24,9 +24,9 @@ func AddBuildFlags(fs *flag.FlagSet) { fs.StringVar(&BuildEnv, "buildenv", "", "Build environment") fs.StringVar(&Target, "target", "", "Target platform (e.g., rp2040, wasi)") if buildenv.Dev { - fs.IntVar(&AbiMode, "abi", 2, "ABI mode (default 2). 0 = none, 1 = cfunc, 2 = allfunc.") + fs.IntVar(&AbiMode, "abi", 0, "ABI mode (default 2). 0 = none, 1 = cfunc, 2 = allfunc.") } else { - AbiMode = 2 + AbiMode = 0 } } diff --git a/internal/build/build.go b/internal/build/build.go index e2fa4a10d0..faf7236fe5 100644 --- a/internal/build/build.go +++ b/internal/build/build.go @@ -112,7 +112,7 @@ func NewDefaultConf(mode Mode) *Config { Goarch: goarch, BinPath: bin, Mode: mode, - AbiMode: cabi.ModeAllFunc, + AbiMode: cabi.ModeNone, AppExt: DefaultAppExt(goos), } return conf