platform_system_core/libutils/Android.bp
Vic Yang d4cb489434 libutils: Introduce StaticString16
This is a backward compatible implementation of compile time
constructed String16 support.

As much as we'd like a regular constexpr constructor for String16, we
want to make sure the regular non-static String16 does not regress.
We also need to make sure prebuilts built with previous version of
String16 still works with new libutils.  This means we cannot change
the size of String16 objects and we cannot make anything virtual.

To add a flag to indicate whether a String16 is static without
increasing the size of non-static String16 objects, we repurpose a
reserved field in SharedBuffer as "for client use".  With this, we can
tag every String16 and perform memory operation differently based on
how the underlying buffers are allocated.

By using StaticString16, we are able to eliminate the runtime
construction of a String16 and move it out of .bss section.

Bug: 138856262
Test: Run newly added unit tests.
Change-Id: I72bb8dc27a59b9ef34e0d934bc1e00b0f675855a
2019-08-09 11:01:37 -07:00

292 lines
6 KiB
Text

// 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.
cc_library_headers {
name: "libutils_headers",
vendor_available: true,
recovery_available: true,
host_supported: true,
native_bridge_supported: true,
header_libs: [
"liblog_headers",
"libsystem_headers",
"libcutils_headers",
"libprocessgroup_headers",
],
export_header_lib_headers: [
"liblog_headers",
"libsystem_headers",
"libcutils_headers",
"libprocessgroup_headers",
],
export_include_dirs: ["include"],
target: {
android: {
header_libs: ["libbacktrace_headers"],
export_header_lib_headers: ["libbacktrace_headers"],
},
linux_bionic: {
enabled: true,
},
windows: {
enabled: true,
},
},
}
cc_defaults {
name: "libutils_defaults",
vendor_available: true,
recovery_available: true,
vndk: {
enabled: true,
support_system_process: true,
},
host_supported: true,
cflags: [
"-Wall",
"-Werror",
],
header_libs: [
"libbase_headers",
"libutils_headers",
],
export_header_lib_headers: [
"libutils_headers",
],
shared_libs: [
"libcutils",
"liblog",
],
arch: {
mips: {
cflags: ["-DALIGN_DOUBLE"],
},
},
target: {
android: {
cflags: ["-fvisibility=protected"],
shared_libs: [
"libprocessgroup",
"libdl",
"libvndksupport",
],
sanitize: {
misc_undefined: ["integer"],
},
},
recovery: {
exclude_shared_libs: ["libvndksupport"],
},
linux_bionic: {
enabled: true,
},
darwin: {
cflags: ["-Wno-unused-parameter"],
},
windows: {
cflags: [
// Under MinGW, ctype.h doesn't need multi-byte support
"-DMB_CUR_MAX=1",
"-Wno-unused-private-field",
],
enabled: true,
},
},
}
cc_library {
name: "libutils",
defaults: ["libutils_defaults"],
native_bridge_supported: true,
srcs: [
"FileMap.cpp",
"JenkinsHash.cpp",
"NativeHandle.cpp",
"Printer.cpp",
"PropertyMap.cpp",
"RefBase.cpp",
"SharedBuffer.cpp",
"StopWatch.cpp",
"String8.cpp",
"String16.cpp",
"StrongPointer.cpp",
"SystemClock.cpp",
"Threads.cpp",
"Timers.cpp",
"Tokenizer.cpp",
"Unicode.cpp",
"VectorImpl.cpp",
"misc.cpp",
],
target: {
android: {
srcs: [
"Trace.cpp",
],
},
linux: {
header_libs: ["libbase_headers"],
srcs: [
"Looper.cpp",
],
},
},
}
cc_library {
name: "libutilscallstack",
defaults: ["libutils_defaults"],
srcs: [
"CallStack.cpp",
],
arch: {
mips: {
cflags: ["-DALIGN_DOUBLE"],
},
},
shared_libs: [
"libutils",
"libbacktrace",
],
target: {
linux: {
srcs: [
"ProcessCallStack.cpp",
],
},
darwin: {
enabled: false,
},
windows: {
enabled: false,
},
},
}
cc_test {
name: "libutils_test",
host_supported: true,
srcs: [
"BitSet_test.cpp",
"FileMap_test.cpp",
"LruCache_test.cpp",
"Mutex_test.cpp",
"SharedBuffer_test.cpp",
"String8_test.cpp",
"String16_test.cpp",
"StrongPointer_test.cpp",
"Unicode_test.cpp",
"Vector_test.cpp",
],
target: {
android: {
srcs: [
"SystemClock_test.cpp",
],
shared_libs: [
"libz",
"liblog",
"libcutils",
"libutils",
"libbase",
],
},
linux: {
srcs: [
"Looper_test.cpp",
"RefBase_test.cpp",
],
},
host: {
static_libs: [
"libutils",
"liblog",
"libbase",
],
},
},
cflags: [
"-Wall",
"-Wextra",
"-Werror",
"-Wthread-safety",
],
test_suites: ["device-tests"],
}
// TODO: the test infrastructure isn't yet capable of running this,
// so it's broken out into its own test so that the main libutils_tests
// can be in presubmit even if this can't.
cc_test {
name: "libutils_singleton_test",
srcs: ["Singleton_test.cpp"],
cflags: [
"-Wall",
"-Werror",
],
shared_libs: ["libbase"],
required: [
":libutils_test_singleton1",
":libutils_test_singleton2",
],
}
cc_test_library {
name: "libutils_test_singleton1",
host_supported: true,
relative_install_path: "libutils_test",
srcs: ["Singleton_test1.cpp"],
cflags: [
"-Wall",
"-Werror",
],
}
cc_test_library {
name: "libutils_test_singleton2",
host_supported: true,
relative_install_path: "libutils_test",
srcs: ["Singleton_test2.cpp"],
cflags: [
"-Wall",
"-Werror",
],
shared_libs: ["libutils_test_singleton1"],
}