# 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
