#
# Copyright (C) 2010 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

ifneq ($(TARGET_SIMULATOR),true)

LOCAL_PATH := $(call my-dir)
LLVM_ROOT_PATH := external/llvm

USE_DISASSEMBLER := true
LLVM_ENABLE_ASSERTION := false

# Shared library for target
# ========================================================
include $(CLEAR_VARS)
LOCAL_PRELINK_MODULE := false
LOCAL_MODULE := libbcc
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES :=	\
	bcc.cpp	\
	bcc_runtime.c	\
	runtime/lib/arm/adddf3vfp.S	\
	runtime/lib/arm/addsf3vfp.S	\
	runtime/lib/arm/divdf3vfp.S	\
	runtime/lib/arm/divsf3vfp.S	\
	runtime/lib/arm/eqdf2vfp.S	\
	runtime/lib/arm/eqsf2vfp.S	\
	runtime/lib/arm/extendsfdf2vfp.S	\
	runtime/lib/arm/fixdfsivfp.S	\
	runtime/lib/arm/fixsfsivfp.S	\
	runtime/lib/arm/fixunsdfsivfp.S	\
	runtime/lib/arm/fixunssfsivfp.S	\
	runtime/lib/arm/floatsidfvfp.S	\
	runtime/lib/arm/floatsisfvfp.S	\
	runtime/lib/arm/floatunssidfvfp.S	\
	runtime/lib/arm/floatunssisfvfp.S	\
	runtime/lib/arm/gedf2vfp.S	\
	runtime/lib/arm/gesf2vfp.S	\
	runtime/lib/arm/gtdf2vfp.S	\
	runtime/lib/arm/gtsf2vfp.S	\
	runtime/lib/arm/ledf2vfp.S	\
	runtime/lib/arm/lesf2vfp.S	\
	runtime/lib/arm/ltdf2vfp.S	\
	runtime/lib/arm/ltsf2vfp.S	\
	runtime/lib/arm/muldf3vfp.S	\
	runtime/lib/arm/mulsf3vfp.S	\
	runtime/lib/arm/nedf2vfp.S	\
	runtime/lib/arm/negdf2vfp.S	\
	runtime/lib/arm/negsf2vfp.S	\
	runtime/lib/arm/nesf2vfp.S	\
	runtime/lib/arm/subdf3vfp.S	\
	runtime/lib/arm/subsf3vfp.S	\
	runtime/lib/arm/truncdfsf2vfp.S	\
	runtime/lib/arm/unorddf2vfp.S	\
	runtime/lib/arm/unordsf2vfp.S

LOCAL_STATIC_LIBRARIES :=	\
	libLLVMARMCodeGen	\
	libLLVMARMInfo	\
	libLLVMBitReader	\
	libLLVMSelectionDAG	\
	libLLVMAsmPrinter	\
	libLLVMCodeGen	\
	libLLVMLinker	\
	libLLVMJIT	\
	libLLVMTarget	\
	libLLVMMC	\
	libLLVMScalarOpts	\
	libLLVMInstCombine	\
	libLLVMipo	\
	libLLVMipa	\
	libLLVMTransformUtils	\
	libLLVMCore	\
	libLLVMSupport	\
	libLLVMSystem	\
	libLLVMAnalysis

LOCAL_SHARED_LIBRARIES := libdl libcutils libstlport

LOCAL_C_INCLUDES :=	\
	$(LOCAL_PATH)/include

ifeq ($(USE_DISASSEMBLER),true)
LOCAL_CFLAGS += -DUSE_DISASSEMBLER
LOCAL_STATIC_LIBRARIES :=	\
	libLLVMARMDisassembler	\
	libLLVMARMAsmPrinter	\
	libLLVMMCParser	\
	$(LOCAL_STATIC_LIBRARIES)
endif

# This hides most of the symbols in the shared library and reduces the size
# of libbcc.so by about 800k.
LOCAL_LDFLAGS += -Wl,--exclude-libs=ALL

include $(LLVM_ROOT_PATH)/llvm-device-build.mk
include $(BUILD_SHARED_LIBRARY)

# Shared library for host
# ========================================================
include $(CLEAR_VARS)

LOCAL_MODULE := libbcc
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := bcc.cpp bcc_runtime.c

LOCAL_STATIC_LIBRARIES :=	\
	libcutils	\
	libLLVMX86CodeGen	\
	libLLVMX86Info	\
	libLLVMBitReader	\
	libLLVMSelectionDAG	\
	libLLVMAsmPrinter	\
	libLLVMMCParser	\
	libLLVMCodeGen	\
	libLLVMLinker	\
	libLLVMJIT	\
	libLLVMTarget	\
	libLLVMMC	\
	libLLVMScalarOpts	\
	libLLVMInstCombine	\
	libLLVMipo	\
	libLLVMipa	\
	libLLVMTransformUtils	\
	libLLVMCore	\
	libLLVMSupport	\
	libLLVMSystem	\
	libLLVMAnalysis

LOCAL_LDLIBS := -ldl -lpthread

LOCAL_C_INCLUDES :=	\
	$(LOCAL_PATH)/include

ifeq ($(USE_DISASSEMBLER),true)
LOCAL_CFLAGS += -DUSE_DISASSEMBLER
LOCAL_STATIC_LIBRARIES :=	\
	libLLVMX86Disassembler	\
	libLLVMX86AsmPrinter	\
	$(LOCAL_STATIC_LIBRARIES)
endif

include $(LLVM_ROOT_PATH)/llvm-host-build.mk
include $(BUILD_HOST_SHARED_LIBRARY)

# Build children
# ========================================================

include $(call all-makefiles-under,$(LOCAL_PATH))

endif # TARGET_SIMULATOR != true
