From 2662c83a594b5df8deef2a540595a5faa72cfbdc Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Tue, 29 Nov 2011 22:56:31 +0000 Subject: llvm-config: Replace with C++ version (was llvm-config-2). - Reapply of r144300, with lots of fixes/migration easement in between. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145449 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/CMakeLists.txt | 11 +- tools/Makefile | 2 +- tools/llvm-config-2/BuildVariables.inc.in | 26 -- tools/llvm-config-2/CMakeLists.txt | 41 --- tools/llvm-config-2/Makefile | 57 ---- tools/llvm-config-2/llvm-config.cpp | 335 --------------------- tools/llvm-config/BuildVariables.inc.in | 26 ++ tools/llvm-config/CMakeLists.txt | 151 ++-------- tools/llvm-config/Makefile | 92 ++---- tools/llvm-config/find-cycles.pl | 170 ----------- tools/llvm-config/llvm-config.cpp | 335 +++++++++++++++++++++ tools/llvm-config/llvm-config.in.in | 466 ------------------------------ 12 files changed, 419 insertions(+), 1293 deletions(-) delete mode 100644 tools/llvm-config-2/BuildVariables.inc.in delete mode 100644 tools/llvm-config-2/CMakeLists.txt delete mode 100644 tools/llvm-config-2/Makefile delete mode 100644 tools/llvm-config-2/llvm-config.cpp create mode 100644 tools/llvm-config/BuildVariables.inc.in delete mode 100755 tools/llvm-config/find-cycles.pl create mode 100644 tools/llvm-config/llvm-config.cpp delete mode 100644 tools/llvm-config/llvm-config.in.in (limited to 'tools') diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index edfd3b2b719..ec0647124b6 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -11,16 +11,9 @@ if( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/polly/CMakeLists.txt ) endif( EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/polly/CMakeLists.txt ) if( NOT WIN32 OR MSYS OR CYGWIN ) - # It is useful to build llvm-config before the other tools, so we - # have a fresh LibDeps.txt for regenerating the hard-coded library - # dependencies. llvm-config/CMakeLists.txt takes care of this but we - # must keep llvm-config as the first entry on the list of tools to - # be built. - add_subdirectory(llvm-config) - - # We currently require 'sed' to build llvm-config-2, so don't try to build it + # We currently require 'sed' to build llvm-config, so don't try to build it # on pure Win32. - add_subdirectory(llvm-config-2) + add_subdirectory(llvm-config) endif() add_subdirectory(opt) diff --git a/tools/Makefile b/tools/Makefile index 8bbd7c2387f..1953cb6711f 100644 --- a/tools/Makefile +++ b/tools/Makefile @@ -34,7 +34,7 @@ PARALLEL_DIRS := opt llvm-as llvm-dis \ bugpoint llvm-bcanalyzer llvm-stub \ llvm-diff macho-dump llvm-objdump \ llvm-rtdyld llvm-dwarfdump llvm-cov \ - llvm-size llvm-config-2 + llvm-size # Let users override the set of tools to build from the command line. ifdef ONLY_TOOLS diff --git a/tools/llvm-config-2/BuildVariables.inc.in b/tools/llvm-config-2/BuildVariables.inc.in deleted file mode 100644 index 5969772c9dc..00000000000 --- a/tools/llvm-config-2/BuildVariables.inc.in +++ /dev/null @@ -1,26 +0,0 @@ -//===-- BuildVariables.inc.in - llvm-config build variables -*- C++ -*-----===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file is configured by the build system to define the variables -// llvm-config wants to report to the user, but which can only be determined at -// build time. -// -// The non .in variant of this file has been autogenerated by the LLVM build. Do -// not edit! -// -//===----------------------------------------------------------------------===// - -#define LLVM_SRC_ROOT "@LLVM_SRC_ROOT@" -#define LLVM_OBJ_ROOT "@LLVM_OBJ_ROOT@" -#define LLVM_CPPFLAGS "@LLVM_CPPFLAGS@" -#define LLVM_CFLAGS "@LLVM_CFLAGS@" -#define LLVM_LDFLAGS "@LLVM_LDFLAGS@" -#define LLVM_CXXFLAGS "@LLVM_CXXFLAGS@" -#define LLVM_BUILDMODE "@LLVM_BUILDMODE@" -#define LLVM_SYSTEM_LIBS "@LLVM_SYSTEM_LIBS@" diff --git a/tools/llvm-config-2/CMakeLists.txt b/tools/llvm-config-2/CMakeLists.txt deleted file mode 100644 index 3c7169d382e..00000000000 --- a/tools/llvm-config-2/CMakeLists.txt +++ /dev/null @@ -1,41 +0,0 @@ -set(LLVM_LINK_COMPONENTS support) - -# We need to generate the BuildVariables.inc file containing values which are -# only defined when under certain build modes. Unfortunately, that precludes -# doing this inside CMake so we have to shell out to sed. For now, that means we -# can't expect to build llvm-config on Window.s -set(BUILDVARIABLES_SRCPATH ${CMAKE_CURRENT_SOURCE_DIR}/BuildVariables.inc.in) -set(BUILDVARIABLES_OBJPATH ${CMAKE_CURRENT_BINARY_DIR}/BuildVariables.inc) -set(SEDSCRIPT_OBJPATH ${CMAKE_CURRENT_BINARY_DIR}/BuildVariables.configure.sed) - -# Compute the substitution values for various items. -get_system_libs(LLVM_SYSTEM_LIBS_LIST) -foreach(l ${LLVM_SYSTEM_LIBS_LIST}) - set(SYSTEM_LIBS ${SYSTEM_LIBS} "-l${l}") -endforeach() -set(C_FLGS "${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${LLVM_DEFINITIONS}") -set(CXX_FLGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${LLVM_DEFINITIONS}") -set(CPP_FLGS "${CMAKE_CPP_FLAGS} ${CMAKE_CPP_FLAGS_${uppercase_CMAKE_BUILD_TYPE}} ${LLVM_DEFINITIONS}") - -add_custom_command(OUTPUT ${BUILDVARIABLES_OBJPATH} - COMMAND echo s!@LLVM_SRC_ROOT@!${LLVM_MAIN_SRC_DIR}! > ${SEDSCRIPT_OBJPATH} - COMMAND echo s!@LLVM_OBJ_ROOT@!${LLVM_BINARY_DIR}! >> ${SEDSCRIPT_OBJPATH} - COMMAND echo s!@LLVM_CPPFLAGS@!${CPP_FLGS}! >> ${SEDSCRIPT_OBJPATH} - COMMAND echo s!@LLVM_CFLAGS@!${C_FLGS}! >> ${SEDSCRIPT_OBJPATH} - COMMAND echo s!@LLVM_CXXFLAGS@!${CXX_FLGS}! >> ${SEDSCRIPT_OBJPATH} - # TODO: Use general flags for linking! not just for shared libs: - COMMAND echo s!@LLVM_LDFLAGS@!${CMAKE_SHARED_LINKER_FLAGS}! >> ${SEDSCRIPT_OBJPATH} - COMMAND echo s!@LLVM_BUILDMODE@!${CMAKE_BUILD_TYPE}! >> ${SEDSCRIPT_OBJPATH} - COMMAND echo s!@LLVM_SYSTEM_LIBS@!${SYSTEM_LIBS}! >> ${SEDSCRIPT_OBJPATH} - COMMAND sed -f ${SEDSCRIPT_OBJPATH} < ${BUILDVARIABLES_SRCPATH} > ${BUILDVARIABLES_OBJPATH} - VERBATIM - COMMENT "Building BuildVariables.inc include." - ) - -# Add the llvm-config tool. -add_llvm_tool(llvm-config-2 - llvm-config.cpp - ) - -# Add the dependency on the generation step. -add_file_dependencies(${CMAKE_CURRENT_SOURCE_DIR}/llvm-config.cpp ${BUILDVARIABLES_OBJPATH}) diff --git a/tools/llvm-config-2/Makefile b/tools/llvm-config-2/Makefile deleted file mode 100644 index 08e084429db..00000000000 --- a/tools/llvm-config-2/Makefile +++ /dev/null @@ -1,57 +0,0 @@ -##===- tools/llvm-config/Makefile---------------------------*- Makefile -*-===## -# -# The LLVM Compiler Infrastructure -# -# This file is distributed under the University of Illinois Open Source -# License. See LICENSE.TXT for details. -# -##===----------------------------------------------------------------------===## - -LEVEL := ../.. -TOOLNAME := llvm-config-2 -USEDLIBS := LLVMSupport.a - -# We generate sources in the build directory, make sure it is in the include -# paths. -INCLUDE_BUILD_DIR := 1 - -# This tool has no plugins, optimize startup time. -TOOL_NO_EXPORTS := 1 - -# Note that we have to use lazy expansion here. -BUILDVARIABLES_SRCPATH = $(PROJ_SRC_ROOT)/tools/$(TOOLNAME)/BuildVariables.inc.in -BUILDVARIABLES_OBJPATH = $(ObjDir)/BuildVariables.inc -BUILT_SOURCES = $(BUILDVARIABLES_OBJPATH) - -include $(LEVEL)/Makefile.common - -# Combine preprocessor flags (except for -I) and CXX flags. -SUB_CPPFLAGS := ${CPP.BaseFlags} -SUB_CFLAGS := ${CPP.BaseFlags} ${C.Flags} -SUB_CXXFLAGS := ${CPP.BaseFlags} ${CXX.Flags} - -# 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. -SUB_LDFLAGS := - -$(ObjDir)/BuildVariables.inc: $(BUILDVARIABLES_SRCPATH) Makefile $(ObjDir)/.dir - $(Echo) "Building llvm-config BuildVariables.inc file." - $(Verb) $(ECHO) 's/@LLVM_SRC_ROOT@/$(subst /,\/,$(LLVM_SRC_ROOT))/' \ - > temp.sed - $(Verb) $(ECHO) 's/@LLVM_OBJ_ROOT@/$(subst /,\/,$(LLVM_OBJ_ROOT))/' \ - >> temp.sed - $(Verb) $(ECHO) 's/@LLVM_CPPFLAGS@/$(subst /,\/,$(SUB_CPPFLAGS))/' \ - >> temp.sed - $(Verb) $(ECHO) 's/@LLVM_CFLAGS@/$(subst /,\/,$(SUB_CFLAGS))/' \ - >> temp.sed - $(Verb) $(ECHO) 's/@LLVM_CXXFLAGS@/$(subst /,\/,$(SUB_CXXFLAGS))/' \ - >> temp.sed - $(Verb) $(ECHO) 's/@LLVM_LDFLAGS@/$(subst /,\/,$(SUB_LDFLAGS))/' \ - >> temp.sed - $(Verb) $(ECHO) 's/@LLVM_BUILDMODE@/$(subst /,\/,$(BuildMode))/' \ - >> temp.sed - $(Verb) $(ECHO) 's/@LLVM_SYSTEM_LIBS@/$(subst /,\/,$(LIBS))/' \ - >> temp.sed - $(Verb) $(SED) -f temp.sed < $< > $@ - $(Verb) $(RM) temp.sed diff --git a/tools/llvm-config-2/llvm-config.cpp b/tools/llvm-config-2/llvm-config.cpp deleted file mode 100644 index fddd481230b..00000000000 --- a/tools/llvm-config-2/llvm-config.cpp +++ /dev/null @@ -1,335 +0,0 @@ -//===-- llvm-config.cpp - LLVM project configuration utility --------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This tool encapsulates information about an LLVM project configuration for -// use by other project's build environments (to determine installed path, -// available features, required libraries, etc.). -// -// Note that although this tool *may* be used by some parts of LLVM's build -// itself (i.e., the Makefiles use it to compute required libraries when linking -// tools), this tool is primarily designed to support external projects. -// -//===----------------------------------------------------------------------===// - -#include "llvm/ADT/STLExtras.h" -#include "llvm/ADT/StringMap.h" -#include "llvm/ADT/StringRef.h" -#include "llvm/ADT/Twine.h" -#include "llvm/Config/config.h" -#include "llvm/Config/llvm-config.h" -#include "llvm/Support/FileSystem.h" -#include "llvm/Support/Path.h" -#include "llvm/Support/TargetRegistry.h" -#include "llvm/Support/raw_ostream.h" -#include -#include -#include - -using namespace llvm; - -// Include the build time variables we can report to the user. This is generated -// at build time from the BuildVariables.inc.in file by the build system. -#include "BuildVariables.inc" - -// Include the component table. This creates an array of struct -// AvailableComponent entries, which record the component name, library name, -// and required components for all of the available libraries. -// -// Not all components define a library, we also use "library groups" as a way to -// create entries for pseudo groups like x86 or all-targets. -#include "LibraryDependencies.inc" - -/// \brief Traverse a single component adding to the topological ordering in -/// \arg RequiredLibs. -/// -/// \param Name - The component to traverse. -/// \param ComponentMap - A prebuilt map of component names to descriptors. -/// \param VisitedComponents [in] [out] - The set of already visited components. -/// \param RequiredLibs [out] - The ordered list of required libraries. -static void VisitComponent(StringRef Name, - const StringMap &ComponentMap, - std::set &VisitedComponents, - std::vector &RequiredLibs) { - // Lookup the component. - AvailableComponent *AC = ComponentMap.lookup(Name); - assert(AC && "Invalid component name!"); - - // Add to the visited table. - if (!VisitedComponents.insert(AC).second) { - // We are done if the component has already been visited. - return; - } - - // Otherwise, visit all the dependencies. - for (unsigned i = 0; AC->RequiredLibraries[i]; ++i) { - VisitComponent(AC->RequiredLibraries[i], ComponentMap, VisitedComponents, - RequiredLibs); - } - - // Add to the required library list. - if (AC->Library) - RequiredLibs.push_back(AC->Library); -} - -/// \brief Compute the list of required libraries for a given list of -/// components, in an order suitable for passing to a linker (that is, libraries -/// appear prior to their dependencies). -/// -/// \param Components - The names of the components to find libraries for. -/// \param RequiredLibs [out] - On return, the ordered list of libraries that -/// are required to link the given components. -void ComputeLibsForComponents(const std::vector &Components, - std::vector &RequiredLibs) { - std::set VisitedComponents; - - // Build a map of component names to information. - StringMap ComponentMap; - for (unsigned i = 0; i != array_lengthof(AvailableComponents); ++i) { - AvailableComponent *AC = &AvailableComponents[i]; - ComponentMap[AC->Name] = AC; - } - - // Visit the components. - for (unsigned i = 0, e = Components.size(); i != e; ++i) { - // Users are allowed to provide mixed case component names. - std::string ComponentLower = Components[i].lower(); - - // Validate that the user supplied a valid component name. - if (!ComponentMap.count(ComponentLower)) { - llvm::errs() << "llvm-config: unknown component name: " << Components[i] - << "\n"; - exit(1); - } - - VisitComponent(ComponentLower, ComponentMap, VisitedComponents, - RequiredLibs); - } - - // The list is now ordered with leafs first, we want the libraries to printed - // in the reverse order of dependency. - std::reverse(RequiredLibs.begin(), RequiredLibs.end()); -} - -/* *** */ - -void usage() { - errs() << "\ -usage: llvm-config