Skip to content

Commit

Permalink
Merge 5b5521f into 4659064
Browse files Browse the repository at this point in the history
  • Loading branch information
zchee committed Sep 30, 2020
2 parents 4659064 + 5b5521f commit fdf57eb
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 25 deletions.
25 changes: 13 additions & 12 deletions clang/cmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,12 @@ func cmdFatal(msg string, err error) error {
}

// Cmd executes a generic go-clang-generate command
func Cmd(llvmConfigPath string, api *gen.API) error {
func Cmd(llvmRoot string, api *gen.API) error {
llvmConfigPath := filepath.Join(llvmRoot, "bin", "llvm-config")
if err := fileExists(llvmConfigPath); err != nil {
return err
}

rawLLVMVersion, _, err := execToBuffer(llvmConfigPath, "--version")
if err != nil {
return cmdFatal("Cannot determine LLVM version", err)
Expand Down Expand Up @@ -50,18 +55,14 @@ func Cmd(llvmConfigPath string, api *gen.API) error {
}

// Find Clang's include directory
for _, d := range []string{
"/usr/local/lib/clang",
"/usr/include/clang",
} {
for _, di := range []string{
d + fmt.Sprintf("/%s/include", llvmVersion.String()),
d + fmt.Sprintf("/%s/include", llvmVersion.StringMinor()),
} {
if dirExists(di) == nil {
clangArguments = append(clangArguments, "-I", di)
}
clangResourceDir, _, err := execToBuffer(filepath.Join(llvmRoot, "bin", "clang"), "--print-resource-dir")
if err == nil { // ignore error for --print-resource-dir flag not yet implements
clangResourceIncludeDir := filepath.Join(strings.TrimSpace(string(clangResourceDir)), "include")
if err := dirExists(clangResourceIncludeDir); err != nil {
return cmdFatal("not fonud clang resource include directory", err)
}

clangArguments = append(clangArguments, "-I", clangResourceIncludeDir)
}

api.ClangArguments = append(clangArguments, api.ClangArguments...)
Expand Down
35 changes: 22 additions & 13 deletions cmd/go-clang-gen/main.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package main

import (
"errors"
"flag"
"fmt"
"os"
Expand All @@ -12,13 +13,11 @@ import (
)

var (
flagClangResourceDir string
flagLLVMConfigPath string
flagLLVMRoot string
)

func init() {
flag.StringVar(&flagClangResourceDir, "clang-resource-dir", "", "Clang resource directory")
flag.StringVar(&flagLLVMConfigPath, "llvm-config", "", "llvm-config binary path")
flag.StringVar(&flagLLVMRoot, "llvm-root", "", "path of llvm root directory")
}

func main() {
Expand All @@ -35,20 +34,30 @@ func main() {
FilterStructMemberGetter: filterStructMemberGetter,
}

if flagClangResourceDir != "" {
if resourceDir, err := os.Stat(flagClangResourceDir); err == nil && resourceDir.IsDir() {
api.ClangArguments = append(api.ClangArguments, "-I"+resourceDir.Name())
if flagLLVMRoot == "" {
c := exec.Command("llvm-config", "--prefix")
prefix, err := c.CombinedOutput()
if err != nil {
var exitErr *exec.ExitError
if errors.As(err, &exitErr) {
err = exitErr
}
fmt.Println(err)
os.Exit(1)
}

prefixDir := strings.TrimSpace(string(prefix))
if rootDir, err := os.Stat(prefixDir); err == nil && rootDir.IsDir() {
flagLLVMRoot = prefixDir
}
}

llvmConfig := "llvm-config"
if flagLLVMConfigPath != "" {
if bin, err := exec.LookPath(flagLLVMConfigPath); err == nil {
llvmConfig = bin
if flagLLVMRoot == "" {
fmt.Println("couldn't parse LLVM root directory")
os.Exit(1)
}
}

err := genclang.Cmd(llvmConfig, api)
err := genclang.Cmd(flagLLVMRoot, api)
if err != nil {
fmt.Println(err)

Expand Down

0 comments on commit fdf57eb

Please sign in to comment.