blob: fafa34b6349131a642a7e3dc7a583c514586d612 [file] [log] [blame]
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +00001# Copyright © 2010, 2012, 2013
2# Thorsten Glaser <tg@mirbsd.org>
Jean-Baptiste Queru5155f1c2011-06-16 10:05:28 -07003# 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 Glaserc2dc5de2013-02-18 23:02:51 +000011if test x"$1" = x"-t"; then
12 # test compilation
13 args=-r
14 mkmfmode=1
15else
16 # prepare for AOSP
17 args=-M
18 mkmfmode=0
19fi
20
Jean-Baptiste Queru5155f1c2011-06-16 10:05:28 -070021cd "$(dirname "$0")"
22srcdir=$(pwd)
23rm -rf tmp
24mkdir tmp
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +000025cd ../..
Jean-Baptiste Queru5155f1c2011-06-16 10:05:28 -070026aospdir=$(pwd)
27cd $srcdir/tmp
28
29addvar() {
30 _vn=$1; shift
31
32 eval $_vn=\"\$$_vn '$*"'
33}
34
35CFLAGS=
36CPPFLAGS=
37LDFLAGS=
38LIBS=
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.)
Elliott Hughes737fdce2014-08-07 12:59:26 -070052# Since we no longer use the NDK, AOSP has to have been
53# built before using this script.
Jean-Baptiste Queru5155f1c2011-06-16 10:05:28 -070054
Elliott Hughes0e7ec742014-08-12 15:39:09 -070055CC=$ANDROID_TOOLCHAIN/*-gcc
56
57target_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
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +000059addvar CPPFLAGS \
Elliott Hughes0e7ec742014-08-12 15:39:09 -070060 -isystem $aospdir/bionic/libc/arch-$target_arch/include \
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +000061 -isystem $aospdir/bionic/libc/include \
Christopher Ferris98a3aa62013-12-18 14:56:42 -080062 -isystem $aospdir/bionic/libc/kernel/uapi \
Elliott Hughes0e7ec742014-08-12 15:39:09 -070063 -isystem $aospdir/bionic/libc/kernel/uapi/asm-$target_arch \
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +000064 -isystem $aospdir/bionic/libm/include \
Elliott Hughes0e7ec742014-08-12 15:39:09 -070065 -isystem $aospdir/bionic/libm/include/$target_arch \
Thorsten Glaser811a5752013-07-25 14:24:45 +000066 -D_FORTIFY_SOURCE=2 \
Elliott Hughes0e7ec742014-08-12 15:39:09 -070067 -include $aospdir/build/core/combo/include/arch/linux-$target_arch/AndroidConfig.h \
68 -I$aospdir/build/core/combo/include/arch/linux-$target_arch/ \
Jean-Baptiste Queru5155f1c2011-06-16 10:05:28 -070069 -DANDROID -DNDEBUG -UDEBUG
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +000070addvar CFLAGS \
71 -fno-exceptions \
72 -Wno-multichar \
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +000073 -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 \
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +000082 -Wno-unused-but-set-variable \
83 -fno-builtin-sin \
84 -fno-strict-volatile-bitfields \
85 -Wno-psabi \
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +000086 -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 \
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +0000101 -Os \
102 -fomit-frame-pointer \
103 -fno-strict-aliasing
104addvar LDFLAGS \
105 -nostdlib \
106 -Bdynamic \
Thorsten Glaser811a5752013-07-25 14:24:45 +0000107 -fPIE \
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +0000108 -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 \
Thorsten Glaser811a5752013-07-25 14:24:45 +0000116 -Wl,--fatal-warnings \
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +0000117 -Wl,--no-undefined \
Elliott Hughes737fdce2014-08-07 12:59:26 -0700118 $ANDROID_PRODUCT_OUT/obj/lib/crtbegin_dynamic.o
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +0000119addvar LIBS \
Elliott Hughes737fdce2014-08-07 12:59:26 -0700120 -L$ANDROID_PRODUCT_OUT/obj/lib \
121 -Wl,-rpath-link=$ANDROID_PRODUCT_OUT/obj/lib \
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +0000122 -Wl,--no-whole-archive \
Elliott Hughes737fdce2014-08-07 12:59:26 -0700123 $ANDROID_PRODUCT_OUT/obj/STATIC_LIBRARIES/libcompiler_rt-extras_intermediates/libcompiler_rt-extras.a \
Thorsten Glaser811a5752013-07-25 14:24:45 +0000124 -lc \
Elliott Hughes737fdce2014-08-07 12:59:26 -0700125 $ANDROID_PRODUCT_OUT/obj/lib/crtend_android.o
Jean-Baptiste Queru5155f1c2011-06-16 10:05:28 -0700126
127
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +0000128### Flags used by test builds
129if test $mkmfmode = 1; then
130 addvar CPPFLAGS '-DMKSHRC_PATH=\"/system/etc/mkshrc\"'
131 addvar CPPFLAGS '-DMKSH_DEFAULT_EXECSHELL=\"/system/bin/sh\"'
Nick Kralevichfd187c62013-02-20 11:20:51 -0800132 addvar CPPFLAGS '-DMKSH_DEFAULT_TMPDIR=\"/data/local\"'
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +0000133fi
134
Jean-Baptiste Queru5155f1c2011-06-16 10:05:28 -0700135### Override flags
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +0000136# Let the shell free all memory upon exiting
137addvar CPPFLAGS -DDEBUG_LEAKS
138# UTF-8 works nowadays
139addvar CPPFLAGS -DMKSH_ASSUME_UTF8
140# Reduce filedescriptor usage
141addvar CPPFLAGS -DMKSH_CONSERVATIVE_FDS
142# Leave out RCS ID strings from the binary
143addvar CPPFLAGS -DMKSH_DONT_EMIT_IDSTRING
Jean-Baptiste Queru5155f1c2011-06-16 10:05:28 -0700144# No getpwnam() calls (affects "cd ~username/" only)
145addvar CPPFLAGS -DMKSH_NOPWNAM
Jean-Baptiste Queru5155f1c2011-06-16 10:05:28 -0700146# Leave out the ulimit builtin
147#addvar CPPFLAGS -DMKSH_NO_LIMITS
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +0000148# Compile an extra small mksh (optional)
149#addvar CPPFLAGS -DMKSH_SMALL
Jean-Baptiste Queru5155f1c2011-06-16 10:05:28 -0700150
151# Set target platform
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +0000152TARGET_OS=Android
Jean-Baptiste Queru5155f1c2011-06-16 10:05:28 -0700153
154# Android-x86 does not have helper functions for ProPolice SSP
155# and AOSP adds the flags by itself (same for warning flags)
156HAVE_CAN_FNOSTRICTALIASING=0
157HAVE_CAN_FSTACKPROTECTORALL=0
158HAVE_CAN_WALL=0
159export HAVE_CAN_FNOSTRICTALIASING HAVE_CAN_FSTACKPROTECTORALL HAVE_CAN_WALL
160
Jean-Baptiste Queru5155f1c2011-06-16 10:05:28 -0700161# even the idea of persistent history on a phone is funny
162HAVE_PERSISTENT_HISTORY=0; export HAVE_PERSISTENT_HISTORY
163
164# ... and run it!
165export CC CPPFLAGS CFLAGS LDFLAGS LIBS TARGET_OS
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +0000166sh ../src/Build.sh $args
Jean-Baptiste Queru5155f1c2011-06-16 10:05:28 -0700167rv=$?
Thorsten Glaserc2dc5de2013-02-18 23:02:51 +0000168test x"$args" = x"-r" && exit $rv
Jean-Baptiste Queru5155f1c2011-06-16 10:05:28 -0700169test x0 = x"$rv" && mv -f Makefrag.inc ../
170cd ..
171rm -rf tmp
172exit $rv