# Copyright © 2010 # Thorsten Glaser # This file is provided under the same terms as mksh. #- # Helper script to let src/Build.sh generate Makefrag.inc # which we in turn use in the manual creation of Android.mk # # This script is supposed to be run from/inside AOSP by the # porter of mksh to Android (and only manually). cd "$(dirname "$0")" srcdir=$(pwd) rm -rf tmp mkdir tmp cd ../../.. aospdir=$(pwd) cd $srcdir/tmp addvar() { _vn=$1; shift eval $_vn=\"\$$_vn '$*"' } CFLAGS= CPPFLAGS= LDFLAGS= LIBS= # The definitions below were generated by examining the # output of the following command: # make showcommands out/target/product/generic/system/bin/mksh 2>&1 | tee log # # They are only used to let Build.sh find the compiler, header # files, linker and libraries to generate Makefrag.inc (similar # to what GNU autotools’ configure scripts do), and never used # during the real build process. We need this to port mksh to # the Android platform and it is crucial these are as close as # possible to the values used later. (You also must example the # results gathered from Makefrag.inc to see they are the same # across all Android platforms, or add appropriate ifdefs.) # Since we no longer use the NDK, the AOSP has to have been # built before using this script (targetting generic/emulator). CC=$aospdir/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-gcc addvar CPPFLAGS -I$aospdir/system/core/include \ -I$aospdir/hardware/libhardware/include \ -I$aospdir/system/core/include \ -I$aospdir/hardware/libhardware/include \ -I$aospdir/hardware/libhardware_legacy/include \ -I$aospdir/hardware/ril/include \ -I$aospdir/libnativehelper/include \ -I$aospdir/frameworks/base/include \ -I$aospdir/frameworks/base/opengl/include \ -I$aospdir/external/skia/include \ -I$aospdir/out/target/product/generic/obj/include \ -I$aospdir/bionic/libc/arch-arm/include \ -I$aospdir/bionic/libc/include \ -I$aospdir/bionic/libstdc++/include \ -I$aospdir/bionic/libc/kernel/common \ -I$aospdir/bionic/libc/kernel/arch-arm \ -I$aospdir/bionic/libm/include \ -I$aospdir/bionic/libm/include/arch/arm \ -I$aospdir/bionic/libthread_db/include \ -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ \ -I$aospdir/system/core/include/arch/linux-arm/ \ -include $aospdir/system/core/include/arch/linux-arm/AndroidConfig.h \ -DANDROID -DNDEBUG -UDEBUG addvar CFLAGS -fno-exceptions -Wno-multichar -msoft-float -fpic \ -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums \ -march=armv5te -mtune=xscale -mthumb-interwork -fmessage-length=0 \ -W -Wall -Wno-unused -Winit-self -Wpointer-arith -Werror=return-type \ -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point \ -Wstrict-aliasing=2 -finline-functions -fno-inline-functions-called-once \ -fgcse-after-reload -frerun-cse-after-loop -frename-registers -mthumb \ -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 addvar LDFLAGS -nostdlib -Bdynamic -Wl,-T,$aospdir/build/core/armelf.x \ -Wl,-dynamic-linker,/system/bin/linker -Wl,--gc-sections \ -Wl,-z,nocopyreloc -Wl,--no-undefined \ $aospdir/out/target/product/generic/obj/lib/crtbegin_dynamic.o addvar LIBS -L$aospdir/out/target/product/generic/obj/lib \ -Wl,-rpath-link=$aospdir/out/target/product/generic/obj/lib -lc \ $aospdir/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/../lib/gcc/arm-eabi/4.4.0/interwork/libgcc.a \ $aospdir/out/target/product/generic/obj/lib/crtend_android.o ### Override flags # We don’t even *support* UTF-8 by default ☹ addvar CPPFLAGS -DMKSH_ASSUME_UTF8=0 # No getpwnam() calls (affects "cd ~username/" only) addvar CPPFLAGS -DMKSH_NOPWNAM # Compile an extra small mksh (optional) #addvar CPPFLAGS -DMKSH_SMALL # Leave out the ulimit builtin #addvar CPPFLAGS -DMKSH_NO_LIMITS # Set target platform TARGET_OS=Linux # Building with -std=c99 or -std=gnu99 clashes with Bionic headers HAVE_CAN_STDG99=0 HAVE_CAN_STDC99=0 export HAVE_CAN_STDG99 HAVE_CAN_STDC99 # Android-x86 does not have helper functions for ProPolice SSP # and AOSP adds the flags by itself (same for warning flags) HAVE_CAN_FNOSTRICTALIASING=0 HAVE_CAN_FSTACKPROTECTORALL=0 HAVE_CAN_WALL=0 export HAVE_CAN_FNOSTRICTALIASING HAVE_CAN_FSTACKPROTECTORALL HAVE_CAN_WALL # disable the mknod(8) built-in to get rid of needing setmode.c HAVE_MKNOD=0; export HAVE_MKNOD # even the idea of persistent history on a phone is funny HAVE_PERSISTENT_HISTORY=0; export HAVE_PERSISTENT_HISTORY # ... and run it! export CC CPPFLAGS CFLAGS LDFLAGS LIBS TARGET_OS sh ../src/Build.sh -M rv=$? test x0 = x"$rv" && mv -f Makefrag.inc ../ cd .. rm -rf tmp exit $rv