2 # some elements originated from qemu configure
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
12 c="$CC $CFLAGS -c $TMPC -o $TMPO $1"
20 $CC -E -dD $CFLAGS $TMPC | grep -q $1 || return 1
24 # setting options to "yes" or "no" will make that choice default,
25 # "" means "autodetect".
27 platform_list="generic pandora maemo caanoo"
29 sound_driver_list="oss alsa none"
38 # these are for known platforms
39 optimize_cortexa8="no"
40 optimize_arm926ej="no"
43 CC="${CC-${CROSS_COMPILE}gcc}"
44 AS="${AS-${CROSS_COMPILE}as}"
45 AR="${AS-${CROSS_COMPILE}ar}"
46 config_mak="config.mak"
48 # call during arg parsing, so that cmd line can override platform defaults
59 optimize_cortexa8="yes"
65 optimize_cortexa8="yes"
72 optimize_arm926ej="yes"
75 echo "unsupported platform: $platform"
82 optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'` || true
84 --help|-h) show_help="yes"
86 --platform=*) set_platform "$optarg"
88 --sound-driver=*) sound_driver="$optarg"
90 --enable-neon) have_arm_neon="yes"
92 --disable-neon) have_arm_neon="no"
94 --disable-dynarec) enable_dynarec="no"
96 *) echo "ERROR: unknown option $opt"; show_help="yes"
101 if [ "$show_help" = "yes" ]; then
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"
117 case "$sound_driver" in
121 echo "unsupported sound driver: $sound_driver"
126 if [ -z "$ARCH" ]; then
127 ARCH=`$CC -v 2>&1 | grep -i 'target:' | awk '{print $2}' \
128 | awk -F '-' '{print $1}'`
132 if [ "$ARCH" = "arm" ]; then
133 if [ "$optimize_cortexa8" = "yes" ]; then
135 CFLAGS="$CFLAGS -mcpu=cortex-a8 -mtune=cortex-a8"
136 ASFLAGS="$ASFLAGS -mcpu=cortex-a8"
138 if [ "$optimize_arm926ej" = "yes" ]; then
139 CFLAGS="$CFLAGS -mcpu=arm926ej-s -mtune=arm926ej-s"
140 ASFLAGS="$ASFLAGS -mcpu=arm926ej-s -mfloat-abi=softfp"
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
147 if [ "x$have_armv6" = "x" ]; then
148 have_armv6=`check_define __ARM_ARCH_6 && echo yes` || true
150 if [ "x$have_armv7" = "x" ]; then
151 if check_define __ARM_ARCH_7A__; then
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"
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"
170 if [ "$have_armv7" = "yes" ]; then
171 ASFLAGS="$ASFLAGS --defsym HAVE_ARMV7=1"
173 ASFLAGS="$ASFLAGS --defsym HAVE_ARMV7=0"
176 # dynarec only available on ARM
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"
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"
192 if [ "$ram_fixed" = "yes" ]; then
193 CFLAGS="$CFLAGS -DRAM_FIXED"
196 if [ "$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"
203 # check for tslib (only headers needed)
204 if [ "x$have_tslib" = "x" ]; then
207 void test(struct ts_sample sample) {}
209 if compile_object; then
216 # set things that failed to autodetect to "no"
217 test "x$have_armv6" != "x" || have_armv6="no"
218 test "x$have_armv7" != "x" || have_armv7="no"
219 test "x$have_arm_neon" != "x" || have_arm_neon="no"
221 echo "architecture $ARCH"
222 echo "platform $platform"
223 echo "sound driver $sound_driver"
224 echo "C compiler $CC"
225 echo "C compiler flags $CFLAGS"
226 echo "enable dynarec $enable_dynarec"
227 echo "ARMv7 optimizations $have_armv7"
228 echo "enable ARM NEON $have_arm_neon"
229 echo "tslib support $have_tslib"
231 echo "# Automatically generated by configure" > $config_mak
232 printf "# Configured with:" >> $config_mak
233 printf " '%s'" "$0" "$@" >> $config_mak
236 echo "CC = $CC" >> $config_mak
237 echo "AS = $AS" >> $config_mak
238 echo "CFLAGS += $CFLAGS" >> $config_mak
239 echo "ASFLAGS += $ASFLAGS" >> $config_mak
240 echo "LDFLAGS += $LDFLAGS" >> $config_mak
241 echo "LDLIBS += $LDLIBS" >> $config_mak
242 echo "PLUGIN_CFLAGS += $PLUGIN_CFLAGS" >> $config_mak
245 echo "ARCH = $ARCH" >> $config_mak
246 echo "PLATFORM = $platform" >> $config_mak
247 case "$sound_driver" in
249 echo "USE_OSS = 1" >> $config_mak
252 echo "USE_ALSA = 1" >> $config_mak
255 echo "USE_NO_SOUND = 1" >> $config_mak
258 if [ "$have_armv6" = "yes" ]; then
259 echo "HAVE_ARMV6 = 1" >> $config_mak
261 if [ "$have_armv7" = "yes" ]; then
262 echo "HAVE_ARMV7 = 1" >> $config_mak
264 if [ "$have_arm_neon" = "yes" ]; then
265 echo "HAVE_NEON = 1" >> $config_mak
267 if [ "$have_tslib" = "yes" ]; then
268 echo "HAVE_TSLIB = 1" >> $config_mak
270 if [ "$enable_dynarec" = "yes" ]; then
271 echo "USE_DYNAREC = 1" >> $config_mak
273 if [ "$drc_cache_base" = "yes" ]; then
274 echo "DRC_CACHE_BASE = 1" >> $config_mak
277 # vim:shiftwidth=2:expandtab