650 lines
20 KiB
Bash
Executable file
650 lines
20 KiB
Bash
Executable file
#!/bin/sh
|
|
#
|
|
# 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.
|
|
#
|
|
|
|
. `dirname $0`/prebuilt-common.sh
|
|
PROGDIR=`dirname $0`
|
|
PROGNAME=`basename $0`
|
|
|
|
if [ -z "$ANDROID_PRODUCT_OUT" ] ; then
|
|
echo "ERROR: The environment variable ANDROID_PRODUCT_OUT is not defined!"
|
|
fi
|
|
|
|
# This sets HOST_TAG to linux-x86 or darwin-x86 on 64-bit systems
|
|
force_32bit_binaries
|
|
|
|
# We need to extract the auto-detected platform level to display it in
|
|
# the help. Do not barf if we can't do it right now, to keep --help working
|
|
# in this case.
|
|
#
|
|
BUILD_PROP=$ANDROID_PRODUCT_OUT/system/build.prop
|
|
if [ ! -f "$BUILD_PROP" ] ; then
|
|
# Use this as default if the build.prop file does not exist
|
|
# We will generate an error after the extract_parameters call
|
|
# in this specific case, but we want --help to work before that.
|
|
PLATFORM=9
|
|
else
|
|
PLATFORM=`awk -F '=' '$1 == "ro.build.version.sdk" { print $2; }' $BUILD_PROP`
|
|
if [ $? != 0 ] ; then
|
|
dump "WARNING: Could not extract default platform level from $BUILD_PROP!"
|
|
PLATFORM=9
|
|
dump "Defaulting to $PLATFORM"
|
|
fi
|
|
fi
|
|
|
|
PROGRAM_PARAMETERS="<level> [<level2>...]"
|
|
PROGRAM_DESCRIPTION=\
|
|
"This script is used to update the NDK's platform headers and system libraries
|
|
from those generated after a full build of the Android platform. Run it after
|
|
modifying and rebuilding one of the public libraries exposed through the NDK.
|
|
|
|
The first parameter must be a platform/API level. For example, to update the
|
|
NDK definitions for the 'android-9' platform, use one of:
|
|
|
|
$PROGNAME android-9
|
|
$PROGNAME 9
|
|
|
|
You can also use several values to update several levels at once, e.g.:
|
|
|
|
$PROGNAME $API_LEVELS
|
|
|
|
NOTE: The currently auto-detected API level for your build is $PLATFORM,
|
|
but this value may be incorrect if your platform has not been assigned
|
|
a new API level yet.
|
|
|
|
This script is really in charge of the following tasks:
|
|
|
|
1/ Import system headers from \$ANDROID/framework/base/ and other
|
|
locations in the full system source tree.
|
|
|
|
2/ Locate system shared libraries from \$ANDROID_PRODUCT_OUT/system/lib
|
|
and convert them into small \"shell\" .so files that only export the
|
|
same functions and variables. These can be used with the NDK at link
|
|
time, are much smaller, and also do not require the use of special
|
|
linker flags when used with the standalone NDK toolchain
|
|
(i.e. -Wl,--allow-shlib-undefined)
|
|
|
|
3/ For each shared library, also generate a list of symbols exported
|
|
by the shell. This makes it easier to see with 'git diff' which
|
|
symbols were added (or even removed) since the last invocation.
|
|
|
|
4/ Copy a few system static libraries (libc.a, libm.a, etc...) used
|
|
to generate static executables. As well as a few key object files
|
|
required by the C runtime (e.g. crtbegin_dynamic.o), when needed.
|
|
|
|
By default, all files are placed under \$ANDROID/development/ndk
|
|
but you can override this with the --out-dir=<path> option.
|
|
|
|
By default, the build-specific platform/API level is autodetected, and
|
|
only the files under \$ANDROID_ROOT/development/ndk/platforms/android-<level>/
|
|
will be affected. This ensures you don't accidentally overwrite files
|
|
corresponding to previous releases.
|
|
"
|
|
|
|
ARCH=arm
|
|
register_var_option "--arch=<name>" ARCH "Specify architecture name."
|
|
|
|
FORCE=no
|
|
register_var_option "--force" FORCE "Force-copy all files."
|
|
|
|
DEVDIR="$ANDROID_NDK_ROOT/../development/ndk"
|
|
if [ -d "$DEVDIR" ] ; then
|
|
OUT_DIR=`cd $DEVDIR && pwd`
|
|
else
|
|
OUT_DIR=
|
|
fi
|
|
register_var_option "--out-dir=<path>" OUT_DIR "Specify output directory."
|
|
|
|
TOOLCHAIN_PREFIX=
|
|
register_var_option "--toolchain-prefix=<path>" TOOLCHAIN_PREFIX "Path and prefix for the toolchain"
|
|
log "Toolchain prefix: $TOOLCHAIN_PREFIX"
|
|
|
|
extract_parameters "$@"
|
|
|
|
if [ -z "$PARAMETERS" ] ; then
|
|
dump "ERROR: Missing required API/platform level. See --help for usage instructions."
|
|
exit 1
|
|
fi
|
|
|
|
# Normalize platform names, i.e. get rid of android- prefix in a list of
|
|
# platform levels
|
|
#
|
|
# 3 android-4 foo-5 -> 3 4 foo-5 (foo-5 is invalid name)
|
|
#
|
|
# $1: list of platform levels
|
|
#
|
|
normalize_platforms ()
|
|
{
|
|
local RET=$(echo "$@" | tr ' ' '\n' | sed -e 's!android-!!g' | tr '\n' ' ')
|
|
echo ${RET%% }
|
|
}
|
|
|
|
PLATFORMS=`normalize_platforms $PARAMETERS`
|
|
log "Target platform levels: $PLATFORMS"
|
|
|
|
if [ "$FORCE" = "yes" ] ;then
|
|
# We can't accept several platform levels in --force mode.
|
|
NUM_PLATFORMS=$(echo $PLATFORMS | tr ' ' '\n' | wc -l)
|
|
if [ "$NUM_PLATFORMS" != 1 ]; then
|
|
echo "ERROR: You can only use a single platform level when using --force ($NUM_PLATFORMS)"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Return the list of files under a given directory
|
|
# $1: directory
|
|
# $2: (optional) file patterns
|
|
list_regular_files_in ()
|
|
{
|
|
local DIR="$1"
|
|
shift
|
|
local PATTERNS="$@"
|
|
if [ -z "$PATTERNS" ]; then
|
|
PATTERNS="."
|
|
fi
|
|
cd "$DIR" && find $PATTERNS -type f | sed -e 's!^./!!g'
|
|
}
|
|
|
|
# Check that a given platform level was listed on the command line
|
|
# $1: Platform numerical level (e.g. '3')
|
|
# returns true if the platform is listed
|
|
platform_check ()
|
|
{
|
|
if [ "$FORCE" = "yes" ]; then
|
|
PLATFORM_ROOT="$OUT_DIR/platforms/android-$PLATFORMS/arch-$ARCH"
|
|
log "Platform root (forced): $PLATFORM_ROOT"
|
|
return 0
|
|
fi
|
|
echo "$PLATFORMS" | tr ' ' '\n' | fgrep -q "$1"
|
|
if [ $? != 0 ] ; then
|
|
# Not listed, return an error code for 'if'
|
|
return 1
|
|
else
|
|
PLATFORM_ROOT="$OUT_DIR/platforms/android-$1/arch-$ARCH"
|
|
log "Platform root: $PLATFORM_ROOT"
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
# Determine Android build tree root
|
|
ANDROID_ROOT=`cd $ANDROID_PRODUCT_OUT/../../../.. && pwd`
|
|
log "Android build tree root: $ANDROID_ROOT"
|
|
log "Android product out: $ANDROID_PRODUCT_OUT"
|
|
|
|
case $ARCH in
|
|
arm)
|
|
TOOLCHAIN=$DEFAULT_ARCH_TOOLCHAIN_NAME_arm
|
|
PREFIX=$DEFAULT_ARCH_TOOLCHAIN_PREFIX_arm
|
|
;;
|
|
x86)
|
|
TOOLCHAIN=$DEFAULT_ARCH_TOOLCHAIN_NAME_x86
|
|
PREFIX=$DEFAULT_ARCH_TOOLCHAIN_PREFIX_x86
|
|
;;
|
|
mips)
|
|
TOOLCHAIN=$DEFAULT_ARCH_TOOLCHAIN_NAME_mips
|
|
PREFIX=$DEFAULT_ARCH_TOOLCHAIN_PREFIX_mips
|
|
;;
|
|
*)
|
|
echo "ERROR: Unsupported architecture: $ARCH"
|
|
exit 1
|
|
esac
|
|
|
|
if [ -z "$TOOLCHAIN_PREFIX" ]; then
|
|
TOOLCHAIN_NAME=$(get_default_toolchain_name_for_arch $ARCH)
|
|
TOOLCHAIN_PREFIX=$(get_default_toolchain_prefix_for_arch $ARCH)
|
|
TOOLCHAIN_PREFIX=$(get_toolchain_install $ANDROID_NDK_ROOT $TOOLCHAIN_NAME)/bin/$TOOLCHAIN_PREFIX
|
|
TOOLCHAIN_PREFIX=${TOOLCHAIN_PREFIX%%-}
|
|
if [ -z "$TOOLCHAIN_PREFIX" ]; then
|
|
echo "ERROR: Unsupported architecture"
|
|
exit 1
|
|
fi
|
|
echo "Autoconfig: --toolchain-prefix=$TOOLCHAIN_PREFIX"
|
|
fi
|
|
|
|
if [ ! -d "$(dirname $TOOLCHAIN_PREFIX)" ]; then
|
|
echo "ERROR: Toolchain not installed, missing directory: $(dirname $TOOLCHAIN_PREFIX)"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "$TOOLCHAIN_PREFIX-readelf" ]; then
|
|
echo "ERROR: Toolchain not installed, missing program: $TOOLCHAIN_PREFIX-readelf"
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$OUT_DIR" ] ; then
|
|
dump "ERROR: Could not find valid output directory (e.g. \$NDK/../development/ndk)."
|
|
dump "Please use --out-dir=<path> to specify one!"
|
|
exit 1
|
|
fi
|
|
|
|
# Check the platform value and set PLATFORM_ROOT
|
|
#
|
|
|
|
# Normalize the value: android-3 -> android-3 3 -> android-3
|
|
PLATFORM=${PLATFORM##android-}
|
|
PLATFORM=android-$PLATFORM
|
|
|
|
|
|
# Temp file used to list shared library symbol exclusions
|
|
# See set_symbol_excludes and extract_shared_library_xxxx functions below
|
|
SYMBOL_EXCLUDES=$TMPDIR/ndk-symbol-excludes.txt
|
|
|
|
# Temp file used to list shared library symbol inclusions, these
|
|
# are essentially overrides to the content of SYMBOL_EXCLUDES
|
|
SYMBOL_INCLUDES=$TMPDIR/ndk-symbol-includes.txt
|
|
|
|
# Reset the symbol exclusion list to its default
|
|
reset_symbol_excludes ()
|
|
{
|
|
# By default, do not export C++ mangled symbol, which all start with _Z
|
|
echo '^_Z' > $SYMBOL_EXCLUDES
|
|
> $SYMBOL_INCLUDES
|
|
}
|
|
|
|
# Add new exclusion patterns to SYMBOL_EXCLUDES
|
|
set_symbol_excludes ()
|
|
{
|
|
(echo "$@" | tr ' ' '\n') >> $SYMBOL_EXCLUDES
|
|
}
|
|
|
|
# Add new inclusion patterns to SYMBOL_INCLUDES
|
|
set_symbol_includes ()
|
|
{
|
|
(echo "$@" | tr ' ' '\n') >> $SYMBOL_INCLUDES
|
|
}
|
|
|
|
# Clear symbol exclusion/inclusion files
|
|
clear_symbol_excludes ()
|
|
{
|
|
rm -f $SYMBOL_EXCLUDES $SYMBOL_INCLUDES
|
|
}
|
|
|
|
# Filter the list of symbols from a file
|
|
# $1: path to symbol list file
|
|
filter_symbols ()
|
|
{
|
|
(grep -v -f $SYMBOL_EXCLUDES $1 ; grep -f $SYMBOL_INCLUDES $1) | sort -u
|
|
}
|
|
|
|
#
|
|
# Dump the list of dynamic functions exported by a given shared library
|
|
# $1: Path to shared library object
|
|
extract_shared_library_functions ()
|
|
{
|
|
$TOOLCHAIN_PREFIX-readelf -s -D -W $1 | awk '$5 ~ /FUNC/ && $6 ~ /GLOBAL/ && $8 !~ /UND/ { print $9; }' > $TMPC
|
|
filter_symbols $TMPC
|
|
}
|
|
|
|
# Dump the list of global variables exposed by a given shared library
|
|
# $1: Path to shared library object
|
|
extract_shared_library_variables ()
|
|
{
|
|
$TOOLCHAIN_PREFIX-readelf -s -D -W $1 | awk '$5 ~ /OBJECT/ && $6 ~ /GLOBAL/ && $8 !~ /UND/ { print $9; }' > $TMPC
|
|
filter_symbols $TMPC
|
|
}
|
|
|
|
# Generate link library, i.e. a special tiny shell .so that exports the
|
|
# same symbols as a reference shared library, and can be used during
|
|
# link with the NDK toolchain.
|
|
#
|
|
# Having these shells allows two things:
|
|
#
|
|
# - Reduce the size of the NDK release package (some libs are very large)
|
|
# - Use the standalone toolchain without -Wl,--allow-shlib-undefined
|
|
#
|
|
# Note that the list of symbols for each generated library is stored
|
|
# under arch-$ARCH/symbols/<libname>.txt
|
|
#
|
|
# $1: Path to reference shared library
|
|
# $2: Path to output shared library (can be the same as $1)
|
|
#
|
|
generate_shell_library ()
|
|
{
|
|
# First, extract the list of functions and variables exported by the
|
|
# reference library.
|
|
local funcs="`extract_shared_library_functions $1`"
|
|
local vars="`extract_shared_library_variables $1`"
|
|
local numfuncs=`echo $funcs | wc -w`
|
|
local numvars=`echo $vars | wc -w`
|
|
dump "Generating shell library for `basename $1` ($numfuncs functions + $numvars variables)"
|
|
|
|
# Now generate a small C source file that contains similarly-named stubs
|
|
echo "/* Auto-generated file, do not edit */" > $TMPC
|
|
local func var
|
|
for func in $funcs; do
|
|
echo "void $func(void) {}" >> $TMPC
|
|
done
|
|
for var in $vars; do
|
|
echo "int $var;" >> $TMPC
|
|
done
|
|
|
|
# Build it with our cross-compiler. It will complain about conflicting
|
|
# types for built-in functions, so just shut it up.
|
|
$TOOLCHAIN_PREFIX-gcc -Wl,-shared,-Bsymbolic -nostdlib -o $TMPO $TMPC 1>/dev/null 2>&1
|
|
if [ $? != 0 ] ; then
|
|
dump "ERROR: Can't generate shell library for: $1"
|
|
dump "See the content of $TMPC for details."
|
|
exit 1
|
|
fi
|
|
|
|
# Sanity check: the generated shared library must export the same
|
|
# functions and variables, or something is really rotten!
|
|
local newfuncs="`extract_shared_library_functions $TMPO`"
|
|
local newvars="`extract_shared_library_variables $TMPO`"
|
|
if [ "$newfuncs" != "$funcs" ] ; then
|
|
dump "ERROR: mismatch in generated functions list"
|
|
exit 1
|
|
fi
|
|
if [ "$newvars" != "$vars" ] ; then
|
|
dump "ERROR: mismatch in generated variables list"
|
|
exit 1
|
|
fi
|
|
|
|
# Copy to our destination now
|
|
local libdir=`dirname "$2"`
|
|
mkdir -p "$libdir" && cp -f $TMPO "$2"
|
|
if [ $? != 0 ] ; then
|
|
dump "ERROR: Can't copy shell library for: $1"
|
|
dump "target location is: $2"
|
|
exit 1
|
|
fi
|
|
|
|
# Write the functions and variables to a symbols file now
|
|
local symdir=`dirname "$libdir"`/symbols
|
|
local symfile="$symdir/`basename $1.txt`"
|
|
|
|
dump "Generating symbol file: $symfile"
|
|
mkdir -p "$symdir" && > $symfile
|
|
(echo "$funcs" | tr ' ' '\n') >> $symfile
|
|
(echo "$vars" | tr ' ' '\n') >> $symfile
|
|
|
|
# Clear the export exclusion list
|
|
reset_symbol_excludes
|
|
}
|
|
|
|
# 'Copy' a given system library. This really reads the shared library to
|
|
# to generate a small shell version that will be installed at the destination
|
|
# $1: Library name (e.g. libEGL.so)
|
|
#
|
|
copy_system_shared_library ()
|
|
{
|
|
local src="$ANDROID_PRODUCT_OUT/system/lib/$1.so"
|
|
if [ ! -f "$src" ] ; then
|
|
dump "ERROR: Missing system library: $src"
|
|
exit 1
|
|
fi
|
|
local dst="$PLATFORM_ROOT/lib/$1.so"
|
|
mkdir -p `dirname "$dst"` &&
|
|
generate_shell_library "$src" "$dst"
|
|
}
|
|
|
|
copy_system_static_library ()
|
|
{
|
|
local src="$ANDROID_PRODUCT_OUT/obj/STATIC_LIBRARIES/$1_intermediates/$1.a"
|
|
if [ ! -f "$src" ] ; then
|
|
dump "ERROR: Missing system static library: $src"
|
|
exit 1
|
|
fi
|
|
local dst="$PLATFORM_ROOT/lib/$1.a"
|
|
dump "Copying system static library: $1.a"
|
|
mkdir -p `dirname "$dst"` && cp -f "$src" "$dst"
|
|
}
|
|
|
|
copy_system_object_file ()
|
|
{
|
|
local src="$ANDROID_PRODUCT_OUT/obj/lib/$1.o"
|
|
if [ ! -f "$src" ] ; then
|
|
dump "ERROR: Missing system object file: $src"
|
|
exit 1
|
|
fi
|
|
local dst="$PLATFORM_ROOT/lib/$1.o"
|
|
dump "Copying system object file: $1.o"
|
|
mkdir -p `dirname "$dst"` &&
|
|
cp -f "$src" "$dst"
|
|
}
|
|
|
|
# Copy the content of a given directory to $SYSROOT/usr/include
|
|
# $1: Source directory
|
|
# $2+: List of headers
|
|
copy_system_headers ()
|
|
{
|
|
local srcdir="$1"
|
|
shift
|
|
local header
|
|
dump "Copying system headers from: $srcdir"
|
|
for header; do
|
|
dump " $header"
|
|
local src="$srcdir/$header"
|
|
local dst="$PLATFORM_ROOT/../include/$header"
|
|
if [ ! -f "$srcdir/$header" ] ; then
|
|
dump "ERROR: Missing system header: $srcdir/$header"
|
|
exit 1
|
|
fi
|
|
mkdir -p `dirname "$dst"` && cp -f "$src" "$dst"
|
|
if [ $? != 0 ] ; then
|
|
dump "ERROR: Could not copy system header: $src"
|
|
dump "Target location: $dst"
|
|
exit 1
|
|
fi
|
|
done
|
|
}
|
|
|
|
# Copy all headers found under $1
|
|
# $1: source directory
|
|
copy_system_headers_from ()
|
|
{
|
|
local headers=$(list_regular_files_in "$1")
|
|
copy_system_headers $1 $headers
|
|
}
|
|
|
|
# Same as copy_system_headers, but for arch-specific files
|
|
# $1: Source directory
|
|
# $2+: List of headers
|
|
copy_arch_system_headers ()
|
|
{
|
|
local srcdir="$1"
|
|
shift
|
|
local header
|
|
for header; do
|
|
dump "Copying $arch system header: $header from $srcdir"
|
|
local src="$srcdir/$header"
|
|
local dst="$PLATFORM_ROOT/include/$header"
|
|
if [ ! -f "$srcdir/$header" ] ; then
|
|
dump "ERROR: Missing $ARCH system header: $srcdir/$header"
|
|
exit 1
|
|
fi
|
|
mkdir -p `dirname "$dst"` && cp -f "$src" "$dst"
|
|
if [ $? != 0 ] ; then
|
|
dump "ERROR: Could not copy $ARCH system header: $src"
|
|
dump "Target location: $dst"
|
|
exit 1
|
|
fi
|
|
done
|
|
}
|
|
|
|
copy_arch_system_headers_from ()
|
|
{
|
|
local headers=$(list_regular_files_in "$1")
|
|
copy_arch_system_headers $1 $headers
|
|
}
|
|
|
|
copy_arch_kernel_headers_from ()
|
|
{
|
|
local headers=$(list_regular_files_in "$1" asm)
|
|
copy_arch_system_headers $1 $headers
|
|
}
|
|
|
|
# Now do the work
|
|
|
|
reset_symbol_excludes
|
|
|
|
# API level 3
|
|
if platform_check 3; then
|
|
# Remove a few internal symbols that should not be exposed
|
|
# from the C library (we plan to clean that up soon by using the
|
|
# "hidden" visibility attribute in the near future).
|
|
#
|
|
set_symbol_excludes \
|
|
'^the_' '^dns_' 'load_domain_search_list' 'res_get_dns_changed' \
|
|
'^_resolv_cache' '^_dns_getht' '^_thread_atexit' \
|
|
'^free_malloc_leak_info' 'fake_gmtime_r' 'fake_localtime_r' \
|
|
'^gAllocationsMutex' '^gHashTable' '^gMallocLeakZygoteChild' \
|
|
|
|
copy_system_shared_library libc
|
|
copy_system_static_library libc
|
|
copy_system_headers_from $ANDROID_ROOT/bionic/libc/include
|
|
copy_arch_system_headers_from $ANDROID_ROOT/bionic/libc/arch-$ARCH/include
|
|
copy_arch_kernel_headers_from $ANDROID_ROOT/bionic/libc/kernel/arch-$ARCH
|
|
|
|
copy_system_object_file crtbegin_dynamic
|
|
copy_system_object_file crtbegin_static
|
|
copy_system_object_file crtend_android
|
|
case $ARCH in
|
|
x86)
|
|
copy_system_object_file crtbegin_so
|
|
copy_system_object_file crtend_so
|
|
;;
|
|
esac
|
|
|
|
copy_system_shared_library libm
|
|
copy_system_static_library libm
|
|
copy_system_headers $ANDROID_ROOT/bionic/libm/include math.h
|
|
case "$ARCH" in
|
|
x86 )
|
|
copy_arch_system_headers $ANDROID_ROOT/bionic/libm/include/i387 fenv.h
|
|
;;
|
|
* )
|
|
copy_arch_system_headers $ANDROID_ROOT/bionic/libm/$ARCH fenv.h
|
|
;;
|
|
esac
|
|
|
|
# The <dlfcn.h> header was already copied from bionic/libc/include
|
|
copy_system_shared_library libdl
|
|
# There is no libdl.a at the moment, we might need one in
|
|
# the future to build gdb-7.1.x though.
|
|
|
|
copy_system_shared_library libz
|
|
copy_system_static_library libz
|
|
copy_system_headers $ANDROID_ROOT/external/zlib zconf.h zlib.h
|
|
|
|
set_symbol_excludes '^.*' # exclude everything
|
|
set_symbol_includes '^__android_' # except __android_xxxx functions
|
|
copy_system_shared_library liblog
|
|
copy_system_headers $ANDROID_ROOT/system/core/include android/log.h
|
|
|
|
# NOTE: We do not copy the C++ headers, they are part of the NDK
|
|
# under $NDK/source/cxx-stl. They were separated from the rest
|
|
# of the platform headers in order to make room for other STL
|
|
# implementations (e.g. STLport or GNU Libstdc++-v3)
|
|
#
|
|
# This is the only library that is allowed to export C++ symbols for now.
|
|
set_symbol_includes '^_Z.*'
|
|
copy_system_shared_library libstdc++
|
|
copy_system_static_library libstdc++
|
|
|
|
# We link gdbserver statically with libthreadb, so there is no point
|
|
# in copying the shared library (which by the way has an unstable ABI
|
|
# anyway).
|
|
copy_system_static_library libthread_db
|
|
copy_system_headers $ANDROID_ROOT/bionic/libthread_db/include thread_db.h sys/procfs.h
|
|
|
|
copy_system_headers $ANDROID_ROOT/libnativehelper/include/nativehelper jni.h
|
|
fi
|
|
|
|
# API level 4
|
|
if platform_check 4; then
|
|
copy_system_shared_library libGLESv1_CM
|
|
copy_system_headers $ANDROID_ROOT/frameworks/base/opengl/include \
|
|
GLES/gl.h \
|
|
GLES/glext.h \
|
|
GLES/glplatform.h
|
|
|
|
copy_system_headers $ANDROID_ROOT/frameworks/base/opengl/include \
|
|
KHR/khrplatform.h
|
|
fi
|
|
|
|
# API level 5
|
|
if platform_check 5; then
|
|
copy_system_shared_library libGLESv2
|
|
copy_system_headers $ANDROID_ROOT/frameworks/base/opengl/include \
|
|
GLES2/gl2.h \
|
|
GLES2/gl2ext.h \
|
|
GLES2/gl2platform.h
|
|
fi
|
|
|
|
# API level 8
|
|
if platform_check 8; then
|
|
copy_system_shared_library libandroid
|
|
copy_system_shared_library libjnigraphics
|
|
copy_system_headers $ANDROID_ROOT/frameworks/base/native/include \
|
|
android/bitmap.h
|
|
fi
|
|
|
|
# API level 9
|
|
if platform_check 9; then
|
|
case $ARCH in
|
|
arm)
|
|
copy_system_object_file crtbegin_so
|
|
copy_system_object_file crtend_so
|
|
;;
|
|
esac
|
|
|
|
copy_system_shared_library libandroid
|
|
copy_system_headers $ANDROID_ROOT/frameworks/base/native/include \
|
|
android/asset_manager.h \
|
|
android/asset_manager_jni.h \
|
|
android/configuration.h \
|
|
android/input.h \
|
|
android/keycodes.h \
|
|
android/looper.h \
|
|
android/native_activity.h \
|
|
android/native_window.h \
|
|
android/native_window_jni.h \
|
|
android/obb.h \
|
|
android/rect.h \
|
|
android/sensor.h \
|
|
android/storage_manager.h \
|
|
android/window.h
|
|
|
|
copy_system_shared_library libEGL
|
|
copy_system_headers $ANDROID_ROOT/frameworks/base/opengl/include \
|
|
EGL/egl.h \
|
|
EGL/eglext.h \
|
|
EGL/eglplatform.h
|
|
|
|
set_symbol_excludes '^_' '^MPH_' # remove MPH_to_xxx definitions
|
|
copy_system_shared_library libOpenSLES
|
|
copy_system_headers $ANDROID_ROOT/system/media/wilhelm/include \
|
|
SLES/OpenSLES.h \
|
|
SLES/OpenSLES_Android.h \
|
|
SLES/OpenSLES_AndroidConfiguration.h \
|
|
SLES/OpenSLES_AndroidMetadata.h \
|
|
SLES/OpenSLES_Platform.h
|
|
fi
|
|
|
|
# API level 14
|
|
if platform_check 14; then
|
|
set_symbol_excludes '^_' '^MPH_' # remove MPH_to_xxx definitions
|
|
copy_system_shared_library libOpenMAXAL
|
|
copy_system_headers $ANDROID_ROOT/system/media/wilhelm/include \
|
|
OMXAL/OpenMAXAL.h \
|
|
OMXAL/OpenMAXAL_Android.h \
|
|
OMXAL/OpenMAXAL_Platform.h
|
|
fi
|
|
|
|
clear_symbol_excludes
|
|
|
|
dump "Done!"
|