Add --enable-llvmc-dynamic configure option.
authorMikhail Glushenkov <foldr@codedgers.com>
Fri, 3 Jul 2009 03:52:47 +0000 (03:52 +0000)
committerMikhail Glushenkov <foldr@codedgers.com>
Fri, 3 Jul 2009 03:52:47 +0000 (03:52 +0000)
Controls whether libCompilerDriver should be loaded dynamically. By default this
is needed only on Win32, to make dynamic plugins work.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@74759 91177308-0d34-0410-b5e6-96231b3b80d8

Makefile.config.in
Makefile.rules
autoconf/configure.ac
lib/CompilerDriver/Makefile

index 44d7416e4f8741ddae267c3832a7d706d26106bb..e715902814625e8ff8463994170e281785c26730 100644 (file)
@@ -297,3 +297,9 @@ endif
 
 # Location of the plugin header file for gold.
 BINUTILS_INCDIR := @BINUTILS_INCDIR@
+
+# When ENABLE_LLVMC_DYNAMIC is enabled, LLVMC will link libCompilerDriver
+# dynamically. This is needed to make dynamic plugins work on some targets
+# (Windows).
+ENABLE_LLVMC_DYNAMIC = 0
+#@ENABLE_LLVMC_DYNAMIC@
index 9787d5fe0b5704c5fff1a00e81a88b2a60422f73..3ae2db8916de8bb34eebc8998d7728aefd058080 100644 (file)
@@ -200,17 +200,20 @@ ifdef LLVMC_PLUGIN
 LIBRARYNAME := $(patsubst %,plugin_llvmc_%,$(LLVMC_PLUGIN))
 CPP.Flags += -DLLVMC_PLUGIN_NAME=$(LLVMC_PLUGIN)
 REQUIRES_EH := 1
-LD.Flags += -lCompilerDriver
+
+ifeq ($(ENABLE_LLVMC_DYNAMIC),1)
+  LD.Flags += -lCompilerDriver
+endif
 
 # Build a dynamic library if the user runs `make` directly from the plugin
 # directory.
 ifndef LLVMC_BUILTIN_PLUGIN
-LOADABLE_MODULE = 1
+  LOADABLE_MODULE = 1
 endif
 
 # TableGen stuff...
 ifneq ($(BUILT_SOURCES),)
-LLVMC_BUILD_AUTOGENERATED_INC=1
+  LLVMC_BUILD_AUTOGENERATED_INC=1
 endif
 
 endif # LLVMC_PLUGIN
@@ -218,8 +221,15 @@ endif # LLVMC_PLUGIN
 ifdef LLVMC_BASED_DRIVER
 
 TOOLNAME = $(LLVMC_BASED_DRIVER)
+
 REQUIRES_EH := 1
-LD.Flags += -lCompilerDriver
+
+ifeq ($(ENABLE_LLVMC_DYNAMIC),1)
+  LD.Flags += -lCompilerDriver
+else
+  LLVMLIBS = CompilerDriver.a
+  LINK_COMPONENTS = support system
+endif
 
 # Preprocessor magic that generates references to static variables in built-in
 # plugins.
@@ -502,8 +512,7 @@ ifeq ($(OS),Darwin)
 else
   ifeq ($(OS),Cygwin)
     SharedLinkOptions=-shared -nostdlib -Wl,--export-all-symbols \
-                      -Wl,--enable-auto-import -Wl,--enable-auto-image-base \
-                      -Wl,--enable-runtime-pseudo-relocs
+                      -Wl,--enable-auto-import -Wl,--enable-auto-image-base
   else
     SharedLinkOptions=-shared
   endif
index 0ed3a26f6c22bff71fa337ea6b7392ee7a30f541..bb9c9d84b0091acb2a921ffdd9f589203125b29d 100644 (file)
@@ -593,6 +593,24 @@ case "$enableval" in
   *) AC_MSG_ERROR([Invalid setting for --enable-libffi. Use "yes" or "no"]) ;;
 esac
 
+dnl Only Windows needs dynamic libCompilerDriver to support plugins.
+if test "$llvm_cv_os_type" = "Win32" ; then
+   llvmc_dynamic="yes"
+else
+   llvmc_dynamic="no"
+fi
+
+dnl --enable-llvmc-dynamic : should LLVMC link libCompilerDriver dynamically?
+AC_ARG_ENABLE(llvmc-dynamic,AS_HELP_STRING(
+--enable-llvmc-dynamic,
+[Link LLVMC dynamically (default is NO, unless on Win32)]),,
+enableval=$llvmc_dynamic)
+if test ${enableval} = "no"; then
+   AC_SUBST(ENABLE_LLVMC_DYNAMIC,[[]])
+else
+   AC_SUBST(ENABLE_LLVMC_DYNAMIC,[[ENABLE_LLVMC_DYNAMIC=1]])
+fi
+
 dnl===-----------------------------------------------------------------------===
 dnl===
 dnl=== SECTION 4: Check for programs we need and that they are the right version
index 773eb5e8e1aa1664a3060dcdfede1635977572c2..6084e885184b9e5db9900ee499425ce7ce32fd4d 100644 (file)
@@ -12,18 +12,26 @@ LEVEL = ../..
 # We don't want this library to appear in `llvm-config --libs` output, so its
 # name doesn't start with "LLVM".
 
-LIBRARYNAME = libCompilerDriver
-LLVMLIBS = LLVMSupport.a LLVMSystem.a
-LOADABLE_MODULE := 1
+ifeq ($(ENABLE_LLVMC_DYNAMIC),1)
+  LIBRARYNAME = libCompilerDriver
+  LLVMLIBS = LLVMSupport.a LLVMSystem.a
+  LOADABLE_MODULE := 1
+else
+  LIBRARYNAME = CompilerDriver
+  LINK_COMPONENTS = support system
+endif
+
 REQUIRES_EH := 1
 
 include $(LEVEL)/Makefile.common
 
+# Copy libCompilerDriver to the bin dir so that llvmc can find it.
+ifeq ($(ENABLE_LLVMC_DYNAMIC),1)
+
 FullLibName = $(LIBRARYNAME)$(SHLIBEXT)
 
 all-local:: $(ToolDir)/$(FullLibName)
 
-# Copy the library to the bin dir so that llvmc can find it.
 $(ToolDir)/$(FullLibName): $(LibDir)/$(FullLibName) $(ToolDir)/.dir
        $(Echo) Copying $(BuildMode) Shared Library $(FullLibName) to $@
        -$(Verb) $(CP) $< $@
@@ -32,3 +40,4 @@ clean-local::
        $(Echo) Removing $(BuildMode) Shared Library $(FullLibName) \
        from $(ToolDir)
        -$(Verb) $(RM) -f $(ToolDir)/$(FullLibName)
+endif