]> granicus.if.org Git - llvm/commitdiff
[tests][go]Add -stdlib=libc++ to build GO test if LLVM is built with libc++
authorXing Xue <xingxue@outlook.com>
Thu, 16 May 2019 13:32:55 +0000 (13:32 +0000)
committerXing Xue <xingxue@outlook.com>
Thu, 16 May 2019 13:32:55 +0000 (13:32 +0000)
When libc++ is used to build LLVM libraries, these libraries have dependencies on libc++ and C++ STL signatures in these libraries are corresponding to libc++ implementation. Therefore, -stdlib=libc++ is required on the C++ compiler command for building GO tests that link with these LLVM libraries.

Reviewers: hubert.reinterpretcast, sfertile, amyk, EricWF

Reviewed By: sfertile, hubert.reinterpretcast

Subscribers: jsji, llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@360895 91177308-0d34-0410-b5e6-96231b3b80d8

tools/llvm-go/llvm-go.go

index cdcdf044381cede2cbd510aa79f6374a1487eece..8fbd3c66b3f3cd5851ba1b93ba3fed300c034187 100644 (file)
@@ -90,6 +90,12 @@ func llvmConfig(args ...string) string {
 func llvmFlags() compilerFlags {
        args := append([]string{"--ldflags", "--libs", "--system-libs"}, components...)
        ldflags := llvmConfig(args...)
+       stdLibOption := ""
+       if strings.Contains(llvmConfig("--cxxflags"), "-stdlib=libc++") {
+               // If libc++ is used to build LLVM libraries, -stdlib=libc++ is
+               // needed to resolve dependent symbols
+               stdLibOption = "-stdlib=libc++"
+       }
        if runtime.GOOS != "darwin" {
                // OS X doesn't like -rpath with cgo. See:
                // https://github.com/golang/go/issues/7293
@@ -97,7 +103,7 @@ func llvmFlags() compilerFlags {
        }
        return compilerFlags{
                cpp: llvmConfig("--cppflags"),
-               cxx: "-std=c++11",
+               cxx: "-std=c++11" + " " + stdLibOption,
                ld:  ldflags,
        }
 }