xref: /aosp_15_r20/external/musl/configure (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker#!/bin/sh
2*c9945492SAndroid Build Coastguard Worker
3*c9945492SAndroid Build Coastguard Workerusage () {
4*c9945492SAndroid Build Coastguard Workercat <<EOF
5*c9945492SAndroid Build Coastguard WorkerUsage: $0 [OPTION]... [VAR=VALUE]... [TARGET]
6*c9945492SAndroid Build Coastguard Worker
7*c9945492SAndroid Build Coastguard WorkerTo assign environment variables (e.g., CC, CFLAGS...), specify them as
8*c9945492SAndroid Build Coastguard WorkerVAR=VALUE.  See below for descriptions of some of the useful variables.
9*c9945492SAndroid Build Coastguard Worker
10*c9945492SAndroid Build Coastguard WorkerDefaults for the options are specified in brackets.
11*c9945492SAndroid Build Coastguard Worker
12*c9945492SAndroid Build Coastguard WorkerConfiguration:
13*c9945492SAndroid Build Coastguard Worker  --srcdir=DIR            source directory [detected]
14*c9945492SAndroid Build Coastguard Worker
15*c9945492SAndroid Build Coastguard WorkerInstallation directories:
16*c9945492SAndroid Build Coastguard Worker  --prefix=PREFIX         main installation prefix [/usr/local/musl]
17*c9945492SAndroid Build Coastguard Worker  --exec-prefix=EPREFIX   installation prefix for executable files [PREFIX]
18*c9945492SAndroid Build Coastguard Worker
19*c9945492SAndroid Build Coastguard WorkerFine tuning of the installation directories:
20*c9945492SAndroid Build Coastguard Worker  --bindir=DIR            user executables [EPREFIX/bin]
21*c9945492SAndroid Build Coastguard Worker  --libdir=DIR            library files for the linker [PREFIX/lib]
22*c9945492SAndroid Build Coastguard Worker  --includedir=DIR        include files for the C compiler [PREFIX/include]
23*c9945492SAndroid Build Coastguard Worker  --syslibdir=DIR         location for the dynamic linker [/lib]
24*c9945492SAndroid Build Coastguard Worker
25*c9945492SAndroid Build Coastguard WorkerSystem types:
26*c9945492SAndroid Build Coastguard Worker  --target=TARGET         configure to run on target TARGET [detected]
27*c9945492SAndroid Build Coastguard Worker  --host=HOST             same as --target
28*c9945492SAndroid Build Coastguard Worker  --build=BUILD           build system type; used only to infer cross-compiling
29*c9945492SAndroid Build Coastguard Worker
30*c9945492SAndroid Build Coastguard WorkerOptional features:
31*c9945492SAndroid Build Coastguard Worker  --enable-optimize=...   optimize listed components for speed over size [auto]
32*c9945492SAndroid Build Coastguard Worker  --enable-debug          build with debugging information [disabled]
33*c9945492SAndroid Build Coastguard Worker  --disable-warnings      build with recommended warnings flags [enabled]
34*c9945492SAndroid Build Coastguard Worker  --enable-wrapper=...    build given musl toolchain wrapper [auto]
35*c9945492SAndroid Build Coastguard Worker  --disable-shared        inhibit building shared library [enabled]
36*c9945492SAndroid Build Coastguard Worker  --disable-static        inhibit building static library [enabled]
37*c9945492SAndroid Build Coastguard Worker
38*c9945492SAndroid Build Coastguard WorkerOptional packages:
39*c9945492SAndroid Build Coastguard Worker  --with-malloc=...       choose malloc implementation [mallocng]
40*c9945492SAndroid Build Coastguard Worker
41*c9945492SAndroid Build Coastguard WorkerSome influential environment variables:
42*c9945492SAndroid Build Coastguard Worker  CC                      C compiler command [detected]
43*c9945492SAndroid Build Coastguard Worker  CFLAGS                  C compiler flags [-Os -pipe ...]
44*c9945492SAndroid Build Coastguard Worker  CROSS_COMPILE           prefix for cross compiler and tools [none]
45*c9945492SAndroid Build Coastguard Worker  LIBCC                   compiler runtime library [detected]
46*c9945492SAndroid Build Coastguard Worker
47*c9945492SAndroid Build Coastguard WorkerUse these variables to override the choices made by configure.
48*c9945492SAndroid Build Coastguard Worker
49*c9945492SAndroid Build Coastguard WorkerEOF
50*c9945492SAndroid Build Coastguard Workerexit 0
51*c9945492SAndroid Build Coastguard Worker}
52*c9945492SAndroid Build Coastguard Worker
53*c9945492SAndroid Build Coastguard Worker# Helper functions
54*c9945492SAndroid Build Coastguard Worker
55*c9945492SAndroid Build Coastguard Workerquote () {
56*c9945492SAndroid Build Coastguard Workertr '\n' ' ' <<EOF | grep '^[-[:alnum:]_=,./:]* $' >/dev/null 2>&1 && { echo "$1" ; return 0 ; }
57*c9945492SAndroid Build Coastguard Worker$1
58*c9945492SAndroid Build Coastguard WorkerEOF
59*c9945492SAndroid Build Coastguard Workerprintf %s\\n "$1" | sed -e "s/'/'\\\\''/g" -e "1s/^/'/" -e "\$s/\$/'/" -e "s#^'\([-[:alnum:]_,./:]*\)=\(.*\)\$#\1='\2#"
60*c9945492SAndroid Build Coastguard Worker}
61*c9945492SAndroid Build Coastguard Workerecho () { printf "%s\n" "$*" ; }
62*c9945492SAndroid Build Coastguard Workerfail () { echo "$*" ; exit 1 ; }
63*c9945492SAndroid Build Coastguard Workerfnmatch () { eval "case \"\$2\" in $1) return 0 ;; *) return 1 ;; esac" ; }
64*c9945492SAndroid Build Coastguard Workercmdexists () { type "$1" >/dev/null 2>&1 ; }
65*c9945492SAndroid Build Coastguard Workertrycc () { test -z "$CC" && cmdexists "$1" && CC=$1 ; }
66*c9945492SAndroid Build Coastguard Worker
67*c9945492SAndroid Build Coastguard Workerstripdir () {
68*c9945492SAndroid Build Coastguard Workerwhile eval "fnmatch '*/' \"\${$1}\"" ; do eval "$1=\${$1%/}" ; done
69*c9945492SAndroid Build Coastguard Worker}
70*c9945492SAndroid Build Coastguard Worker
71*c9945492SAndroid Build Coastguard Workertrycppif () {
72*c9945492SAndroid Build Coastguard Workerprintf "checking preprocessor condition %s... " "$1"
73*c9945492SAndroid Build Coastguard Workerecho "typedef int x;" > "$tmpc"
74*c9945492SAndroid Build Coastguard Workerecho "#if $1" >> "$tmpc"
75*c9945492SAndroid Build Coastguard Workerecho "#error yes" >> "$tmpc"
76*c9945492SAndroid Build Coastguard Workerecho "#endif" >> "$tmpc"
77*c9945492SAndroid Build Coastguard Workerif $CC $2 -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
78*c9945492SAndroid Build Coastguard Workerprintf "false\n"
79*c9945492SAndroid Build Coastguard Workerreturn 1
80*c9945492SAndroid Build Coastguard Workerelse
81*c9945492SAndroid Build Coastguard Workerprintf "true\n"
82*c9945492SAndroid Build Coastguard Workerreturn 0
83*c9945492SAndroid Build Coastguard Workerfi
84*c9945492SAndroid Build Coastguard Worker}
85*c9945492SAndroid Build Coastguard Worker
86*c9945492SAndroid Build Coastguard Workertryflag () {
87*c9945492SAndroid Build Coastguard Workerprintf "checking whether compiler accepts %s... " "$2"
88*c9945492SAndroid Build Coastguard Workerecho "typedef int x;" > "$tmpc"
89*c9945492SAndroid Build Coastguard Workerif $CC $CFLAGS_TRY $2 -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
90*c9945492SAndroid Build Coastguard Workerprintf "yes\n"
91*c9945492SAndroid Build Coastguard Workereval "$1=\"\${$1} \$2\""
92*c9945492SAndroid Build Coastguard Workereval "$1=\${$1# }"
93*c9945492SAndroid Build Coastguard Workerreturn 0
94*c9945492SAndroid Build Coastguard Workerelse
95*c9945492SAndroid Build Coastguard Workerprintf "no\n"
96*c9945492SAndroid Build Coastguard Workerreturn 1
97*c9945492SAndroid Build Coastguard Workerfi
98*c9945492SAndroid Build Coastguard Worker}
99*c9945492SAndroid Build Coastguard Worker
100*c9945492SAndroid Build Coastguard Workertryldflag () {
101*c9945492SAndroid Build Coastguard Workerprintf "checking whether linker accepts %s... " "$2"
102*c9945492SAndroid Build Coastguard Workerecho "typedef int x;" > "$tmpc"
103*c9945492SAndroid Build Coastguard Workerif $CC $LDFLAGS_TRY -nostdlib -shared "$2" -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
104*c9945492SAndroid Build Coastguard Workerprintf "yes\n"
105*c9945492SAndroid Build Coastguard Workereval "$1=\"\${$1} \$2\""
106*c9945492SAndroid Build Coastguard Workereval "$1=\${$1# }"
107*c9945492SAndroid Build Coastguard Workerreturn 0
108*c9945492SAndroid Build Coastguard Workerelse
109*c9945492SAndroid Build Coastguard Workerprintf "no\n"
110*c9945492SAndroid Build Coastguard Workerreturn 1
111*c9945492SAndroid Build Coastguard Workerfi
112*c9945492SAndroid Build Coastguard Worker}
113*c9945492SAndroid Build Coastguard Worker
114*c9945492SAndroid Build Coastguard Worker
115*c9945492SAndroid Build Coastguard Worker
116*c9945492SAndroid Build Coastguard Worker# Beginning of actual script
117*c9945492SAndroid Build Coastguard Worker
118*c9945492SAndroid Build Coastguard WorkerCFLAGS_C99FSE=
119*c9945492SAndroid Build Coastguard WorkerCFLAGS_AUTO=
120*c9945492SAndroid Build Coastguard WorkerCFLAGS_MEMOPS=
121*c9945492SAndroid Build Coastguard WorkerCFLAGS_NOSSP=
122*c9945492SAndroid Build Coastguard WorkerCFLAGS_TRY=
123*c9945492SAndroid Build Coastguard WorkerLDFLAGS_AUTO=
124*c9945492SAndroid Build Coastguard WorkerLDFLAGS_TRY=
125*c9945492SAndroid Build Coastguard WorkerOPTIMIZE_GLOBS=
126*c9945492SAndroid Build Coastguard Workersrcdir=
127*c9945492SAndroid Build Coastguard Workerprefix=/usr/local/musl
128*c9945492SAndroid Build Coastguard Workerexec_prefix='$(prefix)'
129*c9945492SAndroid Build Coastguard Workerbindir='$(exec_prefix)/bin'
130*c9945492SAndroid Build Coastguard Workerlibdir='$(prefix)/lib'
131*c9945492SAndroid Build Coastguard Workerincludedir='$(prefix)/include'
132*c9945492SAndroid Build Coastguard Workersyslibdir='/lib'
133*c9945492SAndroid Build Coastguard Workertools=
134*c9945492SAndroid Build Coastguard Workertool_libs=
135*c9945492SAndroid Build Coastguard Workerbuild=
136*c9945492SAndroid Build Coastguard Workertarget=
137*c9945492SAndroid Build Coastguard Workeroptimize=auto
138*c9945492SAndroid Build Coastguard Workerdebug=no
139*c9945492SAndroid Build Coastguard Workerwarnings=yes
140*c9945492SAndroid Build Coastguard Workershared=auto
141*c9945492SAndroid Build Coastguard Workerstatic=yes
142*c9945492SAndroid Build Coastguard Workerwrapper=auto
143*c9945492SAndroid Build Coastguard Workergcc_wrapper=no
144*c9945492SAndroid Build Coastguard Workerclang_wrapper=no
145*c9945492SAndroid Build Coastguard Workermalloc_dir=mallocng
146*c9945492SAndroid Build Coastguard Worker
147*c9945492SAndroid Build Coastguard Workerfor arg ; do
148*c9945492SAndroid Build Coastguard Workercase "$arg" in
149*c9945492SAndroid Build Coastguard Worker--help|-h) usage ;;
150*c9945492SAndroid Build Coastguard Worker--srcdir=*) srcdir=${arg#*=} ;;
151*c9945492SAndroid Build Coastguard Worker--prefix=*) prefix=${arg#*=} ;;
152*c9945492SAndroid Build Coastguard Worker--exec-prefix=*) exec_prefix=${arg#*=} ;;
153*c9945492SAndroid Build Coastguard Worker--bindir=*) bindir=${arg#*=} ;;
154*c9945492SAndroid Build Coastguard Worker--libdir=*) libdir=${arg#*=} ;;
155*c9945492SAndroid Build Coastguard Worker--includedir=*) includedir=${arg#*=} ;;
156*c9945492SAndroid Build Coastguard Worker--syslibdir=*) syslibdir=${arg#*=} ;;
157*c9945492SAndroid Build Coastguard Worker--enable-shared|--enable-shared=yes) shared=yes ;;
158*c9945492SAndroid Build Coastguard Worker--disable-shared|--enable-shared=no) shared=no ;;
159*c9945492SAndroid Build Coastguard Worker--enable-static|--enable-static=yes) static=yes ;;
160*c9945492SAndroid Build Coastguard Worker--disable-static|--enable-static=no) static=no ;;
161*c9945492SAndroid Build Coastguard Worker--enable-optimize) optimize=yes ;;
162*c9945492SAndroid Build Coastguard Worker--enable-optimize=*) optimize=${arg#*=} ;;
163*c9945492SAndroid Build Coastguard Worker--disable-optimize) optimize=no ;;
164*c9945492SAndroid Build Coastguard Worker--enable-debug|--enable-debug=yes) debug=yes ;;
165*c9945492SAndroid Build Coastguard Worker--disable-debug|--enable-debug=no) debug=no ;;
166*c9945492SAndroid Build Coastguard Worker--enable-warnings|--enable-warnings=yes) warnings=yes ;;
167*c9945492SAndroid Build Coastguard Worker--disable-warnings|--enable-warnings=no) warnings=no ;;
168*c9945492SAndroid Build Coastguard Worker--enable-wrapper|--enable-wrapper=yes) wrapper=detect ;;
169*c9945492SAndroid Build Coastguard Worker--enable-wrapper=all) wrapper=yes ; gcc_wrapper=yes ; clang_wrapper=yes ;;
170*c9945492SAndroid Build Coastguard Worker--enable-wrapper=gcc) wrapper=yes ; gcc_wrapper=yes ;;
171*c9945492SAndroid Build Coastguard Worker--enable-wrapper=clang) wrapper=yes ; clang_wrapper=yes ;;
172*c9945492SAndroid Build Coastguard Worker--disable-wrapper|--enable-wrapper=no) wrapper=no ;;
173*c9945492SAndroid Build Coastguard Worker--enable-gcc-wrapper|--enable-gcc-wrapper=yes) wrapper=yes ; gcc_wrapper=yes ;;
174*c9945492SAndroid Build Coastguard Worker--disable-gcc-wrapper|--enable-gcc-wrapper=no) wrapper=no ;;
175*c9945492SAndroid Build Coastguard Worker--with-malloc=*) malloc_dir=${arg#*=} ;;
176*c9945492SAndroid Build Coastguard Worker--enable-*|--disable-*|--with-*|--without-*|--*dir=*) ;;
177*c9945492SAndroid Build Coastguard Worker--host=*|--target=*) target=${arg#*=} ;;
178*c9945492SAndroid Build Coastguard Worker--build=*) build=${arg#*=} ;;
179*c9945492SAndroid Build Coastguard Worker-* ) echo "$0: unknown option $arg" ;;
180*c9945492SAndroid Build Coastguard WorkerAR=*) AR=${arg#*=} ;;
181*c9945492SAndroid Build Coastguard WorkerRANLIB=*) RANLIB=${arg#*=} ;;
182*c9945492SAndroid Build Coastguard WorkerCC=*) CC=${arg#*=} ;;
183*c9945492SAndroid Build Coastguard WorkerCFLAGS=*) CFLAGS=${arg#*=} ;;
184*c9945492SAndroid Build Coastguard WorkerCPPFLAGS=*) CPPFLAGS=${arg#*=} ;;
185*c9945492SAndroid Build Coastguard WorkerLDFLAGS=*) LDFLAGS=${arg#*=} ;;
186*c9945492SAndroid Build Coastguard WorkerCROSS_COMPILE=*) CROSS_COMPILE=${arg#*=} ;;
187*c9945492SAndroid Build Coastguard WorkerLIBCC=*) LIBCC=${arg#*=} ;;
188*c9945492SAndroid Build Coastguard Worker*=*) ;;
189*c9945492SAndroid Build Coastguard Worker*) build=$arg ; target=$arg ;;
190*c9945492SAndroid Build Coastguard Workeresac
191*c9945492SAndroid Build Coastguard Workerdone
192*c9945492SAndroid Build Coastguard Worker
193*c9945492SAndroid Build Coastguard Workerfor i in srcdir prefix exec_prefix bindir libdir includedir syslibdir ; do
194*c9945492SAndroid Build Coastguard Workerstripdir $i
195*c9945492SAndroid Build Coastguard Workerdone
196*c9945492SAndroid Build Coastguard Worker
197*c9945492SAndroid Build Coastguard Worker#
198*c9945492SAndroid Build Coastguard Worker# Get the source dir for out-of-tree builds
199*c9945492SAndroid Build Coastguard Worker#
200*c9945492SAndroid Build Coastguard Workerif test -z "$srcdir" ; then
201*c9945492SAndroid Build Coastguard Workersrcdir="${0%/configure}"
202*c9945492SAndroid Build Coastguard Workerstripdir srcdir
203*c9945492SAndroid Build Coastguard Workerfi
204*c9945492SAndroid Build Coastguard Workerabs_builddir="$(pwd)" || fail "$0: cannot determine working directory"
205*c9945492SAndroid Build Coastguard Workerabs_srcdir="$(cd $srcdir && pwd)" || fail "$0: invalid source directory $srcdir"
206*c9945492SAndroid Build Coastguard Workertest "$abs_srcdir" = "$abs_builddir" && srcdir=.
207*c9945492SAndroid Build Coastguard Workertest "$srcdir" != "." && test -f Makefile && test ! -h Makefile && fail "$0: Makefile already exists in the working directory"
208*c9945492SAndroid Build Coastguard Worker
209*c9945492SAndroid Build Coastguard Worker#
210*c9945492SAndroid Build Coastguard Worker# Get a temp filename we can use
211*c9945492SAndroid Build Coastguard Worker#
212*c9945492SAndroid Build Coastguard Workeri=0
213*c9945492SAndroid Build Coastguard Workerset -C
214*c9945492SAndroid Build Coastguard Workerwhile : ; do i=$(($i+1))
215*c9945492SAndroid Build Coastguard Workertmpc="./conf$$-$PPID-$i.c"
216*c9945492SAndroid Build Coastguard Worker2>|/dev/null > "$tmpc" && break
217*c9945492SAndroid Build Coastguard Workertest "$i" -gt 50 && fail "$0: cannot create temporary file $tmpc"
218*c9945492SAndroid Build Coastguard Workerdone
219*c9945492SAndroid Build Coastguard Workerset +C
220*c9945492SAndroid Build Coastguard Workertrap 'rm "$tmpc"' EXIT INT QUIT TERM HUP
221*c9945492SAndroid Build Coastguard Worker
222*c9945492SAndroid Build Coastguard Worker#
223*c9945492SAndroid Build Coastguard Worker# Check that the requested malloc implementation exists
224*c9945492SAndroid Build Coastguard Worker#
225*c9945492SAndroid Build Coastguard Workertest -d "$srcdir/src/malloc/$malloc_dir" \
226*c9945492SAndroid Build Coastguard Worker|| fail "$0: error: chosen malloc implementation '$malloc_dir' does not exist"
227*c9945492SAndroid Build Coastguard Worker
228*c9945492SAndroid Build Coastguard Worker#
229*c9945492SAndroid Build Coastguard Worker# Check whether we are cross-compiling, and set a default
230*c9945492SAndroid Build Coastguard Worker# CROSS_COMPILE prefix if none was provided.
231*c9945492SAndroid Build Coastguard Worker#
232*c9945492SAndroid Build Coastguard Workertest "$target" && \
233*c9945492SAndroid Build Coastguard Workertest "$target" != "$build" && \
234*c9945492SAndroid Build Coastguard Workertest -z "$CROSS_COMPILE" && \
235*c9945492SAndroid Build Coastguard WorkerCROSS_COMPILE="$target-"
236*c9945492SAndroid Build Coastguard Worker
237*c9945492SAndroid Build Coastguard Worker#
238*c9945492SAndroid Build Coastguard Worker# Find a C compiler to use
239*c9945492SAndroid Build Coastguard Worker#
240*c9945492SAndroid Build Coastguard Workerprintf "checking for C compiler... "
241*c9945492SAndroid Build Coastguard Workertrycc ${CROSS_COMPILE}gcc
242*c9945492SAndroid Build Coastguard Workertrycc ${CROSS_COMPILE}c99
243*c9945492SAndroid Build Coastguard Workertrycc ${CROSS_COMPILE}cc
244*c9945492SAndroid Build Coastguard Workerprintf "%s\n" "$CC"
245*c9945492SAndroid Build Coastguard Workertest -n "$CC" || { echo "$0: cannot find a C compiler" ; exit 1 ; }
246*c9945492SAndroid Build Coastguard Worker
247*c9945492SAndroid Build Coastguard Workerprintf "checking whether C compiler works... "
248*c9945492SAndroid Build Coastguard Workerecho "typedef int x;" > "$tmpc"
249*c9945492SAndroid Build Coastguard Workerif output=$($CC $CPPFLAGS $CFLAGS -c -o /dev/null "$tmpc" 2>&1) ; then
250*c9945492SAndroid Build Coastguard Workerprintf "yes\n"
251*c9945492SAndroid Build Coastguard Workerelse
252*c9945492SAndroid Build Coastguard Workerprintf "no; compiler output follows:\n%s\n" "$output"
253*c9945492SAndroid Build Coastguard Workerexit 1
254*c9945492SAndroid Build Coastguard Workerfi
255*c9945492SAndroid Build Coastguard Worker
256*c9945492SAndroid Build Coastguard Worker#
257*c9945492SAndroid Build Coastguard Worker# Figure out options to force errors on unknown flags.
258*c9945492SAndroid Build Coastguard Worker#
259*c9945492SAndroid Build Coastguard Workertryflag   CFLAGS_TRY  -Werror=unknown-warning-option
260*c9945492SAndroid Build Coastguard Workertryflag   CFLAGS_TRY  -Werror=unused-command-line-argument
261*c9945492SAndroid Build Coastguard Workertryflag   CFLAGS_TRY  -Werror=ignored-optimization-argument
262*c9945492SAndroid Build Coastguard Workertryldflag LDFLAGS_TRY -Werror=unknown-warning-option
263*c9945492SAndroid Build Coastguard Workertryldflag LDFLAGS_TRY -Werror=unused-command-line-argument
264*c9945492SAndroid Build Coastguard Worker
265*c9945492SAndroid Build Coastguard Worker#
266*c9945492SAndroid Build Coastguard Worker# Need to know if the compiler is gcc or clang to decide which toolchain
267*c9945492SAndroid Build Coastguard Worker# wrappers to build.
268*c9945492SAndroid Build Coastguard Worker#
269*c9945492SAndroid Build Coastguard Workerprintf "checking for C compiler family... "
270*c9945492SAndroid Build Coastguard Workercc_ver="$(LC_ALL=C $CC -v 2>&1)"
271*c9945492SAndroid Build Coastguard Workercc_family=unknown
272*c9945492SAndroid Build Coastguard Workerif fnmatch '*gcc\ version*' "$cc_ver" ; then
273*c9945492SAndroid Build Coastguard Workercc_family=gcc
274*c9945492SAndroid Build Coastguard Workerelif fnmatch '*clang\ version*' "$cc_ver" ; then
275*c9945492SAndroid Build Coastguard Workercc_family=clang
276*c9945492SAndroid Build Coastguard Workerfi
277*c9945492SAndroid Build Coastguard Workerecho "$cc_family"
278*c9945492SAndroid Build Coastguard Worker
279*c9945492SAndroid Build Coastguard Worker#
280*c9945492SAndroid Build Coastguard Worker# Figure out toolchain wrapper to build
281*c9945492SAndroid Build Coastguard Worker#
282*c9945492SAndroid Build Coastguard Workerif test "$wrapper" = auto || test "$wrapper" = detect ; then
283*c9945492SAndroid Build Coastguard Workerecho "#include <stdlib.h>" > "$tmpc"
284*c9945492SAndroid Build Coastguard Workerecho "#if ! __GLIBC__" >> "$tmpc"
285*c9945492SAndroid Build Coastguard Workerecho "#error no" >> "$tmpc"
286*c9945492SAndroid Build Coastguard Workerecho "#endif" >> "$tmpc"
287*c9945492SAndroid Build Coastguard Workerprintf "checking for toolchain wrapper to build... "
288*c9945492SAndroid Build Coastguard Workerif test "$wrapper" = auto && ! $CC -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
289*c9945492SAndroid Build Coastguard Workerecho "none"
290*c9945492SAndroid Build Coastguard Workerelif test "$cc_family" = gcc ; then
291*c9945492SAndroid Build Coastguard Workergcc_wrapper=yes
292*c9945492SAndroid Build Coastguard Workerecho "gcc"
293*c9945492SAndroid Build Coastguard Workerelif test "$cc_family" = clang ; then
294*c9945492SAndroid Build Coastguard Workerclang_wrapper=yes
295*c9945492SAndroid Build Coastguard Workerecho "clang"
296*c9945492SAndroid Build Coastguard Workerelse
297*c9945492SAndroid Build Coastguard Workerecho "none"
298*c9945492SAndroid Build Coastguard Workerif test "$wrapper" = detect ; then
299*c9945492SAndroid Build Coastguard Workerfail "$0: could not find an appropriate toolchain wrapper"
300*c9945492SAndroid Build Coastguard Workerfi
301*c9945492SAndroid Build Coastguard Workerfi
302*c9945492SAndroid Build Coastguard Workerfi
303*c9945492SAndroid Build Coastguard Worker
304*c9945492SAndroid Build Coastguard Workerif test "$gcc_wrapper" = yes ; then
305*c9945492SAndroid Build Coastguard Workertools="$tools obj/musl-gcc"
306*c9945492SAndroid Build Coastguard Workertool_libs="$tool_libs lib/musl-gcc.specs"
307*c9945492SAndroid Build Coastguard Workerfi
308*c9945492SAndroid Build Coastguard Workerif test "$clang_wrapper" = yes ; then
309*c9945492SAndroid Build Coastguard Workertools="$tools obj/musl-clang obj/ld.musl-clang"
310*c9945492SAndroid Build Coastguard Workerfi
311*c9945492SAndroid Build Coastguard Worker
312*c9945492SAndroid Build Coastguard Worker#
313*c9945492SAndroid Build Coastguard Worker# Find the target architecture
314*c9945492SAndroid Build Coastguard Worker#
315*c9945492SAndroid Build Coastguard Workerprintf "checking target system type... "
316*c9945492SAndroid Build Coastguard Workertest -n "$target" || target=$($CC -dumpmachine 2>/dev/null) || target=unknown
317*c9945492SAndroid Build Coastguard Workerprintf "%s\n" "$target"
318*c9945492SAndroid Build Coastguard Worker
319*c9945492SAndroid Build Coastguard Worker#
320*c9945492SAndroid Build Coastguard Worker# Convert to just ARCH
321*c9945492SAndroid Build Coastguard Worker#
322*c9945492SAndroid Build Coastguard Workercase "$target" in
323*c9945492SAndroid Build Coastguard Worker# Catch these early to simplify matching for 32-bit archs
324*c9945492SAndroid Build Coastguard Workerarm*) ARCH=arm ;;
325*c9945492SAndroid Build Coastguard Workeraarch64*) ARCH=aarch64 ;;
326*c9945492SAndroid Build Coastguard Workeri?86-nt32*) ARCH=nt32 ;;
327*c9945492SAndroid Build Coastguard Workeri?86*) ARCH=i386 ;;
328*c9945492SAndroid Build Coastguard Workerx86_64-x32*|x32*|x86_64*x32) ARCH=x32 ;;
329*c9945492SAndroid Build Coastguard Workerx86_64-nt64*) ARCH=nt64 ;;
330*c9945492SAndroid Build Coastguard Workerx86_64*) ARCH=x86_64 ;;
331*c9945492SAndroid Build Coastguard Workerloongarch64*) ARCH=loongarch64 ;;
332*c9945492SAndroid Build Coastguard Workerm68k*) ARCH=m68k ;;
333*c9945492SAndroid Build Coastguard Workermips64*|mipsisa64*) ARCH=mips64 ;;
334*c9945492SAndroid Build Coastguard Workermips*) ARCH=mips ;;
335*c9945492SAndroid Build Coastguard Workermicroblaze*) ARCH=microblaze ;;
336*c9945492SAndroid Build Coastguard Workeror1k*) ARCH=or1k ;;
337*c9945492SAndroid Build Coastguard Workerpowerpc64*|ppc64*) ARCH=powerpc64 ;;
338*c9945492SAndroid Build Coastguard Workerpowerpc*|ppc*) ARCH=powerpc ;;
339*c9945492SAndroid Build Coastguard Workerriscv64*) ARCH=riscv64 ;;
340*c9945492SAndroid Build Coastguard Workerriscv32*) ARCH=riscv32 ;;
341*c9945492SAndroid Build Coastguard Workersh[1-9bel-]*|sh|superh*) ARCH=sh ;;
342*c9945492SAndroid Build Coastguard Workers390x*) ARCH=s390x ;;
343*c9945492SAndroid Build Coastguard Workerunknown) fail "$0: unable to detect target arch; try $0 --target=..." ;;
344*c9945492SAndroid Build Coastguard Worker*) fail "$0: unknown or unsupported target \"$target\"" ;;
345*c9945492SAndroid Build Coastguard Workeresac
346*c9945492SAndroid Build Coastguard Worker
347*c9945492SAndroid Build Coastguard Worker#
348*c9945492SAndroid Build Coastguard Worker# Try to get a conforming C99 freestanding environment
349*c9945492SAndroid Build Coastguard Worker#
350*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_C99FSE -std=c99
351*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_C99FSE -nostdinc
352*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_C99FSE -ffreestanding \
353*c9945492SAndroid Build Coastguard Worker|| tryflag CFLAGS_C99FSE -fno-builtin
354*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_C99FSE -fexcess-precision=standard \
355*c9945492SAndroid Build Coastguard Worker|| { test "$ARCH" = i386 && tryflag CFLAGS_C99FSE -ffloat-store ; }
356*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_C99FSE -frounding-math
357*c9945492SAndroid Build Coastguard Worker
358*c9945492SAndroid Build Coastguard Worker#
359*c9945492SAndroid Build Coastguard Worker# Semantically we want to insist that our sources follow the
360*c9945492SAndroid Build Coastguard Worker# C rules for type-based aliasing, but most if not all real-world
361*c9945492SAndroid Build Coastguard Worker# compilers are known or suspected to have critical bugs in their
362*c9945492SAndroid Build Coastguard Worker# type-based aliasing analysis. See for example GCC bug 107107.
363*c9945492SAndroid Build Coastguard Worker#
364*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_C99FSE -fno-strict-aliasing
365*c9945492SAndroid Build Coastguard Worker
366*c9945492SAndroid Build Coastguard Worker#
367*c9945492SAndroid Build Coastguard Worker# We may use the may_alias attribute if __GNUC__ is defined, so
368*c9945492SAndroid Build Coastguard Worker# if the compiler defines __GNUC__ but does not provide it,
369*c9945492SAndroid Build Coastguard Worker# it must be defined away as part of the CFLAGS.
370*c9945492SAndroid Build Coastguard Worker#
371*c9945492SAndroid Build Coastguard Workerprintf "checking whether compiler needs attribute((may_alias)) suppression... "
372*c9945492SAndroid Build Coastguard Workercat > "$tmpc" <<EOF
373*c9945492SAndroid Build Coastguard Workertypedef int
374*c9945492SAndroid Build Coastguard Worker#ifdef __GNUC__
375*c9945492SAndroid Build Coastguard Worker__attribute__((__may_alias__))
376*c9945492SAndroid Build Coastguard Worker#endif
377*c9945492SAndroid Build Coastguard Workerx;
378*c9945492SAndroid Build Coastguard WorkerEOF
379*c9945492SAndroid Build Coastguard Workerif $CC $CFLAGS_C99FSE $CPPFLAGS $CFLAGS \
380*c9945492SAndroid Build Coastguard Worker  -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
381*c9945492SAndroid Build Coastguard Workerprintf "no\n"
382*c9945492SAndroid Build Coastguard Workerelse
383*c9945492SAndroid Build Coastguard Workerprintf "yes\n"
384*c9945492SAndroid Build Coastguard WorkerCFLAGS_C99FSE="$CFLAGS_C99FSE -D__may_alias__="
385*c9945492SAndroid Build Coastguard Workerfi
386*c9945492SAndroid Build Coastguard Worker
387*c9945492SAndroid Build Coastguard Worker#
388*c9945492SAndroid Build Coastguard Worker# The GNU toolchain defaults to assuming unmarked files need an
389*c9945492SAndroid Build Coastguard Worker# executable stack, potentially exposing vulnerabilities in programs
390*c9945492SAndroid Build Coastguard Worker# linked with such object files. Fix this.
391*c9945492SAndroid Build Coastguard Worker#
392*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_C99FSE -Wa,--noexecstack
393*c9945492SAndroid Build Coastguard Worker
394*c9945492SAndroid Build Coastguard Worker#
395*c9945492SAndroid Build Coastguard Worker# Check for options to disable stack protector, which needs to be
396*c9945492SAndroid Build Coastguard Worker# disabled for a few early-bootstrap translation units. If not found,
397*c9945492SAndroid Build Coastguard Worker# this is not an error; we assume the toolchain does not do ssp.
398*c9945492SAndroid Build Coastguard Worker#
399*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_NOSSP -fno-stack-protector
400*c9945492SAndroid Build Coastguard Worker
401*c9945492SAndroid Build Coastguard Worker#
402*c9945492SAndroid Build Coastguard Worker# Check for options that may be needed to prevent the compiler from
403*c9945492SAndroid Build Coastguard Worker# generating self-referential versions of memcpy,, memmove, memcmp,
404*c9945492SAndroid Build Coastguard Worker# and memset. Really, we should add a check to determine if this
405*c9945492SAndroid Build Coastguard Worker# option is sufficient, and if not, add a macro to cripple these
406*c9945492SAndroid Build Coastguard Worker# functions with volatile...
407*c9945492SAndroid Build Coastguard Worker#
408*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_MEMOPS -fno-tree-loop-distribute-patterns
409*c9945492SAndroid Build Coastguard Worker
410*c9945492SAndroid Build Coastguard Worker#
411*c9945492SAndroid Build Coastguard Worker# Enable debugging if requessted.
412*c9945492SAndroid Build Coastguard Worker#
413*c9945492SAndroid Build Coastguard Workertest "$debug" = yes && CFLAGS_AUTO=-g
414*c9945492SAndroid Build Coastguard Worker
415*c9945492SAndroid Build Coastguard Worker#
416*c9945492SAndroid Build Coastguard Worker# Preprocess asm files to add extra debugging information if debug is
417*c9945492SAndroid Build Coastguard Worker# enabled, our assembler supports the needed directives, and the
418*c9945492SAndroid Build Coastguard Worker# preprocessing script has been written for our architecture.
419*c9945492SAndroid Build Coastguard Worker#
420*c9945492SAndroid Build Coastguard Workerprintf "checking whether we should preprocess assembly to add debugging information... "
421*c9945492SAndroid Build Coastguard Workerif fnmatch '-g*|*\ -g*' "$CFLAGS_AUTO $CFLAGS" &&
422*c9945492SAndroid Build Coastguard Worker   test -f "$srcdir/tools/add-cfi.$ARCH.awk" &&
423*c9945492SAndroid Build Coastguard Worker   printf ".file 1 \"srcfile.s\"\n.line 1\n.cfi_startproc\n.cfi_endproc" | $CC -g -x assembler -c -o /dev/null 2>/dev/null -
424*c9945492SAndroid Build Coastguard Workerthen
425*c9945492SAndroid Build Coastguard Worker  ADD_CFI=yes
426*c9945492SAndroid Build Coastguard Workerelse
427*c9945492SAndroid Build Coastguard Worker  ADD_CFI=no
428*c9945492SAndroid Build Coastguard Workerfi
429*c9945492SAndroid Build Coastguard Workerprintf "%s\n" "$ADD_CFI"
430*c9945492SAndroid Build Coastguard Worker
431*c9945492SAndroid Build Coastguard Worker#
432*c9945492SAndroid Build Coastguard Worker# Possibly add a -O option to CFLAGS and select modules to optimize with
433*c9945492SAndroid Build Coastguard Worker# -O3 based on the status of --enable-optimize and provided CFLAGS.
434*c9945492SAndroid Build Coastguard Worker#
435*c9945492SAndroid Build Coastguard Workerprintf "checking for optimization settings... "
436*c9945492SAndroid Build Coastguard Workercase "x$optimize" in
437*c9945492SAndroid Build Coastguard Workerxauto)
438*c9945492SAndroid Build Coastguard Workerif fnmatch '-O*|*\ -O*' "$CFLAGS_AUTO $CFLAGS" ; then
439*c9945492SAndroid Build Coastguard Workerprintf "using provided CFLAGS\n" ;optimize=no
440*c9945492SAndroid Build Coastguard Workerelse
441*c9945492SAndroid Build Coastguard Workerprintf "using defaults\n" ; optimize=yes
442*c9945492SAndroid Build Coastguard Workerfi
443*c9945492SAndroid Build Coastguard Worker;;
444*c9945492SAndroid Build Coastguard Workerxsize|xnone) printf "minimize size\n" ; optimize=size ;;
445*c9945492SAndroid Build Coastguard Workerxno|x) printf "disabled\n" ; optimize=no ;;
446*c9945492SAndroid Build Coastguard Worker*) printf "custom\n" ;;
447*c9945492SAndroid Build Coastguard Workeresac
448*c9945492SAndroid Build Coastguard Worker
449*c9945492SAndroid Build Coastguard Workerif test "$optimize" = no ; then :
450*c9945492SAndroid Build Coastguard Workerelse
451*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -O2
452*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -fno-align-jumps
453*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -fno-align-functions
454*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -fno-align-loops
455*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -fno-align-labels
456*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -fira-region=one
457*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -fira-hoist-pressure
458*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -freorder-blocks-algorithm=simple \
459*c9945492SAndroid Build Coastguard Worker|| tryflag CFLAGS_AUTO -fno-reorder-blocks
460*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -fno-prefetch-loop-arrays
461*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -fno-tree-ch
462*c9945492SAndroid Build Coastguard Workerfi
463*c9945492SAndroid Build Coastguard Workertest "$optimize" = yes && optimize="internal,malloc,string"
464*c9945492SAndroid Build Coastguard Worker
465*c9945492SAndroid Build Coastguard Workerif fnmatch 'no|size' "$optimize" ; then :
466*c9945492SAndroid Build Coastguard Workerelse
467*c9945492SAndroid Build Coastguard Workerprintf "components to be optimized for speed:"
468*c9945492SAndroid Build Coastguard Workerwhile test "$optimize" ; do
469*c9945492SAndroid Build Coastguard Workercase "$optimize" in
470*c9945492SAndroid Build Coastguard Worker*,*) this=${optimize%%,*} optimize=${optimize#*,} ;;
471*c9945492SAndroid Build Coastguard Worker*) this=$optimize optimize=
472*c9945492SAndroid Build Coastguard Workeresac
473*c9945492SAndroid Build Coastguard Workerprintf " $this"
474*c9945492SAndroid Build Coastguard Workercase "$this" in
475*c9945492SAndroid Build Coastguard Worker*/*.c) ;;
476*c9945492SAndroid Build Coastguard Worker*/*) this=$this*.c ;;
477*c9945492SAndroid Build Coastguard Worker*) this=$this/*.c ;;
478*c9945492SAndroid Build Coastguard Workeresac
479*c9945492SAndroid Build Coastguard WorkerOPTIMIZE_GLOBS="$OPTIMIZE_GLOBS $this"
480*c9945492SAndroid Build Coastguard Workerdone
481*c9945492SAndroid Build Coastguard WorkerOPTIMIZE_GLOBS=${OPTIMIZE_GLOBS# }
482*c9945492SAndroid Build Coastguard Workerprintf "\n"
483*c9945492SAndroid Build Coastguard Workerfi
484*c9945492SAndroid Build Coastguard Worker
485*c9945492SAndroid Build Coastguard Worker# Always try -pipe
486*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -pipe
487*c9945492SAndroid Build Coastguard Worker
488*c9945492SAndroid Build Coastguard Worker#
489*c9945492SAndroid Build Coastguard Worker# If debugging is disabled, omit frame pointer. Modern GCC does this
490*c9945492SAndroid Build Coastguard Worker# anyway on most archs even when debugging is enabled since the frame
491*c9945492SAndroid Build Coastguard Worker# pointer is no longer needed for debugging.
492*c9945492SAndroid Build Coastguard Worker#
493*c9945492SAndroid Build Coastguard Workerif fnmatch '-g*|*\ -g*' "$CFLAGS_AUTO $CFLAGS" ; then :
494*c9945492SAndroid Build Coastguard Workerelse
495*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -fomit-frame-pointer
496*c9945492SAndroid Build Coastguard Workerfi
497*c9945492SAndroid Build Coastguard Worker
498*c9945492SAndroid Build Coastguard Worker#
499*c9945492SAndroid Build Coastguard Worker# Modern GCC wants to put DWARF tables (used for debugging and
500*c9945492SAndroid Build Coastguard Worker# unwinding) in the loaded part of the program where they are
501*c9945492SAndroid Build Coastguard Worker# unstrippable. These options force them back to debug sections (and
502*c9945492SAndroid Build Coastguard Worker# cause them not to get generated at all if debugging is off).
503*c9945492SAndroid Build Coastguard Worker#
504*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -fno-unwind-tables
505*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -fno-asynchronous-unwind-tables
506*c9945492SAndroid Build Coastguard Worker
507*c9945492SAndroid Build Coastguard Worker#
508*c9945492SAndroid Build Coastguard Worker# Attempt to put each function and each data object in its own
509*c9945492SAndroid Build Coastguard Worker# section. This both allows additional size optimizations at link
510*c9945492SAndroid Build Coastguard Worker# time and works around a dangerous class of compiler/assembler bugs
511*c9945492SAndroid Build Coastguard Worker# whereby relative address expressions are constant-folded by the
512*c9945492SAndroid Build Coastguard Worker# assembler even when one or more of the symbols involved is
513*c9945492SAndroid Build Coastguard Worker# replaceable. See gas pr 18561 and gcc pr 66609, 68178, etc.
514*c9945492SAndroid Build Coastguard Worker#
515*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -ffunction-sections
516*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -fdata-sections
517*c9945492SAndroid Build Coastguard Worker
518*c9945492SAndroid Build Coastguard Worker#
519*c9945492SAndroid Build Coastguard Worker# On x86, make sure we don't have incompatible instruction set
520*c9945492SAndroid Build Coastguard Worker# extensions enabled by default. This is bad for making static binaries.
521*c9945492SAndroid Build Coastguard Worker# We cheat and use i486 rather than i386 because i386 really does not
522*c9945492SAndroid Build Coastguard Worker# work anyway (issues with atomic ops).
523*c9945492SAndroid Build Coastguard Worker# Some build environments pass -march and -mtune options via CC, so
524*c9945492SAndroid Build Coastguard Worker# check both CC and CFLAGS.
525*c9945492SAndroid Build Coastguard Worker#
526*c9945492SAndroid Build Coastguard Workerif test "$ARCH" = "i386" ; then
527*c9945492SAndroid Build Coastguard Workerfnmatch '-march=*|*\ -march=*' "$CC $CFLAGS" || tryldflag CFLAGS_AUTO -march=i486
528*c9945492SAndroid Build Coastguard Workerfnmatch '-mtune=*|*\ -mtune=*' "$CC $CFLAGS" || tryldflag CFLAGS_AUTO -mtune=generic
529*c9945492SAndroid Build Coastguard Workerfi
530*c9945492SAndroid Build Coastguard Worker
531*c9945492SAndroid Build Coastguard Worker#
532*c9945492SAndroid Build Coastguard Worker# GCC defines -w as overriding any -W options, regardless of order, but
533*c9945492SAndroid Build Coastguard Worker# clang has a bunch of annoying warnings enabled by default and needs -w
534*c9945492SAndroid Build Coastguard Worker# to start from a clean slate. So use -w if building with clang. Also
535*c9945492SAndroid Build Coastguard Worker# turn off a common on-by-default cast warning regardless of compiler.
536*c9945492SAndroid Build Coastguard Worker#
537*c9945492SAndroid Build Coastguard Workertest "$cc_family" = clang && tryflag CFLAGS_AUTO -w
538*c9945492SAndroid Build Coastguard Worker
539*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Wno-pointer-to-int-cast
540*c9945492SAndroid Build Coastguard Worker
541*c9945492SAndroid Build Coastguard Worker#
542*c9945492SAndroid Build Coastguard Worker# Even with -std=c99, gcc accepts some constructs which are constraint
543*c9945492SAndroid Build Coastguard Worker# violations. We want to treat these as errors regardless of whether
544*c9945492SAndroid Build Coastguard Worker# other purely stylistic warnings are enabled -- especially implicit
545*c9945492SAndroid Build Coastguard Worker# function declarations, which are a dangerous programming error.
546*c9945492SAndroid Build Coastguard Worker#
547*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Werror=implicit-function-declaration
548*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Werror=implicit-int
549*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Werror=pointer-sign
550*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Werror=pointer-arith
551*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Werror=int-conversion
552*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Werror=incompatible-pointer-types
553*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Werror=discarded-qualifiers
554*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Werror=discarded-array-qualifiers
555*c9945492SAndroid Build Coastguard Worker
556*c9945492SAndroid Build Coastguard Worker#
557*c9945492SAndroid Build Coastguard Worker# GCC ignores unused arguements by default, but Clang needs this extra
558*c9945492SAndroid Build Coastguard Worker# parameter to stop printing warnings about LDFLAGS passed during
559*c9945492SAndroid Build Coastguard Worker# compiling stage and CFLAGS passed during linking stage.
560*c9945492SAndroid Build Coastguard Worker#
561*c9945492SAndroid Build Coastguard Workertest "$cc_family" = clang && tryflag CFLAGS_AUTO -Qunused-arguments
562*c9945492SAndroid Build Coastguard Worker
563*c9945492SAndroid Build Coastguard Workerif test "x$warnings" = xyes ; then
564*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Waddress
565*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Warray-bounds
566*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Wchar-subscripts
567*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Wduplicate-decl-specifier
568*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Winit-self
569*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Wreturn-type
570*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Wsequence-point
571*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Wstrict-aliasing
572*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Wunused-function
573*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Wunused-label
574*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Wunused-variable
575*c9945492SAndroid Build Coastguard Workerfi
576*c9945492SAndroid Build Coastguard Worker
577*c9945492SAndroid Build Coastguard Worker# Determine if the compiler produces position-independent code (PIC)
578*c9945492SAndroid Build Coastguard Worker# by default. If so, we don't need to compile separate object files
579*c9945492SAndroid Build Coastguard Worker# for libc.a and libc.so.
580*c9945492SAndroid Build Coastguard Workerif trycppif __PIC__ "$CFLAGS_C99FSE $CPPFLAGS $CFLAGS" ; then
581*c9945492SAndroid Build Coastguard Workerpic_default=yes
582*c9945492SAndroid Build Coastguard Workerelse
583*c9945492SAndroid Build Coastguard Workerpic_default=no
584*c9945492SAndroid Build Coastguard Workerfi
585*c9945492SAndroid Build Coastguard Worker
586*c9945492SAndroid Build Coastguard Worker# Reduce space lost to padding for alignment purposes by sorting data
587*c9945492SAndroid Build Coastguard Worker# objects according to their alignment reqirements. This approximates
588*c9945492SAndroid Build Coastguard Worker# optimal packing.
589*c9945492SAndroid Build Coastguard Workertryldflag LDFLAGS_AUTO -Wl,--sort-section,alignment
590*c9945492SAndroid Build Coastguard Workertryldflag LDFLAGS_AUTO -Wl,--sort-common
591*c9945492SAndroid Build Coastguard Worker
592*c9945492SAndroid Build Coastguard Worker# When linking shared library, drop dummy weak definitions that were
593*c9945492SAndroid Build Coastguard Worker# replaced by strong definitions from other translation units.
594*c9945492SAndroid Build Coastguard Workertryldflag LDFLAGS_AUTO -Wl,--gc-sections
595*c9945492SAndroid Build Coastguard Worker
596*c9945492SAndroid Build Coastguard Worker# Some patched GCC builds have these defaults messed up...
597*c9945492SAndroid Build Coastguard Workertryldflag LDFLAGS_AUTO -Wl,--hash-style=both
598*c9945492SAndroid Build Coastguard Worker
599*c9945492SAndroid Build Coastguard Worker# Prevent linking if there are undefined symbols; if any exist,
600*c9945492SAndroid Build Coastguard Worker# libc.so will crash at runtime during relocation processing.
601*c9945492SAndroid Build Coastguard Worker# The common way this can happen is failure to link the compiler
602*c9945492SAndroid Build Coastguard Worker# runtime library; implementation error is also a possibility.
603*c9945492SAndroid Build Coastguard Workertryldflag LDFLAGS_AUTO -Wl,--no-undefined
604*c9945492SAndroid Build Coastguard Worker
605*c9945492SAndroid Build Coastguard Worker# Avoid exporting symbols from compiler runtime libraries. They
606*c9945492SAndroid Build Coastguard Worker# should be hidden anyway, but some toolchains including old gcc
607*c9945492SAndroid Build Coastguard Worker# versions built without shared library support and pcc are broken.
608*c9945492SAndroid Build Coastguard Workertryldflag LDFLAGS_AUTO -Wl,--exclude-libs=ALL
609*c9945492SAndroid Build Coastguard Worker
610*c9945492SAndroid Build Coastguard Worker# Public data symbols must be interposable to allow for copy
611*c9945492SAndroid Build Coastguard Worker# relocations, but otherwise we want to bind symbols at libc link
612*c9945492SAndroid Build Coastguard Worker# time to eliminate startup relocations and PLT overhead. Use
613*c9945492SAndroid Build Coastguard Worker# --dynamic-list rather than -Bsymbolic-functions for greater
614*c9945492SAndroid Build Coastguard Worker# control over what symbols are left unbound.
615*c9945492SAndroid Build Coastguard Workertryldflag LDFLAGS_AUTO -Wl,--dynamic-list="$srcdir/dynamic.list"
616*c9945492SAndroid Build Coastguard Worker
617*c9945492SAndroid Build Coastguard Worker# Find compiler runtime library
618*c9945492SAndroid Build Coastguard Workertest -z "$LIBCC" && tryldflag LIBCC -lgcc && tryldflag LIBCC -lgcc_eh
619*c9945492SAndroid Build Coastguard Workertest -z "$LIBCC" && tryldflag LIBCC -lcompiler_rt
620*c9945492SAndroid Build Coastguard Workertest -z "$LIBCC" && try_libcc=`$CC -print-libgcc-file-name 2>/dev/null` \
621*c9945492SAndroid Build Coastguard Worker                 && tryldflag LIBCC "$try_libcc"
622*c9945492SAndroid Build Coastguard Workertest -z "$LIBCC" && try_libcc=`$CC -print-file-name=libpcc.a 2>/dev/null` \
623*c9945492SAndroid Build Coastguard Worker                 && tryldflag LIBCC "$try_libcc"
624*c9945492SAndroid Build Coastguard Workerprintf "using compiler runtime libraries: %s\n" "$LIBCC"
625*c9945492SAndroid Build Coastguard Worker
626*c9945492SAndroid Build Coastguard Worker# Figure out arch variants for archs with variants
627*c9945492SAndroid Build Coastguard WorkerSUBARCH=
628*c9945492SAndroid Build Coastguard Workert="$CFLAGS_C99FSE $CPPFLAGS $CFLAGS"
629*c9945492SAndroid Build Coastguard Worker
630*c9945492SAndroid Build Coastguard Workerif test "$ARCH" = "i386" ; then
631*c9945492SAndroid Build Coastguard Workerprintf "checking whether compiler can use ebx in PIC asm constraints... "
632*c9945492SAndroid Build Coastguard Workercat > "$tmpc" <<EOF
633*c9945492SAndroid Build Coastguard Workerint foo(int x) { __asm__ ( "" : "+b"(x) ); return x; }
634*c9945492SAndroid Build Coastguard WorkerEOF
635*c9945492SAndroid Build Coastguard Workerif $CC $CFLAGS_C99FSE $CPPFLAGS $CFLAGS -fPIC \
636*c9945492SAndroid Build Coastguard Worker  -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
637*c9945492SAndroid Build Coastguard Workerprintf "yes\n"
638*c9945492SAndroid Build Coastguard Workerelse
639*c9945492SAndroid Build Coastguard Workerprintf "no\n"
640*c9945492SAndroid Build Coastguard WorkerCFLAGS_AUTO="$CFLAGS_AUTO -DBROKEN_EBX_ASM"
641*c9945492SAndroid Build Coastguard Workerfi
642*c9945492SAndroid Build Coastguard Workerfi
643*c9945492SAndroid Build Coastguard Worker
644*c9945492SAndroid Build Coastguard Workerif test "$ARCH" = "x86_64" ; then
645*c9945492SAndroid Build Coastguard Workertrycppif __ILP32__ "$t" && ARCH=x32
646*c9945492SAndroid Build Coastguard Workerfi
647*c9945492SAndroid Build Coastguard Worker
648*c9945492SAndroid Build Coastguard Workerif test "$ARCH" = "arm" ; then
649*c9945492SAndroid Build Coastguard Workerif trycppif __thumb2__ "$t" ; then
650*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -mimplicit-it=always
651*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Wa,-mimplicit-it=always
652*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Wa,-mthumb
653*c9945492SAndroid Build Coastguard Workerfi
654*c9945492SAndroid Build Coastguard Workertrycppif __ARMEB__ "$t" && SUBARCH=${SUBARCH}eb
655*c9945492SAndroid Build Coastguard Workertrycppif __ARM_PCS_VFP "$t" && SUBARCH=${SUBARCH}hf
656*c9945492SAndroid Build Coastguard Worker# Versions of clang up until at least 3.8 have the wrong constraint codes
657*c9945492SAndroid Build Coastguard Worker# for floating point operands to inline asm. Detect this so the affected
658*c9945492SAndroid Build Coastguard Worker# source files can just disable the asm.
659*c9945492SAndroid Build Coastguard Workerif test "$cc_family" = clang ; then
660*c9945492SAndroid Build Coastguard Workerprintf "checking whether clang's vfp asm constraints work... "
661*c9945492SAndroid Build Coastguard Workerecho 'float f(float x) { __asm__("":"+t"(x)); return x; }' > "$tmpc"
662*c9945492SAndroid Build Coastguard Workerif $CC $CFLAGS_C99FSE $CPPFLAGS $CFLAGS -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
663*c9945492SAndroid Build Coastguard Workerprintf "yes\n"
664*c9945492SAndroid Build Coastguard Workerelse
665*c9945492SAndroid Build Coastguard Workerprintf "no\n"
666*c9945492SAndroid Build Coastguard WorkerCFLAGS_AUTO="$CFLAGS_AUTO -DBROKEN_VFP_ASM"
667*c9945492SAndroid Build Coastguard WorkerCFLAGS_AUTO="${CFLAGS_AUTO# }"
668*c9945492SAndroid Build Coastguard Workerfi
669*c9945492SAndroid Build Coastguard Workerfi
670*c9945492SAndroid Build Coastguard Workerfi
671*c9945492SAndroid Build Coastguard Worker
672*c9945492SAndroid Build Coastguard Workerif test "$ARCH" = "aarch64" ; then
673*c9945492SAndroid Build Coastguard Workertrycppif __AARCH64EB__ "$t" && SUBARCH=${SUBARCH}_be
674*c9945492SAndroid Build Coastguard Workerfi
675*c9945492SAndroid Build Coastguard Worker
676*c9945492SAndroid Build Coastguard Workerif test "$ARCH" = "loongarch64" ; then
677*c9945492SAndroid Build Coastguard Workertrycppif __loongarch_soft_float "$t" && SUBARCH=${SUBARCH}-sf
678*c9945492SAndroid Build Coastguard Workertrycppif __loongarch_single_float "$t" && SUBARCH=${SUBARCH}-sp
679*c9945492SAndroid Build Coastguard Workerprintf "checking whether assembler support FCSRs... "
680*c9945492SAndroid Build Coastguard Workerecho "__asm__(\"movfcsr2gr \$t0,\$fcsr0\");" > "$tmpc"
681*c9945492SAndroid Build Coastguard Workerif $CC -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
682*c9945492SAndroid Build Coastguard Workerprintf "yes\n"
683*c9945492SAndroid Build Coastguard Workerelse
684*c9945492SAndroid Build Coastguard Workerprintf "no\n"
685*c9945492SAndroid Build Coastguard WorkerCFLAGS_AUTO="$CFLAGS_AUTO -DBROKEN_LOONGARCH_FCSR_ASM"
686*c9945492SAndroid Build Coastguard Workerfi
687*c9945492SAndroid Build Coastguard Workerfi
688*c9945492SAndroid Build Coastguard Worker
689*c9945492SAndroid Build Coastguard Workerif test "$ARCH" = "m68k" ; then
690*c9945492SAndroid Build Coastguard Workerif trycppif "__HAVE_68881__" ; then : ;
691*c9945492SAndroid Build Coastguard Workerelif trycppif "__mcffpu__" ; then SUBARCH="-fp64"
692*c9945492SAndroid Build Coastguard Workerelse SUBARCH="-sf"
693*c9945492SAndroid Build Coastguard Workerfi
694*c9945492SAndroid Build Coastguard Workerfi
695*c9945492SAndroid Build Coastguard Worker
696*c9945492SAndroid Build Coastguard Workerif test "$ARCH" = "mips" ; then
697*c9945492SAndroid Build Coastguard Workertrycppif "__mips_isa_rev >= 6" "$t" && SUBARCH=${SUBARCH}r6
698*c9945492SAndroid Build Coastguard Workertrycppif "_MIPSEL || __MIPSEL || __MIPSEL__" "$t" && SUBARCH=${SUBARCH}el
699*c9945492SAndroid Build Coastguard Workertrycppif __mips_soft_float "$t" && SUBARCH=${SUBARCH}-sf
700*c9945492SAndroid Build Coastguard Workerfi
701*c9945492SAndroid Build Coastguard Worker
702*c9945492SAndroid Build Coastguard Workerif test "$ARCH" = "mips64" ; then
703*c9945492SAndroid Build Coastguard Workertrycppif "_MIPS_SIM != _ABI64" "$t" && ARCH=mipsn32
704*c9945492SAndroid Build Coastguard Workertrycppif "__mips_isa_rev >= 6" "$t" && SUBARCH=${SUBARCH}r6
705*c9945492SAndroid Build Coastguard Workertrycppif "_MIPSEL || __MIPSEL || __MIPSEL__" "$t" && SUBARCH=${SUBARCH}el
706*c9945492SAndroid Build Coastguard Workertrycppif __mips_soft_float "$t" && SUBARCH=${SUBARCH}-sf
707*c9945492SAndroid Build Coastguard Workerfi
708*c9945492SAndroid Build Coastguard Worker
709*c9945492SAndroid Build Coastguard Workerif test "$ARCH" = "powerpc" ; then
710*c9945492SAndroid Build Coastguard Workertrycppif "_SOFT_FLOAT || __NO_FPRS__" "$t" && SUBARCH=${SUBARCH}-sf
711*c9945492SAndroid Build Coastguard Workerprintf "checking whether compiler can use 'd' constraint in asm... "
712*c9945492SAndroid Build Coastguard Workerecho 'double f(double x) { __asm__ ("fabs %0, %1" : "=d"(x) : "d"(x)); return x; }' > "$tmpc"
713*c9945492SAndroid Build Coastguard Workerif $CC $CFLAGS_C99FSE $CPPFLAGS $CFLAGS -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
714*c9945492SAndroid Build Coastguard Workerprintf "yes\n"
715*c9945492SAndroid Build Coastguard Workerelse
716*c9945492SAndroid Build Coastguard Workerprintf "no\n"
717*c9945492SAndroid Build Coastguard WorkerCFLAGS_AUTO="$CFLAGS_AUTO -DBROKEN_PPC_D_ASM"
718*c9945492SAndroid Build Coastguard WorkerCFLAGS_AUTO="${CFLAGS_AUTO# }"
719*c9945492SAndroid Build Coastguard Workerfi
720*c9945492SAndroid Build Coastguard Workerfi
721*c9945492SAndroid Build Coastguard Worker
722*c9945492SAndroid Build Coastguard Workertest "$ARCH" = "microblaze" && trycppif __MICROBLAZEEL__ "$t" \
723*c9945492SAndroid Build Coastguard Worker&& SUBARCH=${SUBARCH}el
724*c9945492SAndroid Build Coastguard Worker
725*c9945492SAndroid Build Coastguard Workerif test "$ARCH" = "powerpc64" ; then
726*c9945492SAndroid Build Coastguard Workertrycppif "_CALL_ELF == 2" "$t" || fail "$0: error: unsupported powerpc64 ABI"
727*c9945492SAndroid Build Coastguard Workertrycppif __LITTLE_ENDIAN__ "$t" && SUBARCH=${SUBARCH}le
728*c9945492SAndroid Build Coastguard Workertrycppif _SOFT_FLOAT "$t" && fail "$0: error: soft-float not supported on powerpc64"
729*c9945492SAndroid Build Coastguard Workerfi
730*c9945492SAndroid Build Coastguard Worker
731*c9945492SAndroid Build Coastguard Workerif test "$ARCH" = "riscv64" -o "$ARCH" = "riscv32" ; then
732*c9945492SAndroid Build Coastguard Workertrycppif __riscv_float_abi_soft "$t" && SUBARCH=${SUBARCH}-sf
733*c9945492SAndroid Build Coastguard Workertrycppif __riscv_float_abi_single "$t" && SUBARCH=${SUBARCH}-sp
734*c9945492SAndroid Build Coastguard Workerfi
735*c9945492SAndroid Build Coastguard Worker
736*c9945492SAndroid Build Coastguard Workerif test "$ARCH" = "sh" ; then
737*c9945492SAndroid Build Coastguard Workertryflag CFLAGS_AUTO -Wa,--isa=any
738*c9945492SAndroid Build Coastguard Workertrycppif __BIG_ENDIAN__ "$t" && SUBARCH=${SUBARCH}eb
739*c9945492SAndroid Build Coastguard Workerif trycppif "__SH_FPU_ANY__ || __SH4__" "$t" ; then
740*c9945492SAndroid Build Coastguard Worker# Some sh configurations are broken and replace double with float
741*c9945492SAndroid Build Coastguard Worker# rather than using softfloat when the fpu is present but only
742*c9945492SAndroid Build Coastguard Worker# supports single precision. Reject them.
743*c9945492SAndroid Build Coastguard Workerprintf "checking whether compiler's double type is IEEE double... "
744*c9945492SAndroid Build Coastguard Workerecho 'typedef char dblcheck[(int)sizeof(double)-5];' > "$tmpc"
745*c9945492SAndroid Build Coastguard Workerif $CC $CFLAGS_C99FSE $CPPFLAGS $CFLAGS -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
746*c9945492SAndroid Build Coastguard Workerprintf "yes\n"
747*c9945492SAndroid Build Coastguard Workerelse
748*c9945492SAndroid Build Coastguard Workerprintf "no\n"
749*c9945492SAndroid Build Coastguard Workerfail "$0: error: compiler's floating point configuration is unsupported"
750*c9945492SAndroid Build Coastguard Workerfi
751*c9945492SAndroid Build Coastguard Workerelse
752*c9945492SAndroid Build Coastguard WorkerSUBARCH=${SUBARCH}-nofpu
753*c9945492SAndroid Build Coastguard Workerfi
754*c9945492SAndroid Build Coastguard Workerif trycppif __SH_FDPIC__ "$t" ; then
755*c9945492SAndroid Build Coastguard WorkerSUBARCH=${SUBARCH}-fdpic
756*c9945492SAndroid Build Coastguard Workerfi
757*c9945492SAndroid Build Coastguard Workerfi
758*c9945492SAndroid Build Coastguard Worker
759*c9945492SAndroid Build Coastguard Workertest "$SUBARCH" \
760*c9945492SAndroid Build Coastguard Worker&& printf "configured for %s variant: %s\n" "$ARCH" "$ARCH$SUBARCH"
761*c9945492SAndroid Build Coastguard Worker
762*c9945492SAndroid Build Coastguard Worker#
763*c9945492SAndroid Build Coastguard Worker# Some archs (powerpc) have different possible long double formats
764*c9945492SAndroid Build Coastguard Worker# that the compiler can be configured for. The logic for whether this
765*c9945492SAndroid Build Coastguard Worker# is supported is in bits/float.h; in general, it is not. We need to
766*c9945492SAndroid Build Coastguard Worker# check for mismatches here or code in printf, strotd, and scanf will
767*c9945492SAndroid Build Coastguard Worker# be dangerously incorrect because it depends on (1) the macros being
768*c9945492SAndroid Build Coastguard Worker# correct, and (2) IEEE semantics.
769*c9945492SAndroid Build Coastguard Worker#
770*c9945492SAndroid Build Coastguard Workerprintf "checking whether compiler's long double definition matches float.h... "
771*c9945492SAndroid Build Coastguard Workerecho '#include <float.h>' > "$tmpc"
772*c9945492SAndroid Build Coastguard Workerecho '#define C(m,s) (m==LDBL_MANT_DIG && s==sizeof(long double))' >> "$tmpc"
773*c9945492SAndroid Build Coastguard Workerecho 'typedef char ldcheck[(C(53,8)||C(64,12)||C(64,16)||C(113,16))*2-1];' >> "$tmpc"
774*c9945492SAndroid Build Coastguard Workerif $CC $CFLAGS_C99FSE \
775*c9945492SAndroid Build Coastguard Worker  -I$srcdir/arch/$ARCH -I$srcdir/arch/generic -I$srcdir/include \
776*c9945492SAndroid Build Coastguard Worker  $CPPFLAGS $CFLAGS -c -o /dev/null "$tmpc" >/dev/null 2>&1 ; then
777*c9945492SAndroid Build Coastguard Workerprintf "yes\n"
778*c9945492SAndroid Build Coastguard Workerelse
779*c9945492SAndroid Build Coastguard Workerprintf "no\n"
780*c9945492SAndroid Build Coastguard Workerfail "$0: error: unsupported long double type"
781*c9945492SAndroid Build Coastguard Workerfi
782*c9945492SAndroid Build Coastguard Worker
783*c9945492SAndroid Build Coastguard Worker#
784*c9945492SAndroid Build Coastguard Worker# Some build systems globally pass in broken CFLAGS like -ffast-math
785*c9945492SAndroid Build Coastguard Worker# for all packages. On recent GCC we can detect this and error out
786*c9945492SAndroid Build Coastguard Worker# early rather than producing a seriously-broken math library.
787*c9945492SAndroid Build Coastguard Worker#
788*c9945492SAndroid Build Coastguard Workerif trycppif "__FAST_MATH__" \
789*c9945492SAndroid Build Coastguard Worker  "$CFLAGS_C99FSE $CPPFLAGS $CFLAGS" ; then
790*c9945492SAndroid Build Coastguard Workerfail "$0: error: compiler has broken floating point; check CFLAGS"
791*c9945492SAndroid Build Coastguard Workerfi
792*c9945492SAndroid Build Coastguard Worker
793*c9945492SAndroid Build Coastguard Workerprintf "creating config.mak... "
794*c9945492SAndroid Build Coastguard Worker
795*c9945492SAndroid Build Coastguard Workercmdline=$(quote "$0")
796*c9945492SAndroid Build Coastguard Workerfor i ; do cmdline="$cmdline $(quote "$i")" ; done
797*c9945492SAndroid Build Coastguard Worker
798*c9945492SAndroid Build Coastguard Workerexec 3>&1 1>config.mak
799*c9945492SAndroid Build Coastguard Worker
800*c9945492SAndroid Build Coastguard Worker
801*c9945492SAndroid Build Coastguard Workercat << EOF
802*c9945492SAndroid Build Coastguard Worker# This version of config.mak was generated by:
803*c9945492SAndroid Build Coastguard Worker# $cmdline
804*c9945492SAndroid Build Coastguard Worker# Any changes made here will be lost if configure is re-run
805*c9945492SAndroid Build Coastguard WorkerAR = ${AR:-\$(CROSS_COMPILE)ar}
806*c9945492SAndroid Build Coastguard WorkerRANLIB = ${RANLIB:-\$(CROSS_COMPILE)ranlib}
807*c9945492SAndroid Build Coastguard WorkerARCH = $ARCH
808*c9945492SAndroid Build Coastguard WorkerSUBARCH = $SUBARCH
809*c9945492SAndroid Build Coastguard WorkerASMSUBARCH = $ASMSUBARCH
810*c9945492SAndroid Build Coastguard Workersrcdir = $srcdir
811*c9945492SAndroid Build Coastguard Workerprefix = $prefix
812*c9945492SAndroid Build Coastguard Workerexec_prefix = $exec_prefix
813*c9945492SAndroid Build Coastguard Workerbindir = $bindir
814*c9945492SAndroid Build Coastguard Workerlibdir = $libdir
815*c9945492SAndroid Build Coastguard Workerincludedir = $includedir
816*c9945492SAndroid Build Coastguard Workersyslibdir = $syslibdir
817*c9945492SAndroid Build Coastguard WorkerCC = $CC
818*c9945492SAndroid Build Coastguard WorkerCFLAGS = $CFLAGS
819*c9945492SAndroid Build Coastguard WorkerCFLAGS_AUTO = $CFLAGS_AUTO
820*c9945492SAndroid Build Coastguard WorkerCFLAGS_C99FSE = $CFLAGS_C99FSE
821*c9945492SAndroid Build Coastguard WorkerCFLAGS_MEMOPS = $CFLAGS_MEMOPS
822*c9945492SAndroid Build Coastguard WorkerCFLAGS_NOSSP = $CFLAGS_NOSSP
823*c9945492SAndroid Build Coastguard WorkerCPPFLAGS = $CPPFLAGS
824*c9945492SAndroid Build Coastguard WorkerLDFLAGS = $LDFLAGS
825*c9945492SAndroid Build Coastguard WorkerLDFLAGS_AUTO = $LDFLAGS_AUTO
826*c9945492SAndroid Build Coastguard WorkerCROSS_COMPILE = $CROSS_COMPILE
827*c9945492SAndroid Build Coastguard WorkerLIBCC = $LIBCC
828*c9945492SAndroid Build Coastguard WorkerOPTIMIZE_GLOBS = $OPTIMIZE_GLOBS
829*c9945492SAndroid Build Coastguard WorkerALL_TOOLS = $tools
830*c9945492SAndroid Build Coastguard WorkerTOOL_LIBS = $tool_libs
831*c9945492SAndroid Build Coastguard WorkerADD_CFI = $ADD_CFI
832*c9945492SAndroid Build Coastguard WorkerMALLOC_DIR = $malloc_dir
833*c9945492SAndroid Build Coastguard WorkerEOF
834*c9945492SAndroid Build Coastguard Workertest "x$static" = xno && echo "STATIC_LIBS ="
835*c9945492SAndroid Build Coastguard Workertest "x$shared" = xno && echo "SHARED_LIBS ="
836*c9945492SAndroid Build Coastguard Workertest "x$cc_family" = xgcc && echo 'WRAPCC_GCC = $(CC)'
837*c9945492SAndroid Build Coastguard Workertest "x$cc_family" = xclang && echo 'WRAPCC_CLANG = $(CC)'
838*c9945492SAndroid Build Coastguard Workertest "x$pic_default" = xyes && echo 'AOBJS = $(LOBJS)'
839*c9945492SAndroid Build Coastguard Workerexec 1>&3 3>&-
840*c9945492SAndroid Build Coastguard Worker
841*c9945492SAndroid Build Coastguard Workertest "$srcdir" = "." || ln -sf $srcdir/Makefile .
842*c9945492SAndroid Build Coastguard Worker
843*c9945492SAndroid Build Coastguard Workerprintf "done\n"
844