Implement the LOADABLE_MODULE option when building a shared library. This
authorReid Spencer <rspencer@reidspencer.com>
Tue, 11 Jan 2005 04:31:07 +0000 (04:31 +0000)
committerReid Spencer <rspencer@reidspencer.com>
Tue, 11 Jan 2005 04:31:07 +0000 (04:31 +0000)
passes the -module option on the libtool command line to ensure that the
shared library being built can be dlopened and dlsym can work on that
module. LOADABLE_MODULE should be sent only in conjunction with the
SHARED_LIBRARY directive. It should generally be used for any module that
is intended to be the target of an LLVM -load option. Note that loadable
modules will not have the lib prefix but otherwise look like shared
libraries. This is per the libtool recommendations and prevents these
special shared libraries from being linked in via -l option to the linker.

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

Makefile.rules

index d6ed2d531613a5234ce7a5ac6d023a6d63646449..7badbddd762a023361b090c7e5b923cf560a8850 100644 (file)
@@ -264,11 +264,16 @@ LLVMGXXWITHPATH  := PATH="$(LLVMToolDir):$(PATH)" $(LLVMGXX)
 # Adjust to user's request
 #--------------------------------------------------------------------
 
-# Adjust LIBTOOL flags for shared libraries, or not.
-ifndef SHARED_LIBRARY
-  LibTool.Flags += --tag=disable-shared
-else
+# Adjust LD.Flags and Libtool.Flags depending on the kind of library that is
+# to be built. Note that if LOADABLE_MODULE is specified then the resulting
+# shared library can be opened with dlopen
+ifdef SHARED_LIBRARY
   LD.Flags += -rpath $(LibDir)
+  ifdef LOADABLE_MODULE
+    LD.Flags += -module
+  endif
+else
+  LibTool.Flags += --tag=disable-shared
 endif
 
 ifdef TOOL_VERBOSE
@@ -571,7 +576,11 @@ ifdef LIBRARYNAME
 
 # Make sure there isn't any extranous whitespace on the LIBRARYNAME option
 LIBRARYNAME := $(strip $(LIBRARYNAME))
+ifdef LOADABLE_MODULE
+LibName.LA := $(LibDir)/$(LIBRARYNAME).la
+else
 LibName.LA := $(LibDir)/lib$(LIBRARYNAME).la
+endif
 LibName.A  := $(LibDir)/lib$(LIBRARYNAME).a
 LibName.O  := $(LibDir)/$(LIBRARYNAME).o
 LibName.BCA:= $(LibDir)/lib$(LIBRARYNAME).bca