Skip to content

Commit e1b7ce5

Browse files
committed
implement sub command for gensym
1 parent 9a8e25e commit e1b7ce5

File tree

6 files changed

+53
-4
lines changed

6 files changed

+53
-4
lines changed

cmd/internal/gencfg/gencfg.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66

77
"github.com/goplus/llcppg/cmd/internal/base"
88
"github.com/goplus/llcppg/cmd/llcppcfg/gen"
9+
"github.com/goplus/llcppg/config"
910
)
1011

1112
var Cmd = &base.Command{
@@ -47,7 +48,7 @@ func runCmd(cmd *base.Command, args []string) {
4748
if err != nil {
4849
panic(err)
4950
}
50-
outFile := "./llcppg.cfg"
51+
outFile := config.LLCPPG_CFG
5152
err = os.WriteFile(outFile, buf, 0600)
5253
if err != nil {
5354
panic(err)

cmd/internal/gensym/flags.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
11
package gensym
22

3+
import "flag"
4+
35
var verbose bool
6+
7+
func addFlags(fs *flag.FlagSet) {
8+
fs.BoolVar(&verbose, "v", false, "enable verbose output")
9+
}

cmd/internal/gensym/gensym.go

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
package gensym
22

33
import (
4-
"fmt"
4+
"bytes"
5+
"encoding/json"
6+
"os"
7+
"os/exec"
58

69
"github.com/goplus/llcppg/cmd/internal/base"
10+
"github.com/goplus/llcppg/config"
11+
"github.com/goplus/llgo/xtool/env"
712
)
813

914
var Cmd = &base.Command{
@@ -13,8 +18,41 @@ var Cmd = &base.Command{
1318

1419
func init() {
1520
Cmd.Run = runCmd
21+
addFlags(&Cmd.Flag)
1622
}
1723

1824
func runCmd(cmd *base.Command, args []string) {
19-
fmt.Println("todo gensym")
25+
if err := cmd.Flag.Parse(args); err != nil {
26+
return
27+
}
28+
29+
cfgFile := config.LLCPPG_CFG
30+
openCfgFile, err := os.Open(cfgFile)
31+
check(err)
32+
defer openCfgFile.Close()
33+
34+
var conf config.Config
35+
err = json.NewDecoder(openCfgFile).Decode(&conf)
36+
check(err)
37+
conf.CFlags = env.ExpandEnv(conf.CFlags)
38+
conf.Libs = env.ExpandEnv(conf.Libs)
39+
40+
bytesOfConf, err := json.MarshalIndent(&conf, "", " ")
41+
check(err)
42+
43+
if cmd.Flag.NArg() == 0 {
44+
args = append(args, "-")
45+
}
46+
47+
cmdForLlcppsymg := exec.Command("llcppsymg", args...)
48+
cmdForLlcppsymg.Stdin = bytes.NewReader(bytesOfConf)
49+
cmdForLlcppsymg.Stdout = os.Stdout
50+
cmdForLlcppsymg.Stderr = os.Stderr
51+
cmdForLlcppsymg.Run()
52+
}
53+
54+
func check(err error) {
55+
if err != nil {
56+
panic(err)
57+
}
2058
}

cmd/llcppg/gensym_cmd.gox

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ use "gensym"
66

77
short "generate symbol table for a C/C++ library"
88

9+
flagOff
10+
911
run args => {
1012
self.Cmd.Run self.Cmd, args
1113
}

cmd/llcppg/llcppg

4.1 MB
Binary file not shown.

cmd/llcppg/main_app.gox

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
1-
short `llcppg aims to be a tool for automatically generating LLGo bindings for C/C++ libraries, enhancing the experience of integrating LLGo with C!`
1+
short `
2+
llcppg aims to be a tool for automatically generating LLGo bindings for C/C++ libraries,
3+
enhancing the experience of integrating LLGo with C!`

0 commit comments

Comments
 (0)