1#
2# Copyright (C) 2010-2012 The Android Open Source Project
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8#      http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15#
16
17LOCAL_PATH := $(call my-dir)
18LIBBCC_ROOT_PATH := $(LOCAL_PATH)
19include $(LIBBCC_ROOT_PATH)/libbcc.mk
20
21#=====================================================================
22# Whole Static Library to Be Linked In
23#=====================================================================
24
25libbcc_WHOLE_STATIC_LIBRARIES += \
26  libbccAndroidBitcode \
27  libbccRenderscript \
28  libbccExecutionEngine \
29  libbccCore \
30  libbccSupport
31
32libmcld_STATIC_LIBRARIES += \
33  libmcldCodeGen \
34  libmcldTarget \
35  libmcldLDVariant \
36  libmcldMC \
37  libmcldSupport \
38  libmcldADT \
39  libmcldLD
40
41#=====================================================================
42# Calculate SHA1 checksum for libbcc.so, libRS.so and libclcore.bc
43#=====================================================================
44
45include $(CLEAR_VARS)
46
47LOCAL_MODULE := libbcc.sha1
48LOCAL_MODULE_TAGS := optional
49LOCAL_MODULE_CLASS := SHARED_LIBRARIES
50
51libbcc_SHA1_SRCS := \
52  $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/libbcc.so \
53  $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/libRS.so \
54  $(call intermediates-dir-for,SHARED_LIBRARIES,libclcore.bc,,)/libclcore.bc
55
56ifeq ($(ARCH_ARM_HAVE_NEON),true)
57libbcc_SHA1_SRCS += \
58  $(call intermediates-dir-for,SHARED_LIBRARIES,libclcore_neon.bc,,)/libclcore_neon.bc
59endif
60
61libbcc_GEN_SHA1_STAMP := $(LOCAL_PATH)/tools/build/gen-sha1-stamp.py
62intermediates := $(call local-intermediates-dir)
63
64libbcc_SHA1_ASM := $(intermediates)/libbcc.sha1.S
65LOCAL_GENERATED_SOURCES += $(libbcc_SHA1_ASM)
66$(libbcc_SHA1_ASM): PRIVATE_SHA1_SRCS := $(libbcc_SHA1_SRCS)
67$(libbcc_SHA1_ASM): $(libbcc_SHA1_SRCS) $(libbcc_GEN_SHA1_STAMP)
68	@echo libbcc.sha1: $@
69	$(hide) mkdir -p $(dir $@)
70	$(hide) $(libbcc_GEN_SHA1_STAMP) $(PRIVATE_SHA1_SRCS) > $@
71
72LOCAL_CFLAGS += -D_REENTRANT -DPIC -fPIC
73LOCAL_CFLAGS += -O3 -nodefaultlibs -nostdlib
74
75include $(BUILD_SHARED_LIBRARY)
76
77#=====================================================================
78# Device Shared Library libbcc
79#=====================================================================
80
81include $(CLEAR_VARS)
82
83LOCAL_MODULE := libbcc
84LOCAL_MODULE_TAGS := optional
85LOCAL_MODULE_CLASS := SHARED_LIBRARIES
86
87LOCAL_WHOLE_STATIC_LIBRARIES := $(libbcc_WHOLE_STATIC_LIBRARIES)
88
89ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),arm x86))
90LOCAL_WHOLE_STATIC_LIBRARIES += libbccCompilerRT
91endif
92
93LOCAL_WHOLE_STATIC_LIBRARIES += librsloader
94
95ifeq ($(libbcc_USE_DISASSEMBLER),1)
96  ifeq ($(TARGET_ARCH),arm)
97    LOCAL_WHOLE_STATIC_LIBRARIES += \
98      libLLVMARMDisassembler
99  else
100    ifeq ($(TARGET_ARCH),mips)
101      LOCAL_WHOLE_STATIC_LIBRARIES += \
102        libLLVMMipsDisassembler
103    else
104      ifeq ($(TARGET_ARCH),x86)
105        LOCAL_WHOLE_STATIC_LIBRARIES += \
106          libLLVMX86Disassembler
107      else
108        $(error Unsupported TARGET_ARCH $(TARGET_ARCH))
109      endif
110    endif
111  endif
112endif
113
114ifeq ($(TARGET_ARCH),arm)
115  LOCAL_WHOLE_STATIC_LIBRARIES += \
116    libmcldARMTarget \
117    libmcldARMInfo \
118    $(libmcld_STATIC_LIBRARIES) \
119    libLLVMARMAsmParser \
120    libLLVMARMCodeGen \
121    libLLVMARMDesc \
122    libLLVMARMInfo
123else
124  ifeq ($(TARGET_ARCH), mips)
125    LOCAL_WHOLE_STATIC_LIBRARIES += \
126      libmcldMipsTarget \
127      libmcldMipsInfo \
128      $(libmcld_STATIC_LIBRARIES) \
129      libLLVMMipsAsmParser \
130      libLLVMMipsCodeGen \
131      libLLVMMipsAsmPrinter \
132      libLLVMMipsDesc \
133      libLLVMMipsInfo
134  else
135    ifeq ($(TARGET_ARCH),x86) # We don't support x86-64 right now
136      LOCAL_WHOLE_STATIC_LIBRARIES += \
137        libmcldX86Target \
138        libmcldX86Info \
139        $(libmcld_STATIC_LIBRARIES) \
140        libLLVMX86AsmParser \
141        libLLVMX86CodeGen \
142        libLLVMX86Desc \
143        libLLVMX86Info \
144        libLLVMX86Utils \
145        libLLVMX86AsmPrinter
146    else
147      $(error Unsupported TARGET_ARCH $(TARGET_ARCH))
148    endif
149  endif
150endif
151
152LOCAL_WHOLE_STATIC_LIBRARIES += \
153  libLLVMObject \
154  libLLVMAsmPrinter \
155  libLLVMBitWriter \
156  libLLVMBitReader \
157  libLLVMSelectionDAG \
158  libLLVMCodeGen \
159  libLLVMLinker \
160  libLLVMScalarOpts \
161  libLLVMInstCombine \
162  libLLVMipo \
163  libLLVMipa \
164  libLLVMVectorize \
165  libLLVMInstrumentation \
166  libLLVMTransformUtils \
167  libLLVMAnalysis \
168  libLLVMTarget \
169  libLLVMMCParser \
170  libLLVMMC \
171  libLLVMCore \
172  libLLVMSupport
173
174LOCAL_SHARED_LIBRARIES := libbcinfo libdl libutils libcutils libstlport
175
176# Modules that need get installed if and only if the target libbcc.so is
177# installed.
178LOCAL_REQUIRED_MODULES := libclcore.bc libbcc.sha1
179
180ifeq ($(ARCH_ARM_HAVE_NEON),true)
181LOCAL_REQUIRED_MODULES += libclcore_neon.bc
182endif
183
184# Link-Time Optimization on libbcc.so
185#
186# -Wl,--exclude-libs=ALL only applies to library archives. It would hide most
187# of the symbols in this shared library. As a result, it reduced the size of
188# libbcc.so by about 800k in 2010.
189#
190# Note that libLLVMBitReader:libLLVMCore:libLLVMSupport are used by
191# pixelflinger2.
192
193#LOCAL_LDFLAGS += -Wl,--exclude-libs=libmcldARMTarget:libmcldARMInfo:libmcldMipsTarget:libmcldMipsInfo:libmcldX86Target:libmcldX86Info:libmcldCodeGen:libmcldTarget:libmcldLDVariant:libmcldMC:libmcldSupport:libmcldLD:libmcldADT:libLLVMARMDisassembler:libLLVMARMAsmPrinter:libLLVMX86Disassembler:libLLVMX86AsmPrinter:libLLVMMipsDisassembler:libLLVMMipsAsmPrinter:libLLVMMCParser:libLLVMARMCodeGen:libLLVMARMDesc:libLLVMARMInfo:libLLVMX86CodeGen:libLLVMX86Desc:libLLVMX86Info:libLLVMX86Utils:libLLVMMipsCodeGen:libLLVMMipsDesc:libLLVMMipsInfo:libLLVMSelectionDAG:libLLVMAsmPrinter:libLLVMCodeGen:libLLVMLinker:libLLVMTarget:libLLVMMC:libLLVMScalarOpts:libLLVMInstCombine:libLLVMipo:libLLVMipa:libLLVMTransformUtils:libLLVMAnalysis
194
195# Generate build information (Build time + Build git revision + Build Semi SHA1)
196include $(LIBBCC_ROOT_PATH)/libbcc-gen-build-info.mk
197
198include $(LIBBCC_DEVICE_BUILD_MK)
199include $(BUILD_SHARED_LIBRARY)
200
201
202#=====================================================================
203# Host Shared Library libbcc
204#=====================================================================
205
206include $(CLEAR_VARS)
207
208LOCAL_MODULE := libbcc
209LOCAL_MODULE_TAGS := optional
210LOCAL_MODULE_CLASS := SHARED_LIBRARIES
211LOCAL_IS_HOST_MODULE := true
212
213LOCAL_WHOLE_STATIC_LIBRARIES += $(libbcc_WHOLE_STATIC_LIBRARIES)
214
215LOCAL_WHOLE_STATIC_LIBRARIES += librsloader
216
217ifeq ($(libbcc_USE_DISASSEMBLER),1)
218  LOCAL_WHOLE_STATIC_LIBRARIES += \
219    libLLVMARMDisassembler \
220    libLLVMMipsDisassembler \
221    libLLVMX86Disassembler
222endif
223
224LOCAL_WHOLE_STATIC_LIBRARIES += \
225  libmcldARMTarget \
226  libmcldARMInfo \
227  libmcldMipsTarget \
228  libmcldMipsInfo \
229  libmcldX86Target \
230  libmcldX86Info
231
232LOCAL_WHOLE_STATIC_LIBRARIES += $(libmcld_STATIC_LIBRARIES)
233
234LOCAL_WHOLE_STATIC_LIBRARIES += \
235  libLLVMARMAsmParser \
236  libLLVMARMCodeGen \
237  libLLVMARMDesc \
238  libLLVMARMInfo
239
240LOCAL_WHOLE_STATIC_LIBRARIES += \
241  libLLVMMipsAsmParser \
242  libLLVMMipsCodeGen \
243  libLLVMMipsAsmPrinter \
244  libLLVMMipsDesc \
245  libLLVMMipsInfo
246
247LOCAL_WHOLE_STATIC_LIBRARIES += \
248  libLLVMX86AsmParser \
249  libLLVMX86CodeGen \
250  libLLVMX86Desc \
251  libLLVMX86AsmPrinter \
252  libLLVMX86Info \
253  libLLVMX86Utils
254
255LOCAL_WHOLE_STATIC_LIBRARIES += \
256  libLLVMObject \
257  libLLVMAsmPrinter \
258  libLLVMBitWriter \
259  libLLVMBitReader \
260  libLLVMSelectionDAG \
261  libLLVMCodeGen \
262  libLLVMLinker \
263  libLLVMArchive \
264  libLLVMScalarOpts \
265  libLLVMInstCombine \
266  libLLVMipo \
267  libLLVMipa \
268  libLLVMVectorize \
269  libLLVMInstrumentation \
270  libLLVMTransformUtils \
271  libLLVMAnalysis \
272  libLLVMTarget \
273  libLLVMMCParser \
274  libLLVMMC \
275  libLLVMCore \
276  libLLVMSupport
277
278LOCAL_STATIC_LIBRARIES += \
279  libutils \
280  libcutils
281
282LOCAL_SHARED_LIBRARIES := libbcinfo
283
284LOCAL_LDLIBS := -ldl -lpthread
285
286# Generate build information (Build time + Build git revision + Build Semi SHA1)
287include $(LIBBCC_ROOT_PATH)/libbcc-gen-build-info.mk
288
289include $(LIBBCC_HOST_BUILD_MK)
290include $(BUILD_HOST_SHARED_LIBRARY)
291
292
293#=====================================================================
294# Include Subdirectories
295#=====================================================================
296include $(call all-makefiles-under,$(LOCAL_PATH))
297