Home | History | Annotate | Download | only in mksh
      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