File: Makefile

package info (click to toggle)
llvm-3.1 3.1-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 80,224 kB
  • sloc: cpp: 491,014; asm: 110,971; ansic: 14,579; sh: 13,120; python: 6,152; ml: 4,719; makefile: 1,830; pascal: 1,553; perl: 874; xml: 283; lisp: 187; csh: 117; exp: 4
file content (132 lines) | stat: -rw-r--r-- 4,692 bytes parent folder | download
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