build-ndk-sysroot.sh revision b852319ebf789bec3b485428842181b6fb715e95
148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#!/bin/sh
248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Copyright (C) 2009 The Android Open Source Project
448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Licensed under the Apache License, Version 2.0 (the "License");
648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# you may not use this file except in compliance with the License.
748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# You may obtain a copy of the License at
848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#      http://www.apache.org/licenses/LICENSE-2.0
1048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
1148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Unless required by applicable law or agreed to in writing, software
1248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# distributed under the License is distributed on an "AS IS" BASIS,
1348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# See the License for the specific language governing permissions and
1548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# limitations under the License.
1648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
1748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# build-ndk-sysroot.sh
1848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
1948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# collect files from an Android tree to assemble a sysroot suitable for
2048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# building a standable toolchain.
2148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
2248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# after that, you may use build/tools/package-ndk-sysroot.sh to package
2348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# the resulting files for distribution.
2448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
2548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# NOTE: this is different from the Android toolchain original build-sysroot.sh
2648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#       script because we place target files differently.
2748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
2848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# WARNING: For now, only a single target ABI/Architecture us supported
2948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
3048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
31c726faa5c58a9673bc289344055f18ed75f21177David 'Digit' Turner. `dirname $0`/../core/ndk-common.sh
3248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
3348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# PLATFORM is the name of the current Android system platform
3469545a3024ba0087e1993fc8a80e01610b3a0774David 'Digit' TurnerPLATFORM=android-3
3548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
3648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# ABI is the target ABI name for the NDK
3748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerABI=arm
3848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
3948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerOPTION_HELP=no
4048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerOPTION_BUILD_OUT=
4148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerOPTION_PLATFORM=
4248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerOPTION_PACKAGE=no
43b852319ebf789bec3b485428842181b6fb715e95Bruce BeareOPTION_ABI=
44b852319ebf789bec3b485428842181b6fb715e95Bruce Beare
4548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerfor opt do
4648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
4748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  case "$opt" in
4848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  --help|-h|-\?) OPTION_HELP=yes
4948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  ;;
5048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  --verbose)
5148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    if [ "$VERBOSE" = "yes" ] ; then
5248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner        VERBOSE2=yes
5348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    else
5448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner        VERBOSE=yes
5548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    fi
5648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    ;;
5748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  --platform=*)
5848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    OPTION_PLATFORM=$optarg
5948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    ;;
6048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  --build-out=*)
6148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    OPTION_BUILD_OUT=$optarg
6248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    ;;
6348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  --package)
6448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    OPTION_PACKAGE=yes
6548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    ;;
66b852319ebf789bec3b485428842181b6fb715e95Bruce Beare  --abi=*)
67b852319ebf789bec3b485428842181b6fb715e95Bruce Beare    OPTION_ABI=$optarg
68b852319ebf789bec3b485428842181b6fb715e95Bruce Beare    ;;
6948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  *)
7048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    echo "unknown option '$opt', use --help"
7148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    exit 1
7248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  esac
7348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerdone
7448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
7548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerif [ $OPTION_HELP = "yes" ] ; then
7648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    echo "Collect files from an Android build tree and assembles a sysroot"
7748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    echo "suitable for building a standalone toolchain or be used by the"
7848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    echo "Android NDK."
7948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    echo ""
8048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    echo "options:"
8148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    echo ""
8248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    echo "  --help             print this message"
8348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    echo "  --verbose          enable verbose messages"
8448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    echo "  --platform=<name>  generate sysroot for platform <name> (default is $PLATFORM)"
85b852319ebf789bec3b485428842181b6fb715e95Bruce Beare    echo "  --abi=<name>       generate sysroot for abi <name> (default is $ABI)"
8648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    echo "  --build-out=<path> set Android build out directory"
8748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    echo "  --package          generate sysroot package tarball"
8848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    echo ""
8948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    exit 0
9048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerfi
9148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
9248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerif [ -n "$OPTION_PLATFORM" ] ; then
9348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    PLATFORM=$OPTION_PLATFORM
9448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerfi
9548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
96b852319ebf789bec3b485428842181b6fb715e95Bruce Beareif [ -n "$OPTION_ABI" ] ; then
97b852319ebf789bec3b485428842181b6fb715e95Bruce Beare    ABI=$OPTION_ABI
98b852319ebf789bec3b485428842181b6fb715e95Bruce Bearefi
99b852319ebf789bec3b485428842181b6fb715e95Bruce Beare
100b852319ebf789bec3b485428842181b6fb715e95Bruce Bearecase "$ABI" in
101b852319ebf789bec3b485428842181b6fb715e95Bruce Bearearm*)
102b852319ebf789bec3b485428842181b6fb715e95Bruce Beare    ARCH=arm
103b852319ebf789bec3b485428842181b6fb715e95Bruce Beare    ;;
104b852319ebf789bec3b485428842181b6fb715e95Bruce Beare*)
105b852319ebf789bec3b485428842181b6fb715e95Bruce Beare    ARCH=$ABI
106b852319ebf789bec3b485428842181b6fb715e95Bruce Beare    ;;
107b852319ebf789bec3b485428842181b6fb715e95Bruce Beareesac
108b852319ebf789bec3b485428842181b6fb715e95Bruce Beare
109b852319ebf789bec3b485428842181b6fb715e95Bruce Beare
11048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Get the root of the NDK from the current program location
11148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerNDK_ROOT=`dirname $0`
11248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerNDK_ROOT=`dirname $NDK_ROOT`
11348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerNDK_ROOT=`dirname $NDK_ROOT`
11448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
11548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Get the Android out directory
11648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerif [ -z "$OPTION_BUILD_OUT" ] ; then
11748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    if [ -z "$ANDROID_PRODUCT_OUT" ] ; then
11848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner        echo "ANDROID_PRODUCT_OUT is not defined in your environment. Aborting"
11948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner        exit 1
12048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    fi
12148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    if [ ! -d $ANDROID_PRODUCT_OUT ] ; then
12248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner        echo "ANDROID_PRODUCT_OUT does not point to a valid directory. Aborting"
12348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner        exit 1
12448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    fi
12548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerelse
12648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    ANDROID_PRODUCT_OUT=$OPTION_BUILD_OUT
12748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    if [ ! -d $ANDROID_PRODUCT_OUT ] ; then
12848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner        echo "The build out path is not a valid directory: $OPTION_BUILD_OUT"
12948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner        exit 1
13048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    fi
13148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerfi
13248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
13348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerPRODUCT_DIR=$ANDROID_PRODUCT_OUT
13448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerSYSROOT=$NDK_ROOT/build/platforms/$PLATFORM/arch-$ABI
13548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerCOMMON_ROOT=$NDK_ROOT/build/platforms/$PLATFORM/common
13648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
13748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# clean up everything in existing sysroot
13848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerrm -rf $SYSROOT
13948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnermkdir -p $SYSROOT
14048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
14148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerrm -rf $COMMON_ROOT
14248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnermkdir -p $COMMON_ROOT
14348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
14448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerLIB_ROOT=$SYSROOT/usr/lib
14548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerINCLUDE_ROOT=$SYSROOT/usr/include
14648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
14748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerinstall_file ()
14848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner{
14948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    mkdir -p $2/`dirname $1`
15048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    cp -fp $1 $2/$1
15148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner}
15248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
15348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerinstall_helper ()
15448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner{
15548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  (cd $1 && find . -type f | while read ff; do install_file $ff $2; done)
15648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner}
15748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
15848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerTOP=$PRODUCT_DIR/../../../..
15948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
16048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# CRT objects that need to be copied
16148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerCRT_OBJS_DIR=$PRODUCT_DIR/obj/lib
16248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerCRT_OBJS="$CRT_OBJS_DIR/crtbegin_static.o \
16348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$CRT_OBJS_DIR/crtbegin_dynamic.o \
16448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$CRT_OBJS_DIR/crtend_android.o"
16548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
16648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# static libraries that need to be copied.
16748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerSTATIC_LIBS_DIR=$PRODUCT_DIR/obj/STATIC_LIBRARIES
16848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerSTATIC_LIBS="$STATIC_LIBS_DIR/libc_intermediates/libc.a \
16948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$STATIC_LIBS_DIR/libm_intermediates/libm.a \
17048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$STATIC_LIBS_DIR/libstdc++_intermediates/libstdc++.a
17148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$STATIC_LIBS_DIR/libthread_db_intermediates/libthread_db.a"
17248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
17348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# dynamic libraries that need to be copied.
17448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerDYNAMIC_LIBS_DIR=$PRODUCT_DIR/symbols/system/lib
17548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerDYNAMIC_LIBS="$DYNAMIC_LIBS_DIR/libdl.so \
17648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$DYNAMIC_LIBS_DIR/libc.so \
17748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$DYNAMIC_LIBS_DIR/libm.so \
17848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$DYNAMIC_LIBS_DIR/libstdc++.so \
17948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner$DYNAMIC_LIBS_DIR/libthread_db.so"
18048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
18148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Copy all CRT objects and libraries
18248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerrm -rf $LIB_ROOT
18348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnermkdir -p $LIB_ROOT
18448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercp -f $CRT_OBJS $STATIC_LIBS $DYNAMIC_LIBS $LIB_ROOT
18548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
186e502c456361dc02cc766b01cf8c9eb18fd71838cDavid 'Digit' Turner# Check $TOP/bionic to see if this is new source layout.
18748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerif [ -d $TOP/bionic ] ;then
18848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  BIONIC_ROOT=$TOP/bionic
18948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  LIBC_ROOT=$BIONIC_ROOT/libc
19048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerelse
19148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  BIONIC_ROOT=$TOP/system
19248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner  LIBC_ROOT=$BIONIC_ROOT/bionic
19348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerfi
19448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
19548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Copy headers.  This need to be done in the reverse order of inclusion
19648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# in case there are different headers with the same name.
19748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerARCH_INCLUDE=$SYSROOT/usr/include
19848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerrm -rf $ARCH_INCLUDE
19948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnermkdir -p $ARCH_INCLUDE
20048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
20148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' TurnerCOMMON_INCLUDE=$COMMON_ROOT/include
20248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerrm -rf $COMMON_INCLUDE
20348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnermkdir -p $COMMON_INCLUDE
20448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
20548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Install a common header and create the appropriate arch-specific
20648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# directory for it.
20748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
20848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# $1: source directory
20948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# $2: header path, relative to source directory
21048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner#
21148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercommon_header ()
21248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner{
21348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    echo "Copy: $COMMON_INCLUDE/$2"
21448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    mkdir -p `dirname $COMMON_INCLUDE/$2`
21548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    install $1/$2 $COMMON_INCLUDE/$2
21648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    # just to be safe
21748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    chmod a-x $COMMON_INCLUDE/$2
21848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
21948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    # the link prefix, used to point to common/
22048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    # from arch-$ARCH/usr/
22148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    link_prefix=../../common/include
22248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
22348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    # we need to count the number of directory separators in $2
22448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    # for each one of them, we're going to prepend ../ to the
22548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    # link prefix
22648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    for item in `echo $2 | tr '/' ' '`; do
22748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner        link_prefix=../$link_prefix
22848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    done
22948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
23048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    echo "Link: $ARCH_INCLUDE/$2"
23148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    mkdir -p `dirname $ARCH_INCLUDE/$2`
23248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    ln -s $link_prefix/$2 $ARCH_INCLUDE/$2
23348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner}
23448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
23548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercommon_headers ()
23648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner{
23748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    srcs=`cd $1 && find . -type f`
23848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    # remove leading ./
23948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    srcs=`echo $srcs | sed -e "s%\./%%g"`
24048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
24148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    for src in $srcs; do
24248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner        common_header $1 $src
24348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    done
24448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner}
24548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
24648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerarch_header ()
24748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner{
24848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    echo "Copy: $ARCH_INCLUDE/$2"
24948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    mkdir -p `dirname $ARCH_INCLUDE/$2`
25048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    install $1/$2 $ARCH_INCLUDE/$2
25148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    # just to be safe
25248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    chmod a-x $ARCH_INCLUDE/$2
25348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner}
25448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
25548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerarch_headers ()
25648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner{
25748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    srcs=`cd $1 && find . -type f`
25848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    # remove leading ./
25948ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    srcs=`echo $srcs | sed -e "s%\./%%g"`
26048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
26148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    for src in $srcs; do
26248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner        arch_header $1 $src
26348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    done
26448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner}
26548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
26671883351efa1a6a389cd2fd06d229d276dc91ab1David 'Digit' Turner# ZLib headers
26771883351efa1a6a389cd2fd06d229d276dc91ab1David 'Digit' Turnercommon_header  $TOP/external/zlib zlib.h
26871883351efa1a6a389cd2fd06d229d276dc91ab1David 'Digit' Turnercommon_header  $TOP/external/zlib zconf.h
26971883351efa1a6a389cd2fd06d229d276dc91ab1David 'Digit' Turner
27071883351efa1a6a389cd2fd06d229d276dc91ab1David 'Digit' Turner# Jni header
27148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercommon_header  $TOP/dalvik/libnativehelper/include/nativehelper jni.h
27271883351efa1a6a389cd2fd06d229d276dc91ab1David 'Digit' Turner
27371883351efa1a6a389cd2fd06d229d276dc91ab1David 'Digit' Turner# libthread_db headers, not sure if this is needed for the NDK
27448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercommon_headers $BIONIC_ROOT/libthread_db/include
27548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
27648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# for libm, just copy math.h and fenv.h
27748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercommon_header $BIONIC_ROOT/libm/include math.h
278b852319ebf789bec3b485428842181b6fb715e95Bruce Beareif [ "$ARCH" = "x86" ]; then
279b852319ebf789bec3b485428842181b6fb715e95Bruce Beare    arch_header   $BIONIC_ROOT/libm/include i387/fenv.h
280b852319ebf789bec3b485428842181b6fb715e95Bruce Beareelse
281b852319ebf789bec3b485428842181b6fb715e95Bruce Beare    arch_header   $BIONIC_ROOT/libm/include $ARCH/fenv.h
282b852319ebf789bec3b485428842181b6fb715e95Bruce Bearefi
28348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
28471883351efa1a6a389cd2fd06d229d276dc91ab1David 'Digit' Turner# our tiny C++ standard library
28548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercommon_headers $BIONIC_ROOT/libstdc++/include
28648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
28771883351efa1a6a389cd2fd06d229d276dc91ab1David 'Digit' Turner# C library kernel headers
28848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercommon_headers $LIBC_ROOT/kernel/common
289b852319ebf789bec3b485428842181b6fb715e95Bruce Bearearch_headers   $LIBC_ROOT/kernel/arch-$ARCH
29048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
29171883351efa1a6a389cd2fd06d229d276dc91ab1David 'Digit' Turner# C library headers
29248ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnercommon_headers $LIBC_ROOT/include
29348ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerarch_headers   $LIBC_ROOT/arch-$ARCH/include
29448ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner
29548ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner# Do we need to package the result
29648ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerif [ $OPTION_PACKAGE = yes ] ; then
29748ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    DATE=`date +%Y%m%d`
29848ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    PKGFILE=/tmp/android-ndk-sysroot-$DATE.tar.bz2
299b852319ebf789bec3b485428842181b6fb715e95Bruce Beare    tar cjf $PKGFILE build/platforms/$PLATFORM/arch-$ARCH
30048ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turner    echo "Packaged in $PKGFILE"
30148ef1859ef0bb25547e5aceeedb9b175c6193bc5David 'Digit' Turnerfi
302