summaryrefslogtreecommitdiff
path: root/libandroidicu/Android.bp
blob: 847efaba9c3eeaa6338c4aa388581cf7a328120d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// Copyright (C) 2018 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.

// A shared library for use on Android by frameworks and other code outside
// of the ART mainline module. It provides a subset of ICU APIs, some
// Android extensions and stable symbols. Most Android target code should
// depend on this library.
//
// With the exception of a few special cases like host apex build targets,
// host binaries should use libicuuc + libicui18n directly.
package {
    // See: http://go/android-license-faq
    // A large-scale-change added 'default_applicable_licenses' to import
    // all of the 'license_kinds' from "external_icu_license"
    // to get the below license kinds:
    //   SPDX-license-identifier-Apache-2.0
    //   SPDX-license-identifier-Unicode-DFS
    default_applicable_licenses: ["external_icu_license"],
    default_visibility: ["//external/icu:__subpackages__"],
}

cc_library_shared {
    name: "libandroidicu",

    // All code is imported via libandroidicu_static.
    srcs: [],
    // host_supported is required for some cases, e.g. host apex. This library
    // is not intended for general host use.  Please refer to
    // external/icu/build/icu.go for the full allowlist.
    host_supported: true,
    native_bridge_supported: true,
    unique_host_soname: true,
    apex_available: [
        "com.android.i18n",
    ],

    // The implementation of libandroidicu depends on libicuuc and and libicui18n,
    // but we need to export the headers in include/.
    //
    // However, include/unicode has a copy of a subset of header files
    // as in libicuuc and libicui18n. We can't build C/C++ codes against
    // both set of headers, since the headers have the same relative paths,
    // and the compiler will find it ambiguous.
    //
    // Instead, we build the implementation of the shim libaray
    // as a static library aganist libicuuc and libicui18n first,
    // and export the headers in include/.
    whole_static_libs: ["libandroidicu_static"],
    shared_libs: [
        "libbase",
        "libicuuc",
        "libicui18n",
        "liblog",
    ],
    header_libs: ["libandroidicu_headers"],
    export_header_lib_headers: ["libandroidicu_headers"],
    stubs: {
        symbol_file: "libandroidicu.map.txt",
        versions: [
            "1",
        ],
    },
    cppflags: [
        "-std=c++11", // Use the same C++ version as libicuuc
    ],
    cflags: [
        "-Wall",
        "-Werror",
    ],
    target: {
        android: {
            cflags: [
                "-DANDROID_LINK_SHARED_ICU4C",
            ],
            version_script: "libandroidicu.map.txt",
        },
        windows: {
            enabled: true,
        },
    },
    // Only add a new path below if your project needs UConverter or URegularExpression from ICU.
    visibility: [
        "//build/orchestrator/apis",
        "//external/icu:__subpackages__",
        "//packages/modules/RuntimeI18n:__subpackages__",
        // The following dependencies can't use libicu instead, because it depends on UConverter
        // or URegularExpression or statically linking libsqlite / libxml2.
        "//external/libxml2",
        "//external/robolectric/nativeruntime/external/sqlite/android",
        "//external/sqlite:__subpackages__",
        "//external/sfntly",
        "//frameworks/av/media/libmedia",
        // TODO: Remove dependency from /vendor
        "//vendor:__subpackages__",
    ],
}

cc_library_headers {
    name: "libandroidicu_headers",
    host_supported: true,
    native_bridge_supported: true,
    apex_available: [
        "com.android.art",
        "com.android.art.debug",
        "com.android.i18n",
    ],

    // include/unicode/: Includes modified C headers from ICU4C,
    //                   but excludes C++ headers.
    // include/uconfig_local.h: local configuration specific for libandroidicu
    export_include_dirs: ["include"],
    target: {
        windows: {
            enabled: true,
        },
    },
}

// TODO: http://b/120776993 Testing for libandroidicu