1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
|
##===- tools/shlib/Makefile --------------------------------*- Makefile -*-===##
#
# The LLVM Compiler Infrastructure
#
# This file is distributed under the University of Illinois Open Source
# License. See LICENSE.TXT for details.
#
##===----------------------------------------------------------------------===##
LEVEL := ../..
LIBRARYNAME = LLVM-$(LLVMVersion)
NO_BUILD_ARCHIVE := 1
LINK_LIBS_IN_SHARED := 1
SHARED_LIBRARY := 1
include $(LEVEL)/Makefile.config
ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
EXPORTED_SYMBOL_FILE = $(ObjDir)/$(LIBRARYNAME).exports
ifeq (1,$(ENABLE_EMBED_STDCXX))
# It is needed to force static-stdc++.a linked.
SHLIB_FRAG_NAMES += stdc++.a.o
endif
endif
include $(LEVEL)/Makefile.common
# Include all archives in libLLVM.(so|dylib) except the ones that have
# their own dynamic libraries and TableGen.
Archives := $(wildcard $(LibDir)/libLLVM*.a)
SharedLibraries := $(wildcard $(LibDir)/libLLVM*$(SHLIBEXT))
ExcludeFromLibLlvm := $(basename $(SharedLibraries)).a %/libLLVMTableGen.a
IncludeInLibLlvm := $(filter-out $(ExcludeFromLibLlvm), $(Archives))
LLVMLibsOptions := $(IncludeInLibLlvm:$(LibDir)/lib%.a=-l%)
LLVMLibsPaths := $(IncludeInLibLlvm)
$(LibName.SO): $(LLVMLibsPaths)
$(Echo) Linking $(BuildMode) $(SharedLibKindMessage) \
$(LIBRARYNAME)$(SHLIBEXT)
$(Verb) $(Link) $(SharedLinkOptions) -o $@ $(ObjectsO) \
$(ProjLibsOptions) $(LLVMLibsOptions) $(LIBS)
mv $(LibName.SO) $(LibName.SO).1
ln -s $(notdir $(LibName.SO)).1 $(LibName.SO)
ifeq ($(HOST_OS),Darwin)
# set dylib internal version number to llvmCore submission number
ifdef LLVM_SUBMIT_VERSION
LLVMLibsOptions := $(LLVMLibsOptions) -Wl,-current_version \
-Wl,$(LLVM_SUBMIT_VERSION).$(LLVM_SUBMIT_SUBVERSION) \
-Wl,-compatibility_version -Wl,1
endif
# Include everything from the .a's into the shared library.
LLVMLibsOptions := $(LLVMLibsOptions) -all_load
# extra options to override libtool defaults
LLVMLibsOptions := $(LLVMLibsOptions) \
-Wl,-dead_strip \
-Wl,-seg1addr -Wl,0xE0000000
# Mac OS X 10.4 and earlier tools do not allow a second -install_name on command line
DARWIN_VERS := $(shell echo $(TARGET_TRIPLE) | sed 's/.*darwin\([0-9]*\).*/\1/')
ifneq ($(DARWIN_VERS),8)
LLVMLibsOptions := $(LLVMLibsOptions) \
-Wl,-install_name \
-Wl,"@executable_path/../lib/lib$(LIBRARYNAME)$(SHLIBEXT)"
endif
endif
ifeq ($(HOST_OS), $(filter $(HOST_OS), Linux FreeBSD OpenBSD GNU))
# Include everything from the .a's into the shared library.
LLVMLibsOptions := -Wl,--whole-archive $(LLVMLibsOptions) \
-Wl,--no-whole-archive
endif
ifeq ($(HOST_OS), $(filter $(HOST_OS), Linux FreeBSD GNU))
# Add soname to the library.
LLVMLibsOptions += -Wl,--soname,lib$(LIBRARYNAME)$(SHLIBEXT).1 -Wl,-Bsymbolic-functions
endif
ifeq ($(HOST_OS), $(filter $(HOST_OS), Linux GNU))
# Don't allow unresolved symbols.
LLVMLibsOptions += -Wl,--no-undefined
endif
ifeq ($(HOST_OS),SunOS)
# add -z allextract ahead of other libraries on Solaris
LLVMLibsOptions := -Wl,-z -Wl,allextract $(LLVMLibsOptions)
endif
ifeq ($(HOST_OS), $(filter $(HOST_OS), Cygwin MingW))
SHLIB_STUBS := $(addprefix $(ObjDir)/, $(SHLIB_FRAG_NAMES))
SHLIB_FRAGS := $(patsubst %.a.o, $(ObjDir)/%.syms.txt, $(LIBRARYNAME).a.o $(SHLIB_FRAG_NAMES))
LLVMLibsOptions := $(SHLIB_STUBS) $(LLVMLibsOptions)
$(LibName.SO): $(SHLIB_STUBS)
%.syms.txt: %.a.o
$(Echo) Collecting global symbols of $(notdir $*)
$(Verb) $(NM_PATH) -g $< > $@
$(ObjDir)/$(LIBRARYNAME).exports: $(SHLIB_FRAGS) $(ObjDir)/.dir
$(Echo) Generating exports for $(LIBRARYNAME)
$(Verb) ($(SED) -n \
-e "s/^.* T _\([^.][^.]*\)$$/\1/p" \
-e "s/^.* [BDR] _\([^.][^.]*\)$$/\1 DATA/p" \
$(SHLIB_FRAGS) \
| sort -u) > $@
$(ObjDir)/$(LIBRARYNAME).a.o: $(LLVMLibsPaths) $(ObjDir)/.dir
$(Echo) Linking all LLVMLibs together for $(LIBRARYNAME)
$(Verb) $(Link) -nostartfiles -Wl,-r -nodefaultlibs -o $@ \
-Wl,--whole-archive $(LLVMLibsPaths) \
-Wl,--no-whole-archive
$(ObjDir)/stdc++.a.o: $(ObjDir)/.dir
$(Echo) Linking all libs together for static libstdc++.a
$(Verb) $(Link) -nostartfiles -Wl,-r -nodefaultlibs -o $@ \
-Wl,--whole-archive -lstdc++ \
-Wl,--no-whole-archive
# FIXME: workaround to invalidate -lstdc++
$(Echo) Making dummy -lstdc++ to lib
$(Verb) $(AR) rc $(ToolDir)/libstdc++.dll.a
# FIXME: Is install-local needed?
clean-local::
$(Verb) $(RM) -f $(ToolDir)/libstdc++.dll.a
endif
|