aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/CMakeLists.txt5
-rw-r--r--tools/llvm-config-2/BuildVariables.inc.in26
-rw-r--r--tools/llvm-config-2/CMakeLists.txt36
-rw-r--r--tools/llvm-config-2/Makefile40
-rw-r--r--tools/llvm-config-2/llvm-config.cpp12
5 files changed, 109 insertions, 10 deletions
diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt
index 4269ae842b..28b36dcdfd 100644
--- a/tools/CMakeLists.txt
+++ b/tools/CMakeLists.txt
@@ -17,9 +17,12 @@ if( NOT WIN32 OR MSYS OR CYGWIN )
# 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
+ # on pure Win32.
+ add_subdirectory(llvm-config-2)
endif()
-add_subdirectory(llvm-config-2)
add_subdirectory(opt)
add_subdirectory(llvm-as)
add_subdirectory(llvm-dis)
diff --git a/tools/llvm-config-2/BuildVariables.inc.in b/tools/llvm-config-2/BuildVariables.inc.in
new file mode 100644
index 0000000000..5969772c9d
--- /dev/null
+++ b/tools/llvm-config-2/BuildVariables.inc.in
@@ -0,0 +1,26 @@
+//===-- 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
index a1e083df08..3c7169d382 100644
--- a/tools/llvm-config-2/CMakeLists.txt
+++ b/tools/llvm-config-2/CMakeLists.txt
@@ -1,5 +1,41 @@
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
index e0036a4062..b7233e5c5d 100644
--- a/tools/llvm-config-2/Makefile
+++ b/tools/llvm-config-2/Makefile
@@ -11,7 +11,47 @@ LEVEL := ../..
TOOLNAME := llvm-config-2
LINK_COMPONENTS := support
+# 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
index 0d726d258d..597b80fb4f 100644
--- a/tools/llvm-config-2/llvm-config.cpp
+++ b/tools/llvm-config-2/llvm-config.cpp
@@ -33,15 +33,9 @@
using namespace llvm;
-// FIXME: Need to get various bits of build time information.
-const char LLVM_SRC_ROOT[] = "FIXME";
-const char LLVM_OBJ_ROOT[] = "FIXME";
-const char LLVM_CPPFLAGS[] = "FIXME";
-const char LLVM_CFLAGS[] = "FIXME";
-const char LLVM_LDFLAGS[] = "FIXME";
-const char LLVM_CXXFLAGS[] = "FIXME";
-const char LLVM_BUILDMODE[] = "FIXME";
-const char LLVM_SYSTEM_LIBS[] = "FIXME";
+// 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,