1 ##===- tools/shlib/Makefile --------------------------------*- Makefile -*-===##
3 # The LLVM Compiler Infrastructure
5 # This file is distributed under the University of Illinois Open Source
6 # License. See LICENSE.TXT for details.
8 ##===----------------------------------------------------------------------===##
12 LIBRARYNAME
= LLVM-
$(LLVMVersion
)
15 LINK_LIBS_IN_SHARED
= 1
18 include $(LEVEL
)/Makefile.config
20 ifeq ($(HOST_OS
), $(filter $(HOST_OS
), Cygwin MingW
))
21 EXPORTED_SYMBOL_FILE
= $(ObjDir
)/$(LIBRARYNAME
).exports
23 ifeq (1,$(ENABLE_EMBED_STDCXX
))
24 # It is needed to force static-stdc++.a linked.
25 SHLIB_FRAG_NAMES
+= stdc
++.a.o
30 include $(LEVEL
)/Makefile.common
32 # Include all archives in libLLVM.(so|dylib) except the ones that have
33 # their own dynamic libraries.
34 Archives
:= $(wildcard $(LibDir
)/libLLVM
*.a
)
35 SharedLibraries
:= $(wildcard $(LibDir
)/libLLVM
*$(SHLIBEXT
))
36 IncludeInLibLlvm
:= $(filter-out $(basename $(SharedLibraries
)).a
, $(Archives
))
37 LLVMLibsOptions
:= $(IncludeInLibLlvm
:$(LibDir
)/lib
%.a
=-l
%)
38 LLVMLibsPaths
:= $(IncludeInLibLlvm
)
40 $(LibName.SO
): $(LLVMLibsPaths
)
42 ifeq ($(HOST_OS
),Darwin
)
43 # set dylib internal version number to llvmCore submission number
44 ifdef LLVM_SUBMIT_VERSION
45 LLVMLibsOptions
:= $(LLVMLibsOptions
) -Wl
,-current_version \
46 -Wl
,$(LLVM_SUBMIT_VERSION
).
$(LLVM_SUBMIT_SUBVERSION
) \
47 -Wl
,-compatibility_version
-Wl
,1
49 # Include everything from the .a's into the shared library.
50 LLVMLibsOptions
:= $(LLVMLibsOptions
) -all_load
51 # extra options to override libtool defaults
52 LLVMLibsOptions
:= $(LLVMLibsOptions
) \
54 -Wl
,-seg1addr
-Wl
,0xE0000000
56 # Mac OS X 10.4 and earlier tools do not allow a second -install_name on command line
57 DARWIN_VERS
:= $(shell echo
$(TARGET_TRIPLE
) | sed
's/.*darwin\([0-9]*\).*/\1/')
58 ifneq ($(DARWIN_VERS
),8)
59 LLVMLibsOptions
:= $(LLVMLibsOptions
) \
61 -Wl
,"@executable_path/../lib/lib$(LIBRARYNAME)$(SHLIBEXT)"
65 ifeq ($(HOST_OS
), $(filter $(HOST_OS
), Linux FreeBSD OpenBSD
))
66 # Include everything from the .a's into the shared library.
67 LLVMLibsOptions
:= -Wl
,--whole-archive
$(LLVMLibsOptions
) \
68 -Wl
,--no-whole-archive
71 ifeq ($(HOST_OS
),Linux
)
72 # Don't allow unresolved symbols.
73 LLVMLibsOptions
+= -Wl
,--no-undefined
76 ifeq ($(HOST_OS
),SunOS
)
77 # add -z allextract ahead of other libraries on Solaris
78 LLVMLibsOptions
:= -Wl
,-z
-Wl
,allextract
$(LLVMLibsOptions
)
81 ifeq ($(HOST_OS
), $(filter $(HOST_OS
), Cygwin MingW
))
83 SHLIB_STUBS
:= $(addprefix $(ObjDir
)/, $(SHLIB_FRAG_NAMES
))
84 SHLIB_FRAGS
:= $(patsubst %.a.o
, $(ObjDir
)/%.syms.txt
, $(LIBRARYNAME
).a.o
$(SHLIB_FRAG_NAMES
))
85 LLVMLibsOptions
:= $(SHLIB_STUBS
) $(LLVMLibsOptions
)
87 $(LibName.SO
): $(SHLIB_STUBS
)
90 $(Echo
) Collecting global symbols of
$(notdir $*)
91 $(Verb
) $(NM_PATH
) -g
$< > $@
93 $(ObjDir
)/$(LIBRARYNAME
).exports
: $(SHLIB_FRAGS
) $(ObjDir
)/.
dir
94 $(Echo
) Generating exports for
$(LIBRARYNAME
)
96 -e
"s/^.* T _\([^.][^.]*\)$$/\1/p" \
97 -e
"s/^.* [BDR] _\([^.][^.]*\)$$/\1 DATA/p" \
101 $(ObjDir
)/$(LIBRARYNAME
).a.o
: $(LLVMLibsPaths
) $(ObjDir
)/.
dir
102 $(Echo
) Linking
all LLVMLibs together for
$(LIBRARYNAME
)
103 $(Verb
) $(Link
) -nostartfiles
-Wl
,-r
-nodefaultlibs
-o
$@ \
104 -Wl
,--whole-archive
$(LLVMLibsPaths
) \
105 -Wl
,--no-whole-archive
107 $(ObjDir
)/stdc
++.a.o
: $(ObjDir
)/.
dir
108 $(Echo
) Linking
all libs together for static libstdc
++.a
109 $(Verb
) $(Link
) -nostartfiles
-Wl
,-r
-nodefaultlibs
-o
$@ \
110 -Wl
,--whole-archive
-lstdc
++ \
111 -Wl
,--no-whole-archive
112 # FIXME: workaround to invalidate -lstdc++
113 $(Echo
) Making dummy
-lstdc
++ to lib
114 $(Verb
) $(AR
) rc
$(ToolDir
)/libstdc
++.dll.a
115 # FIXME: Is install-local needed?
118 $(Verb
) $(RM
) -f
$(ToolDir
)/libstdc
++.dll.a