[llvm-commits] [llvm] r143649 - in /llvm/trunk/tools: CMakeLists.txt llvm-config-2/BuildVariables.inc.in llvm-config-2/CMakeLists.txt llvm-config-2/Makefile llvm-config-2/llvm-config.cpp

Daniel Dunbar daniel at zuster.org
Thu Nov 3 14:01:36 PDT 2011


Author: ddunbar
Date: Thu Nov  3 16:01:36 2011
New Revision: 143649

URL: http://llvm.org/viewvc/llvm-project?rev=143649&view=rev
Log:
llvm-config-2: Implement build system support for getting the variables we only
know at build time.

Added:
    llvm/trunk/tools/llvm-config-2/BuildVariables.inc.in
Modified:
    llvm/trunk/tools/CMakeLists.txt
    llvm/trunk/tools/llvm-config-2/CMakeLists.txt
    llvm/trunk/tools/llvm-config-2/Makefile
    llvm/trunk/tools/llvm-config-2/llvm-config.cpp

Modified: llvm/trunk/tools/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/CMakeLists.txt?rev=143649&r1=143648&r2=143649&view=diff
==============================================================================
--- llvm/trunk/tools/CMakeLists.txt (original)
+++ llvm/trunk/tools/CMakeLists.txt Thu Nov  3 16:01:36 2011
@@ -17,9 +17,12 @@
   # 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)

Added: llvm/trunk/tools/llvm-config-2/BuildVariables.inc.in
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-config-2/BuildVariables.inc.in?rev=143649&view=auto
==============================================================================
--- llvm/trunk/tools/llvm-config-2/BuildVariables.inc.in (added)
+++ llvm/trunk/tools/llvm-config-2/BuildVariables.inc.in Thu Nov  3 16:01:36 2011
@@ -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@"

Modified: llvm/trunk/tools/llvm-config-2/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-config-2/CMakeLists.txt?rev=143649&r1=143648&r2=143649&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-config-2/CMakeLists.txt (original)
+++ llvm/trunk/tools/llvm-config-2/CMakeLists.txt Thu Nov  3 16:01:36 2011
@@ -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})

Modified: llvm/trunk/tools/llvm-config-2/Makefile
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-config-2/Makefile?rev=143649&r1=143648&r2=143649&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-config-2/Makefile (original)
+++ llvm/trunk/tools/llvm-config-2/Makefile Thu Nov  3 16:01:36 2011
@@ -11,7 +11,47 @@
 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

Modified: llvm/trunk/tools/llvm-config-2/llvm-config.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-config-2/llvm-config.cpp?rev=143649&r1=143648&r2=143649&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-config-2/llvm-config.cpp (original)
+++ llvm/trunk/tools/llvm-config-2/llvm-config.cpp Thu Nov  3 16:01:36 2011
@@ -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,





More information about the llvm-commits mailing list