From 355721c47aaaae8ea235313aa9ce706bd00be6a8 Mon Sep 17 00:00:00 2001 From: xushiwei Date: Sun, 4 May 2025 15:18:49 +0800 Subject: [PATCH] llgo.next: support build, run, cmptest --- cmd/llgo.next/build_cmd.gox | 26 +++++++++++ cmd/llgo.next/cmptest_cmd.gox | 26 +++++++++++ cmd/llgo.next/gop_autogen.go | 81 +++++++++++++++++++++++++++++++---- cmd/llgo.next/run_cmd.gox | 26 +++++++++++ cmd/llgo.next/version_cmd.gox | 17 +++++++- go.mod | 2 +- go.sum | 4 +- 7 files changed, 170 insertions(+), 12 deletions(-) create mode 100644 cmd/llgo.next/build_cmd.gox create mode 100644 cmd/llgo.next/cmptest_cmd.gox create mode 100644 cmd/llgo.next/run_cmd.gox diff --git a/cmd/llgo.next/build_cmd.gox b/cmd/llgo.next/build_cmd.gox new file mode 100644 index 00000000..d995cd5b --- /dev/null +++ b/cmd/llgo.next/build_cmd.gox @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2025 The GoPlus Authors (goplus.org). All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +import ( + self "github.com/goplus/llgo/cmd/internal/build" +) + +short "Compile packages and dependencies" + +flagOff + +run args => { + self.Cmd.Run self.Cmd, args +} diff --git a/cmd/llgo.next/cmptest_cmd.gox b/cmd/llgo.next/cmptest_cmd.gox new file mode 100644 index 00000000..323017d8 --- /dev/null +++ b/cmd/llgo.next/cmptest_cmd.gox @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2025 The GoPlus Authors (goplus.org). All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +import ( + self "github.com/goplus/llgo/cmd/internal/run" +) + +short "Compile and run with llgo, compare result (stdout/stderr/exitcode) with go or llgo.expect; generate llgo.expect file if -gen is specified" + +flagOff + +run args => { + self.CmpTestCmd.Run self.CmpTestCmd, args +} diff --git a/cmd/llgo.next/gop_autogen.go b/cmd/llgo.next/gop_autogen.go index bcfc58f7..902dfdff 100644 --- a/cmd/llgo.next/gop_autogen.go +++ b/cmd/llgo.next/gop_autogen.go @@ -5,6 +5,8 @@ package main import ( "fmt" "github.com/goplus/cobra/xcmd" + build1 "github.com/goplus/llgo/cmd/internal/build" + run1 "github.com/goplus/llgo/cmd/internal/run" "github.com/goplus/llgo/internal/env" "github.com/qiniu/x/stringutil" "runtime" @@ -12,6 +14,18 @@ import ( const _ = true +type build struct { + xcmd.Command + *App +} +type cmptest struct { + xcmd.Command + *App +} +type run struct { + xcmd.Command + *App +} type version struct { xcmd.Command *App @@ -21,17 +35,68 @@ type App struct { } func (this *App) Main() { - _gop_obj0 := &version{App: this} - xcmd.Gopt_App_Main(this, _gop_obj0) + _gop_obj0 := &build{App: this} + _gop_obj1 := &cmptest{App: this} + _gop_obj2 := &run{App: this} + _gop_obj3 := &version{App: this} + xcmd.Gopt_App_Main(this, _gop_obj0, _gop_obj1, _gop_obj2, _gop_obj3) } -//line cmd/llgo/version_cmd.gox:7 +//line cmd/llgo.next/build_cmd.gox:20 +func (this *build) Main(_gop_arg0 string) { + this.Command.Main(_gop_arg0) +//line cmd/llgo.next/build_cmd.gox:20:1 + this.Short("Compile packages and dependencies") +//line cmd/llgo.next/build_cmd.gox:22:1 + this.FlagOff() +//line cmd/llgo.next/build_cmd.gox:24:1 + this.Run__1(func(args []string) { +//line cmd/llgo.next/build_cmd.gox:25:1 + build1.Cmd.Run(build1.Cmd, args) + }) +} +func (this *build) Classfname() string { + return "build" +} +//line cmd/llgo.next/cmptest_cmd.gox:20 +func (this *cmptest) Main(_gop_arg0 string) { + this.Command.Main(_gop_arg0) +//line cmd/llgo.next/cmptest_cmd.gox:20:1 + this.Short("Compile and run with llgo, compare result (stdout/stderr/exitcode) with go or llgo.expect; generate llgo.expect file if -gen is specified") +//line cmd/llgo.next/cmptest_cmd.gox:22:1 + this.FlagOff() +//line cmd/llgo.next/cmptest_cmd.gox:24:1 + this.Run__1(func(args []string) { +//line cmd/llgo.next/cmptest_cmd.gox:25:1 + run1.CmpTestCmd.Run(run1.CmpTestCmd, args) + }) +} +func (this *cmptest) Classfname() string { + return "cmptest" +} +//line cmd/llgo.next/run_cmd.gox:20 +func (this *run) Main(_gop_arg0 string) { + this.Command.Main(_gop_arg0) +//line cmd/llgo.next/run_cmd.gox:20:1 + this.Short("Compile and run Go program") +//line cmd/llgo.next/run_cmd.gox:22:1 + this.FlagOff() +//line cmd/llgo.next/run_cmd.gox:24:1 + this.Run__1(func(args []string) { +//line cmd/llgo.next/run_cmd.gox:25:1 + run1.Cmd.Run(run1.Cmd, args) + }) +} +func (this *run) Classfname() string { + return "run" +} +//line cmd/llgo.next/version_cmd.gox:22 func (this *version) Main(_gop_arg0 string) { this.Command.Main(_gop_arg0) -//line cmd/llgo/version_cmd.gox:7:1 - this.Short("print LLGo version") -//line cmd/llgo/version_cmd.gox:9:1 +//line cmd/llgo.next/version_cmd.gox:22:1 + this.Short("Print LLGo version") +//line cmd/llgo.next/version_cmd.gox:24:1 this.Run__0(func() { -//line cmd/llgo/version_cmd.gox:10:1 +//line cmd/llgo.next/version_cmd.gox:25:1 fmt.Println(stringutil.Concat("llgo ", env.Version(), " ", runtime.GOOS, "/", runtime.GOARCH)) }) } @@ -39,6 +104,6 @@ func (this *version) Classfname() string { return "version" } func main() { -//line cmd/llgo/version_cmd.gox:9:1 +//line cmd/llgo.next/version_cmd.gox:24:1 new(App).Main() } diff --git a/cmd/llgo.next/run_cmd.gox b/cmd/llgo.next/run_cmd.gox new file mode 100644 index 00000000..2df323d8 --- /dev/null +++ b/cmd/llgo.next/run_cmd.gox @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2025 The GoPlus Authors (goplus.org). All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + +import ( + self "github.com/goplus/llgo/cmd/internal/run" +) + +short "Compile and run Go program" + +flagOff + +run args => { + self.Cmd.Run self.Cmd, args +} diff --git a/cmd/llgo.next/version_cmd.gox b/cmd/llgo.next/version_cmd.gox index f0593a80..e105513f 100644 --- a/cmd/llgo.next/version_cmd.gox +++ b/cmd/llgo.next/version_cmd.gox @@ -1,10 +1,25 @@ +/* + * Copyright (c) 2025 The GoPlus Authors (goplus.org). All rights reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and limitations under the License. + */ + import ( "runtime" "github.com/goplus/llgo/internal/env" ) -short "print LLGo version" +short "Print LLGo version" run => { echo "llgo ${env.version} ${runtime.GOOS}/${runtime.GOARCH}" diff --git a/go.mod b/go.mod index 2db11df5..548824de 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ toolchain go1.24.1 require ( github.com/goccy/go-yaml v1.17.1 - github.com/goplus/cobra v1.9.7 //gop:class + github.com/goplus/cobra v1.9.8 //gop:class github.com/goplus/gogen v1.17.3 github.com/goplus/lib v0.2.0 github.com/goplus/llgo/runtime v0.0.0-00010101000000-000000000000 diff --git a/go.sum b/go.sum index 568e81af..3cb60cad 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,8 @@ github.com/goccy/go-yaml v1.17.1 h1:LI34wktB2xEE3ONG/2Ar54+/HJVBriAGJ55PHls4YuY= github.com/goccy/go-yaml v1.17.1/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/goplus/cobra v1.9.7 h1:aG9WtC06MKEfu/g5XMPz8i1hwh0kS9AxuDyJmSW8xe8= -github.com/goplus/cobra v1.9.7/go.mod h1:p4LhfNJDKEpiGjGiNn0crUXL5dUPA5DX2ztYpEJR34E= +github.com/goplus/cobra v1.9.8 h1:4ZvhxUepT35vreZdxjl/bwnJdwhWyWCGnc60+v22x14= +github.com/goplus/cobra v1.9.8/go.mod h1:p4LhfNJDKEpiGjGiNn0crUXL5dUPA5DX2ztYpEJR34E= github.com/goplus/gogen v1.17.3 h1:Xhoj2KQw4feRdPEtOYjTUe9lSvNIoxBG4urhdjf+fUg= github.com/goplus/gogen v1.17.3/go.mod h1:owX2e1EyU5WD+Nm6oH2m/GXjLdlBYcwkLO4wN8HHXZI= github.com/goplus/lib v0.2.0 h1:AjqkN1XK5H23wZMMlpaUYAMCDAdSBQ2NMFrLtSh7W4g=