| # Copyright © 2010, 2012, 2013 |
| # Thorsten Glaser <tg@mirbsd.org> |
| # 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). |
| |
| if test x"$1" = x"-t"; then |
| # test compilation |
| args=-r |
| mkmfmode=1 |
| else |
| # prepare for AOSP |
| args=-M |
| mkmfmode=0 |
| fi |
| |
| 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/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/arm-linux-androideabi-gcc |
| addvar CPPFLAGS \ |
| -I$aospdir/libnativehelper/include/nativehelper \ |
| -isystem $aospdir/system/core/include \ |
| -isystem $aospdir/hardware/libhardware/include \ |
| -isystem $aospdir/hardware/libhardware_legacy/include \ |
| -isystem $aospdir/hardware/ril/include \ |
| -isystem $aospdir/libnativehelper/include \ |
| -isystem $aospdir/frameworks/native/include \ |
| -isystem $aospdir/frameworks/native/opengl/include \ |
| -isystem $aospdir/frameworks/av/include \ |
| -isystem $aospdir/frameworks/base/include \ |
| -isystem $aospdir/frameworks/base/opengl/include \ |
| -isystem $aospdir/external/skia/include \ |
| -isystem $aospdir/out/target/product/generic/obj/include \ |
| -isystem $aospdir/bionic/libc/arch-arm/include \ |
| -isystem $aospdir/bionic/libc/include \ |
| -isystem $aospdir/bionic/libstdc++/include \ |
| -isystem $aospdir/bionic/libc/kernel/common \ |
| -isystem $aospdir/bionic/libc/kernel/arch-arm \ |
| -isystem $aospdir/bionic/libm/include \ |
| -isystem $aospdir/bionic/libm/include/arm \ |
| -isystem $aospdir/bionic/libthread_db/include \ |
| -D_FORTIFY_SOURCE=1 \ |
| -include $aospdir/build/core/combo/include/arch/linux-arm/AndroidConfig.h \ |
| -I$aospdir/build/core/combo/include/arch/linux-arm/ \ |
| -DANDROID -DNDEBUG -UDEBUG |
| # who would have thought the AOSP devs are funny? -fno-builtin-sin |
| addvar CFLAGS \ |
| -fno-exceptions \ |
| -Wno-multichar \ |
| -msoft-float \ |
| -fpic \ |
| -fPIE \ |
| -ffunction-sections \ |
| -fdata-sections \ |
| -funwind-tables \ |
| -fstack-protector \ |
| -Wa,--noexecstack \ |
| -Werror=format-security \ |
| -fno-short-enums \ |
| -march=armv7-a \ |
| -mfloat-abi=softfp \ |
| -mfpu=vfpv3-d16 \ |
| -Wno-unused-but-set-variable \ |
| -fno-builtin-sin \ |
| -fno-strict-volatile-bitfields \ |
| -Wno-psabi \ |
| -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 \ |
| -g \ |
| -Wstrict-aliasing=2 \ |
| -fgcse-after-reload \ |
| -frerun-cse-after-loop \ |
| -frename-registers \ |
| -mthumb \ |
| -Os \ |
| -fomit-frame-pointer \ |
| -fno-strict-aliasing |
| addvar LDFLAGS \ |
| -nostdlib \ |
| -Bdynamic \ |
| -pie \ |
| -Wl,-dynamic-linker,/system/bin/linker \ |
| -Wl,--gc-sections \ |
| -Wl,-z,nocopyreloc \ |
| -Wl,-z,noexecstack \ |
| -Wl,-z,relro \ |
| -Wl,-z,now \ |
| -Wl,--warn-shared-textrel \ |
| -Wl,--icf=safe \ |
| -Wl,--fix-cortex-a8 \ |
| -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 \ |
| -Wl,--no-whole-archive \ |
| $aospdir/out/target/product/generic/obj/STATIC_LIBRARIES/libcompiler-rt-extras_intermediates/libcompiler-rt-extras.a \ |
| $aospdir/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/../lib/gcc/arm-linux-androideabi/4.7/armv7-a/libgcc.a \ |
| $aospdir/out/target/product/generic/obj/lib/crtend_android.o |
| |
| |
| ### Flags used by test builds |
| if test $mkmfmode = 1; then |
| addvar CPPFLAGS '-DMKSHRC_PATH=\"/system/etc/mkshrc\"' |
| addvar CPPFLAGS '-DMKSH_DEFAULT_EXECSHELL=\"/system/bin/sh\"' |
| addvar CPPFLAGS '-DMKSH_DEFAULT_TMPDIR=\"/data/local\"' |
| fi |
| |
| ### Override flags |
| # Let the shell free all memory upon exiting |
| addvar CPPFLAGS -DDEBUG_LEAKS |
| # UTF-8 works nowadays |
| addvar CPPFLAGS -DMKSH_ASSUME_UTF8 |
| # Reduce filedescriptor usage |
| addvar CPPFLAGS -DMKSH_CONSERVATIVE_FDS |
| # Leave out RCS ID strings from the binary |
| addvar CPPFLAGS -DMKSH_DONT_EMIT_IDSTRING |
| # No getpwnam() calls (affects "cd ~username/" only) |
| addvar CPPFLAGS -DMKSH_NOPWNAM |
| # Leave out the ulimit builtin |
| #addvar CPPFLAGS -DMKSH_NO_LIMITS |
| # Compile an extra small mksh (optional) |
| #addvar CPPFLAGS -DMKSH_SMALL |
| |
| # Set target platform |
| TARGET_OS=Android |
| |
| # 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 |
| |
| # even the idea of persistent history on a phone is funny |
| HAVE_PERSISTENT_HISTORY=0; export HAVE_PERSISTENT_HISTORY |
| |
| # this is a run-time check and dependent on the target CPU |
| # architecture (at _least_!) and cannot be auto-detected, |
| # so always include the safety check even if unnecessary |
| HAVE_SILENT_IDIVWRAPV=0; export HAVE_SILENT_IDIVWRAPV |
| |
| # ... and run it! |
| export CC CPPFLAGS CFLAGS LDFLAGS LIBS TARGET_OS |
| sh ../src/Build.sh $args |
| rv=$? |
| test x"$args" = x"-r" && exit $rv |
| test x0 = x"$rv" && mv -f Makefrag.inc ../ |
| cd .. |
| rm -rf tmp |
| exit $rv |