[llvm] r276829 - [llvm-go] parameterize $GOPATH construction

Andrew Wilkins via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 26 20:21:51 PDT 2016


Author: axw
Date: Tue Jul 26 22:21:51 2016
New Revision: 276829

URL: http://llvm.org/viewvc/llvm-project?rev=276829&view=rev
Log:
[llvm-go] parameterize $GOPATH construction

Summary:
To build llgo, you must currently ensure that llgo
is in the tools/llgo directory, due to a hard-coded
path in llvm-go.

To support the use of LLVM_EXTERNAL_LLGO_SOURCE_DIR,
we introduce a flag to llvm-go that enables the
caller to specify the paths to symlink in the
temporary $GOPATH.

Reviewers: pcc

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D21634

Modified:
    llvm/trunk/cmake/modules/AddLLVM.cmake
    llvm/trunk/tools/llvm-go/llvm-go.go

Modified: llvm/trunk/cmake/modules/AddLLVM.cmake
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/cmake/modules/AddLLVM.cmake?rev=276829&r1=276828&r2=276829&view=diff
==============================================================================
--- llvm/trunk/cmake/modules/AddLLVM.cmake (original)
+++ llvm/trunk/cmake/modules/AddLLVM.cmake Tue Jul 26 22:21:51 2016
@@ -997,7 +997,7 @@ function(llvm_add_go_executable binary p
     endforeach(d)
     set(ldflags "${CMAKE_EXE_LINKER_FLAGS}")
     add_custom_command(OUTPUT ${binpath}
-      COMMAND ${CMAKE_BINARY_DIR}/bin/llvm-go "go=${GO_EXECUTABLE}" "cc=${cc}" "cxx=${cxx}" "cppflags=${cppflags}" "ldflags=${ldflags}"
+      COMMAND ${CMAKE_BINARY_DIR}/bin/llvm-go "go=${GO_EXECUTABLE}" "cc=${cc}" "cxx=${cxx}" "cppflags=${cppflags}" "ldflags=${ldflags}" "packages=${LLVM_GO_PACKAGES}"
               ${ARG_GOFLAGS} build -o ${binpath} ${pkgpath}
       DEPENDS llvm-config ${CMAKE_BINARY_DIR}/bin/llvm-go${CMAKE_EXECUTABLE_SUFFIX}
               ${llvmlibs} ${ARG_DEPENDS}

Modified: llvm/trunk/tools/llvm-go/llvm-go.go
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-go/llvm-go.go?rev=276829&r1=276828&r2=276829&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-go/llvm-go.go (original)
+++ llvm/trunk/tools/llvm-go/llvm-go.go Tue Jul 26 22:21:51 2016
@@ -35,7 +35,6 @@ type pkg struct {
 
 var packages = []pkg{
 	{"bindings/go/llvm", "llvm.org/llvm/bindings/go/llvm"},
-	{"tools/llgo", "llvm.org/llgo"},
 }
 
 type compilerFlags struct {
@@ -145,7 +144,7 @@ type (run_build_sh int)
 `, flags.cpp, flags.cxx, flags.ld)
 }
 
-func runGoWithLLVMEnv(args []string, cc, cxx, gocmd, llgo, cppflags, cxxflags, ldflags string) {
+func runGoWithLLVMEnv(args []string, cc, cxx, gocmd, llgo, cppflags, cxxflags, ldflags string, packages []pkg) {
 	args = addTag(args, "byollvm")
 
 	srcdir := llvmConfig("--src-root")
@@ -162,7 +161,12 @@ func runGoWithLLVMEnv(args []string, cc,
 			panic(err.Error())
 		}
 
-		err = os.Symlink(filepath.Join(srcdir, p.llvmpath), path)
+		abspath := p.llvmpath
+		if !filepath.IsAbs(abspath) {
+			abspath = filepath.Join(srcdir, abspath)
+		}
+
+		err = os.Symlink(abspath, path)
 		if err != nil {
 			panic(err.Error())
 		}
@@ -242,6 +246,7 @@ func main() {
 	ldflags := os.Getenv("CGO_LDFLAGS")
 	gocmd := "go"
 	llgo := ""
+	packagesString := ""
 
 	flags := []struct {
 		name string
@@ -253,6 +258,7 @@ func main() {
 		{"llgo", &llgo},
 		{"cppflags", &cppflags},
 		{"ldflags", &ldflags},
+		{"packages", &packagesString},
 	}
 
 	args := os.Args[1:]
@@ -271,9 +277,24 @@ LOOP:
 		break
 	}
 
+	packages := packages
+	if packagesString != "" {
+		for _, field := range strings.Fields(packagesString) {
+			pos := strings.IndexRune(field, '=')
+			if pos == -1 {
+				fmt.Fprintf(os.Stderr, "invalid packages value %q, expected 'pkgpath=llvmpath [pkgpath=llvmpath ...]'\n", packagesString)
+				os.Exit(1)
+			}
+			packages = append(packages, pkg{
+				pkgpath:  field[:pos],
+				llvmpath: field[pos+1:],
+			})
+		}
+	}
+
 	switch args[0] {
 	case "build", "get", "install", "run", "test":
-		runGoWithLLVMEnv(args, cc, cxx, gocmd, llgo, cppflags, cxxflags, ldflags)
+		runGoWithLLVMEnv(args, cc, cxx, gocmd, llgo, cppflags, cxxflags, ldflags, packages)
 	case "print-components":
 		printComponents()
 	case "print-config":




More information about the llvm-commits mailing list