mirror of
https://github.com/kanjitalk755/macemu.git
synced 2024-12-23 19:29:18 +00:00
Fixes #107 by automatically using the precompiled opcodes when appropiate.
This commit is contained in:
parent
5bbdb4f864
commit
b14bcdcf91
@ -26,6 +26,7 @@ CPUSRCS = @CPUSRCS@
|
|||||||
MONSRCS = @MONSRCS@
|
MONSRCS = @MONSRCS@
|
||||||
PERL = @PERL@
|
PERL = @PERL@
|
||||||
USE_DYNGEN = @USE_DYNGEN@
|
USE_DYNGEN = @USE_DYNGEN@
|
||||||
|
USE_DYNGEN_PRECOMPILED = @USE_DYNGEN_PRECOMPILED@
|
||||||
DYNGENSRCS = @DYNGENSRCS@
|
DYNGENSRCS = @DYNGENSRCS@
|
||||||
DYNGEN_CC = @DYNGEN_CC@
|
DYNGEN_CC = @DYNGEN_CC@
|
||||||
DYNGEN_CFLAGS = @DYNGEN_CFLAGS@
|
DYNGEN_CFLAGS = @DYNGEN_CFLAGS@
|
||||||
@ -209,9 +210,28 @@ DYNGEN = dyngen$(EXEEXT)
|
|||||||
ifeq ($(USE_DYNGEN),yes)
|
ifeq ($(USE_DYNGEN),yes)
|
||||||
DYNGENDEPS = basic-dyngen-ops.hpp ppc-dyngen-ops.hpp
|
DYNGENDEPS = basic-dyngen-ops.hpp ppc-dyngen-ops.hpp
|
||||||
|
|
||||||
|
ifeq ($(USE_DYNGEN_PRECOMPILED),yes)
|
||||||
|
basic-dyngen-ops.hpp: dyngen_precompiled/basic-dyngen-ops.hpp basic-dyngen-ops-x86_32.hpp basic-dyngen-ops-x86_64.hpp
|
||||||
|
cp -f $< $@
|
||||||
|
basic-dyngen-ops-x86_32.hpp: dyngen_precompiled/basic-dyngen-ops-x86_32.hpp
|
||||||
|
cp -f $< $@
|
||||||
|
basic-dyngen-ops-x86_64.hpp: dyngen_precompiled/basic-dyngen-ops-x86_64.hpp
|
||||||
|
cp -f $< $@
|
||||||
|
ppc-dyngen-ops.hpp: dyngen_precompiled/ppc-dyngen-ops.hpp ppc-dyngen-ops-x86_32.hpp ppc-dyngen-ops-x86_64.hpp
|
||||||
|
cp -f $< $@
|
||||||
|
ppc-dyngen-ops-x86_32.hpp: dyngen_precompiled/ppc-dyngen-ops-x86_32.hpp
|
||||||
|
cp -f $< $@
|
||||||
|
ppc-dyngen-ops-x86_64.hpp: dyngen_precompiled/ppc-dyngen-ops-x86_64.hpp
|
||||||
|
cp -f $< $@
|
||||||
|
else
|
||||||
# Only GCC is supported for generating synthetic opcodes
|
# Only GCC is supported for generating synthetic opcodes
|
||||||
$(DYNGEN): $(DYNGENOBJS)
|
$(DYNGEN): $(DYNGENOBJS)
|
||||||
$(DYNGEN_CC) -o $@ $(LDFLAGS) $(DYNGENOBJS)
|
$(DYNGEN_CC) -o $@ $(LDFLAGS) $(DYNGENOBJS)
|
||||||
|
basic-dyngen-ops.hpp: $(OBJ_DIR)/basic-dyngen-ops.o $(DYNGEN)
|
||||||
|
./$(DYNGEN) -o $@ $<
|
||||||
|
ppc-dyngen-ops.hpp: $(OBJ_DIR)/ppc-dyngen-ops.o $(DYNGEN)
|
||||||
|
./$(DYNGEN) -o $@ $<
|
||||||
|
endif
|
||||||
|
|
||||||
$(OBJ_DIR)/%.dgo : %.c
|
$(OBJ_DIR)/%.dgo : %.c
|
||||||
$(DYNGEN_CC) -xc $(CPPFLAGS) $(DEFS) $(DYNGEN_CFLAGS) -c $< -o $@
|
$(DYNGEN_CC) -xc $(CPPFLAGS) $(DEFS) $(DYNGEN_CFLAGS) -c $< -o $@
|
||||||
@ -221,14 +241,10 @@ $(OBJ_DIR)/%.dgo : %.cpp
|
|||||||
$(OBJ_DIR)/basic-dyngen.o: basic-dyngen-ops.hpp
|
$(OBJ_DIR)/basic-dyngen.o: basic-dyngen-ops.hpp
|
||||||
$(OBJ_DIR)/basic-dyngen-ops.o: $(kpxsrcdir)/cpu/jit/basic-dyngen-ops.cpp
|
$(OBJ_DIR)/basic-dyngen-ops.o: $(kpxsrcdir)/cpu/jit/basic-dyngen-ops.cpp
|
||||||
$(DYNGEN_CC) $(CPPFLAGS) $(DEFS) $(DYNGEN_CXXFLAGS) $(DYNGEN_OP_FLAGS) -c $< -o $@
|
$(DYNGEN_CC) $(CPPFLAGS) $(DEFS) $(DYNGEN_CXXFLAGS) $(DYNGEN_OP_FLAGS) -c $< -o $@
|
||||||
basic-dyngen-ops.hpp: $(OBJ_DIR)/basic-dyngen-ops.o $(DYNGEN)
|
|
||||||
./$(DYNGEN) -o $@ $<
|
|
||||||
|
|
||||||
$(OBJ_DIR)/ppc-dyngen.o: ppc-dyngen-ops.hpp
|
$(OBJ_DIR)/ppc-dyngen.o: ppc-dyngen-ops.hpp
|
||||||
$(OBJ_DIR)/ppc-dyngen-ops.o: $(kpxsrcdir)/cpu/ppc/ppc-dyngen-ops.cpp basic-dyngen-ops.hpp
|
$(OBJ_DIR)/ppc-dyngen-ops.o: $(kpxsrcdir)/cpu/ppc/ppc-dyngen-ops.cpp basic-dyngen-ops.hpp
|
||||||
$(DYNGEN_CC) $(CPPFLAGS) $(DEFS) $(DYNGEN_CXXFLAGS) $(DYNGEN_OP_FLAGS) -c $< -o $@
|
$(DYNGEN_CC) $(CPPFLAGS) $(DEFS) $(DYNGEN_CXXFLAGS) $(DYNGEN_OP_FLAGS) -c $< -o $@
|
||||||
ppc-dyngen-ops.hpp: $(OBJ_DIR)/ppc-dyngen-ops.o $(DYNGEN)
|
|
||||||
./$(DYNGEN) -o $@ $<
|
|
||||||
|
|
||||||
$(OBJ_DIR)/sheepshaver_glue.o $(OBJ_DIR)/ppc-cpu.o $(OBJ_DIR)/ppc-decode.o $(OBJ_DIR)/ppc-translate.o $(OBJ_DIR)/ppc-jit.o: basic-dyngen-ops.hpp ppc-dyngen-ops.hpp
|
$(OBJ_DIR)/sheepshaver_glue.o $(OBJ_DIR)/ppc-cpu.o $(OBJ_DIR)/ppc-decode.o $(OBJ_DIR)/ppc-translate.o $(OBJ_DIR)/ppc-jit.o: basic-dyngen-ops.hpp ppc-dyngen-ops.hpp
|
||||||
endif
|
endif
|
||||||
|
@ -46,7 +46,7 @@ AC_ARG_WITH(gtk, [ --with-gtk use GTK user interface [d
|
|||||||
esac],
|
esac],
|
||||||
[WANT_GTK="gtk2 gtk"])
|
[WANT_GTK="gtk2 gtk"])
|
||||||
AC_ARG_WITH(mon, [ --with-mon use mon as debugger [default=yes]], [WANT_MON=$withval], [WANT_MON=yes])
|
AC_ARG_WITH(mon, [ --with-mon use mon as debugger [default=yes]], [WANT_MON=$withval], [WANT_MON=yes])
|
||||||
AC_ARG_WITH(dgcc, [ --with-dgcc=COMPILER use C++ COMPILER to compile synthetic opcodes], [DYNGEN_CC=$withval])
|
AC_ARG_WITH(dgcc, [ --with-dgcc=COMPILER use C++ COMPILER to compile synthetic opcodes or 'precompiled'], [DYNGEN_CC=$withval])
|
||||||
|
|
||||||
AC_ARG_WITH(bincue,
|
AC_ARG_WITH(bincue,
|
||||||
AS_HELP_STRING([--with-bincue], [Allow cdrom image files in bin/cue mode]))
|
AS_HELP_STRING([--with-bincue], [Allow cdrom image files in bin/cue mode]))
|
||||||
@ -1432,6 +1432,17 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if ! (__GNUC__ >= 3)
|
|||||||
[AC_MSG_RESULT(yes); HAVE_GCC30=yes],
|
[AC_MSG_RESULT(yes); HAVE_GCC30=yes],
|
||||||
[AC_MSG_RESULT(no)])
|
[AC_MSG_RESULT(no)])
|
||||||
|
|
||||||
|
dnl Check for GCC 4.0 or higher.
|
||||||
|
HAVE_GCC40=no
|
||||||
|
AC_MSG_CHECKING(for GCC 4.0 or higher)
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#if ! (__GNUC__ >= 4)
|
||||||
|
# error gcc < 4
|
||||||
|
typedef syntax error;
|
||||||
|
#endif
|
||||||
|
]])],
|
||||||
|
[AC_MSG_RESULT(yes); HAVE_GCC40=yes],
|
||||||
|
[AC_MSG_RESULT(no)])
|
||||||
|
|
||||||
dnl Check for ICC.
|
dnl Check for ICC.
|
||||||
AC_MSG_CHECKING(for ICC)
|
AC_MSG_CHECKING(for ICC)
|
||||||
HAVE_ICC=no
|
HAVE_ICC=no
|
||||||
@ -1504,6 +1515,7 @@ if [[ "x$EMULATED_PPC" = "xyes" ]]; then
|
|||||||
|
|
||||||
dnl Enable JIT compiler, if possible
|
dnl Enable JIT compiler, if possible
|
||||||
if [[ "x$WANT_JIT" = "xyes" ]]; then
|
if [[ "x$WANT_JIT" = "xyes" ]]; then
|
||||||
|
ac_cv_use_dyngen_precompiled=no
|
||||||
AC_CACHE_CHECK([whether dyngen can be used],
|
AC_CACHE_CHECK([whether dyngen can be used],
|
||||||
ac_cv_use_dyngen, [
|
ac_cv_use_dyngen, [
|
||||||
case $host_cpu:$ac_cv_object_format in
|
case $host_cpu:$ac_cv_object_format in
|
||||||
@ -1534,20 +1546,30 @@ if [[ "x$EMULATED_PPC" = "xyes" ]]; then
|
|||||||
esac
|
esac
|
||||||
dnl Check for a suitable synthetic opcodes compiler (icc is faking itself as gcc 3.2.2)
|
dnl Check for a suitable synthetic opcodes compiler (icc is faking itself as gcc 3.2.2)
|
||||||
if [[ -z "$DYNGEN_CC" ]]; then
|
if [[ -z "$DYNGEN_CC" ]]; then
|
||||||
if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_ICC" = "xno" ]]; then
|
if [[ "x$HAVE_GCC27" = "xyes" -a "x$HAVE_GCC40" = "xno" -a "x$HAVE_ICC" = "xno" ]]; then
|
||||||
DYNGEN_CC=$CXX
|
DYNGEN_CC=$CXX
|
||||||
else
|
elif command -v g++ >/dev/null; then
|
||||||
for p in /usr/bin /usr/local/bin /usr/freeware/bin; do
|
vers=`g++ -dumpversion`
|
||||||
gxx="$p/g++"
|
function version { echo "$@" | awk -F. '{ printf("%d%03d%03d%03d\n", $1,$2,$3,$4); }'; }
|
||||||
if [[ -x "$gxx" ]]; then
|
if [[ $(version $vers) -ge $(version "2.7.0") ]] && [[ $(version $vers) -lt $(version "4.0.0") ]]; then
|
||||||
DYNGEN_CC="$gxx"
|
DYNGEN_CC="$gxx"
|
||||||
fi
|
fi
|
||||||
done
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if [[ -z "$DYNGEN_CC" ]]; then
|
if [[ -z "$DYNGEN_CC" -o "x$DYNGEN_CC" = "xprecompiled" ]]; then
|
||||||
ac_cv_use_dyngen=no
|
case $host_cpu in
|
||||||
|
i?86)
|
||||||
|
ac_cv_use_dyngen_precompiled=yes
|
||||||
|
;;
|
||||||
|
x86_64)
|
||||||
|
ac_cv_use_dyngen_precompiled=yes
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
ac_cv_use_dyngen=no
|
||||||
|
;;
|
||||||
|
esac
|
||||||
fi
|
fi
|
||||||
|
if [[ "x$ac_cv_use_dyngen_precompiled" = "xyes" ]]; then DYNGEN_CC=precompiled; fi
|
||||||
])
|
])
|
||||||
if [[ "x$ac_cv_use_dyngen" = "xyes" ]]; then
|
if [[ "x$ac_cv_use_dyngen" = "xyes" ]]; then
|
||||||
case $host_cpu in
|
case $host_cpu in
|
||||||
@ -1564,10 +1586,17 @@ if [[ "x$EMULATED_PPC" = "xyes" ]]; then
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
have_dyngen_gcc3=no
|
have_dyngen_gcc3=no
|
||||||
case "x`$DYNGEN_CC -dumpversion`" in
|
if [[ "$DYNGEN_CC" != "precompiled" ]]; then
|
||||||
x[12].*) ;;
|
case "x`$DYNGEN_CC -dumpversion`" in
|
||||||
x*) have_dyngen_gcc3=yes ;;
|
x[12].*) ;;
|
||||||
esac
|
x*) have_dyngen_gcc3=yes ;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
case "x`$CXX -dumpversion`" in
|
||||||
|
x[12].*) ;;
|
||||||
|
x*) have_dyngen_gcc3=yes ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
if [[ "x$have_dyngen_gcc3" = "xyes" ]]; then
|
if [[ "x$have_dyngen_gcc3" = "xyes" ]]; then
|
||||||
DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -fno-align-functions"
|
DYNGEN_OP_FLAGS="$DYNGEN_OP_FLAGS -fno-align-functions"
|
||||||
else
|
else
|
||||||
@ -1651,6 +1680,7 @@ AC_TRANSLATE_DEFINE(HAVE_LINKER_SCRIPT, "$ac_cv_linker_script_works",
|
|||||||
dnl Generate Makefile.
|
dnl Generate Makefile.
|
||||||
AC_SUBST(PERL)
|
AC_SUBST(PERL)
|
||||||
AC_SUBST(USE_DYNGEN, [$ac_cv_use_dyngen])
|
AC_SUBST(USE_DYNGEN, [$ac_cv_use_dyngen])
|
||||||
|
AC_SUBST(USE_DYNGEN_PRECOMPILED, [$ac_cv_use_dyngen_precompiled])
|
||||||
AC_SUBST(DYNGENSRCS)
|
AC_SUBST(DYNGENSRCS)
|
||||||
AC_SUBST(DYNGEN_CC)
|
AC_SUBST(DYNGEN_CC)
|
||||||
AC_SUBST(DYNGEN_CFLAGS)
|
AC_SUBST(DYNGEN_CFLAGS)
|
||||||
|
Loading…
Reference in New Issue
Block a user