<div dir="auto">That's a good question. Do you know of anyone using the go bindings Peter?</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Feb 10, 2020, 5:15 PM Eli Friedman <<a href="mailto:efriedma@quicinc.com">efriedma@quicinc.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Are you sure it's correct to remove llvm-go?  Grep seems to show it's used to build the LLVM go bindings.<br>
<br>
-Eli<br>
<br>
> -----Original Message-----<br>
> From: llvm-commits <<a href="mailto:llvm-commits-bounces@lists.llvm.org" target="_blank" rel="noreferrer">llvm-commits-bounces@lists.llvm.org</a>> On Behalf Of Eric<br>
> Christopher via llvm-commits<br>
> Sent: Monday, February 10, 2020 10:34 AM<br>
> To: <a href="mailto:llvm-commits@lists.llvm.org" target="_blank" rel="noreferrer">llvm-commits@lists.llvm.org</a><br>
> Subject: [EXT] [llvm] 102814b - Continue removing llgo.<br>
><br>
><br>
> Author: Eric Christopher<br>
> Date: 2020-02-10T10:33:58-08:00<br>
> New Revision: 102814b4d36ad004a2e37cd2a1e84bd2c3593d29<br>
><br>
> URL: <a href="https://github.com/llvm/llvm-" rel="noreferrer noreferrer" target="_blank">https://github.com/llvm/llvm-</a><br>
> project/commit/102814b4d36ad004a2e37cd2a1e84bd2c3593d29<br>
> DIFF: <a href="https://github.com/llvm/llvm-" rel="noreferrer noreferrer" target="_blank">https://github.com/llvm/llvm-</a><br>
> project/commit/102814b4d36ad004a2e37cd2a1e84bd2c3593d29.diff<br>
><br>
> LOG: Continue removing llgo.<br>
><br>
> Added:<br>
><br>
><br>
> Modified:<br>
>     llvm/.gitignore<br>
>     llvm/CMakeLists.txt<br>
>     llvm/CODE_OWNERS.TXT<br>
>     llvm/docs/CMake.rst<br>
>     llvm/tools/CMakeLists.txt<br>
>     llvm/utils/docker/scripts/llvm_checksum/project_tree.py<br>
>     llvm/utils/git-svn/git-llvm<br>
><br>
> Removed:<br>
>     llvm/tools/llvm-go/CMakeLists.txt<br>
>     llvm/tools/llvm-go/llvm-go.go<br>
><br>
><br>
> #################################################################<br>
> ###############<br>
> diff  --git a/llvm/.gitignore b/llvm/.gitignore<br>
> index 1f4bb5e4f1c1..f2b343ade4f3 100644<br>
> --- a/llvm/.gitignore<br>
> +++ b/llvm/.gitignore<br>
> @@ -50,8 +50,6 @@ tools/clang<br>
>  tools/lldb<br>
>  # lld, which is tracked independently.<br>
>  tools/lld<br>
> -# llgo, which is tracked independently.<br>
> -tools/llgo<br>
>  # Polly, which is tracked independently.<br>
>  tools/polly<br>
>  # avrlit, which is tracked independently.<br>
><br>
> diff  --git a/llvm/CMakeLists.txt b/llvm/CMakeLists.txt<br>
> index 3dfe8621f525..68d2c1673ed3 100644<br>
> --- a/llvm/CMakeLists.txt<br>
> +++ b/llvm/CMakeLists.txt<br>
> @@ -63,7 +63,7 @@ endif()<br>
>  # LLVM_EXTERNAL_${project}_SOURCE_DIR using LLVM_ALL_PROJECTS<br>
>  # This allows an easy way of setting up a build directory for llvm and another<br>
>  # one for llvm+clang+... using the same sources.<br>
> -set(LLVM_ALL_PROJECTS "clang;clang-tools-extra;compiler-rt;debuginfo-<br>
> tests;libc;libclc;libcxx;libcxxabi;libunwind;lld;lldb;llgo;mlir;openmp;parallel-<br>
> libs;polly;pstl")<br>
> +set(LLVM_ALL_PROJECTS "clang;clang-tools-extra;compiler-rt;debuginfo-<br>
> tests;libc;libclc;libcxx;libcxxabi;libunwind;lld;lldb;mlir;openmp;parallel-<br>
> libs;polly;pstl")<br>
>  set(LLVM_ENABLE_PROJECTS "" CACHE STRING<br>
>  "Semicolon-separated list of projects to build (${LLVM_ALL_PROJECTS}),<br>
> or \"all\".")<br>
>  if( LLVM_ENABLE_PROJECTS STREQUAL "all" )<br>
><br>
> diff  --git a/llvm/CODE_OWNERS.TXT b/llvm/CODE_OWNERS.TXT<br>
> index 457dabe39f90..192a774e1cee 100644<br>
> --- a/llvm/CODE_OWNERS.TXT<br>
> +++ b/llvm/CODE_OWNERS.TXT<br>
> @@ -62,7 +62,7 @@ D: libc++<br>
><br>
>  N: Peter Collingbourne<br>
>  E: <a href="mailto:peter@pcc.me.uk" target="_blank" rel="noreferrer">peter@pcc.me.uk</a><br>
> -D: llgo, libLTO (lib/LTO/* tools/lto/*), LLVM Bitcode (lib/Bitcode/*<br>
> include/llvm/Bitcode/*)<br>
> +D: libLTO (lib/LTO/* tools/lto/*), LLVM Bitcode (lib/Bitcode/*<br>
> include/llvm/Bitcode/*)<br>
><br>
>  N: Quentin Colombet<br>
>  E: <a href="mailto:quentin.colombet@gmail.com" target="_blank" rel="noreferrer">quentin.colombet@gmail.com</a><br>
><br>
> diff  --git a/llvm/docs/CMake.rst b/llvm/docs/CMake.rst<br>
> index a86ebb3a37bd..70c81adfee3a 100644<br>
> --- a/llvm/docs/CMake.rst<br>
> +++ b/llvm/docs/CMake.rst<br>
> @@ -383,7 +383,7 @@ LLVM-specific variables<br>
>    This feature allows to have one build for only LLVM and another for clang+llvm<br>
>    using the same source checkout.<br>
>    The full list is:<br>
> -  ``clang;clang-tools-extra;compiler-rt;debuginfo-<br>
> tests;libc;libclc;libcxx;libcxxabi;libunwind;lld;lldb;llgo;openmp;parallel-<br>
> libs;polly;pstl``<br>
> +  ``clang;clang-tools-extra;compiler-rt;debuginfo-<br>
> tests;libc;libclc;libcxx;libcxxabi;libunwind;lld;lldb;openmp;parallel-libs;polly;pstl``<br>
><br>
>  **LLVM_EXTERNAL_PROJECTS**:STRING<br>
>    Semicolon-separated list of additional external projects to build as part of<br>
><br>
> diff  --git a/llvm/tools/CMakeLists.txt b/llvm/tools/CMakeLists.txt<br>
> index 2ac35d733cf9..f419867cb081 100644<br>
> --- a/llvm/tools/CMakeLists.txt<br>
> +++ b/llvm/tools/CMakeLists.txt<br>
> @@ -34,7 +34,6 @@ add_llvm_tool_subdirectory(llvm-profdata)<br>
>  # Projects supported via LLVM_EXTERNAL_*_SOURCE_DIR need to be explicitly<br>
>  # specified.<br>
>  add_llvm_external_project(clang)<br>
> -add_llvm_external_project(llgo)<br>
>  add_llvm_external_project(lld)<br>
>  add_llvm_external_project(lldb)<br>
>  add_llvm_external_project(mlir)<br>
><br>
> diff  --git a/llvm/tools/llvm-go/CMakeLists.txt b/llvm/tools/llvm-<br>
> go/CMakeLists.txt<br>
> deleted file mode 100644<br>
> index 20393f728f8f..000000000000<br>
> --- a/llvm/tools/llvm-go/CMakeLists.txt<br>
> +++ /dev/null<br>
> @@ -1,9 +0,0 @@<br>
> -if(LLVM_BINDINGS MATCHES "go")<br>
> -  set(binpath ${CMAKE_BINARY_DIR}/bin/llvm-<br>
> go${CMAKE_EXECUTABLE_SUFFIX})<br>
> -  add_custom_command(OUTPUT ${binpath}<br>
> -    COMMAND ${GO_EXECUTABLE} build -o ${binpath} llvm-go.go<br>
> -    DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/llvm-go.go<br>
> -    WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}<br>
> -    COMMENT "Building Go executable llvm-go")<br>
> -  add_custom_target(llvm-go ALL DEPENDS ${binpath})<br>
> -endif()<br>
><br>
> diff  --git a/llvm/tools/llvm-go/llvm-go.go b/llvm/tools/llvm-go/llvm-go.go<br>
> deleted file mode 100644<br>
> index a0561dd5fd8d..000000000000<br>
> --- a/llvm/tools/llvm-go/llvm-go.go<br>
> +++ /dev/null<br>
> @@ -1,311 +0,0 @@<br>
> -//===-- llvm-go.go - go tool wrapper for LLVM -----------------------------===//<br>
> -//<br>
> -// Part of the LLVM Project, under the Apache License v2.0 with LLVM<br>
> Exceptions.<br>
> -// See <a href="https://llvm.org/LICENSE.txt" rel="noreferrer noreferrer" target="_blank">https://llvm.org/LICENSE.txt</a> for license information.<br>
> -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception<br>
> -//<br>
> -//===----------------------------------------------------------------------===//<br>
> -//<br>
> -// This tool lets us build LLVM components within the tree by setting up a<br>
> -// $GOPATH that resembles a tree fetched in the normal way with "go get".<br>
> -//<br>
> -//===----------------------------------------------------------------------===//<br>
> -<br>
> -package main<br>
> -<br>
> -import (<br>
> -"fmt"<br>
> -"io/ioutil"<br>
> -"os"<br>
> -"os/exec"<br>
> -"path/filepath"<br>
> -"runtime"<br>
> -"strings"<br>
> -)<br>
> -<br>
> -const (<br>
> -linkmodeComponentLibs = "component-libs"<br>
> -linkmodeDylib         = "dylib"<br>
> -)<br>
> -<br>
> -type pkg struct {<br>
> -llvmpath, pkgpath string<br>
> -}<br>
> -<br>
> -var packages = []pkg{<br>
> -{"bindings/go/llvm", "<a href="http://llvm.org/llvm/bindings/go/llvm" rel="noreferrer noreferrer" target="_blank">llvm.org/llvm/bindings/go/llvm</a>"},<br>
> -}<br>
> -<br>
> -type compilerFlags struct {<br>
> -cpp, cxx, ld string<br>
> -}<br>
> -<br>
> -var components = []string{<br>
> -"all-targets",<br>
> -"analysis",<br>
> -"asmparser",<br>
> -"asmprinter",<br>
> -"bitreader",<br>
> -"bitwriter",<br>
> -"codegen",<br>
> -"core",<br>
> -"coroutines",<br>
> -"debuginfodwarf",<br>
> -"executionengine",<br>
> -"instrumentation",<br>
> -"interpreter",<br>
> -"ipo",<br>
> -"irreader",<br>
> -"linker",<br>
> -"mc",<br>
> -"mcjit",<br>
> -"objcarcopts",<br>
> -"option",<br>
> -"profiledata",<br>
> -"scalaropts",<br>
> -"support",<br>
> -"target",<br>
> -}<br>
> -<br>
> -func llvmConfig(args ...string) string {<br>
> -configpath := os.Getenv("LLVM_CONFIG")<br>
> -if configpath == "" {<br>
> -bin, _ := filepath.Split(os.Args[0])<br>
> -configpath = filepath.Join(bin, "llvm-config")<br>
> -}<br>
> -<br>
> -cmd := exec.Command(configpath, args...)<br>
> -cmd.Stderr = os.Stderr<br>
> -out, err := cmd.Output()<br>
> -if err != nil {<br>
> -panic(err.Error())<br>
> -}<br>
> -<br>
> -outstr := string(out)<br>
> -outstr = strings.TrimSuffix(outstr, "\n")<br>
> -outstr = strings.Replace(outstr, "\n", " ", -1)<br>
> -return outstr<br>
> -}<br>
> -<br>
> -func llvmFlags() compilerFlags {<br>
> -args := append([]string{"--ldflags", "--libs", "--system-libs"},<br>
> components...)<br>
> -ldflags := llvmConfig(args...)<br>
> -stdLibOption := ""<br>
> -if strings.Contains(llvmConfig("--cxxflags"), "-stdlib=libc++") {<br>
> -// If libc++ is used to build LLVM libraries, -stdlib=libc++ is<br>
> -// needed to resolve dependent symbols<br>
> -stdLibOption = "-stdlib=libc++"<br>
> -}<br>
> -if runtime.GOOS != "darwin" {<br>
> -// OS X doesn't like -rpath with cgo. See:<br>
> -// <a href="https://github.com/golang/go/issues/7293" rel="noreferrer noreferrer" target="_blank">https://github.com/golang/go/issues/7293</a><br>
> -ldflags = "-Wl,-rpath," + llvmConfig("--libdir") + " " + ldflags<br>
> -}<br>
> -return compilerFlags{<br>
> -cpp: llvmConfig("--cppflags"),<br>
> -cxx: "-std=c++14" + " " + stdLibOption,<br>
> -ld:  ldflags,<br>
> -}<br>
> -}<br>
> -<br>
> -func addTag(args []string, tag string) []string {<br>
> -args = append([]string{}, args...)<br>
> -addedTag := false<br>
> -for i, a := range args {<br>
> -if strings.HasPrefix(a, "-tags=") {<br>
> -args[i] = a + " " + tag<br>
> -addedTag = true<br>
> -} else if a == "-tags" && i+1 < len(args) {<br>
> -args[i+1] = args[i+1] + " " + tag<br>
> -addedTag = true<br>
> -}<br>
> -}<br>
> -if !addedTag {<br>
> -args = append([]string{args[0], "-tags", tag}, args[1:]...)<br>
> -}<br>
> -return args<br>
> -}<br>
> -<br>
> -func printComponents() {<br>
> -fmt.Println(strings.Join(components, " "))<br>
> -}<br>
> -<br>
> -func printConfig() {<br>
> -flags := llvmFlags()<br>
> -<br>
> -fmt.Printf(`// +build !byollvm<br>
> -<br>
> -// This file is generated by llvm-go, do not edit.<br>
> -<br>
> -package llvm<br>
> -<br>
> -/*<br>
> -#cgo CPPFLAGS: %s<br>
> -#cgo CXXFLAGS: %s<br>
> -#cgo LDFLAGS: %s<br>
> -*/<br>
> -import "C"<br>
> -<br>
> -type (run_build_sh int)<br>
> -`, flags.cpp, flags.cxx, flags.ld)<br>
> -}<br>
> -<br>
> -func runGoWithLLVMEnv(args []string, cc, cxx, gocmd, llgo, cppflags, cxxflags,<br>
> ldflags string, packages []pkg) {<br>
> -args = addTag(args, "byollvm")<br>
> -<br>
> -srcdir := llvmConfig("--src-root")<br>
> -<br>
> -tmpgopath, err := ioutil.TempDir("", "gopath")<br>
> -if err != nil {<br>
> -panic(err.Error())<br>
> -}<br>
> -<br>
> -for _, p := range packages {<br>
> -path := filepath.Join(tmpgopath, "src", p.pkgpath)<br>
> -err := os.MkdirAll(filepath.Dir(path), os.ModePerm)<br>
> -if err != nil {<br>
> -panic(err.Error())<br>
> -}<br>
> -<br>
> -abspath := p.llvmpath<br>
> -if !filepath.IsAbs(abspath) {<br>
> -abspath = filepath.Join(srcdir, abspath)<br>
> -}<br>
> -<br>
> -err = os.Symlink(abspath, path)<br>
> -if err != nil {<br>
> -panic(err.Error())<br>
> -}<br>
> -}<br>
> -<br>
> -newpath := os.Getenv("PATH")<br>
> -<br>
> -newgopathlist := []string{tmpgopath}<br>
> -newgopathlist = append(newgopathlist,<br>
> filepath.SplitList(os.Getenv("GOPATH"))...)<br>
> -newgopath := strings.Join(newgopathlist, string(filepath.ListSeparator))<br>
> -<br>
> -flags := llvmFlags()<br>
> -<br>
> -newenv := []string{<br>
> -"CC=" + cc,<br>
> -"CXX=" + cxx,<br>
> -"CGO_CPPFLAGS=" + flags.cpp + " " + cppflags,<br>
> -"CGO_CXXFLAGS=" + flags.cxx + " " + cxxflags,<br>
> -"CGO_LDFLAGS=" + flags.ld + " " + ldflags,<br>
> -"GOPATH=" + newgopath,<br>
> -"PATH=" + newpath,<br>
> -}<br>
> -if llgo != "" {<br>
> -newenv = append(newenv, "GCCGO="+llgo)<br>
> -}<br>
> -<br>
> -for _, v := range os.Environ() {<br>
> -if !strings.HasPrefix(v, "CC=") &&<br>
> -!strings.HasPrefix(v, "CXX=") &&<br>
> -!strings.HasPrefix(v, "CGO_CPPFLAGS=") &&<br>
> -!strings.HasPrefix(v, "CGO_CXXFLAGS=") &&<br>
> -!strings.HasPrefix(v, "CGO_LDFLAGS=") &&<br>
> -!strings.HasPrefix(v, "GCCGO=") &&<br>
> -!strings.HasPrefix(v, "GOPATH=") &&<br>
> -!strings.HasPrefix(v, "PATH=") {<br>
> -newenv = append(newenv, v)<br>
> -}<br>
> -}<br>
> -<br>
> -gocmdpath, err := exec.LookPath(gocmd)<br>
> -if err != nil {<br>
> -panic(err.Error())<br>
> -}<br>
> -<br>
> -proc, err := os.StartProcess(gocmdpath, append([]string{gocmd},<br>
> args...),<br>
> -&os.ProcAttr{<br>
> -Env:   newenv,<br>
> -Files: []*os.File{os.Stdin, os.Stdout, os.Stderr},<br>
> -})<br>
> -if err != nil {<br>
> -panic(err.Error())<br>
> -}<br>
> -ps, err := proc.Wait()<br>
> -if err != nil {<br>
> -panic(err.Error())<br>
> -}<br>
> -<br>
> -os.RemoveAll(tmpgopath)<br>
> -<br>
> -if !ps.Success() {<br>
> -os.Exit(1)<br>
> -}<br>
> -}<br>
> -<br>
> -func usage() {<br>
> -fmt.Println(`Usage: llvm-go subcommand [flags]<br>
> -<br>
> -Available subcommands: build get install run test print-components print-<br>
> config`)<br>
> -os.Exit(0)<br>
> -}<br>
> -<br>
> -func main() {<br>
> -cc := os.Getenv("CC")<br>
> -cxx := os.Getenv("CXX")<br>
> -cppflags := os.Getenv("CGO_CPPFLAGS")<br>
> -cxxflags := os.Getenv("CGO_CXXFLAGS")<br>
> -ldflags := os.Getenv("CGO_LDFLAGS")<br>
> -gocmd := "go"<br>
> -llgo := ""<br>
> -packagesString := ""<br>
> -<br>
> -flags := []struct {<br>
> -name string<br>
> -dest *string<br>
> -}{<br>
> -{"cc", &cc},<br>
> -{"cxx", &cxx},<br>
> -{"go", &gocmd},<br>
> -{"llgo", &llgo},<br>
> -{"cppflags", &cppflags},<br>
> -{"ldflags", &ldflags},<br>
> -{"packages", &packagesString},<br>
> -}<br>
> -<br>
> -args := os.Args[1:]<br>
> -LOOP:<br>
> -for {<br>
> -if len(args) == 0 {<br>
> -usage()<br>
> -}<br>
> -for _, flag := range flags {<br>
> -if strings.HasPrefix(args[0], <a href="http://flag.name" rel="noreferrer noreferrer" target="_blank">flag.name</a>+"=") {<br>
> -*flag.dest = args[0][len(<a href="http://flag.name" rel="noreferrer noreferrer" target="_blank">flag.name</a>)+1:]<br>
> -args = args[1:]<br>
> -continue LOOP<br>
> -}<br>
> -}<br>
> -break<br>
> -}<br>
> -<br>
> -packages := packages<br>
> -if packagesString != "" {<br>
> -for _, field := range strings.Fields(packagesString) {<br>
> -pos := strings.IndexRune(field, '=')<br>
> -if pos == -1 {<br>
> -fmt.Fprintf(os.Stderr, "invalid packages value<br>
> %q, expected 'pkgpath=llvmpath [pkgpath=llvmpath ...]'\n", packagesString)<br>
> -os.Exit(1)<br>
> -}<br>
> -packages = append(packages, pkg{<br>
> -pkgpath:  field[:pos],<br>
> -llvmpath: field[pos+1:],<br>
> -})<br>
> -}<br>
> -}<br>
> -<br>
> -switch args[0] {<br>
> -case "build", "get", "install", "run", "test":<br>
> -runGoWithLLVMEnv(args, cc, cxx, gocmd, llgo, cppflags,<br>
> cxxflags, ldflags, packages)<br>
> -case "print-components":<br>
> -printComponents()<br>
> -case "print-config":<br>
> -printConfig()<br>
> -default:<br>
> -usage()<br>
> -}<br>
> -}<br>
><br>
> diff  --git a/llvm/utils/docker/scripts/llvm_checksum/project_tree.py<br>
> b/llvm/utils/docker/scripts/llvm_checksum/project_tree.py<br>
> index 31d8703ba234..20e225662ce5 100644<br>
> --- a/llvm/utils/docker/scripts/llvm_checksum/project_tree.py<br>
> +++ b/llvm/utils/docker/scripts/llvm_checksum/project_tree.py<br>
> @@ -72,7 +72,7 @@ def CreateLLVMProjects(single_tree_checkout):<br>
>        "parallel-libs", "test-suite"<br>
>    ]<br>
>    # Projects that reside inside 'tools/' in a single source tree checkout.<br>
> -  TOOLS_PROJECTS = ["clang", "lld", "lldb", "llgo"]<br>
> +  TOOLS_PROJECTS = ["clang", "lld", "lldb"]<br>
><br>
>    if single_tree_checkout:<br>
>      projects = [LLVMProject("llvm", "")]<br>
><br>
> diff  --git a/llvm/utils/git-svn/git-llvm b/llvm/utils/git-svn/git-llvm<br>
> index bc60e02aae39..bce285aaeb4b 100755<br>
> --- a/llvm/utils/git-svn/git-llvm<br>
> +++ b/llvm/utils/git-svn/git-llvm<br>
> @@ -72,7 +72,6 @@ LLVM_MONOREPO_SVN_MAPPING = {<br>
>          'libunwind',<br>
>          'lld',<br>
>          'lldb',<br>
> -        'llgo',<br>
>          'llvm',<br>
>          'openmp',<br>
>          'parallel-libs',<br>
><br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank" rel="noreferrer">llvm-commits@lists.llvm.org</a><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>