Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 1 | # Copyright © 2010, 2012, 2013 |
| 2 | # Thorsten Glaser <tg@mirbsd.org> |
Jean-Baptiste Queru | 5155f1c | 2011-06-16 10:05:28 -0700 | [diff] [blame] | 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 | |
Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 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 | |
Jean-Baptiste Queru | 5155f1c | 2011-06-16 10:05:28 -0700 | [diff] [blame] | 21 | cd "$(dirname "$0")" |
| 22 | srcdir=$(pwd) |
| 23 | rm -rf tmp |
| 24 | mkdir tmp |
Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 25 | cd ../.. |
Jean-Baptiste Queru | 5155f1c | 2011-06-16 10:05:28 -0700 | [diff] [blame] | 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, the AOSP has to have been |
| 53 | # built before using this script (targetting generic/emulator). |
| 54 | |
Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 55 | CC=$aospdir/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/arm-linux-androideabi-gcc |
| 56 | addvar CPPFLAGS \ |
| 57 | -I$aospdir/libnativehelper/include/nativehelper \ |
| 58 | -isystem $aospdir/system/core/include \ |
| 59 | -isystem $aospdir/hardware/libhardware/include \ |
| 60 | -isystem $aospdir/hardware/libhardware_legacy/include \ |
| 61 | -isystem $aospdir/hardware/ril/include \ |
| 62 | -isystem $aospdir/libnativehelper/include \ |
| 63 | -isystem $aospdir/frameworks/native/include \ |
| 64 | -isystem $aospdir/frameworks/native/opengl/include \ |
| 65 | -isystem $aospdir/frameworks/av/include \ |
| 66 | -isystem $aospdir/frameworks/base/include \ |
Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 67 | -isystem $aospdir/external/skia/include \ |
| 68 | -isystem $aospdir/out/target/product/generic/obj/include \ |
| 69 | -isystem $aospdir/bionic/libc/arch-arm/include \ |
| 70 | -isystem $aospdir/bionic/libc/include \ |
| 71 | -isystem $aospdir/bionic/libstdc++/include \ |
Christopher Ferris | 98a3aa6 | 2013-12-18 14:56:42 -0800 | [diff] [blame^] | 72 | -isystem $aospdir/bionic/libc/kernel/uapi \ |
| 73 | -isystem $aospdir/bionic/libc/kernel/uapi/asm-arm \ |
Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 74 | -isystem $aospdir/bionic/libm/include \ |
| 75 | -isystem $aospdir/bionic/libm/include/arm \ |
| 76 | -isystem $aospdir/bionic/libthread_db/include \ |
Thorsten Glaser | 811a575 | 2013-07-25 14:24:45 +0000 | [diff] [blame] | 77 | -D_FORTIFY_SOURCE=2 \ |
Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 78 | -include $aospdir/build/core/combo/include/arch/linux-arm/AndroidConfig.h \ |
| 79 | -I$aospdir/build/core/combo/include/arch/linux-arm/ \ |
Jean-Baptiste Queru | 5155f1c | 2011-06-16 10:05:28 -0700 | [diff] [blame] | 80 | -DANDROID -DNDEBUG -UDEBUG |
Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 81 | addvar CFLAGS \ |
| 82 | -fno-exceptions \ |
| 83 | -Wno-multichar \ |
| 84 | -msoft-float \ |
| 85 | -fpic \ |
| 86 | -fPIE \ |
| 87 | -ffunction-sections \ |
| 88 | -fdata-sections \ |
| 89 | -funwind-tables \ |
| 90 | -fstack-protector \ |
| 91 | -Wa,--noexecstack \ |
| 92 | -Werror=format-security \ |
| 93 | -fno-short-enums \ |
| 94 | -march=armv7-a \ |
| 95 | -mfloat-abi=softfp \ |
| 96 | -mfpu=vfpv3-d16 \ |
| 97 | -Wno-unused-but-set-variable \ |
| 98 | -fno-builtin-sin \ |
| 99 | -fno-strict-volatile-bitfields \ |
| 100 | -Wno-psabi \ |
| 101 | -mthumb-interwork \ |
| 102 | -fmessage-length=0 \ |
| 103 | -W \ |
| 104 | -Wall \ |
| 105 | -Wno-unused \ |
| 106 | -Winit-self \ |
| 107 | -Wpointer-arith \ |
| 108 | -Werror=return-type \ |
| 109 | -Werror=non-virtual-dtor \ |
| 110 | -Werror=address \ |
| 111 | -Werror=sequence-point \ |
| 112 | -g \ |
| 113 | -Wstrict-aliasing=2 \ |
| 114 | -fgcse-after-reload \ |
| 115 | -frerun-cse-after-loop \ |
| 116 | -frename-registers \ |
| 117 | -mthumb \ |
| 118 | -Os \ |
| 119 | -fomit-frame-pointer \ |
| 120 | -fno-strict-aliasing |
| 121 | addvar LDFLAGS \ |
| 122 | -nostdlib \ |
| 123 | -Bdynamic \ |
Thorsten Glaser | 811a575 | 2013-07-25 14:24:45 +0000 | [diff] [blame] | 124 | -fPIE \ |
Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 125 | -pie \ |
| 126 | -Wl,-dynamic-linker,/system/bin/linker \ |
| 127 | -Wl,--gc-sections \ |
| 128 | -Wl,-z,nocopyreloc \ |
| 129 | -Wl,-z,noexecstack \ |
| 130 | -Wl,-z,relro \ |
| 131 | -Wl,-z,now \ |
| 132 | -Wl,--warn-shared-textrel \ |
Thorsten Glaser | 811a575 | 2013-07-25 14:24:45 +0000 | [diff] [blame] | 133 | -Wl,--fatal-warnings \ |
Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 134 | -Wl,--icf=safe \ |
| 135 | -Wl,--fix-cortex-a8 \ |
| 136 | -Wl,--no-undefined \ |
Jean-Baptiste Queru | 5155f1c | 2011-06-16 10:05:28 -0700 | [diff] [blame] | 137 | $aospdir/out/target/product/generic/obj/lib/crtbegin_dynamic.o |
Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 138 | addvar LIBS \ |
| 139 | -L$aospdir/out/target/product/generic/obj/lib \ |
| 140 | -Wl,-rpath-link=$aospdir/out/target/product/generic/obj/lib \ |
Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 141 | -Wl,--no-whole-archive \ |
Thorsten Glaser | 811a575 | 2013-07-25 14:24:45 +0000 | [diff] [blame] | 142 | $aospdir/out/target/product/generic/obj/STATIC_LIBRARIES/libcompiler_rt-extras_intermediates/libcompiler_rt-extras.a \ |
| 143 | -lc \ |
Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 144 | $aospdir/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.7/bin/../lib/gcc/arm-linux-androideabi/4.7/armv7-a/libgcc.a \ |
Jean-Baptiste Queru | 5155f1c | 2011-06-16 10:05:28 -0700 | [diff] [blame] | 145 | $aospdir/out/target/product/generic/obj/lib/crtend_android.o |
| 146 | |
| 147 | |
Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 148 | ### Flags used by test builds |
| 149 | if test $mkmfmode = 1; then |
| 150 | addvar CPPFLAGS '-DMKSHRC_PATH=\"/system/etc/mkshrc\"' |
| 151 | addvar CPPFLAGS '-DMKSH_DEFAULT_EXECSHELL=\"/system/bin/sh\"' |
Nick Kralevich | fd187c6 | 2013-02-20 11:20:51 -0800 | [diff] [blame] | 152 | addvar CPPFLAGS '-DMKSH_DEFAULT_TMPDIR=\"/data/local\"' |
Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 153 | fi |
| 154 | |
Jean-Baptiste Queru | 5155f1c | 2011-06-16 10:05:28 -0700 | [diff] [blame] | 155 | ### Override flags |
Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 156 | # Let the shell free all memory upon exiting |
| 157 | addvar CPPFLAGS -DDEBUG_LEAKS |
| 158 | # UTF-8 works nowadays |
| 159 | addvar CPPFLAGS -DMKSH_ASSUME_UTF8 |
| 160 | # Reduce filedescriptor usage |
| 161 | addvar CPPFLAGS -DMKSH_CONSERVATIVE_FDS |
| 162 | # Leave out RCS ID strings from the binary |
| 163 | addvar CPPFLAGS -DMKSH_DONT_EMIT_IDSTRING |
Jean-Baptiste Queru | 5155f1c | 2011-06-16 10:05:28 -0700 | [diff] [blame] | 164 | # No getpwnam() calls (affects "cd ~username/" only) |
| 165 | addvar CPPFLAGS -DMKSH_NOPWNAM |
Jean-Baptiste Queru | 5155f1c | 2011-06-16 10:05:28 -0700 | [diff] [blame] | 166 | # Leave out the ulimit builtin |
| 167 | #addvar CPPFLAGS -DMKSH_NO_LIMITS |
Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 168 | # Compile an extra small mksh (optional) |
| 169 | #addvar CPPFLAGS -DMKSH_SMALL |
Jean-Baptiste Queru | 5155f1c | 2011-06-16 10:05:28 -0700 | [diff] [blame] | 170 | |
| 171 | # Set target platform |
Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 172 | TARGET_OS=Android |
Jean-Baptiste Queru | 5155f1c | 2011-06-16 10:05:28 -0700 | [diff] [blame] | 173 | |
| 174 | # Android-x86 does not have helper functions for ProPolice SSP |
| 175 | # and AOSP adds the flags by itself (same for warning flags) |
| 176 | HAVE_CAN_FNOSTRICTALIASING=0 |
| 177 | HAVE_CAN_FSTACKPROTECTORALL=0 |
| 178 | HAVE_CAN_WALL=0 |
| 179 | export HAVE_CAN_FNOSTRICTALIASING HAVE_CAN_FSTACKPROTECTORALL HAVE_CAN_WALL |
| 180 | |
Jean-Baptiste Queru | 5155f1c | 2011-06-16 10:05:28 -0700 | [diff] [blame] | 181 | # even the idea of persistent history on a phone is funny |
| 182 | HAVE_PERSISTENT_HISTORY=0; export HAVE_PERSISTENT_HISTORY |
| 183 | |
| 184 | # ... and run it! |
| 185 | export CC CPPFLAGS CFLAGS LDFLAGS LIBS TARGET_OS |
Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 186 | sh ../src/Build.sh $args |
Jean-Baptiste Queru | 5155f1c | 2011-06-16 10:05:28 -0700 | [diff] [blame] | 187 | rv=$? |
Thorsten Glaser | c2dc5de | 2013-02-18 23:02:51 +0000 | [diff] [blame] | 188 | test x"$args" = x"-r" && exit $rv |
Jean-Baptiste Queru | 5155f1c | 2011-06-16 10:05:28 -0700 | [diff] [blame] | 189 | test x0 = x"$rv" && mv -f Makefrag.inc ../ |
| 190 | cd .. |
| 191 | rm -rf tmp |
| 192 | exit $rv |