gpu plugins: always support 16bpp blit
[pcsx_rearmed.git] / configure
1 #!/bin/sh
2 # some elements originated from qemu configure
3 set -e
4
5 TMPC="/tmp/pcsx-conf-${RANDOM}-$$-${RANDOM}.c"
6 TMPO="/tmp/pcsx-conf-${RANDOM}-$$-${RANDOM}.o"
7 trap "rm -f $TMPC $TMPO" EXIT INT QUIT TERM
8 rm -f config.log
9
10 compile_object()
11 {
12   c="$CC $CFLAGS -c $TMPC -o $TMPO $1"
13   echo $c >> config.log
14   $c >> config.log 2>&1
15 }
16
17 check_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
27 platform_list="generic pandora maemo caanoo"
28 platform="generic"
29 sound_driver_list="oss alsa none"
30 sound_driver="alsa"
31 ram_fixed="no"
32 drc_cache_base="no"
33 have_armv6=""
34 have_armv7=""
35 have_arm_neon=""
36 have_tslib=""
37 enable_dynarec="yes"
38 # these are for known platforms
39 optimize_cortexa8="no"
40 optimize_arm926ej="no"
41
42 # hardcoded stuff
43 CC="${CC-${CROSS_COMPILE}gcc}"
44 AS="${AS-${CROSS_COMPILE}as}"
45 AR="${AS-${CROSS_COMPILE}ar}"
46 config_mak="config.mak"
47
48 # call during arg parsing, so that cmd line can override platform defaults
49 set_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
81 for 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
99 done
100
101 if [ "$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
115 fi
116
117 case "$sound_driver" in
118 oss|alsa|none)
119   ;;
120 *)
121   echo "unsupported sound driver: $sound_driver"
122   exit 1
123   ;;
124 esac
125
126 if [ -z "$ARCH" ]; then
127   ARCH=`$CC -v 2>&1 | grep -i 'target:' | awk '{print $2}' \
128         | awk -F '-' '{print $1}'`
129 fi
130
131 # ARM stuff
132 if [ "$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
175 else
176   # dynarec only available on ARM
177   enable_dynarec="no"
178 fi
179
180 if [ "$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"
185 fi
186
187 # supposedly we can avoid -fPIC on armv5 for slightly better performace?
188 if [ "$ARCH" != "arm" -o "$have_armv6" = "yes" ]; then
189   PLUGIN_CFLAGS="$PLUGIN_CFLAGS -fPIC"
190 fi
191
192 if [ "$ram_fixed" = "yes" ]; then
193   CFLAGS="$CFLAGS -DRAM_FIXED"
194 fi
195
196 if [ "$platform" = "generic" ]; then
197   generic_cflags=`sdl-config --cflags`
198   generic_ldlibs=`sdl-config --libs`
199   CFLAGS="$CFLAGS $generic_cflags"
200   LDFLAGS="$LDFLAGS $generic_ldlibs"
201 elif [ "$platform" = "maemo" ]; then
202   maemo_cflags=`pkg-config --cflags hildon-1`
203   maemo_ldlibs=`pkg-config --libs hildon-1`
204   CFLAGS="$CFLAGS -DMAEMO -DMAEMO_CHANGES $maemo_cflags"
205   LDFLAGS="$LDFLAGS $maemo_ldlibs"
206 fi
207
208 # check for tslib (only headers needed)
209 if [ "x$have_tslib" = "x" ]; then
210   cat > $TMPC <<EOF
211   #include <tslib.h>
212   void test(struct ts_sample sample) {}
213 EOF
214   if compile_object; then
215     have_tslib="yes"
216   else
217     have_tslib="no"
218   fi
219 fi
220
221 # set things that failed to autodetect to "no"
222 test "x$have_armv6" != "x" || have_armv6="no"
223 test "x$have_armv7" != "x" || have_armv7="no"
224 test "x$have_arm_neon" != "x" || have_arm_neon="no"
225
226 echo "architecture        $ARCH"
227 echo "platform            $platform"
228 echo "sound driver        $sound_driver"
229 echo "C compiler          $CC"
230 echo "C compiler flags    $CFLAGS"
231 echo "linker flags        $LDFLAGS"
232 echo "enable dynarec      $enable_dynarec"
233 echo "ARMv7 optimizations $have_armv7"
234 echo "enable ARM NEON     $have_arm_neon"
235 echo "tslib support       $have_tslib"
236
237 echo "# Automatically generated by configure" > $config_mak
238 printf "# Configured with:" >> $config_mak
239 printf " '%s'" "$0" "$@" >> $config_mak
240 echo >> $config_mak
241
242 echo "CC = $CC" >> $config_mak
243 echo "AS = $AS" >> $config_mak
244 echo "CFLAGS += $CFLAGS" >> $config_mak
245 echo "ASFLAGS += $ASFLAGS" >> $config_mak
246 echo "LDFLAGS += $LDFLAGS" >> $config_mak
247 echo "LDLIBS += $LDLIBS" >> $config_mak
248 echo "PLUGIN_CFLAGS += $PLUGIN_CFLAGS" >> $config_mak
249 echo >> $config_mak
250
251 echo "ARCH = $ARCH" >> $config_mak
252 echo "PLATFORM = $platform" >> $config_mak
253 case "$sound_driver" in
254 oss)
255   echo "USE_OSS = 1" >> $config_mak
256   ;;
257 alsa)
258   echo "USE_ALSA = 1" >> $config_mak
259   ;;
260 none)
261   echo "USE_NO_SOUND = 1" >> $config_mak
262   ;;
263 esac
264 if [ "$have_armv6" = "yes" ]; then
265   echo "HAVE_ARMV6 = 1" >> $config_mak
266 fi
267 if [ "$have_armv7" = "yes" ]; then
268   echo "HAVE_ARMV7 = 1" >> $config_mak
269 fi
270 if [ "$have_arm_neon" = "yes" ]; then
271   echo "HAVE_NEON = 1" >> $config_mak
272 fi
273 if [ "$have_tslib" = "yes" ]; then
274   echo "HAVE_TSLIB = 1" >> $config_mak
275 fi
276 if [ "$enable_dynarec" = "yes" ]; then
277   echo "USE_DYNAREC = 1" >> $config_mak
278 fi
279 if [ "$drc_cache_base" = "yes" ]; then
280   echo "DRC_CACHE_BASE = 1" >> $config_mak
281 fi
282
283 # vim:shiftwidth=2:expandtab