frontend: clean up some hacks
[pcsx_rearmed.git] / configure
CommitLineData
4132e8ca 1#!/bin/sh
2# some elements originated from qemu configure
3set -e
4
5TMPC="/tmp/pcsx-conf-${RANDOM}-$$-${RANDOM}.c"
6TMPO="/tmp/pcsx-conf-${RANDOM}-$$-${RANDOM}.o"
7trap "rm -f $TMPC $TMPO" EXIT INT QUIT TERM
8rm -f config.log
9
10compile_object()
11{
12 c="$CC $CFLAGS -c $TMPC -o $TMPO $1"
13 echo $c >> config.log
14 $c >> config.log 2>&1
15}
16
17check_define()
18{
19 echo "" > $TMPC
20 $CC -E -dD $CFLAGS $TMPC | grep -q $1 || return 1
21 return 0
22}
23
24# setting options to "yes" or "no" will make that choice default,
25# "" means "autodetect".
26
27platform_list="generic pandora maemo caanoo"
28platform="generic"
29sound_driver_list="oss alsa none"
30sound_driver="alsa"
31ram_fixed="no"
32drc_cache_base="no"
33have_armv6=""
34have_armv7=""
35have_arm_neon=""
36have_tslib=""
37enable_dynarec="yes"
38# these are for known platforms
39optimize_cortexa8="no"
40optimize_arm926ej="no"
41
42# hardcoded stuff
43CC="${CC-${CROSS_COMPILE}gcc}"
44AS="${AS-${CROSS_COMPILE}as}"
45AR="${AS-${CROSS_COMPILE}ar}"
46config_mak="config.mak"
47
48# call during arg parsing, so that cmd line can override platform defaults
49set_platform()
50{
51 platform=$1
52 case "$platform" in
53 generic)
54 ;;
55 pandora)
56 sound_driver="oss"
57 ram_fixed="yes"
58 drc_cache_base="yes"
59 optimize_cortexa8="yes"
60 have_arm_neon="yes"
61 ;;
62 maemo)
63 ram_fixed="yes"
64 drc_cache_base="yes"
65 optimize_cortexa8="yes"
66 have_arm_neon="yes"
67 ;;
68 caanoo)
69 sound_driver="oss"
70 ram_fixed="yes"
71 drc_cache_base="yes"
72 optimize_arm926ej="yes"
73 ;;
74 *)
75 echo "unsupported platform: $platform"
76 exit 1
77 ;;
78 esac
79}
80
81for opt do
82 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'` || true
83 case "$opt" in
84 --help|-h) show_help="yes"
85 ;;
86 --platform=*) set_platform "$optarg"
87 ;;
88 --sound-driver=*) sound_driver="$optarg"
89 ;;
90 --enable-neon) have_arm_neon="yes"
91 ;;
92 --disable-neon) have_arm_neon="no"
93 ;;
94 --disable-dynarec) enable_dynarec="no"
95 ;;
96 *) echo "ERROR: unknown option $opt"; show_help="yes"
97 ;;
98 esac
99done
100
101if [ "$show_help" = "yes" ]; then
102 echo "options:"
103 echo " --help print this message"
104 echo " --platform=NAME target platform [$platform]"
105 echo " available: $platform_list"
106 echo " --sound-driver=NAME sound output driver [$sound_driver]"
107 echo " available: $sound_driver_list"
108 echo " --enable-neon"
109 echo " --disable-neon enable/disable ARM NEON optimizations [guessed]"
110 echo " --disable-dynarec disable dynamic recompiler"
111 echo " (dynarec is only available and enabled on ARM)"
112 echo "influential environment variables:"
113 echo " CROSS_COMPILE CC AS AR CFLAGS ASFLAGS LDFLAGS LDLIBS"
114 exit 1
115fi
116
117case "$sound_driver" in
118oss|alsa|none)
119 ;;
120*)
121 echo "unsupported sound driver: $sound_driver"
122 exit 1
123 ;;
124esac
125
126if [ -z "$ARCH" ]; then
127 ARCH=`$CC -v 2>&1 | grep -i 'target:' | awk '{print $2}' \
128 | awk -F '-' '{print $1}'`
129fi
130
131# ARM stuff
132if [ "$ARCH" = "arm" ]; then
133 if [ "$optimize_cortexa8" = "yes" ]; then
134 # both: -mfpu=neon
135 CFLAGS="$CFLAGS -mcpu=cortex-a8 -mtune=cortex-a8"
136 ASFLAGS="$ASFLAGS -mcpu=cortex-a8"
137 fi
138 if [ "$optimize_arm926ej" = "yes" ]; then
139 CFLAGS="$CFLAGS -mcpu=arm926ej-s -mtune=arm926ej-s"
140 ASFLAGS="$ASFLAGS -mcpu=arm926ej-s -mfloat-abi=softfp"
141 fi
142
143 if [ "x$have_arm_neon" = "x" ]; then
144 # detect NEON from user-supplied cflags to enable asm code
145 have_arm_neon=`check_define __ARM_NEON__ && echo yes` || true
146 fi
147 if [ "x$have_armv6" = "x" ]; then
148 have_armv6=`check_define __ARM_ARCH_6 && echo yes` || true
149 fi
150 if [ "x$have_armv7" = "x" ]; then
151 if check_define __ARM_ARCH_7A__; then
152 have_armv6="yes"
153 have_armv7="yes"
154 fi
155 fi
156
157 # set mfpu and mfloat-abi if they are not set
158 if [ "$have_arm_neon" = "yes" ]; then
159 echo "$CFLAGS" | grep -q -- '-mfpu=' || CFLAGS="$CFLAGS -mfpu=neon"
160 echo "$ASFLAGS" | grep -q -- '-mfpu=' || ASFLAGS="$ASFLAGS -mfpu=neon"
161 elif [ "$have_armv6" = "yes" ]; then
162 echo "$CFLAGS" | grep -q -- '-mfpu=' || CFLAGS="$CFLAGS -mfpu=vfp"
163 echo "$ASFLAGS" | grep -q -- '-mfpu=' || ASFLAGS="$ASFLAGS -mfpu=vfp"
164 fi
165 if [ "$have_armv6" = "yes" ]; then
166 echo "$CFLAGS" | grep -q -- '-mfloat-abi=' || CFLAGS="$CFLAGS -mfloat-abi=softfp"
167 echo "$ASFLAGS" | grep -q -- '-mfloat-abi=' || ASFLAGS="$ASFLAGS -mfloat-abi=softfp"
168 fi
169
170 if [ "$have_armv7" = "yes" ]; then
171 ASFLAGS="$ASFLAGS --defsym HAVE_ARMV7=1"
172 else
173 ASFLAGS="$ASFLAGS --defsym HAVE_ARMV7=0"
174 fi
175else
176 # dynarec only available on ARM
177 enable_dynarec="no"
178fi
179
180if [ "$ARCH" = "x86_64" ]; then
181 # currently we are full of 32bit assumptions,
182 # at least savestate compatibility will break without these
183 CFLAGS="$CFLAGS -m32"
184 LDFLAGS="$LDFLAGS -m32"
185fi
186
187# supposedly we can avoid -fPIC on armv5 for slightly better performace?
188if [ "$ARCH" != "arm" -o "$have_armv6" = "yes" ]; then
189 PLUGIN_CFLAGS="$PLUGIN_CFLAGS -fPIC"
190fi
191
192if [ "$ram_fixed" = "yes" ]; then
193 CFLAGS="$CFLAGS -DRAM_FIXED"
194fi
195
196if [ "$platform" = "maemo" ]; then
197 maemo_cflags=`pkg-config --cflags hildon-1`
198 maemo_ldlibs=`pkg-config --libs hildon-1`
199 CFLAGS="$CFLAGS -DMAEMO -DMAEMO_CHANGES $maemo_cflags"
200 LDFLAGS="$LDFLAGS $maemo_ldlibs"
201fi
202
203# check for tslib (only headers needed)
204if [ "x$have_tslib" = "x" ]; then
205 cat > $TMPC <<EOF
206 #include <tslib.h>
207 void test(struct ts_sample sample) {}
208EOF
209 if compile_object; then
210 have_tslib="yes"
211 else
212 have_tslib="no"
213 fi
214fi
215
216# set things that failed to autodetect to "no"
217test "x$have_armv6" != "x" || have_armv6="no"
218test "x$have_armv7" != "x" || have_armv7="no"
219test "x$have_arm_neon" != "x" || have_arm_neon="no"
220
221echo "architecture $ARCH"
222echo "platform $platform"
223echo "sound driver $sound_driver"
224echo "C compiler $CC"
225echo "C compiler flags $CFLAGS"
226echo "enable dynarec $enable_dynarec"
227echo "ARMv7 optimizations $have_armv7"
228echo "enable ARM NEON $have_arm_neon"
229echo "tslib support $have_tslib"
230
231echo "# Automatically generated by configure" > $config_mak
232printf "# Configured with:" >> $config_mak
233printf " '%s'" "$0" "$@" >> $config_mak
234echo >> $config_mak
235
236echo "CC = $CC" >> $config_mak
237echo "AS = $AS" >> $config_mak
238echo "CFLAGS += $CFLAGS" >> $config_mak
239echo "ASFLAGS += $ASFLAGS" >> $config_mak
240echo "LDFLAGS += $LDFLAGS" >> $config_mak
241echo "LDLIBS += $LDLIBS" >> $config_mak
242echo "PLUGIN_CFLAGS += $PLUGIN_CFLAGS" >> $config_mak
243echo >> $config_mak
244
245echo "ARCH = $ARCH" >> $config_mak
246echo "PLATFORM = $platform" >> $config_mak
247case "$sound_driver" in
248oss)
249 echo "USE_OSS = 1" >> $config_mak
250 ;;
251alsa)
252 echo "USE_ALSA = 1" >> $config_mak
253 ;;
254none)
255 echo "USE_NO_SOUND = 1" >> $config_mak
256 ;;
257esac
258if [ "$have_armv6" = "yes" ]; then
259 echo "HAVE_ARMV6 = 1" >> $config_mak
260fi
261if [ "$have_armv7" = "yes" ]; then
262 echo "HAVE_ARMV7 = 1" >> $config_mak
263fi
264if [ "$have_arm_neon" = "yes" ]; then
265 echo "HAVE_NEON = 1" >> $config_mak
266fi
267if [ "$have_tslib" = "yes" ]; then
268 echo "HAVE_TSLIB = 1" >> $config_mak
269fi
270if [ "$enable_dynarec" = "yes" ]; then
271 echo "USE_DYNAREC = 1" >> $config_mak
272fi
273if [ "$drc_cache_base" = "yes" ]; then
274 echo "DRC_CACHE_BASE = 1" >> $config_mak
275fi
276
277# vim:shiftwidth=2:expandtab