# 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