OSDN Git Service

Merge "Default to xterm, remove some cruft."
[android-x86/external-mksh.git] / mkmf.sh
1 # Copyright Â© 2010, 2012, 2013
2 #       Thorsten Glaser <tg@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