[llvm-commits] [llvm] r96959 - in /llvm/trunk: Makefile Makefile.config.in Makefile.rules autoconf/configure.ac configure examples/BrainF/Makefile examples/Fibonacci/Makefile examples/HowToUseJIT/Makefile test/Makefile test/Unit/lit.cfg test/Unit/lit.site.cfg.in tools/llvm-shlib/ tools/llvm-shlib/Makefile unittests/Makefile.unittest

Jeffrey Yasskin jyasskin at google.com
Tue Feb 23 10:10:07 PST 2010


Author: jyasskin
Date: Tue Feb 23 12:10:07 2010
New Revision: 96959

URL: http://llvm.org/viewvc/llvm-project?rev=96959&view=rev
Log:
Roll r96559 forward again, adding libLLVM-2.7svn.so to LLVM.  This links 3 of
the examples shared to make sure the shared library keeps working.

Added:
    llvm/trunk/tools/llvm-shlib/
      - copied from r96568, llvm/trunk/tools/llvm-shlib/
    llvm/trunk/tools/llvm-shlib/Makefile
      - copied, changed from r96568, llvm/trunk/tools/llvm-shlib/Makefile
Modified:
    llvm/trunk/Makefile
    llvm/trunk/Makefile.config.in
    llvm/trunk/Makefile.rules
    llvm/trunk/autoconf/configure.ac
    llvm/trunk/configure
    llvm/trunk/examples/BrainF/Makefile
    llvm/trunk/examples/Fibonacci/Makefile
    llvm/trunk/examples/HowToUseJIT/Makefile
    llvm/trunk/test/Makefile
    llvm/trunk/test/Unit/lit.cfg
    llvm/trunk/test/Unit/lit.site.cfg.in
    llvm/trunk/unittests/Makefile.unittest

Modified: llvm/trunk/Makefile
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile?rev=96959&r1=96958&r2=96959&view=diff
==============================================================================
--- llvm/trunk/Makefile (original)
+++ llvm/trunk/Makefile Tue Feb 23 12:10:07 2010
@@ -30,8 +30,8 @@
   DIRS := lib/System lib/Support utils
   OPTIONAL_DIRS :=
 else
-  DIRS := lib/System lib/Support utils lib/VMCore lib tools/llvm-config \
-          tools runtime docs unittests
+  DIRS := lib/System lib/Support utils lib/VMCore lib tools/llvm-shlib \
+          tools/llvm-config tools runtime docs unittests
   OPTIONAL_DIRS := projects bindings
 endif
 

Modified: llvm/trunk/Makefile.config.in
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile.config.in?rev=96959&r1=96958&r2=96959&view=diff
==============================================================================
--- llvm/trunk/Makefile.config.in (original)
+++ llvm/trunk/Makefile.config.in Tue Feb 23 12:10:07 2010
@@ -262,6 +262,11 @@
 # Do we want to build with position independent code?
 ENABLE_PIC := @ENABLE_PIC@
 
+# Do we want to link the tools shared?
+ifndef ENABLE_SHARED
+  ENABLE_SHARED := @ENABLE_SHARED@
+endif
+
 # Use -fvisibility-inlines-hidden?
 ENABLE_VISIBILITY_INLINES_HIDDEN := @ENABLE_VISIBILITY_INLINES_HIDDEN@
 
@@ -272,6 +277,9 @@
 # Enable JIT for this platform
 TARGET_HAS_JIT = @TARGET_HAS_JIT@
 
+# Environment variable to set to change the runtime shared library search path.
+SHLIBPATH_VAR = @SHLIBPATH_VAR@
+
 # Shared library extension for host platform.
 SHLIBEXT = @SHLIBEXT@
 

Modified: llvm/trunk/Makefile.rules
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/Makefile.rules?rev=96959&r1=96958&r2=96959&view=diff
==============================================================================
--- llvm/trunk/Makefile.rules (original)
+++ llvm/trunk/Makefile.rules Tue Feb 23 12:10:07 2010
@@ -623,11 +623,12 @@
 ifneq ($(HOST_OS),Darwin)
 ifneq ($(DARWIN_MAJVERS),4)
 ifdef TOOLNAME
-ifdef EXAMPLE_TOOL
-  LD.Flags += $(RPATH) -Wl,$(ExmplDir) $(RDYNAMIC)
-else
-  LD.Flags += $(RPATH) -Wl,$(ToolDir) $(RDYNAMIC)
-endif
+  LD.Flags += $(RPATH) -Wl,'$$ORIGIN/../lib'
+  ifdef EXAMPLE_TOOL
+    LD.Flags += $(RPATH) -Wl,$(ExmplDir) $(RDYNAMIC)
+  else
+    LD.Flags += $(RPATH) -Wl,$(ToolDir) $(RDYNAMIC)
+  endif
 endif
 endif
 endif
@@ -960,11 +961,16 @@
 
 $(ToolDir)/$(strip $(TOOLNAME))$(EXEEXT): $(LLVM_CONFIG)
 
+ifeq ($(ENABLE_SHARED), 1)
+LLVMLibsOptions += -lLLVM-$(LLVMVersion)
+LLVMLibsPaths += $(LibDir)/libLLVM-$(LLVMVersion)$(SHLIBEXT)
+else
 LLVMLibsOptions += $(shell $(LLVM_CONFIG) --libs     $(LINK_COMPONENTS))
 LLVMLibsPaths   += $(LLVM_CONFIG) \
                    $(shell $(LLVM_CONFIG) --libfiles $(LINK_COMPONENTS))
 endif
 endif
+endif
 
 ###############################################################################
 # Library Build Rules: Four ways to build a library
@@ -1169,11 +1175,13 @@
 #   If neither BUILD_ARCHIVE or LOADABLE_MODULE are specified, default to
 #   building an archive.
 #---------------------------------------------------------
+ifndef NO_BUILD_ARCHIVE
 ifndef BUILD_ARCHIVE
 ifndef LOADABLE_MODULE
 BUILD_ARCHIVE = 1
 endif
 endif
+endif
 
 #---------------------------------------------------------
 # Archive Library Targets:

Modified: llvm/trunk/autoconf/configure.ac
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/autoconf/configure.ac?rev=96959&r1=96958&r2=96959&view=diff
==============================================================================
--- llvm/trunk/autoconf/configure.ac (original)
+++ llvm/trunk/autoconf/configure.ac Tue Feb 23 12:10:07 2010
@@ -470,6 +470,18 @@
 AC_DEFINE_UNQUOTED([ENABLE_PIC],$ENABLE_PIC,
                    [Define if position independent code is enabled])
 
+dnl Allow linking tools against the shared library.
+AC_ARG_ENABLE(shared,
+  AS_HELP_STRING([--enable-shared],
+                 [Link LLVM tools shared (default is NO)]),,
+                 enableval=default)
+case "$enableval" in
+  yes) AC_SUBST(ENABLE_SHARED,[1]) ;;
+  no)  AC_SUBST(ENABLE_SHARED,[0]) ;;
+  default) AC_SUBST(ENABLE_SHARED,[0]) ;;
+  *) AC_MSG_ERROR([Invalid setting for --enable-shared. Use "yes" or "no"]) ;;
+esac
+
 dnl Allow specific targets to be specified for building (or not)
 TARGETS_TO_BUILD=""
 AC_ARG_ENABLE([targets],AS_HELP_STRING([--enable-targets],
@@ -1332,6 +1344,10 @@
 dnl the Makefiles so we can use it there too
 AC_SUBST(SHLIBEXT,$libltdl_cv_shlibext)
 
+dnl Propagate the run-time library path variable that the libltdl
+dnl checks found to the Makefiles so we can use it there too
+AC_SUBST(SHLIBPATH_VAR,$libltdl_cv_shlibpath_var)
+
 # Translate the various configuration directories and other basic
 # information into substitutions that will end up in Makefile.config.in
 # that these configured values can be used by the makefiles

Modified: llvm/trunk/configure
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/configure?rev=96959&r1=96958&r2=96959&view=diff
==============================================================================
--- llvm/trunk/configure (original)
+++ llvm/trunk/configure Tue Feb 23 12:10:07 2010
@@ -689,6 +689,7 @@
 ENABLE_DOXYGEN
 ENABLE_THREADS
 ENABLE_PIC
+ENABLE_SHARED
 TARGETS_TO_BUILD
 LLVM_ENUM_TARGETS
 LLVM_ENUM_ASM_PRINTERS
@@ -770,6 +771,7 @@
 LLVMGCCDIR
 LLVMGCC_LANGS
 SHLIBEXT
+SHLIBPATH_VAR
 LLVM_PREFIX
 LLVM_BINDIR
 LLVM_LIBDIR
@@ -1402,6 +1404,7 @@
   --enable-threads        Use threads if available (default is YES)
   --enable-pic            Build LLVM with Position Independent Code (default
                           is YES)
+  --enable-shared         Link LLVM tools shared (default is NO)
   --enable-targets        Build specific host targets: all or
                           target1,target2,... Valid targets are: host, x86,
                           x86_64, sparc, powerpc, alpha, arm, mips, spu,
@@ -4864,6 +4867,25 @@
 _ACEOF
 
 
+# Check whether --enable-shared was given.
+if test "${enable_shared+set}" = set; then
+  enableval=$enable_shared;
+else
+  enableval=default
+fi
+
+case "$enableval" in
+  yes) ENABLE_SHARED=1
+ ;;
+  no)  ENABLE_SHARED=0
+ ;;
+  default) ENABLE_SHARED=0
+ ;;
+  *) { { echo "$as_me:$LINENO: error: Invalid setting for --enable-shared. Use \"yes\" or \"no\"" >&5
+echo "$as_me: error: Invalid setting for --enable-shared. Use \"yes\" or \"no\"" >&2;}
+   { (exit 1); exit 1; }; } ;;
+esac
+
 TARGETS_TO_BUILD=""
 # Check whether --enable-targets was given.
 if test "${enable_targets+set}" = set; then
@@ -11105,7 +11127,7 @@
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<EOF
-#line 11108 "configure"
+#line 11130 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -19686,6 +19708,9 @@
 SHLIBEXT=$libltdl_cv_shlibext
 
 
+SHLIBPATH_VAR=$libltdl_cv_shlibpath_var
+
+
 # Translate the various configuration directories and other basic
 # information into substitutions that will end up in Makefile.config.in
 # that these configured values can be used by the makefiles
@@ -20743,6 +20768,7 @@
 ENABLE_DOXYGEN!$ENABLE_DOXYGEN$ac_delim
 ENABLE_THREADS!$ENABLE_THREADS$ac_delim
 ENABLE_PIC!$ENABLE_PIC$ac_delim
+ENABLE_SHARED!$ENABLE_SHARED$ac_delim
 TARGETS_TO_BUILD!$TARGETS_TO_BUILD$ac_delim
 LLVM_ENUM_TARGETS!$LLVM_ENUM_TARGETS$ac_delim
 LLVM_ENUM_ASM_PRINTERS!$LLVM_ENUM_ASM_PRINTERS$ac_delim
@@ -20752,7 +20778,6 @@
 CLANGPATH!$CLANGPATH$ac_delim
 CLANGXXPATH!$CLANGXXPATH$ac_delim
 ENABLE_BUILT_CLANG!$ENABLE_BUILT_CLANG$ac_delim
-OPTIMIZE_OPTION!$OPTIMIZE_OPTION$ac_delim
 _ACEOF
 
   if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
@@ -20794,6 +20819,7 @@
 ac_delim='%!_!# '
 for ac_last_try in false false false false false :; do
   cat >conf$$subs.sed <<_ACEOF
+OPTIMIZE_OPTION!$OPTIMIZE_OPTION$ac_delim
 EXTRA_OPTIONS!$EXTRA_OPTIONS$ac_delim
 BINUTILS_INCDIR!$BINUTILS_INCDIR$ac_delim
 ENABLE_LLVMC_DYNAMIC!$ENABLE_LLVMC_DYNAMIC$ac_delim
@@ -20865,6 +20891,7 @@
 LLVMGCCDIR!$LLVMGCCDIR$ac_delim
 LLVMGCC_LANGS!$LLVMGCC_LANGS$ac_delim
 SHLIBEXT!$SHLIBEXT$ac_delim
+SHLIBPATH_VAR!$SHLIBPATH_VAR$ac_delim
 LLVM_PREFIX!$LLVM_PREFIX$ac_delim
 LLVM_BINDIR!$LLVM_BINDIR$ac_delim
 LLVM_LIBDIR!$LLVM_LIBDIR$ac_delim
@@ -20885,7 +20912,7 @@
 LTLIBOBJS!$LTLIBOBJS$ac_delim
 _ACEOF
 
-  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 89; then
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 91; then
     break
   elif $ac_last_try; then
     { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5

Modified: llvm/trunk/examples/BrainF/Makefile
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/BrainF/Makefile?rev=96959&r1=96958&r2=96959&view=diff
==============================================================================
--- llvm/trunk/examples/BrainF/Makefile (original)
+++ llvm/trunk/examples/BrainF/Makefile Tue Feb 23 12:10:07 2010
@@ -9,6 +9,9 @@
 LEVEL = ../..
 TOOLNAME = BrainF
 EXAMPLE_TOOL = 1
+# To keep the shared library working, we link a few of the examples
+# against it unconditionally.
+ENABLE_SHARED = 1
 
 LINK_COMPONENTS := jit bitwriter nativecodegen interpreter
 

Modified: llvm/trunk/examples/Fibonacci/Makefile
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/Fibonacci/Makefile?rev=96959&r1=96958&r2=96959&view=diff
==============================================================================
--- llvm/trunk/examples/Fibonacci/Makefile (original)
+++ llvm/trunk/examples/Fibonacci/Makefile Tue Feb 23 12:10:07 2010
@@ -10,6 +10,9 @@
 LEVEL = ../..
 TOOLNAME = Fibonacci
 EXAMPLE_TOOL = 1
+# To keep the shared library working, we link a few of the examples
+# against it unconditionally.
+ENABLE_SHARED = 1
 
 # Link in JIT support
 LINK_COMPONENTS := jit interpreter nativecodegen

Modified: llvm/trunk/examples/HowToUseJIT/Makefile
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/HowToUseJIT/Makefile?rev=96959&r1=96958&r2=96959&view=diff
==============================================================================
--- llvm/trunk/examples/HowToUseJIT/Makefile (original)
+++ llvm/trunk/examples/HowToUseJIT/Makefile Tue Feb 23 12:10:07 2010
@@ -9,6 +9,9 @@
 LEVEL = ../..
 TOOLNAME = HowToUseJIT
 EXAMPLE_TOOL = 1
+# To keep the shared library working, we link a few of the examples
+# against it unconditionally.
+ENABLE_SHARED = 1
 
 LINK_COMPONENTS := jit interpreter nativecodegen
 

Modified: llvm/trunk/test/Makefile
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Makefile?rev=96959&r1=96958&r2=96959&view=diff
==============================================================================
--- llvm/trunk/test/Makefile (original)
+++ llvm/trunk/test/Makefile Tue Feb 23 12:10:07 2010
@@ -198,4 +198,6 @@
 	     -e "s#@LLVM_TOOLS_DIR@#$(ToolDir)#g" \
 	     -e "s#@LLVMGCCDIR@#$(LLVMGCCDIR)#g" \
 	     -e "s#@LLVM_BUILD_MODE@#$(BuildMode)#g" \
+	     -e "s#@ENABLE_SHARED@#$(ENABLE_SHARED)#g" \
+	     -e "s#@SHLIBPATH_VAR@#$(SHLIBPATH_VAR)#g" \
 	     $(PROJ_SRC_DIR)/Unit/lit.site.cfg.in > $@

Modified: llvm/trunk/test/Unit/lit.cfg
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Unit/lit.cfg?rev=96959&r1=96958&r2=96959&view=diff
==============================================================================
--- llvm/trunk/test/Unit/lit.cfg (original)
+++ llvm/trunk/test/Unit/lit.cfg Tue Feb 23 12:10:07 2010
@@ -23,7 +23,14 @@
 
 ###
 
-import os
+# If necessary, point the dynamic loader at libLLVM.so.
+if config.enable_shared:
+    libdir = os.path.join(config.llvm_obj_root, config.llvm_build_mode, 'lib')
+    shlibpath = config.environment.get(config.shlibpath_var,'')
+    if shlibpath:
+        shlibpath = ':' + shlibpath
+    shlibpath = libdir + shlibpath
+    config.environment[config.shlibpath_var] = shlibpath
 
 # Check that the object root is known.
 if config.test_exec_root is None:

Modified: llvm/trunk/test/Unit/lit.site.cfg.in
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Unit/lit.site.cfg.in?rev=96959&r1=96958&r2=96959&view=diff
==============================================================================
--- llvm/trunk/test/Unit/lit.site.cfg.in (original)
+++ llvm/trunk/test/Unit/lit.site.cfg.in Tue Feb 23 12:10:07 2010
@@ -5,6 +5,8 @@
 config.llvm_tools_dir = "@LLVM_TOOLS_DIR@"
 config.llvmgcc_dir = "@LLVMGCCDIR@"
 config.llvm_build_mode = "@LLVM_BUILD_MODE@"
+config.enable_shared = @ENABLE_SHARED@
+config.shlibpath_var = "@SHLIBPATH_VAR@"
 
 # Let the main config do the real work.
 lit.load_config(config, "@LLVM_SOURCE_DIR@/test/Unit/lit.cfg")

Copied: llvm/trunk/tools/llvm-shlib/Makefile (from r96568, llvm/trunk/tools/llvm-shlib/Makefile)
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-shlib/Makefile?p2=llvm/trunk/tools/llvm-shlib/Makefile&p1=llvm/trunk/tools/llvm-shlib/Makefile&r1=96568&r2=96959&rev=96959&view=diff
==============================================================================
--- llvm/trunk/tools/llvm-shlib/Makefile (original)
+++ llvm/trunk/tools/llvm-shlib/Makefile Tue Feb 23 12:10:07 2010
@@ -8,7 +8,7 @@
 ##===----------------------------------------------------------------------===##
 
 LEVEL = ../..
-LIBRARYNAME = LLVM$(LLVMVersion)
+LIBRARYNAME = LLVM-$(LLVMVersion)
 
 NO_BUILD_ARCHIVE = 1
 LINK_LIBS_IN_SHARED = 1
@@ -34,8 +34,7 @@
                         -Wl,-compatibility_version -Wl,1
     endif
     # Include everything from the .a's into the shared library.
-    LLVMLibsOptions    := $(LLVMLibsOptions)  \
-                          -Wl,-all_load
+    LLVMLibsOptions    := $(LLVMLibsOptions) -all_load
     # extra options to override libtool defaults 
     LLVMLibsOptions    := $(LLVMLibsOptions)  \
                          -avoid-version \
@@ -55,7 +54,14 @@
     # Include everything from the .a's into the shared library.
     LLVMLibsOptions := -Wl,--whole-archive $(LLVMLibsOptions) \
                        -Wl,--no-whole-archive
-    # Don't allow unresolved symbols, and warn if we'll need to modify
-    # the text segment when loading libLLVM.so.
-    LLVMLibsOptions += -Wl,--no-undefined,--warn-shared-textrel
+    # Warn if we'll need to modify the text segment when loading libLLVM.so.
+    LLVMLibsOptions += -Wl,--warn-shared-textrel
+    # Don't allow unresolved symbols.
+    LLVMLibsOptions += -Wl,--no-undefined
+    ifneq ($(ARCH), ARM)
+        # ARM's shared libgcc omits several of the __sync functions that are
+        # present in the static libgcc, so we also link in the static gcc.  This
+        # is described at http://gcc.gnu.org/PR40133.
+        LLVMLibsOptions += -lgcc
+    endif
 endif

Modified: llvm/trunk/unittests/Makefile.unittest
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Makefile.unittest?rev=96959&r1=96958&r2=96959&view=diff
==============================================================================
--- llvm/trunk/unittests/Makefile.unittest (original)
+++ llvm/trunk/unittests/Makefile.unittest Tue Feb 23 12:10:07 2010
@@ -28,6 +28,17 @@
 CPP.Flags += $(NO_VARIADIC_MACROS)
 TESTLIBS = -lGoogleTest -lUnitTestMain
 
+ifeq ($(ENABLE_SHARED), 1)
+  # Add the absolute path to the dynamic library.  This is ok because
+  # we'll never install unittests.
+  LD.Flags += $(RPATH) -Wl,$(LibDir)
+endif
+ifeq ($(ENABLE_SHARED), 1)
+  # Also set {DYLD,LD}_LIBRARY_PATH because OSX ignores the rpath most
+  # of the time.
+  Run.Shared := $(SHLIBPATH_VAR)="$(LibDir)$${$(SHLIBPATH_VAR):+:}$$$(SHLIBPATH_VAR)"
+endif
+
 $(LLVMUnitTestExe): $(ObjectsO) $(ProjLibsPaths) $(LLVMLibsPaths)
 	$(Echo) Linking $(BuildMode) unit test $(TESTNAME) $(StripWarnMsg)
 	$(Verb) $(Link) -o $@ $(TOOLLINKOPTS) $(ObjectsO) $(ProjLibsOptions) \
@@ -38,6 +49,6 @@
 all:: $(LLVMUnitTestExe)
 
 unitcheck:: $(LLVMUnitTestExe)
-	$(LLVMUnitTestExe)
+	$(Run.Shared) $(LLVMUnitTestExe)
 
 endif





More information about the llvm-commits mailing list