# some elements originated from qemu configure
set -e
-TMPC="/tmp/pcsx-conf-${RANDOM}-$$-${RANDOM}.c"
-TMPO="/tmp/pcsx-conf-${RANDOM}-$$-${RANDOM}.o"
-TMPB="/tmp/pcsx-conf-${RANDOM}-$$-${RANDOM}"
+TMPC="/tmp/picodrive-conf-${RANDOM}-$$-${RANDOM}.c"
+TMPO="/tmp/picodrive-conf-${RANDOM}-$$-${RANDOM}.o"
+TMPB="/tmp/picodrive-conf-${RANDOM}-$$-${RANDOM}"
trap "rm -f $TMPC $TMPO $TMPB" EXIT INT QUIT TERM
rm -f config.log
compile_binary()
{
- c="$CC $CFLAGS $TMPC -o $TMPB $LDFLAGS $MAIN_LDLIBS $@"
+ c="$CC $CFLAGS $TMPC -o $TMPB $LDFLAGS $@"
echo $c >> config.log
$c >> config.log 2>&1
}
# setting options to "yes" or "no" will make that choice default,
# "" means "autodetect".
-platform_list="generic pandora"
+platform_list="generic pandora gp2x opendingux rpi1 rpi2"
platform="generic"
sound_driver_list="oss alsa sdl"
sound_drivers=""
have_armv7=""
have_arm_neon=""
have_libavcodec=""
-enable_dynarec="yes"
need_sdl="no"
need_xlib="no"
# these are for known platforms
optimize_cortexa8="no"
+optimize_cortexa7="no"
+optimize_arm1176jzf="no"
optimize_arm926ej="no"
+optimize_arm920="no"
# hardcoded stuff
CC="${CC-${CROSS_COMPILE}gcc}"
CXX="${CXX-${CROSS_COMPILE}g++}"
AS="${AS-${CROSS_COMPILE}as}"
+STRIP="${STRIP-${CROSS_COMPILE}strip}"
+test -n "$SDL_CONFIG" || SDL_CONFIG="`$CC --print-sysroot 2> /dev/null || true`/usr/bin/sdl-config"
MAIN_LDLIBS="$LDLIBS -lm"
config_mak="config.mak"
{
platform=$1
case "$platform" in
+ rpi1)
+ optimize_arm1176jzf="yes"
+ ;;
+ rpi2)
+ optimize_cortexa7="yes"
+ have_arm_neon="yes"
+ ;;
generic)
;;
+ opendingux)
+ sound_drivers="sdl"
+ ;;
pandora)
sound_drivers="oss alsa"
optimize_cortexa8="yes"
have_arm_neon="yes"
;;
+ gp2x)
+ sound_drivers="oss"
+ optimize_arm920="yes"
+ CFLAGS="$CFLAGS -D__GP2X__"
+ if [ "$CROSS_COMPILE" = "arm-linux-" ]; then
+ # still using static, dynamic linking slows Wiz 1-10%
+ # also libm on F100 is not compatible
+ MAIN_LDLIBS="$MAIN_LDLIBS -static"
+ fi
+ ;;
*)
fail "unsupported platform: $platform"
;;
;;
--sound-drivers=*) sound_drivers="$optarg"
;;
- --enable-neon) have_arm_neon="yes"
- ;;
- --disable-neon) have_arm_neon="no"
- ;;
- --disable-dynarec) enable_dynarec="no"
- ;;
*) echo "ERROR: unknown option $opt"; show_help="yes"
;;
esac
echo " available: $platform_list"
echo " --sound-drivers=LIST sound output drivers [guessed]"
echo " available: $sound_driver_list"
- echo " --enable-neon"
- echo " --disable-neon enable/disable ARM NEON optimizations [guessed]"
- echo " --disable-dynarec disable dynamic recompiler"
- echo " (dynarec is only available and enabled on ARM)"
echo "influential environment variables:"
- echo " CROSS_COMPILE CC CXX AS CFLAGS ASFLAGS LDFLAGS LDLIBS"
+ echo " CROSS_COMPILE CC CXX AS STRIP CFLAGS ASFLAGS LDFLAGS LDLIBS"
exit 1
fi
CFLAGS="$CFLAGS -mcpu=cortex-a8 -mtune=cortex-a8"
ASFLAGS="$ASFLAGS -mcpu=cortex-a8"
fi
+ if [ "$optimize_cortexa7" = "yes" ]; then
+ CFLAGS="$CFLAGS -mcpu=cortex-a7"
+ ASFLAGS="$ASFLAGS -mcpu=cortex-a7"
+ fi
+ if [ "$optimize_arm1176jzf" = "yes" ]; then
+ CFLAGS="$CFLAGS -mcpu=arm1176jzf-s -mfloat-abi=hard"
+ ASFLAGS="$ASFLAGS -mcpu=arm1176jzf-s -mfloat-abi=hard"
+ fi
if [ "$optimize_arm926ej" = "yes" ]; then
CFLAGS="$CFLAGS -mcpu=arm926ej-s -mtune=arm926ej-s"
ASFLAGS="$ASFLAGS -mcpu=arm926ej-s -mfloat-abi=softfp"
fi
+ if [ "$optimize_arm920" = "yes" ]; then
+ CFLAGS="$CFLAGS -mcpu=arm920t -mtune=arm920t"
+ ASFLAGS="$ASFLAGS -mcpu=arm920t -mfloat-abi=soft"
+ fi
if [ "x$have_arm_neon" = "x" ]; then
# detect NEON from user-supplied cflags to enable asm code
fi
# warn about common mistakes
- if [ "$have_armv5" != "yes" ]; then
+ if [ "$platform" != "gp2x" -a "$have_armv5" != "yes" ]; then
if ! echo "$CFLAGS" | grep -q -- '-mcpu=\|-march='; then
echo "Warning: compiling for ARMv4, is that really what you want?"
echo "You probably should specify -mcpu= or -march= like this:"
fi
;;
*)
- # dynarec only available on ARM
- enable_dynarec="no"
;;
esac
case "$platform" in
-generic)
+rpi1 | rpi2 | generic | opendingux)
need_sdl="yes"
;;
esac
#include <zlib.h>
int main(void) { uncompress(0, 0, 0, 0); }
EOF
- compile_binary
+ compile_binary "$@"
}
check_libpng()
#include <png.h>
void main() { png_init_io(0, 0); }
EOF
- compile_binary
+# compile_binary
+ compile_object
}
check_oss()
#include <libavcodec/avcodec.h>
void main() { avcodec_decode_audio3(0, 0, 0, 0); }
EOF
- compile_binary "$@" -lavcodec
+ compile_object "$@"
}
-#MAIN_LDLIBS="$MAIN_LDLIBS -lz"
-#check_zlib || fail "please install zlib (libz-dev)"
+MAIN_LDLIBS="$MAIN_LDLIBS -lz"
+check_zlib -lz || fail "please install zlib (libz-dev)"
MAIN_LDLIBS="-lpng $MAIN_LDLIBS"
check_libpng || fail "please install libpng (libpng-dev)"
if check_libavcodec; then
have_libavcodec="yes"
- MAIN_LDLIBS="-lavcodec $MAIN_LDLIBS"
+ # add -ldl if needed
+ case "$MAIN_LDLIBS" in
+ *"-ldl"*) ;;
+ *) MAIN_LDLIBS="-ldl $MAIN_LDLIBS" ;;
+ esac
fi
# find what audio support we can compile
sound_drivers="$sound_drivers alsa"
MAIN_LDLIBS="-lasound $MAIN_LDLIBS"
fi
- if [ "$need_sdl" = "yes" ] || check_sdl `sdl-config --cflags --libs`; then
+ if [ "$need_sdl" = "yes" ] || check_sdl `$SDL_CONFIG --cflags --libs`; then
sound_drivers="$sound_drivers sdl"
need_sdl="yes"
fi
fi
if echo $sound_drivers | grep -q "\<alsa\>"; then
MAIN_LDLIBS="-lasound $MAIN_LDLIBS"
- check_alsa || fail "please install libasound2-dev"
+ check_alsa -lasound || fail "please install libasound2-dev"
fi
fi
if [ "$need_sdl" = "yes" ]; then
- which sdl-config > /dev/null || \
+ [ -x "$SDL_CONFIG" ] || \
fail "sdl-config is missing; please install libsdl (libsdl1.2-dev)"
- CFLAGS="$CFLAGS `sdl-config --cflags`"
- MAIN_LDLIBS="`sdl-config --libs` $MAIN_LDLIBS"
- check_sdl || fail "please install libsdl (libsdl1.2-dev)"
+ CFLAGS="$CFLAGS `$SDL_CONFIG --cflags`"
+ MAIN_LDLIBS="`$SDL_CONFIG --libs` $MAIN_LDLIBS"
+ check_sdl `$SDL_CONFIG --libs` || fail "please install libsdl (libsdl1.2-dev)"
fi
cat > $TMPC <<EOF
# set things that failed to autodetect to "no"
test "x$have_armv6" != "x" || have_armv6="no"
test "x$have_armv7" != "x" || have_armv7="no"
-test "x$have_arm_neon" != "x" || have_arm_neon="no"
test "x$have_libavcodec" != "x" || have_libavcodec="no"
echo "architecture $ARCH"
echo "libraries $MAIN_LDLIBS"
echo "linker flags $LDFLAGS"
echo "libavcodec (mp3) $have_libavcodec"
-echo "enable dynarec $enable_dynarec"
# echo "ARMv7 optimizations $have_armv7"
-# echo "enable ARM NEON $have_arm_neon"
echo "# Automatically generated by configure" > $config_mak
printf "# Configured with:" >> $config_mak
echo "CC = $CC" >> $config_mak
echo "CXX = $CXX" >> $config_mak
echo "AS = $AS" >> $config_mak
+echo "STRIP = $STRIP" >> $config_mak
echo "CFLAGS += $CFLAGS" >> $config_mak
echo "ASFLAGS += $ASFLAGS" >> $config_mak
echo "LDFLAGS += $LDFLAGS" >> $config_mak
if [ "$have_libavcodec" = "yes" ]; then
echo "HAVE_LIBAVCODEC = 1" >> $config_mak
fi
-if [ "$have_arm_neon" = "yes" ]; then
- echo "HAVE_NEON = 1" >> $config_mak
-fi
-if [ "$enable_dynarec" = "yes" ]; then
- echo "USE_DYNAREC = 1" >> $config_mak
+
+# GP2X toolchains are too old for UAL asm,
+# so add this here to not litter main Makefile
+if [ "$platform" = "g1p2x" ]; then
+ echo >> $config_mak
+ echo "%.o: %.S" >> $config_mak
+ echo " $(CC) $(CFLAGS) -E -c $^ -o /tmp/$(notdir $@).s" >> $config_mak
+ echo " $(AS) $(ASFLAGS) /tmp/$(notdir $@).s -o $@" >> $config_mak
fi
# use pandora's skin (for now)