1 # Copyright 2010, 2012, 2013 2 # Thorsten Glaser <tg (at] mirbsd.org> 3 # This file is provided under the same terms as mksh. 4 #- 5 # Helper script to let src/Build.sh generate Makefrag.inc 6 # which we in turn use in the manual creation of Android.mk 7 # 8 # This script is supposed to be run from/inside AOSP by the 9 # porter of mksh to Android (and only manually). 10 11 if test x"$1" = x"-t"; then 12 # test compilation 13 args=-r 14 mkmfmode=1 15 else 16 # prepare for AOSP 17 args=-M 18 mkmfmode=0 19 fi 20 21 cd "$(dirname "$0")" 22 srcdir=$(pwd) 23 rm -rf tmp 24 mkdir tmp 25 cd ../.. 26 aospdir=$(pwd) 27 cd $srcdir/tmp 28 29 addvar() { 30 _vn=$1; shift 31 32 eval $_vn=\"\$$_vn '$*"' 33 } 34 35 CFLAGS= 36 CPPFLAGS= 37 LDFLAGS= 38 LIBS= 39 40 # The definitions below were generated by examining the 41 # output of the following command: 42 # make showcommands out/target/product/generic/system/bin/mksh 2>&1 | tee log 43 # 44 # They are only used to let Build.sh find the compiler, header 45 # files, linker and libraries to generate Makefrag.inc (similar 46 # to what GNU autotools configure scripts do), and never used 47 # during the real build process. We need this to port mksh to 48 # the Android platform and it is crucial these are as close as 49 # possible to the values used later. (You also must example the 50 # results gathered from Makefrag.inc to see they are the same 51 # across all Android platforms, or add appropriate ifdefs.) 52 # Since we no longer use the NDK, AOSP has to have been 53 # built before using this script. 54 55 CC=$ANDROID_TOOLCHAIN/*-gcc 56 57 target_arch=$(cd $ANDROID_BUILD_TOP; CALLED_FROM_SETUP=true BUILD_SYSTEM=build/core make --no-print-directory -f build/core/config.mk dumpvar-TARGET_ARCH) 58 59 addvar CPPFLAGS \ 60 -isystem $aospdir/bionic/libc/arch-$target_arch/include \ 61 -isystem $aospdir/bionic/libc/include \ 62 -isystem $aospdir/bionic/libc/kernel/uapi \ 63 -isystem $aospdir/bionic/libc/kernel/uapi/asm-$target_arch \ 64 -isystem $aospdir/bionic/libm/include \ 65 -isystem $aospdir/bionic/libm/include/$target_arch \ 66 -D_FORTIFY_SOURCE=2 \ 67 -include $aospdir/build/core/combo/include/arch/linux-$target_arch/AndroidConfig.h \ 68 -I$aospdir/build/core/combo/include/arch/linux-$target_arch/ \ 69 -DANDROID -DNDEBUG -UDEBUG 70 addvar CFLAGS \ 71 -fno-exceptions \ 72 -Wno-multichar \ 73 -fpic \ 74 -fPIE \ 75 -ffunction-sections \ 76 -fdata-sections \ 77 -funwind-tables \ 78 -fstack-protector \ 79 -Wa,--noexecstack \ 80 -Werror=format-security \ 81 -fno-short-enums \ 82 -Wno-unused-but-set-variable \ 83 -fno-builtin-sin \ 84 -fno-strict-volatile-bitfields \ 85 -Wno-psabi \ 86 -fmessage-length=0 \ 87 -W \ 88 -Wall \ 89 -Wno-unused \ 90 -Winit-self \ 91 -Wpointer-arith \ 92 -Werror=return-type \ 93 -Werror=non-virtual-dtor \ 94 -Werror=address \ 95 -Werror=sequence-point \ 96 -g \ 97 -Wstrict-aliasing=2 \ 98 -fgcse-after-reload \ 99 -frerun-cse-after-loop \ 100 -frename-registers \ 101 -Os \ 102 -fomit-frame-pointer \ 103 -fno-strict-aliasing 104 addvar LDFLAGS \ 105 -nostdlib \ 106 -Bdynamic \ 107 -fPIE \ 108 -pie \ 109 -Wl,-dynamic-linker,/system/bin/linker \ 110 -Wl,--gc-sections \ 111 -Wl,-z,nocopyreloc \ 112 -Wl,-z,noexecstack \ 113 -Wl,-z,relro \ 114 -Wl,-z,now \ 115 -Wl,--warn-shared-textrel \ 116 -Wl,--fatal-warnings \ 117 -Wl,--no-undefined \ 118 $ANDROID_PRODUCT_OUT/obj/lib/crtbegin_dynamic.o 119 addvar LIBS \ 120 -L$ANDROID_PRODUCT_OUT/obj/lib \ 121 -Wl,-rpath-link=$ANDROID_PRODUCT_OUT/obj/lib \ 122 -Wl,--no-whole-archive \ 123 $ANDROID_PRODUCT_OUT/obj/STATIC_LIBRARIES/libcompiler_rt-extras_intermediates/libcompiler_rt-extras.a \ 124 -lc \ 125 $ANDROID_PRODUCT_OUT/obj/lib/crtend_android.o 126 127 128 ### Flags used by test builds 129 if test $mkmfmode = 1; then 130 addvar CPPFLAGS '-DMKSHRC_PATH=\"/system/etc/mkshrc\"' 131 addvar CPPFLAGS '-DMKSH_DEFAULT_EXECSHELL=\"/system/bin/sh\"' 132 addvar CPPFLAGS '-DMKSH_DEFAULT_TMPDIR=\"/data/local\"' 133 fi 134 135 ### Override flags 136 # Let the shell free all memory upon exiting 137 addvar CPPFLAGS -DDEBUG_LEAKS 138 # UTF-8 works nowadays 139 addvar CPPFLAGS -DMKSH_ASSUME_UTF8 140 # Reduce filedescriptor usage 141 addvar CPPFLAGS -DMKSH_CONSERVATIVE_FDS 142 # Leave out RCS ID strings from the binary 143 addvar CPPFLAGS -DMKSH_DONT_EMIT_IDSTRING 144 # No getpwnam() calls (affects "cd ~username/" only) 145 addvar CPPFLAGS -DMKSH_NOPWNAM 146 # Leave out the ulimit builtin 147 #addvar CPPFLAGS -DMKSH_NO_LIMITS 148 # Compile an extra small mksh (optional) 149 #addvar CPPFLAGS -DMKSH_SMALL 150 151 # Set target platform 152 TARGET_OS=Android 153 154 # Android-x86 does not have helper functions for ProPolice SSP 155 # and AOSP adds the flags by itself (same for warning flags) 156 HAVE_CAN_FNOSTRICTALIASING=0 157 HAVE_CAN_FSTACKPROTECTORALL=0 158 HAVE_CAN_WALL=0 159 export HAVE_CAN_FNOSTRICTALIASING HAVE_CAN_FSTACKPROTECTORALL HAVE_CAN_WALL 160 161 # even the idea of persistent history on a phone is funny 162 HAVE_PERSISTENT_HISTORY=0; export HAVE_PERSISTENT_HISTORY 163 164 # ... and run it! 165 export CC CPPFLAGS CFLAGS LDFLAGS LIBS TARGET_OS 166 sh ../src/Build.sh $args 167 rv=$? 168 test x"$args" = x"-r" && exit $rv 169 test x0 = x"$rv" && mv -f Makefrag.inc ../ 170 cd .. 171 rm -rf tmp 172 exit $rv 173