[llvm] r257003 - tools/llvm-config: improve shared library support
Artem Belevich via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 8 10:46:51 PST 2016
This commit appears to break llvm-config when llvm/clang is built with
shared libraries only which in turn breaks Bindings/Go/go.test
### before r257003:
# bin/llvm-config --libs
-lLLVMLTO -lLLVMObjCARCOpts -lLLVMSymbolize -lLLVMDebugInfoPDB
-lLLVMDebugInfoDWARF -lLLVMXCoreDisassembler -lLLVMXCoreCodeGen
-lLLVMXCoreDesc -lLLVMXCoreInfo -lLLVMXCoreAsmPrinter
-lLLVMSystemZDisassembler -lLLVMSystemZCodeGen -lLLVMSystemZAsmParser
-lLLVMSystemZDesc -lLLVMSystemZInfo -lLLVMSystemZAsmPrinter
-lLLVMSparcDisassembler -lLLVMSparcCodeGen -lLLVMSparcAsmParser
-lLLVMSparcDesc -lLLVMSparcInfo -lLLVMSparcAsmPrinter
-lLLVMPowerPCDisassembler -lLLVMPowerPCCodeGen -lLLVMPowerPCAsmParser
-lLLVMPowerPCDesc -lLLVMPowerPCInfo -lLLVMPowerPCAsmPrinter
-lLLVMNVPTXCodeGen -lLLVMNVPTXDesc -lLLVMNVPTXInfo -lLLVMNVPTXAsmPrinter
-lLLVMMSP430CodeGen -lLLVMMSP430Desc -lLLVMMSP430Info
-lLLVMMSP430AsmPrinter -lLLVMMipsDisassembler -lLLVMMipsCodeGen
-lLLVMMipsAsmParser -lLLVMMipsDesc -lLLVMMipsInfo -lLLVMMipsAsmPrinter
-lLLVMHexagonDisassembler -lLLVMHexagonCodeGen -lLLVMHexagonAsmParser
-lLLVMHexagonDesc -lLLVMHexagonInfo -lLLVMCppBackendCodeGen
-lLLVMCppBackendInfo -lLLVMBPFCodeGen -lLLVMBPFDesc -lLLVMBPFInfo
-lLLVMBPFAsmPrinter -lLLVMARMDisassembler -lLLVMARMCodeGen
-lLLVMARMAsmParser -lLLVMARMDesc -lLLVMARMInfo -lLLVMARMAsmPrinter
-lLLVMAMDGPUCodeGen -lLLVMAMDGPUAsmParser -lLLVMAMDGPUDesc
-lLLVMAMDGPUUtils -lLLVMAMDGPUInfo -lLLVMAMDGPUAsmPrinter
-lLLVMAArch64Disassembler -lLLVMAArch64CodeGen -lLLVMAArch64AsmParser
-lLLVMAArch64Desc -lLLVMAArch64Info -lLLVMAArch64AsmPrinter
-lLLVMAArch64Utils -lLLVMMIRParser -lLLVMLibDriver -lLLVMOption
-lgtest_main -lgtest -lLLVMTableGen -lLLVMLineEditor -lLLVMX86Disassembler
-lLLVMX86AsmParser -lLLVMX86CodeGen -lLLVMSelectionDAG -lLLVMAsmPrinter
-lLLVMX86Desc -lLLVMMCDisassembler -lLLVMX86Info -lLLVMX86AsmPrinter
-lLLVMX86Utils -lLLVMMCJIT -lLLVMPasses -lLLVMipo -lLLVMVectorize
-lLLVMLinker -lLLVMIRReader -lLLVMAsmParser -lLLVMDebugInfoCodeView
-lLLVMInterpreter -lLLVMCodeGen -lLLVMScalarOpts -lLLVMInstCombine
-lLLVMInstrumentation -lLLVMProfileData -lLLVMBitWriter -lLLVMOrcJIT
-lLLVMTransformUtils -lLLVMExecutionEngine -lLLVMTarget -lLLVMAnalysis
-lLLVMRuntimeDyld -lLLVMObject -lLLVMMCParser -lLLVMBitReader -lLLVMMC
-lLLVMCore -lLLVMSupport
### after r257003:
# bin/llvm-config --libs
llvm-config: error: component libraries and shared library
llvm-config: error: missing:
/usr/local/google/home/tra/work/llvm/build/gpu/debug/lib/libLLVMSupport.a
llvm-config: error: missing:
/usr/local/google/home/tra/work/llvm/build/gpu/debug/lib/libLLVMCore.a
llvm-config: error: missing:
/usr/local/google/home/tra/work/llvm/build/gpu/debug/lib/libLLVMMC.a
llvm-config: error: missing:
/usr/local/google/home/tra/work/llvm/build/gpu/debug/lib/libLLVMBitReader.a
llvm-config: error: missing:
/usr/local/google/home/tra/work/llvm/build/gpu/debug/lib/libLLVMMCParser.a
llvm-config: error: missing:
/usr/local/google/home/tra/work/llvm/build/gpu/debug/lib/libLLVMObject.a
llvm-config: error: missing:
/usr/local/google/home/tra/work/llvm/build/gpu/debug/lib/libLLVMRuntimeDyld.a
llvm-config: error: missing:
/usr/local/google/home/tra/work/llvm/build/gpu/debug/lib/libLLVMAnalysis.a
llvm-config: error: missing:
/usr/local/google/home/tra/work/llvm/build/gpu/debug/lib/libLLVMTarget.a
llvm-config: error: missing:
/usr/local/google/home/tra/work/llvm/build/gpu/debug/lib/libLLVMExecutionEngine.a
llvm-config: error: missing:
/usr/local/google/home/tra/work/llvm/build/gpu/debug/lib/libLLVMTransformUtils.a
llvm-config: error: missing:
/usr/local/google/home/tra/work/llvm/build/gpu/debug/lib/libLLVMOrcJIT.a
llvm-config: error: missing:
/usr/local/google/home/tra/work/llvm/build/gpu/debug/lib/libLLVMBitWriter.a
llvm-config: error: missing:
/usr/local/google/home/tra/work/llvm/build/gpu/debug/lib/libLLVMProfileData.a
llvm-config: error: missing:
/usr/local/google/home/tra/work/llvm/build/gpu/debug/lib/libLLVMInstrumentation.a
llvm-config: error: missing:
/usr/local/google/home/tra/work/llvm/build/gpu/debug/lib/libLLVMInstCombine.a
....
On Wed, Jan 6, 2016 at 4:18 PM, Andrew Wilkins via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: axw
> Date: Wed Jan 6 18:18:56 2016
> New Revision: 257003
>
> URL: http://llvm.org/viewvc/llvm-project?rev=257003&view=rev
> Log:
> tools/llvm-config: improve shared library support
>
> Summary:
> r252532 added support for reporting the monolithic library
> when LLVM_BUILD_LLVM_DYLIB is used. This would only be done
> if the individual components were not found, and the dynamic
> library is found.
>
> This diff extends this as follows:
> - If LLVM_LINK_LLVM_DYLIB is set, then prefer the shared
> library, even if all component libraries exist.
> - Two flags, --link-shared and --link-static are introduced
> to provide explicit guidance. If --link-shared is passed
> and the shared library does not exist, an error results.
>
> Additionally, changed the expected shared library names from
> (e.g.) LLVM-3.8.0 to LLVM-3.8. The former exists only in an
> installation (and then only in CMake builds I think?), and not
> in the build tree; this breaks usage of llvm-config during
> builds, e.g. by llvm-go.
>
> Reviewers: DiamondLovesYou, beanz
>
> Subscribers: llvm-commits
>
> Differential Revision: http://reviews.llvm.org/D15033
>
> Modified:
> llvm/trunk/cmake/modules/AddLLVM.cmake
> llvm/trunk/tools/llvm-config/BuildVariables.inc.in
> llvm/trunk/tools/llvm-config/CMakeLists.txt
> llvm/trunk/tools/llvm-config/Makefile
> llvm/trunk/tools/llvm-config/llvm-config.cpp
> 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=257003&r1=257002&r2=257003&view=diff
>
> ==============================================================================
> --- llvm/trunk/cmake/modules/AddLLVM.cmake (original)
> +++ llvm/trunk/cmake/modules/AddLLVM.cmake Wed Jan 6 18:18:56 2016
> @@ -911,13 +911,8 @@ function(llvm_add_go_executable binary p
> set(cppflags "${cppflags} -I${d}")
> endforeach(d)
> set(ldflags "${CMAKE_EXE_LINKER_FLAGS}")
> - if (LLVM_LINK_LLVM_DYLIB)
> - set(linkmode "dylib")
> - else()
> - set(linkmode "component-libs")
> - endif()
> add_custom_command(OUTPUT ${binpath}
> - COMMAND ${CMAKE_BINARY_DIR}/bin/llvm-go "go=${GO_EXECUTABLE}"
> "cc=${cc}" "cxx=${cxx}" "cppflags=${cppflags}" "ldflags=${ldflags}"
> "linkmode=${linkmode}"
> + COMMAND ${CMAKE_BINARY_DIR}/bin/llvm-go "go=${GO_EXECUTABLE}"
> "cc=${cc}" "cxx=${cxx}" "cppflags=${cppflags}" "ldflags=${ldflags}"
> ${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-config/BuildVariables.inc.in
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-config/BuildVariables.inc.in?rev=257003&r1=257002&r2=257003&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-config/BuildVariables.inc.in (original)
> +++ llvm/trunk/tools/llvm-config/BuildVariables.inc.in Wed Jan 6
> 18:18:56 2016
> @@ -29,5 +29,7 @@
> #define LLVM_BUILD_SYSTEM "@LLVM_BUILD_SYSTEM@"
> #define LLVM_HAS_RTTI "@LLVM_HAS_RTTI@"
> #define LLVM_ENABLE_DYLIB "@LLVM_BUILD_LLVM_DYLIB@"
> +#define LLVM_LINK_DYLIB "@LLVM_LINK_LLVM_DYLIB@"
> #define LLVM_ENABLE_SHARED "@LLVM_ENABLE_SHARED@"
> #define LLVM_DYLIB_COMPONENTS "@LLVM_DYLIB_COMPONENTS@"
> +#define LLVM_DYLIB_VERSION "@LLVM_DYLIB_VERSION@"
>
> Modified: llvm/trunk/tools/llvm-config/CMakeLists.txt
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-config/CMakeLists.txt?rev=257003&r1=257002&r2=257003&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-config/CMakeLists.txt (original)
> +++ llvm/trunk/tools/llvm-config/CMakeLists.txt Wed Jan 6 18:18:56 2016
> @@ -26,6 +26,7 @@ set(LLVM_CFLAGS "${CMAKE_C_FLAGS} ${CMAK
> set(LLVM_CXXFLAGS "${CMAKE_CXX_FLAGS}
> ${CMAKE_CXX_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${COMPILE_FLAGS}
> ${LLVM_DEFINITIONS}")
> set(LLVM_BUILD_SYSTEM cmake)
> set(LLVM_HAS_RTTI ${LLVM_CONFIG_HAS_RTTI})
> +set(LLVM_DYLIB_VERSION
> "${LLVM_VERSION_MAJOR}.${LLVM_VERSION_MINOR}${LLVM_VERSION_SUFFIX}")
>
> # Use the C++ link flags, since they should be a superset of C link flags.
> set(LLVM_LDFLAGS "${CMAKE_CXX_LINK_FLAGS}")
>
> Modified: llvm/trunk/tools/llvm-config/Makefile
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-config/Makefile?rev=257003&r1=257002&r2=257003&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-config/Makefile (original)
> +++ llvm/trunk/tools/llvm-config/Makefile Wed Jan 6 18:18:56 2016
> @@ -44,6 +44,8 @@ else
> LLVM_HAS_RTTI := YES
> endif
>
> +LLVM_DYLIB_VERSION :=
> $(LLVM_VERSION_MAJOR).$(LLVM_VERSION_MINOR)$(LLVM_VERSION_SUFFIX)
> +
> # This is blank for now. We need to be careful about adding stuff here:
> # LDFLAGS tend not to be portable, and we don't currently require the
> # user to use libtool when linking against LLVM.
> @@ -83,6 +85,8 @@ $(ObjDir)/BuildVariables.inc: $(BUILDVAR
> >> temp.sed
> $(Verb) $(ECHO) 's/@LLVM_HAS_RTTI@/$(LLVM_HAS_RTTI)/' \
> >> temp.sed
> + $(Verb) $(ECHO) 's/@LLVM_DYLIB_VERSION@/$(LLVM_DYLIB_VERSION)/' \
> + >> temp.sed
> $(Verb) $(SED) -f temp.sed < $< > $@
> $(Verb) $(RM) temp.sed
>
>
> Modified: llvm/trunk/tools/llvm-config/llvm-config.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-config/llvm-config.cpp?rev=257003&r1=257002&r2=257003&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-config/llvm-config.cpp (original)
> +++ llvm/trunk/tools/llvm-config/llvm-config.cpp Wed Jan 6 18:18:56 2016
> @@ -29,8 +29,8 @@
> #include "llvm/Support/raw_ostream.h"
> #include <cstdlib>
> #include <set>
> -#include <vector>
> #include <unordered_set>
> +#include <vector>
>
> using namespace llvm;
>
> @@ -46,6 +46,22 @@ using namespace llvm;
> // create entries for pseudo groups like x86 or all-targets.
> #include "LibraryDependencies.inc"
>
> +// LinkMode determines what libraries and flags are returned by
> llvm-config.
> +enum LinkMode {
> + // LinkModeAuto will link with the default link mode for the
> installation,
> + // which is dependent on the value of LLVM_LINK_LLVM_DYLIB, and fall
> back
> + // to the alternative if the required libraries are not available.
> + LinkModeAuto = 0,
> +
> + // LinkModeDyLib will link with the single dynamic library if it exists,
> + // and return an error if it does not exist.
> + LinkModeDyLib = 1,
> +
> + // LinkModeStatic will link with the individual component static
> libraries
> + // if they exist, and fail if any one does not exist.
> + LinkModeStatic = 2,
> +};
> +
> /// \brief Traverse a single component adding to the topological ordering
> in
> /// \arg RequiredLibs.
> ///
> @@ -56,12 +72,13 @@ using namespace llvm;
> /// libraries.
> /// \param GetComponentNames - Get the component names instead of the
> /// library name.
> -static void VisitComponent(const std::string& Name,
> - const StringMap<AvailableComponent*>
> &ComponentMap,
> - std::set<AvailableComponent*>
> &VisitedComponents,
> +static void VisitComponent(const std::string &Name,
> + const StringMap<AvailableComponent *>
> &ComponentMap,
> + std::set<AvailableComponent *>
> &VisitedComponents,
> std::vector<std::string> &RequiredLibs,
> bool IncludeNonInstalled, bool
> GetComponentNames,
> - const std::string *ActiveLibDir, bool
> *HasMissing) {
> + const std::string *ActiveLibDir,
> + std::vector<std::string> *Missing) {
> // Lookup the component.
> AvailableComponent *AC = ComponentMap.lookup(Name);
> assert(AC && "Invalid component name!");
> @@ -80,7 +97,7 @@ static void VisitComponent(const std::st
> for (unsigned i = 0; AC->RequiredLibraries[i]; ++i) {
> VisitComponent(AC->RequiredLibraries[i], ComponentMap,
> VisitedComponents,
> RequiredLibs, IncludeNonInstalled, GetComponentNames,
> - ActiveLibDir, HasMissing);
> + ActiveLibDir, Missing);
> }
>
> if (GetComponentNames) {
> @@ -90,8 +107,10 @@ static void VisitComponent(const std::st
>
> // Add to the required library list.
> if (AC->Library) {
> - if (!IncludeNonInstalled && HasMissing && !*HasMissing &&
> ActiveLibDir) {
> - *HasMissing = !sys::fs::exists(*ActiveLibDir + "/" + AC->Library);
> + if (Missing && ActiveLibDir) {
> + std::string path = *ActiveLibDir + "/" + AC->Library;
> + if (!sys::fs::exists(path))
> + Missing->push_back(path);
> }
> RequiredLibs.push_back(AC->Library);
> }
> @@ -108,12 +127,13 @@ static void VisitComponent(const std::st
> static std::vector<std::string>
> ComputeLibsForComponents(const std::vector<StringRef> &Components,
> bool IncludeNonInstalled, bool GetComponentNames,
> - const std::string *ActiveLibDir, bool
> *HasMissing) {
> + const std::string *ActiveLibDir,
> + std::vector<std::string> *Missing) {
> std::vector<std::string> RequiredLibs;
> std::set<AvailableComponent *> VisitedComponents;
>
> // Build a map of component names to information.
> - StringMap<AvailableComponent*> ComponentMap;
> + StringMap<AvailableComponent *> ComponentMap;
> for (unsigned i = 0; i != array_lengthof(AvailableComponents); ++i) {
> AvailableComponent *AC = &AvailableComponents[i];
> ComponentMap[AC->Name] = AC;
> @@ -133,7 +153,7 @@ ComputeLibsForComponents(const std::vect
>
> VisitComponent(ComponentLower, ComponentMap, VisitedComponents,
> RequiredLibs, IncludeNonInstalled, GetComponentNames,
> - ActiveLibDir, HasMissing);
> + ActiveLibDir, Missing);
> }
>
> // The list is now ordered with leafs first, we want the libraries to
> printed
> @@ -179,6 +199,8 @@ Options:\n\
> --build-system Print the build system used to build LLVM (autoconf
> or cmake).\n\
> --has-rtti Print whether or not LLVM was built with rtti (YES or
> NO).\n\
> --shared-mode Print how the provided components can be collectively
> linked (`shared` or `static`).\n\
> + --link-shared Link the components as a shared library.\n\
> + --link-static Link the components as a static libraries.\n\
> Typical components:\n\
> all All LLVM libraries (default).\n\
> engine Either a native JIT or a bitcode interpreter.\n";
> @@ -189,7 +211,7 @@ Typical components:\n\
> std::string GetExecutablePath(const char *Argv0) {
> // This just needs to be some symbol in the binary; C++ doesn't
> // allow taking the address of ::main however.
> - void *P = (void*) (intptr_t) GetExecutablePath;
> + void *P = (void *)(intptr_t)GetExecutablePath;
> return llvm::sys::fs::getMainExecutable(Argv0, P);
> }
>
> @@ -243,8 +265,8 @@ int main(int argc, char **argv) {
> // Create an absolute path, and pop up one directory (we expect to be
> inside a
> // bin dir).
> sys::fs::make_absolute(CurrentPath);
> - CurrentExecPrefix = sys::path::parent_path(
> - sys::path::parent_path(CurrentPath)).str();
> + CurrentExecPrefix =
> + sys::path::parent_path(sys::path::parent_path(CurrentPath)).str();
>
> // Check to see if we are inside a development tree by comparing to
> possible
> // locations (prefix style or CMake style).
> @@ -305,8 +327,8 @@ int main(int argc, char **argv) {
> }
>
> // We need to include files from both the source and object trees.
> - ActiveIncludeOption = ("-I" + ActiveIncludeDir + " " +
> - "-I" + ActiveObjRoot + "/include");
> + ActiveIncludeOption =
> + ("-I" + ActiveIncludeDir + " " + "-I" + ActiveObjRoot +
> "/include");
> } else {
> ActivePrefix = CurrentExecPrefix;
> ActiveIncludeDir = ActivePrefix + "/include";
> @@ -323,25 +345,25 @@ int main(int argc, char **argv) {
> /// in the first place. This can't be done at configure/build time.
>
> StringRef SharedExt, SharedVersionedExt, SharedDir, SharedPrefix,
> StaticExt,
> - StaticPrefix, StaticDir = "lib";
> + StaticPrefix, StaticDir = "lib";
> const Triple HostTriple(Triple::normalize(LLVM_DEFAULT_TARGET_TRIPLE));
> if (HostTriple.isOSWindows()) {
> SharedExt = "dll";
> - SharedVersionedExt = PACKAGE_VERSION ".dll";
> + SharedVersionedExt = LLVM_DYLIB_VERSION ".dll";
> StaticExt = "a";
> SharedDir = ActiveBinDir;
> StaticDir = ActiveLibDir;
> StaticPrefix = SharedPrefix = "lib";
> } else if (HostTriple.isOSDarwin()) {
> SharedExt = "dylib";
> - SharedVersionedExt = PACKAGE_VERSION ".dylib";
> + SharedVersionedExt = LLVM_DYLIB_VERSION ".dylib";
> StaticExt = "a";
> StaticDir = SharedDir = ActiveLibDir;
> StaticPrefix = SharedPrefix = "lib";
> } else {
> // default to the unix values:
> SharedExt = "so";
> - SharedVersionedExt = PACKAGE_VERSION ".so";
> + SharedVersionedExt = LLVM_DYLIB_VERSION ".so";
> StaticExt = "a";
> StaticDir = SharedDir = ActiveLibDir;
> StaticPrefix = SharedPrefix = "lib";
> @@ -362,11 +384,22 @@ int main(int argc, char **argv) {
>
> bool DyLibExists = false;
> const std::string DyLibName =
> - (SharedPrefix + "LLVM-" + SharedVersionedExt).str();
> + (SharedPrefix + "LLVM-" + SharedVersionedExt).str();
> +
> + // If LLVM_LINK_DYLIB is ON, the single shared library will be returned
> + // for "--libs", etc, if they exist. This behaviour can be overridden
> with
> + // --link-static or --link-shared.
> + bool LinkDyLib = (std::strcmp(LLVM_LINK_DYLIB, "ON") == 0);
>
> if (BuiltDyLib) {
> DyLibExists = sys::fs::exists(SharedDir + "/" + DyLibName);
> + if (!DyLibExists) {
> + // The shared library does not exist: don't error unless the user
> + // explicitly passes --link-shared.
> + LinkDyLib = false;
> + }
> }
> + LinkMode LinkMode = LinkDyLib ? LinkModeDyLib : LinkModeAuto;
>
> /// Get the component's library name without the lib prefix and the
> /// extension. Returns true if Lib is in a recognized format.
> @@ -501,6 +534,10 @@ int main(int argc, char **argv) {
> OS << ActivePrefix << '\n';
> } else if (Arg == "--src-root") {
> OS << LLVM_SRC_ROOT << '\n';
> + } else if (Arg == "--link-shared") {
> + LinkMode = LinkModeDyLib;
> + } else if (Arg == "--link-static") {
> + LinkMode = LinkModeStatic;
> } else {
> usage();
> }
> @@ -512,6 +549,11 @@ int main(int argc, char **argv) {
> if (!HasAnyOption)
> usage();
>
> + if (LinkMode == LinkModeDyLib && !DyLibExists) {
> + errs() << "llvm-config: error: " << DyLibName << " is missing\n\n";
> + usage();
> + }
> +
> if (PrintLibs || PrintLibNames || PrintLibFiles || PrintSystemLibs ||
> PrintSharedMode) {
>
> @@ -525,11 +567,31 @@ int main(int argc, char **argv) {
> Components.push_back("all");
>
> // Construct the list of all the required libraries.
> - bool HasMissing = false;
> + std::vector<std::string> MissingLibs;
> std::vector<std::string> RequiredLibs =
> ComputeLibsForComponents(Components,
>
> /*IncludeNonInstalled=*/IsInDevelopmentTree,
> - false, &ActiveLibDir, &HasMissing);
> + false, &ActiveLibDir, &MissingLibs);
> + if (!MissingLibs.empty()) {
> + switch (LinkMode) {
> + case LinkModeDyLib:
> + break;
> + case LinkModeAuto:
> + if (DyLibExists) {
> + LinkMode = LinkModeDyLib;
> + break;
> + }
> + errs()
> + << "llvm-config: error: component libraries and shared
> library\n\n";
> + // fall through
> + case LinkModeStatic:
> + for (auto &Lib : MissingLibs)
> + errs() << "llvm-config: error: missing: " << Lib << "\n";
> + return 1;
> + }
> + } else if (LinkMode == LinkModeAuto) {
> + LinkMode = LinkModeStatic;
> + }
>
> if (PrintSharedMode) {
> std::unordered_set<std::string> FullDyLibComponents;
> @@ -549,7 +611,7 @@ int main(int argc, char **argv) {
> }
> FullDyLibComponents.clear();
>
> - if (HasMissing && DyLibExists) {
> + if (LinkMode == LinkModeDyLib) {
> OS << "shared\n";
> return 0;
> } else {
> @@ -581,7 +643,7 @@ int main(int argc, char **argv) {
> }
> };
>
> - if (HasMissing && DyLibExists) {
> + if (LinkMode == LinkModeDyLib) {
> PrintForLib(DyLibName, true);
> } else {
> for (unsigned i = 0, e = RequiredLibs.size(); i != e; ++i) {
>
> 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=257003&r1=257002&r2=257003&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-go/llvm-go.go (original)
> +++ llvm/trunk/tools/llvm-go/llvm-go.go Wed Jan 6 18:18:56 2016
> @@ -88,17 +88,8 @@ func llvmConfig(args ...string) string {
> return outstr
> }
>
> -func llvmFlags(linkmode string) compilerFlags {
> - ldflags := llvmConfig("--ldflags")
> - switch linkmode {
> - case linkmodeComponentLibs:
> - ldflags += " " + llvmConfig(append([]string{"--libs"},
> components...)...)
> - case linkmodeDylib:
> - ldflags += " -lLLVM"
> - default:
> - panic("invalid linkmode: " + linkmode)
> - }
> - ldflags += " " + llvmConfig("--system-libs")
> +func llvmFlags() compilerFlags {
> + ldflags := llvmConfig("--ldflags", "--libs", "--system-libs")
> if runtime.GOOS != "darwin" {
> // OS X doesn't like -rpath with cgo. See:
> // https://code.google.com/p/go/issues/detail?id=7293
> @@ -133,8 +124,8 @@ func printComponents() {
> fmt.Println(strings.Join(components, " "))
> }
>
> -func printConfig(linkmode string) {
> - flags := llvmFlags(linkmode)
> +func printConfig() {
> + flags := llvmFlags()
>
> fmt.Printf(`// +build !byollvm
>
> @@ -153,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, linkmode string) {
> +func runGoWithLLVMEnv(args []string, cc, cxx, gocmd, llgo, cppflags,
> cxxflags, ldflags string) {
> args = addTag(args, "byollvm")
>
> srcdir := llvmConfig("--src-root")
> @@ -182,7 +173,7 @@ func runGoWithLLVMEnv(args []string, cc,
> newgopathlist = append(newgopathlist,
> filepath.SplitList(os.Getenv("GOPATH"))...)
> newgopath := strings.Join(newgopathlist,
> string(filepath.ListSeparator))
>
> - flags := llvmFlags(linkmode)
> + flags := llvmFlags()
>
> newenv := []string{
> "CC=" + cc,
> @@ -250,7 +241,6 @@ func main() {
> ldflags := os.Getenv("CGO_LDFLAGS")
> gocmd := "go"
> llgo := ""
> - linkmode := linkmodeComponentLibs
>
> flags := []struct {
> name string
> @@ -262,7 +252,6 @@ func main() {
> {"llgo", &llgo},
> {"cppflags", &cppflags},
> {"ldflags", &ldflags},
> - {"linkmode", &linkmode},
> }
>
> args := os.Args[1:]
> @@ -283,11 +272,11 @@ LOOP:
>
> switch args[0] {
> case "build", "get", "install", "run", "test":
> - runGoWithLLVMEnv(args, cc, cxx, gocmd, llgo, cppflags,
> cxxflags, ldflags, linkmode)
> + runGoWithLLVMEnv(args, cc, cxx, gocmd, llgo, cppflags,
> cxxflags, ldflags)
> case "print-components":
> printComponents()
> case "print-config":
> - printConfig(linkmode)
> + printConfig()
> default:
> usage()
> }
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
--
--Artem Belevich
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160108/e4fdfb90/attachment.html>
More information about the llvm-commits
mailing list