1c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser# Copyright © 2010, 2012, 2013 2c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser# Thorsten Glaser <tg@mirbsd.org> 35155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# This file is provided under the same terms as mksh. 45155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru#- 55155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# Helper script to let src/Build.sh generate Makefrag.inc 65155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# which we in turn use in the manual creation of Android.mk 75155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# 85155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# This script is supposed to be run from/inside AOSP by the 95155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# porter of mksh to Android (and only manually). 105155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru 11c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaserif test x"$1" = x"-t"; then 12c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser # test compilation 13c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser args=-r 14c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser mkmfmode=1 15c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaserelse 16c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser # prepare for AOSP 17c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser args=-M 18c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser mkmfmode=0 19c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaserfi 20c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser 215155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Querucd "$(dirname "$0")" 225155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Querusrcdir=$(pwd) 235155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Querurm -rf tmp 245155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Querumkdir tmp 25c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glasercd ../.. 265155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queruaospdir=$(pwd) 275155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Querucd $srcdir/tmp 285155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru 295155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queruaddvar() { 305155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru _vn=$1; shift 315155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru 325155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru eval $_vn=\"\$$_vn '$*"' 335155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru} 345155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru 355155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste QueruCFLAGS= 365155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste QueruCPPFLAGS= 375155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste QueruLDFLAGS= 385155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste QueruLIBS= 395155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru 405155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# The definitions below were generated by examining the 415155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# output of the following command: 425155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# make showcommands out/target/product/generic/system/bin/mksh 2>&1 | tee log 435155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# 445155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# They are only used to let Build.sh find the compiler, header 455155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# files, linker and libraries to generate Makefrag.inc (similar 465155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# to what GNU autotools’ configure scripts do), and never used 475155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# during the real build process. We need this to port mksh to 485155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# the Android platform and it is crucial these are as close as 495155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# possible to the values used later. (You also must example the 505155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# results gathered from Makefrag.inc to see they are the same 515155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# across all Android platforms, or add appropriate ifdefs.) 52427d76ccc44aea287b51b233f0254a6107b2b3d1Elliott Hughes# Since we no longer use the NDK, AOSP has to have been 53427d76ccc44aea287b51b233f0254a6107b2b3d1Elliott Hughes# built before using this script. 545155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru 551bd2f37e635c84b4499f9f62e69665df92e423a2Elliott HughesCC=$ANDROID_TOOLCHAIN/*-gcc 561bd2f37e635c84b4499f9f62e69665df92e423a2Elliott Hughes 571bd2f37e635c84b4499f9f62e69665df92e423a2Elliott Hughestarget_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) 581bd2f37e635c84b4499f9f62e69665df92e423a2Elliott Hughes 59c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaseraddvar CPPFLAGS \ 601bd2f37e635c84b4499f9f62e69665df92e423a2Elliott Hughes -isystem $aospdir/bionic/libc/arch-$target_arch/include \ 61c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -isystem $aospdir/bionic/libc/include \ 6298a3aa64de7592c94ccdc6f08048cf03036491b4Christopher Ferris -isystem $aospdir/bionic/libc/kernel/uapi \ 631bd2f37e635c84b4499f9f62e69665df92e423a2Elliott Hughes -isystem $aospdir/bionic/libc/kernel/uapi/asm-$target_arch \ 64c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -isystem $aospdir/bionic/libm/include \ 651bd2f37e635c84b4499f9f62e69665df92e423a2Elliott Hughes -isystem $aospdir/bionic/libm/include/$target_arch \ 66811a575c0f6a5ef00a921d14c1830ef5ae1bd796Thorsten Glaser -D_FORTIFY_SOURCE=2 \ 671bd2f37e635c84b4499f9f62e69665df92e423a2Elliott Hughes -include $aospdir/build/core/combo/include/arch/linux-$target_arch/AndroidConfig.h \ 681bd2f37e635c84b4499f9f62e69665df92e423a2Elliott Hughes -I$aospdir/build/core/combo/include/arch/linux-$target_arch/ \ 695155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru -DANDROID -DNDEBUG -UDEBUG 70c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaseraddvar CFLAGS \ 71c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -fno-exceptions \ 72c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Wno-multichar \ 73c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -fpic \ 74c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -fPIE \ 75c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -ffunction-sections \ 76c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -fdata-sections \ 77c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -funwind-tables \ 78c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -fstack-protector \ 79c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Wa,--noexecstack \ 80c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Werror=format-security \ 81c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -fno-short-enums \ 82c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Wno-unused-but-set-variable \ 83c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -fno-builtin-sin \ 84c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -fno-strict-volatile-bitfields \ 85c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Wno-psabi \ 86c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -fmessage-length=0 \ 87c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -W \ 88c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Wall \ 89c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Wno-unused \ 90c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Winit-self \ 91c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Wpointer-arith \ 92c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Werror=return-type \ 93c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Werror=non-virtual-dtor \ 94c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Werror=address \ 95c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Werror=sequence-point \ 96c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -g \ 97c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Wstrict-aliasing=2 \ 98c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -fgcse-after-reload \ 99c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -frerun-cse-after-loop \ 100c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -frename-registers \ 101c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Os \ 102c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -fomit-frame-pointer \ 103c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -fno-strict-aliasing 104c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaseraddvar LDFLAGS \ 105c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -nostdlib \ 106c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Bdynamic \ 107811a575c0f6a5ef00a921d14c1830ef5ae1bd796Thorsten Glaser -fPIE \ 108c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -pie \ 109c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Wl,-dynamic-linker,/system/bin/linker \ 110c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Wl,--gc-sections \ 111c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Wl,-z,nocopyreloc \ 112c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Wl,-z,noexecstack \ 113c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Wl,-z,relro \ 114c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Wl,-z,now \ 115c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Wl,--warn-shared-textrel \ 116811a575c0f6a5ef00a921d14c1830ef5ae1bd796Thorsten Glaser -Wl,--fatal-warnings \ 117c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Wl,--no-undefined \ 118427d76ccc44aea287b51b233f0254a6107b2b3d1Elliott Hughes $ANDROID_PRODUCT_OUT/obj/lib/crtbegin_dynamic.o 119c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaseraddvar LIBS \ 120427d76ccc44aea287b51b233f0254a6107b2b3d1Elliott Hughes -L$ANDROID_PRODUCT_OUT/obj/lib \ 121427d76ccc44aea287b51b233f0254a6107b2b3d1Elliott Hughes -Wl,-rpath-link=$ANDROID_PRODUCT_OUT/obj/lib \ 122c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser -Wl,--no-whole-archive \ 123427d76ccc44aea287b51b233f0254a6107b2b3d1Elliott Hughes $ANDROID_PRODUCT_OUT/obj/STATIC_LIBRARIES/libcompiler_rt-extras_intermediates/libcompiler_rt-extras.a \ 124811a575c0f6a5ef00a921d14c1830ef5ae1bd796Thorsten Glaser -lc \ 125427d76ccc44aea287b51b233f0254a6107b2b3d1Elliott Hughes $ANDROID_PRODUCT_OUT/obj/lib/crtend_android.o 1265155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru 1275155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru 128c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser### Flags used by test builds 129c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaserif test $mkmfmode = 1; then 130c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser addvar CPPFLAGS '-DMKSHRC_PATH=\"/system/etc/mkshrc\"' 131c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser addvar CPPFLAGS '-DMKSH_DEFAULT_EXECSHELL=\"/system/bin/sh\"' 132fd187c65783f5032a49eace50b115495b051cd73Nick Kralevich addvar CPPFLAGS '-DMKSH_DEFAULT_TMPDIR=\"/data/local\"' 133c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaserfi 134c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser 1355155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru### Override flags 136c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser# Let the shell free all memory upon exiting 137c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaseraddvar CPPFLAGS -DDEBUG_LEAKS 138c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser# UTF-8 works nowadays 139c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaseraddvar CPPFLAGS -DMKSH_ASSUME_UTF8 140c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser# Reduce filedescriptor usage 141c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaseraddvar CPPFLAGS -DMKSH_CONSERVATIVE_FDS 142c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser# Leave out RCS ID strings from the binary 143c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaseraddvar CPPFLAGS -DMKSH_DONT_EMIT_IDSTRING 1445155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# No getpwnam() calls (affects "cd ~username/" only) 1455155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queruaddvar CPPFLAGS -DMKSH_NOPWNAM 1465155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# Leave out the ulimit builtin 1475155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru#addvar CPPFLAGS -DMKSH_NO_LIMITS 148c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser# Compile an extra small mksh (optional) 149c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glaser#addvar CPPFLAGS -DMKSH_SMALL 1505155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru 1515155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# Set target platform 152c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten GlaserTARGET_OS=Android 1535155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru 1545155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# Android-x86 does not have helper functions for ProPolice SSP 1555155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# and AOSP adds the flags by itself (same for warning flags) 1565155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste QueruHAVE_CAN_FNOSTRICTALIASING=0 1575155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste QueruHAVE_CAN_FSTACKPROTECTORALL=0 1585155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste QueruHAVE_CAN_WALL=0 1595155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queruexport HAVE_CAN_FNOSTRICTALIASING HAVE_CAN_FSTACKPROTECTORALL HAVE_CAN_WALL 1605155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru 1615155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# even the idea of persistent history on a phone is funny 1625155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste QueruHAVE_PERSISTENT_HISTORY=0; export HAVE_PERSISTENT_HISTORY 1635155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru 1645155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queru# ... and run it! 1655155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queruexport CC CPPFLAGS CFLAGS LDFLAGS LIBS TARGET_OS 166c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glasersh ../src/Build.sh $args 1675155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Querurv=$? 168c2dc5def5e2273bb1d78b4ba032a3903dd0f980cThorsten Glasertest x"$args" = x"-r" && exit $rv 1695155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Querutest x0 = x"$rv" && mv -f Makefrag.inc ../ 1705155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Querucd .. 1715155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Querurm -rf tmp 1725155f1c7438ef540d7b25eb70aa1639579795b07Jean-Baptiste Queruexit $rv 173