#!/bin/sh # # Copyright (C) 2013 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. # # cleanup-headers.sh # # This tool is used when we want to generate NDK arch headers. # It will populate $NDK_DIR/../development/ndk/platforms/android-*/arch-$NEW_ARCH by default. # PROGDIR=`dirname $0` PROGDIR=`cd $PROGDIR && pwd` . "$PROGDIR/prebuilt-common.sh" NDK_DIR=$ANDROID_NDK_ROOT DEV_DIR="$NDK_DIR/../development" register_var_option "--development-dir=<path>" DEV_DIR "Specify where the development dir is" PROGRAM_PARAMETERS="<old-arch-name> <new-arch-name>" PROGRAM_DESCRIPTION=\ "This tool is used when we want to generate NDK arch headers. It will populate $NDK_DIR/../development/ndk/platforms/android-*/arch-$NEW_ARCH by default." extract_parameters "$@" set_parameters() { OLD_ARCH=$1 NEW_ARCH=$2 DEV_NDK_PLATFORM_DIR=$DEV_DIR/ndk/platforms } set_parameters $PARAMETERS if [ -z "$OLD_ARCH" ] || [ -z "$NEW_ARCH" ]; then dump "[Error] Must specify old and new arch names" exit 1 fi if [ -n "`find $DEV_NDK_PLATFORM_DIR -type d | grep arch-$NEW_ARCH`" ]; then log "[Warning] Already exist new arch headers. Remove it first." for API in $API_LEVELS; do rm -rf $DEV_NDK_PLATFORM_DIR/android-$API/arch-$NEW_ARCH done fi replace() { local HEADERS_DIR=$1 local OLD=$2 local NEW=$3 FILES="`find $HEADERS_DIR | xargs grep $OLD | awk -F ':' '{print $1}' | sort -u | xargs`" for FILE in $FILES; do TMP_FILE=`mktemp` cp -a $FILE $TMP_FILE cat $TMP_FILE | sed -e "s/$OLD/$NEW/g" > $FILE rm -f $TMP_FILE done } remove() { local HEADERS_DIR=$1 local PATTERN=$2 local NAME=$3 FILES="`find $HEADERS_DIR | xargs grep $NAME | awk -F ':' '{print $1}' | sort -u | xargs`" for FILE in $FILES; do TMP_FILE=`mktemp` cp -a $FILE $TMP_FILE cat $TMP_FILE | sed -e "s/.*${PATTERN}.*${NAME}.*//g" > $FILE rm -f $TMP_FILE done } OLD_PATTERN=ARM NEW_PATTERN=MACHINE TMP_PATTERN=NDKTMPMACHINE KEEP_NO_RENAME_STUB= replace_stub_to_temp() { local COMMAND=$1 if [ "$COMMAND" = "add" ]; then local NAME=$2 KEEP_NO_RENAME_STUB="$KEEP_NO_RENAME_STUB $NAME" elif [ "$COMMAND" = "do" ] || [ "$COMMAND" = "revert" ]; then local DIR=$2 for stub in $KEEP_NO_RENAME_STUB; do local new_stub=`echo $stub | sed -e "s/$OLD_PATTERN/$TMP_PATTERN/g"` if [ "$COMMAND" = "do" ]; then replace $DIR $stub $new_stub else replace $DIR $new_stub $stub fi done fi } for API in $API_LEVELS; do log2 "API: $API" OLD_PLATFORM_DIR=$DEV_NDK_PLATFORM_DIR/android-$API/arch-$OLD_ARCH NEW_PLATFORM_DIR=$DEV_NDK_PLATFORM_DIR/android-$API/arch-$NEW_ARCH if [ -d "$OLD_PLATFORM_DIR/symbols" ]; then run copy_directory $OLD_PLATFORM_DIR/symbols $NEW_PLATFORM_DIR/symbols fi if [ -d "$OLD_PLATFORM_DIR/include" ]; then run copy_directory $OLD_PLATFORM_DIR/include $NEW_PLATFORM_DIR/include fi PATCH_PLATFORM_DIR=$DEV_NDK_PLATFORM_DIR/android-$API/header-patches if [ -d "$PATCH_PLATFORM_DIR" ]; then run rm -rf $NEW_PLATFORM_DIR/include/asm/arch for asm_header_stem in domain dyntick fpstate glue hardware ide mtd-xip pgtable-hwdef proc-fns procinfo suspend topology vga; do run rm -f $NEW_PLATFORM_DIR/include/asm/${asm_header_stem}.h done for machine_header_stem in cpu-features; do run rm -f $NEW_PLATFORM_DIR/include/machine/${machine_header_stem}.h done # Some keyword should not be replaced nor droped replace_stub_to_temp add ARMv6 replace_stub_to_temp add PARMRK replace_stub_to_temp add __ARM_EABI__ replace_stub_to_temp add __ARMEB__ replace_stub_to_temp add __LINUX_ARM_ARCH__ replace_stub_to_temp do $NEW_PLATFORM_DIR/include remove $NEW_PLATFORM_DIR/include "#include" glue.h remove $NEW_PLATFORM_DIR/include "#include" arch remove $NEW_PLATFORM_DIR/include "#include" mach remove $NEW_PLATFORM_DIR/include "#include" domain.h remove $NEW_PLATFORM_DIR/include "#include" pgtable-hwdef.h remove $NEW_PLATFORM_DIR/include "#include" proc-fns.h remove $NEW_PLATFORM_DIR/include "#define" EM_ARM remove $NEW_PLATFORM_DIR/include "#define" MODULE_ARCH_VERMAGIC remove $NEW_PLATFORM_DIR/include "#define" __ARM_NR_BASE remove $NEW_PLATFORM_DIR/include "#define" __ARM_NR_breakpoint remove $NEW_PLATFORM_DIR/include "#define" __ARM_NR_cacheflush remove $NEW_PLATFORM_DIR/include "#define" __ARM_NR_usr26 remove $NEW_PLATFORM_DIR/include "#define" __ARM_NR_usr32 remove $NEW_PLATFORM_DIR/include "#define" __ARM_NR_set_tls replace $NEW_PLATFORM_DIR $OLD_PATTERN $NEW_PATTERN replace_stub_to_temp revert $NEW_PLATFORM_DIR/include FILES="`cd $PATCH_PLATFORM_DIR && find include -type f | xargs`" for FILE in $FILES; do run mkdir -p $NEW_PLATFORM_DIR/`dirname $FILE` run cp -a $PATCH_PLATFORM_DIR/$FILE $NEW_PLATFORM_DIR/$FILE done PATCH_FILE=$PATCH_PLATFORM_DIR/headers.patch if [ -f "$PATCH_FILE" ]; then cd $NEW_PLATFORM_DIR && patch -p1 -s < $PATCH_FILE fi fi done