1#
2# Copyright (C) 2010 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)
18include $(LOCAL_PATH)/libbcc-config.mk
19
20
21#=====================================================================
22# Whole Static Library to Be Linked In
23#=====================================================================
24
25ifeq ($(libbcc_USE_OLD_JIT),1)
26libbcc_WHOLE_STATIC_LIBRARIES += libbccCodeGen
27endif
28
29ifeq ($(libbcc_USE_DISASSEMBLER),1)
30libbcc_WHOLE_STATIC_LIBRARIES += libbccDisassembler
31endif
32
33libbcc_WHOLE_STATIC_LIBRARIES += \
34  libbccExecutionEngine \
35  libbccHelper
36
37
38#=====================================================================
39# Calculate SHA1 checksum for libbcc.so and libRS.so
40#=====================================================================
41
42include $(CLEAR_VARS)
43
44LOCAL_MODULE := libbcc.so.sha1
45LOCAL_MODULE_TAGS := optional
46LOCAL_MODULE_CLASS := SHARED_LIBRARIES
47
48include $(BUILD_SYSTEM)/base_rules.mk
49libbcc_SHA1_SRCS := \
50  $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/libbcc.so \
51  $(TARGET_OUT_INTERMEDIATE_LIBRARIES)/libRS.so
52
53libbcc_GEN_SHA1_STAMP := $(LOCAL_PATH)/tools/gen-sha1-stamp.py
54
55$(LOCAL_BUILT_MODULE): PRIVATE_SHA1_SRCS := $(libbcc_SHA1_SRCS)
56$(LOCAL_BUILT_MODULE): $(libbcc_SHA1_SRCS) $(libbcc_GEN_SHA1_STAMP)
57	$(hide) mkdir -p $(dir $@) && \
58	        $(libbcc_GEN_SHA1_STAMP) $@ $(PRIVATE_SHA1_SRCS)
59
60
61#=====================================================================
62# Device Shared Library libbcc
63#=====================================================================
64
65include $(CLEAR_VARS)
66
67LOCAL_MODULE := libbcc
68LOCAL_MODULE_TAGS := optional
69LOCAL_MODULE_CLASS := SHARED_LIBRARIES
70
71LOCAL_CFLAGS := $(libbcc_CFLAGS)
72LOCAL_C_INCLUDES := $(libbcc_C_INCLUDES)
73
74LOCAL_SRC_FILES := lib/ExecutionEngine/bcc.cpp
75
76LOCAL_WHOLE_STATIC_LIBRARIES += \
77  $(libbcc_WHOLE_STATIC_LIBRARIES) \
78  libbccCompilerRT
79
80ifeq ($(libbcc_USE_MCJIT),1)
81  LOCAL_STATIC_LIBRARIES += librsloader
82endif
83
84ifeq ($(libbcc_USE_DISASSEMBLER),1)
85  ifeq ($(TARGET_ARCH),arm)
86    LOCAL_STATIC_LIBRARIES += \
87      libLLVMARMDisassembler \
88      libLLVMARMAsmPrinter
89  else
90    ifeq ($(TARGET_ARCH),x86)
91      LOCAL_STATIC_LIBRARIES += \
92        libLLVMX86Disassembler
93    else
94      $(error Unsupported TARGET_ARCH $(TARGET_ARCH))
95    endif
96  endif
97endif
98
99ifeq ($(TARGET_ARCH),arm)
100  LOCAL_STATIC_LIBRARIES += \
101    libLLVMARMCodeGen \
102    libLLVMARMDesc \
103    libLLVMARMInfo
104else
105  ifeq ($(TARGET_ARCH),x86) # We don't support x86-64 right now
106    LOCAL_STATIC_LIBRARIES += \
107      libLLVMX86CodeGen \
108      libLLVMX86Desc \
109      libLLVMX86Info \
110      libLLVMX86Utils \
111      libLLVMX86AsmPrinter
112  else
113    $(error Unsupported TARGET_ARCH $(TARGET_ARCH))
114  endif
115endif
116
117LOCAL_STATIC_LIBRARIES += \
118  libLLVMAsmPrinter \
119  libLLVMBitReader \
120  libLLVMSelectionDAG \
121  libLLVMCodeGen \
122  libLLVMLinker \
123  libLLVMJIT \
124  libLLVMScalarOpts \
125  libLLVMInstCombine \
126  libLLVMipo \
127  libLLVMipa \
128  libLLVMTransformUtils \
129  libLLVMAnalysis \
130  libLLVMTarget \
131  libLLVMMCParser \
132  libLLVMMC \
133  libLLVMCore \
134  libLLVMSupport
135
136LOCAL_SHARED_LIBRARIES := libdl libcutils libutils libstlport
137
138# Modules that need get installed if and only if the target libbcc.so is installed.
139LOCAL_REQUIRED_MODULES := libclcore.bc libbcc.so.sha1
140
141# -Wl,--exclude-libs=ALL only applies to library archives. It would hide most of
142# the symbols in this shared library. As a result, it reduced the size of libbcc.so
143# by about 800k in 2010.
144# Note that libLLVMBitReader:libLLVMCore:libLLVMSupport are used by pixelflinger2.
145LOCAL_LDFLAGS += -Wl,--exclude-libs=libLLVMARMDisassembler:libLLVMARMAsmPrinter:libLLVMX86Disassembler:libLLVMX86AsmPrinter:libLLVMMCParser:libLLVMARMCodeGen:libLLVMARMDesc:libLLVMARMInfo:libLLVMSelectionDAG:libLLVMAsmPrinter:libLLVMCodeGen:libLLVMLinker:libLLVMJIT:libLLVMTarget:libLLVMMC:libLLVMScalarOpts:libLLVMInstCombine:libLLVMipo:libLLVMipa:libLLVMTransformUtils:libLLVMAnalysis
146
147# Generate build stamp (Build time + Build git revision + Build Semi SHA1)
148include $(LOCAL_PATH)/libbcc-gen-build-stamp.mk
149
150include $(LIBBCC_ROOT_PATH)/libbcc-gen-config-from-mk.mk
151include $(LLVM_ROOT_PATH)/llvm-device-build.mk
152include $(BUILD_SHARED_LIBRARY)
153
154
155#=====================================================================
156# Host Shared Library libbcc
157#=====================================================================
158include $(CLEAR_VARS)
159
160LOCAL_MODULE := libbcc
161LOCAL_MODULE_TAGS := optional
162LOCAL_MODULE_CLASS := SHARED_LIBRARIES
163LOCAL_IS_HOST_MODULE := true
164
165LOCAL_CFLAGS := $(libbcc_CFLAGS)
166LOCAL_C_INCLUDES := $(libbcc_C_INCLUDES)
167
168LOCAL_SRC_FILES := lib/ExecutionEngine/bcc.cpp
169
170LOCAL_WHOLE_STATIC_LIBRARIES += $(libbcc_WHOLE_STATIC_LIBRARIES)
171
172ifeq ($(libbcc_USE_MCJIT),1)
173  LOCAL_STATIC_LIBRARIES += librsloader
174endif
175
176ifeq ($(libbcc_USE_DISASSEMBLER),1)
177  LOCAL_STATIC_LIBRARIES += \
178    libLLVMARMDisassembler \
179    libLLVMARMAsmPrinter \
180    libLLVMX86Disassembler \
181    libLLVMMCParser
182endif
183
184LOCAL_STATIC_LIBRARIES += \
185  libcutils \
186  libutils \
187  libLLVMARMCodeGen \
188  libLLVMARMDesc \
189  libLLVMARMInfo \
190  libLLVMX86CodeGen \
191  libLLVMX86Desc \
192  libLLVMX86Info \
193  libLLVMX86Utils \
194  libLLVMX86AsmPrinter \
195  libLLVMAsmPrinter \
196  libLLVMBitReader \
197  libLLVMSelectionDAG \
198  libLLVMCodeGen \
199  libLLVMLinker \
200  libLLVMJIT \
201  libLLVMScalarOpts \
202  libLLVMInstCombine \
203  libLLVMipo \
204  libLLVMipa \
205  libLLVMTransformUtils \
206  libLLVMAnalysis \
207  libLLVMTarget \
208  libLLVMMCParser \
209  libLLVMMC \
210  libLLVMCore \
211  libLLVMSupport
212
213LOCAL_LDLIBS := -ldl -lpthread
214
215# Generate build stamp (Build time + Build git revision + Build Semi SHA1)
216include $(LOCAL_PATH)/libbcc-gen-build-stamp.mk
217
218# definitions for LLVM
219LOCAL_CFLAGS += -DDEBUG_CODEGEN=1
220
221ifeq ($(TARGET_ARCH),arm)
222  LOCAL_CFLAGS += -DFORCE_ARM_CODEGEN=1
223else
224  ifeq ($(TARGET_ARCH),x86)
225    LOCAL_CFLAGS += -DFORCE_X86_CODEGEN=1
226  else
227    $(error Unsupported TARGET_ARCH $(TARGET_ARCH))
228  endif
229endif
230
231include $(LIBBCC_ROOT_PATH)/libbcc-gen-config-from-mk.mk
232include $(LLVM_ROOT_PATH)/llvm-host-build.mk
233include $(BUILD_HOST_SHARED_LIBRARY)
234
235
236#=====================================================================
237# Include Subdirectories
238#=====================================================================
239include $(call all-makefiles-under,$(LOCAL_PATH))
240