# Copyright (C) 2008 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.


LOCAL_PATH:= $(call my-dir)

#
# Common definitions.
#

src_files := \
	cmemory.c \
	cstring.c \
	cwchar.c \
	filteredbrk.cpp \
	icuplug.cpp \
	loadednormalizer2impl.cpp \
	locmap.c \
	pluralmap.cpp \
	propsvec.c \
	punycode.cpp \
	putil.cpp \
	resource.cpp \
	sharedobject.cpp \
	simplepatternformatter.cpp \
	uarrsort.c \
	ubidi.c \
	ubidiln.c \
	ubidi_props.c \
	ubidiwrt.c \
	ucase.cpp \
	ucasemap.cpp \
	ucat.c \
	uchar.c \
	ucln_cmn.cpp \
	ucmndata.c \
	ucnv2022.cpp \
	ucnv_bld.cpp \
	ucnvbocu.cpp \
	ucnv.c \
	ucnv_cb.c \
	ucnv_cnv.c \
	ucnv_ct.c \
	ucnvdisp.c \
	ucnv_err.c \
	ucnv_ext.cpp \
	ucnvhz.c \
	ucnv_io.cpp \
	ucnvisci.c \
	ucnvlat1.c \
	ucnv_lmb.c \
	ucnvmbcs.cpp \
	ucnvscsu.c \
	ucnv_set.c \
	ucnv_u16.c \
	ucnv_u32.c \
	ucnv_u7.c \
	ucnv_u8.c \
	udatamem.c \
	udataswp.c \
	uenum.c \
	uhash.c \
	uinit.cpp \
	uinvchar.c \
	ulist.c \
	ulistformatter.cpp \
	uloc.cpp \
	uloc_keytype.cpp \
	uloc_tag.c \
	umapfile.c \
	umath.c \
	umutex.cpp \
	unames.cpp \
	uresbund.cpp \
	ures_cnv.c \
	uresdata.cpp \
	usc_impl.c \
	uscript.c \
	uscript_props.cpp \
	ushape.cpp \
	ustrcase.cpp \
	ustr_cnv.cpp \
	ustrfmt.c \
	ustring.cpp \
	ustrtrns.cpp \
	ustr_wcs.cpp \
	utf_impl.c \
	utrace.c \
	utrie2_builder.cpp \
	utrie.cpp \
	utypes.c \
	wintz.c

src_files += \
	appendable.cpp \
	bmpset.cpp \
	brkeng.cpp \
	brkiter.cpp \
	bytestream.cpp \
	bytestriebuilder.cpp \
	bytestrie.cpp \
	bytestrieiterator.cpp \
	caniter.cpp \
	chariter.cpp \
	charstr.cpp \
	dictbe.cpp \
	dictionarydata.cpp \
	dtintrv.cpp \
	errorcode.cpp \
	filterednormalizer2.cpp \
	listformatter.cpp \
	locavailable.cpp \
	locbased.cpp \
	locdispnames.cpp \
	locid.cpp \
	loclikely.cpp \
	locresdata.cpp \
	locutil.cpp \
	messagepattern.cpp \
	normalizer2.cpp \
	normalizer2impl.cpp \
	normlzr.cpp \
	parsepos.cpp \
	patternprops.cpp \
	propname.cpp \
	rbbi.cpp \
	rbbidata.cpp \
	rbbinode.cpp \
	rbbirb.cpp \
	rbbiscan.cpp \
	rbbisetb.cpp \
	rbbistbl.cpp \
	rbbitblb.cpp \
	resbund_cnv.cpp \
	resbund.cpp \
	ruleiter.cpp \
	schriter.cpp \
	serv.cpp \
	servlk.cpp \
	servlkf.cpp \
	servls.cpp \
	servnotf.cpp \
	servrbf.cpp \
	servslkf.cpp \
	stringpiece.cpp \
	stringtriebuilder.cpp \
	ubrk.cpp \
	ucasemap_titlecase_brkiter.cpp \
	ucharstriebuilder.cpp \
	ucharstrie.cpp \
	ucharstrieiterator.cpp \
	uchriter.cpp \
	ucnvsel.cpp \
	ucol_swp.cpp \
	udata.cpp \
	uhash_us.cpp \
	uidna.cpp \
	uiter.cpp \
	unifiedcache.cpp \
	unifilt.cpp \
	unifunct.cpp \
	uniset_closure.cpp \
	uniset.cpp \
	uniset_props.cpp \
	unisetspan.cpp \
	unistr_case.cpp \
	unistr_case_locale.cpp \
	unistr_cnv.cpp \
	unistr.cpp \
	unistr_props.cpp \
	unistr_titlecase_brkiter.cpp \
	unormcmp.cpp \
	unorm.cpp \
	uobject.cpp \
	uprops.cpp \
	uset.cpp \
	usetiter.cpp \
	uset_props.cpp \
	usprep.cpp \
	ustack.cpp \
	ustrcase_locale.cpp \
	ustrenum.cpp \
	ustr_titlecase_brkiter.cpp \
	utext.cpp \
	util.cpp \
	util_props.cpp \
	utrie2.cpp \
	uts46.cpp \
	uvector.cpp \
	uvectr32.cpp \
	uvectr64.cpp

# This is the empty compiled-in icu data structure
# that we need to satisfy the linker.
src_files += ../stubdata/stubdata.c

c_includes := \
	$(LOCAL_PATH) \
	$(LOCAL_PATH)/../i18n

# We deliberately do not set -DICU_DATA_DIR: ICU4C is configured on Android
# using udata_setCommonData.

local_cflags += -D_REENTRANT
local_cflags += -DU_COMMON_IMPLEMENTATION

local_cflags += -O3 -fvisibility=hidden

local_cflags += -Wno-unused-parameter \
                -Wno-missing-field-initializers \
                -Wno-sign-compare \
                -Wno-deprecated-declarations

#
# Build for the target (device).
#

include $(CLEAR_VARS)
LOCAL_SRC_FILES += $(src_files)
LOCAL_C_INCLUDES += $(c_includes) $(optional_android_logging_includes)
LOCAL_CFLAGS += $(local_cflags) -DPIC -fPIC
LOCAL_SHARED_LIBRARIES += libdl $(optional_android_logging_libraries)
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := libicuuc
LOCAL_RTTI_FLAG := -frtti
LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/Android.mk
ifndef BRILLO
LOCAL_REQUIRED_MODULES += icu-data
endif
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
ifneq ($(TARGET_ARCH),mips64)
LOCAL_CLANG := true
endif
include $(BUILD_SHARED_LIBRARY)

#
# Build for the host.
#

include $(CLEAR_VARS)
LOCAL_SRC_FILES += $(src_files)
LOCAL_C_INCLUDES += $(c_includes) $(optional_android_logging_includes)
LOCAL_CFLAGS += $(local_cflags)
LOCAL_SHARED_LIBRARIES += $(optional_android_logging_libraries)
LOCAL_LDLIBS += -ldl -lm -lpthread
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := libicuuc-host
LOCAL_ADDITIONAL_DEPENDENCIES += $(LOCAL_PATH)/Android.mk
LOCAL_REQUIRED_MODULES += icu-data-host
LOCAL_MULTILIB := both
LOCAL_EXPORT_C_INCLUDE_DIRS := $(LOCAL_PATH)
LOCAL_CLANG := true
include $(BUILD_HOST_SHARED_LIBRARY)

#
# Build as a static library against the NDK
#

include $(CLEAR_VARS)
LOCAL_SDK_VERSION := 9
LOCAL_NDK_STL_VARIANT := stlport_static
LOCAL_C_INCLUDES += $(c_includes)
LOCAL_EXPORT_C_INCLUDES += $(LOCAL_PATH)
LOCAL_RTTI_FLAG := -frtti
LOCAL_CFLAGS += $(local_cflags) -DPIC -fPIC
# Using -Os over -O3 actually cuts down the final executable size by a few dozen kilobytes
LOCAL_CFLAGS += -Os
LOCAL_EXPORT_CFLAGS += -DU_STATIC_IMPLEMENTATION=1
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE := libicuuc_static
LOCAL_SRC_FILES += $(src_files)
ifndef BRILLO
LOCAL_REQUIRED_MODULES += icu-data
endif
ifneq ($(TARGET_ARCH),mips64)
LOCAL_CLANG := true
endif
include $(BUILD_STATIC_LIBRARY)
