// 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.

//
// Common definitions.
//

cc_defaults {
    name: "libicuuc_defaults",
    srcs: [
        "cmemory.c",
        "cstring.c",
        "cstr.cpp",
        "cwchar.c",
        "filteredbrk.cpp",
        "icuplug.cpp",
        "loadednormalizer2impl.cpp",
        "locdspnm.cpp",
        "locmap.c",
        "pluralmap.cpp",
        "propsvec.c",
        "punycode.cpp",
        "putil.cpp",
        "resource.cpp",
        "sharedobject.cpp",
        "simpleformatter.cpp",
        "uarrsort.c",
        "ubidi.c",
        "ubidiln.c",
        "ubidi_props.c",
        "ubiditransform.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",
        "ucurr.cpp",
        "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",

        "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",
    ],

    // We deliberately do not set -DICU_DATA_DIR: ICU4C is configured on Android
    // using udata_setCommonData.
    cflags: [
        "-D_REENTRANT",
        "-DU_COMMON_IMPLEMENTATION",

        "-O3",
        "-fvisibility=hidden",

        "-Wno-unused-parameter",
        "-Wno-missing-field-initializers",
        "-Wno-sign-compare",
        "-Wno-deprecated-declarations",
    ],

    export_include_dirs: ["."],
    rtti: true,
    clang: true,
    arch: {
        mips64: {
            clang: false,
        },
    },

    required: ["icu-data"],

    target: {
        android: {
            cflags: [
                "-DPIC",
                "-fPIC",
            ],
            shared_libs: ["libdl"],
        },
        host: {
            host_ldlibs: [
                "-ldl",
                "-lm",
                "-lpthread",
            ],
        },
    },
}

//
// Build for the host and target.
//
cc_library_shared {
    name: "libicuuc",
    vendor_available: true,
    host_supported: true,
    unique_host_soname: true,
    defaults: ["libicuuc_defaults"],
    static_libs: ["libicuuc_stubdata"],
}

//
// Build as a static library against the NDK
//
cc_library_static {
    name: "libicuuc_static",
    sdk_version: "9",
    stl: "stlport_static",
    defaults: ["libicuuc_defaults"],
    static_libs: ["libicuuc_stubdata_ndk"],

    cflags: ["-Os"], // Using -Os over -O3 actually cuts down the final executable size by a few dozen kilobytes
}