[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