diff --git a/sim/configure.ac b/sim/configure.ac
index 937571a9957d..0bb7f7d4b5f1 100644
--- a/sim/configure.ac
+++ b/sim/configure.ac
@@ -119,7 +119,7 @@ if test "${enable_sim}" != no; then
     SIM_TARGET([moxie-*-*], [moxie])
     SIM_TARGET([msp430*-*-*], [msp430])
     SIM_TARGET([or1k*-*-*], [or1k])
-    SIM_TARGET([powerpc*-*-*], [ppc], [true])
+    SIM_TARGET([powerpc*-*-*], [ppc])
     SIM_TARGET([pru*-*-*], [pru])
     SIM_TARGET([riscv*-*-*], [riscv])
     SIM_TARGET([rl78-*-*], [rl78])
diff --git a/sim/ppc/Makefile.in b/sim/ppc/Makefile.in
deleted file mode 100644
index 8c055689e6e1..000000000000
--- a/sim/ppc/Makefile.in
+++ /dev/null
@@ -1,576 +0,0 @@
-#
-#   This file is part of the program psim.
-#
-#   Copyright 1994, 1995, 1996, 1997, 2003 Andrew Cagney
-#
-#   This program is free software; you can redistribute it and/or modify
-#   it under the terms of the GNU General Public License as published by
-#   the Free Software Foundation; either version 3 of the License, or
-#   (at your option) any later version.
-#
-#   This program is distributed in the hope that it will be useful,
-#   but WITHOUT ANY WARRANTY; without even the implied warranty of
-#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#   GNU General Public License for more details.
-#
-#   You should have received a copy of the GNU General Public License
-#   along with this program; if not, see <http://www.gnu.org/licenses/>.
-#
-
-default: all
-
-VPATH = @srcdir@
-srcdir = @srcdir@
-srccom = $(srcdir)/../common
-srcroot = $(srcdir)/../..
-srcsim = $(srcdir)/..
-
-include $(srcroot)/gdb/silent-rules.mk
-
-# Helper code from gnulib.
-GNULIB_PARENT_DIR = ../..
-include $(GNULIB_PARENT_DIR)/gnulib/Makefile.gnulib.inc
-
-# Settings from top-level configure.
-include ../arch-subdir.mk
-
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-
-datarootdir = @datarootdir@
-datadir = @datadir@
-mandir = @mandir@
-man1dir = $(mandir)/man1
-man2dir = $(mandir)/man2
-man3dir = $(mandir)/man3
-man4dir = $(mandir)/man4
-man5dir = $(mandir)/man5
-man6dir = $(mandir)/man6
-man7dir = $(mandir)/man7
-man8dir = $(mandir)/man8
-man9dir = $(mandir)/man9
-infodir = @infodir@
-includedir = @includedir@
-
-# This can be referenced by the gettext configuration code.
-top_builddir = ..
-
-SHELL = /bin/sh
-
-BISON = bison
-MAKEINFO = makeinfo
-
-INLINE_CFLAGS = $(SIM_INLINE)
-SMP_CFLAGS = @sim_ppc_smp@
-XOR_ENDIAN_CFLAGS = @sim_ppc_xor_endian@
-BITSIZE_CFLAGS = @sim_ppc_bitsize@
-TIMEBASE_CFLAGS = @sim_ppc_timebase@
-FLOAT_CFLAGS = @sim_ppc_float@
-MONITOR_CFLAGS = @sim_ppc_monitor@
-MODEL_CFLAGS = @sim_ppc_model@ @sim_ppc_default_model@ @sim_ppc_model_issue@
-SWITCH_CFLAGS = @sim_ppc_switch@
-CONFIG_CFLAGS = \
-  -DHAVE_CONFIG_H \
-  $(SMP_CFLAGS) \
-  $(XOR_ENDIAN_CFLAGS) \
-  $(BITSIZE_CFLAGS) \
-  $(TIMEBASE_CFLAGS) \
-  $(FLOAT_CFLAGS) \
-  $(MONITOR_CFLAGS) \
-  $(MODEL_CFLAGS) \
-  $(SWITCH_CFLAGS)
-SIM_FPU_CFLAGS = -DHAVE_COMMON_FPU -I../common -I${srcdir}/../common
-
-STD_CFLAGS	= $(CFLAGS) $(WERROR_CFLAGS) $(INLINE_CFLAGS) $(CONFIG_CFLAGS) $(WARN_CFLAGS) $(INCLUDES) $(INCGNU) $(SIM_FPU_CFLAGS)
-NOWARN_CFLAGS	= $(CFLAGS) $(INLINE_CFLAGS) $(CONFIG_CFLAGS) $(INCLUDES) $(SIM_FPU_CFLAGS)
-
-LIBS = $(COMMON_LIBS) @LIBS@ $(LIBGNU) $(LIBGNU_EXTRA_LIBS)
-
-.NOEXPORT:
-MAKEOVERRIDES=
-
-LIB_INCLUDES	= -I$(srcdir)/../../include
-BFD_INCLUDES	= -I../../bfd -I$(srcdir)/../../bfd
-
-INCLUDES	= -I. -I$(srcdir) $(LIB_INCLUDES) $(BFD_INCLUDES) -I../..
-
-LIBIBERTY_LIB	= ../../libiberty/libiberty.a
-BFD_LIB		= ../../bfd/libbfd.la
-
-all:
-
-.c.o:
-	$(ECHO_CC) $(CC) -c $(STD_CFLAGS) $<
-
-
-# Headers outside sim/ppc.
-ANSIDECL_H = $(srcroot)/include/ansidecl.h
-BFD_H = ../../bfd/bfd.h
-GDB_CALLBACK_H = $(srcroot)/include/sim/callback.h
-GDB_REMOTE_SIM_H = $(srcroot)/include/sim/sim.h
-GDB_SIM_PPC_H = $(srcroot)/include/sim/sim-ppc.h
-COMMON_SIM_BASE_H = $(srcroot)/sim/common/sim-base.h
-COMMON_SIM_BASICS_H = $(srcroot)/sim/common/sim-basics.h
-COMMON_SIM_FPU_H = $(srcroot)/sim/common/sim-fpu.h
-COMMON_SIM_INLINE_H = $(srcroot)/sim/common/sim-inline.h
-COMMON_SIM_SIGNAL_H = $(srcroot)/sim/common/sim-signal.h
-
-# Headers in sim/ppc.
-ALTIVEC_EXPRESSION_H = \
-	altivec_expression.h
-
-ALTIVEC_REGISTERS_H = \
-	altivec_registers.h
-
-BASICS_H = \
-	basics.h \
-	$(INLINE_H) \
-	$(SIM_CALLBACKS_H) \
-	$(DEBUG_H) \
-	$(WORDS_H) \
-	$(BITS_H) \
-	$(SIM_ENDIAN_H)
-
-BITS_H = \
-	bits.h \
-	bits.c
-
-CAP_H = \
-	cap.h \
-	$(BASICS_H)
-
-COREFILE_H = \
-	corefile.h
-
-COREFILE_N_H = \
-	corefile-n.h
-
-CPU_H = \
-	cpu.h \
-	$(BASICS_H) \
-	$(REGISTERS_H) \
-	$(DEVICE_H) \
-	$(COREFILE_H) \
-	$(VM_H) \
-	$(EVENTS_H) \
-	$(INTERRUPTS_H) \
-	$(PSIM_H) \
-	$(IDECODE_H) \
-	$(ITABLE_H) \
-	$(OS_EMUL_H) \
-	$(MON_H) \
-	$(MODEL_H) \
-	cpu.c
-
-DEBUG_H = \
-	debug.h
-
-DEVICE_H = \
-	device.h
-
-DEVICE_TABLE_H = \
-	device_table.h \
-	$(BASICS_H) \
-	$(DEVICE_H) \
-	$(TREE_H) \
-	$(HW_H)
-
-E500_EXPRESSION_H = \
-	e500_expression.h
-
-E500_REGISTERS_H = \
-	e500_registers.h
-
-EMUL_BUGAPI_H = \
-	emul_bugapi.h
-
-EMUL_CHIRP_H = \
-	emul_chirp.h
-
-EMUL_GENERIC_H = \
-	emul_generic.h \
-	$(CPU_H) \
-	$(IDECODE_H) \
-	$(OS_EMUL_H) \
-	$(TREE_H) \
-	$(BFD_H)
-
-EMUL_NETBSD_H = \
-	emul_netbsd.h
-
-EMUL_UNIX_H = \
-	emul_unix.h
-
-EVENTS_H = \
-	events.h
-
-FILTER_H = \
-	filter.h
-
-GEN_ICACHE_H = \
-	gen-icache.h
-
-GEN_IDECODE_H = \
-	gen-idecode.h
-
-GEN_ITABLE_H = \
-	gen-itable.h
-
-GEN_MODEL_H = \
-	gen-model.h
-
-GEN_SEMANTICS_H = \
-	gen-semantics.h
-
-GEN_SUPPORT_H = \
-	gen-support.h
-
-HW_CPU_H = \
-	hw_cpu.h
-
-HW_PHB_H = \
-	hw_phb.h
-
-IDECODE_BRANCH_H = \
-	idecode_branch.h
-
-IDECODE_EXPRESSION_H = \
-	idecode_expression.h \
-	$(ALTIVEC_EXPRESSION_H) \
-	$(E500_EXPRESSION_H)
-
-IDECODE_FIELDS_H = \
-	idecode_fields.h
-
-INLINE_H = \
-	inline.h
-
-INTERRUPTS_H = \
-	interrupts.h
-
-LD_CACHE_H = \
-	ld-cache.h
-
-LD_DECODE_H = \
-	ld-decode.h
-
-LD_INSN_H = \
-	ld-insn.h
-
-LF_H = \
-	lf.h
-
-MISC_H = \
-	misc.h
-
-MON_H = \
-	mon.h \
-	$(BASICS_H) \
-	$(ITABLE_H)
-
-OPTIONS_H = \
-	options.h
-
-OS_EMUL_H = \
-	os_emul.h
-
-PSIM_H = \
-	psim.h \
-	$(BASICS_H)
-
-REGISTERS_H = \
-	registers.h \
-	$(E500_REGISTERS_H) \
-	$(ALTIVEC_REGISTERS_H) \
-	$(SPREG_H)
-
-SIM_CALLBACKS_H = \
-	sim_callbacks.h
-
-SIM_ENDIAN_H = \
-	sim-endian.h \
-	sim-endian.c
-
-SIM_ENDIAN_N_H = \
-	sim-endian-n.h
-
-SIM_MAIN_H = \
-	sim-main.h \
-	$(COMMON_SIM_BASICS_H) \
-	$(COMMON_SIM_SIGNAL_H) \
-	$(COMMON_SIM_BASE_H)
-
-STD_CONFIG_H = \
-	std-config.h
-
-TABLE_H = \
-	table.h
-
-TREE_H = \
-	tree.h
-
-VM_H = \
-	vm.h
-
-VM_N_H = \
-	vm_n.h
-
-WORDS_H = \
-	words.h
-
-
-# Generated headers.
-DEFINES_H = \
-        defines.h
-
-HW_H = \
-        hw.h
-
-ICACHE_H = \
-        icache.h
-
-IDECODE_H = \
-        idecode.h \
-        $(IDECODE_EXPRESSION_H) \
-        $(IDECODE_FIELDS_H) \
-        $(IDECODE_BRANCH_H)
-
-ITABLE_H = \
-        itable.h
-
-MODEL_H = \
-        model.h
-
-PK_H = \
-        pk.h
-
-SEMANTICS_H = \
-        semantics.h
-
-SPREG_H = \
-        spreg.h
-
-SUPPORT_H = \
-        support.h \
-        support.c
-
-INLINE = \
-	inline.h \
-	inline.c
-
-LIB_INLINE_SRC = \
-	psim.c \
-	bits.c \
-	debug.c \
-	sim-endian.c \
-	sim-endian.h \
-	sim-endian-n.h \
-	vm.c \
-	vm_n.h \
-	corefile.c \
-	events.c \
-	os_emul.c \
-	registers.c \
-	cpu.c \
-	interrupts.c \
-	device.c \
-	tree.c \
-	device_table.c \
-	cap.c \
-	mon.c \
-	options.c
-
-LIB_SRC = \
-	$(PACKAGE_SRC) \
-	$(HW_SRC) \
-	$(LIB_INLINE_SRC)
-
-COMMON_OBJS_NAMES = \
-	callback.o \
-	target-newlib-errno.o \
-	target-newlib-open.o \
-	target-newlib-signal.o \
-	target-newlib-syscall.o \
-	version.o
-COMMON_OBJS = $(COMMON_OBJS_NAMES:%=../common/%)
-
-# NOTE: semantics, idecode and psim put last so smaller files are compiled
-#       first
-LIB_OBJ = \
-	debug.o \
-	bits.o \
-	sim-endian.o \
-	os_emul.o \
-	emul_generic.o \
-	emul_bugapi.o \
-	emul_chirp.o \
-	emul_netbsd.o \
-	emul_unix.o \
-	registers.o \
-	vm.o \
-	corefile.o \
-	model.o \
-	spreg.o \
-	cpu.o \
-	interrupts.o \
-	events.o \
-	cap.o \
-	device.o \
-	tree.o \
-	device_table.o \
-	itable.o \
-	mon.o \
-	icache.o \
-	semantics.o \
-	idecode.o \
-	support.o \
-	sim-fpu.o \
-	psim.o \
-	$(COMMON_OBJS) \
-	$(PACKAGE_OBJ) \
-	$(HW_OBJ) \
-	options.o
-
-
-GDB_OBJ = gdb-sim.o sim_calls.o
-
-HW_SRC = @sim_ppc_hw_src@
-HW_OBJ = @sim_ppc_hw_obj@
-
-PACKAGE_SRC = pk_disklabel.c
-PACKAGE_OBJ = $(PACKAGE_SRC:.c=.o)
-
-
-psim.o: psim.c $(CPU_H) $(IDECODE_H) $(OPTIONS_H) $(TREE_H) $(BFD_H)
-
-bits.o: bits.c $(BASICS_H)
-
-debug.o: debug.c $(BASICS_H)
-
-sim-endian.o: sim-endian.c $(BASICS_H) $(SIM_ENDIAN_N_H)
-
-os_emul.o: os_emul.c $(CPU_H) $(IDECODE_H) $(OS_EMUL_H) $(EMUL_GENERIC_H) $(EMUL_NETBSD_H) $(EMUL_UNIX_H) $(EMUL_CHIRP_H) $(EMUL_BUGAPI_H)
-emul_generic.o: emul_generic.c $(EMUL_GENERIC_H)
-
-emul_bugapi.o: emul_bugapi.c $(EMUL_GENERIC_H) $(EMUL_BUGAPI_H)
-emul_chirp.o: emul_chirp.c $(EMUL_GENERIC_H) $(EMUL_CHIRP_H)
-emul_netbsd.o: emul_netbsd.c $(EMUL_GENERIC_H) $(EMUL_NETBSD_H)
-emul_unix.o: emul_unix.c $(EMUL_GENERIC_H) $(EMUL_UNIX_H)
-
-registers.o: registers.c $(BASICS_H) $(REGISTERS_H)
-
-cpu.o: cpu.c $(CPU_H) $(IDECODE_H)
-
-interrupts.o: interrupts.c $(CPU_H) $(IDECODE_H) $(OS_EMUL_H)
-
-# Given that inlines are turned on now, rebuild idecode whenever
-# anything changes.
-idecode.o: idecode.c $(CPU_H) $(IDECODE_H) $(SEMANTICS_H) $(LIB_INLINE_SRC)
-
-# double.o: double.c dp-bit.c
-
-vm.o: vm.c $(BASICS_H) $(REGISTERS_H) $(DEVICE_H) $(COREFILE_H) $(VM_H) $(INTERRUPTS_H) $(MON_H) $(CPU_H) $(VM_N_H)
-
-corefile.o: corefile.c $(BASICS_H) $(DEVICE_TABLE_H) $(COREFILE_H) $(COREFILE_N_H)
-
-model.o: model.c $(CPU_H) $(MON_H)
-
-events.o: events.c $(BASICS_H) $(EVENTS_H)
-
-sim_calls.o: sim_calls.c $(PSIM_H) $(OPTIONS_H) $(DEFS_H) $(BFD_H) $(GDB_CALLBACK_H) $(GDB_REMOTE_SIM_H)
-
-gdb-sim.o: gdb-sim.c $(PSIM_H)  $(OPTIONS_H) $(REGISTERS_H) $(GDB_REMOTE_SIM_H) $(GDB_SIM_PPC_H) $(SIM_CALLBACK_H)
-
-spreg.o: spreg.c $(BASICS_H) $(SPREG_H)
-
-device.o: device.c $(DEVICE_TABLE_H) $(CAP_H) $(EVENTS_H) $(PSIM_H)
-
-tree.o: tree.c $(BASICS_H) $(DEVICE_H) $(TREE_H)
-
-device_table.o: device_table.c $(DEVICE_TABLE_H) hw.c
-
-cap.o: cap.c $(CAP_H)
-
-semantics.o: semantics.c $(CPU_H) $(IDECODE_H) $(SEMANTICS_H) $(COMMON_SIM_INLINE_H) $(COMMON_SIM_FPU_H) $(SUPPORT_H)
-
-icache.o: icache.c $(CPU_H) $(IDECODE_H) $(SEMANTICS_H) $(ICACHE_H) $(COMMON_SIM_INLINE_H) $(COMMON_SIM_FPU_H) $(SUPPORT_H)
-
-support.o: support.c $(CPU_H) $(IDECODE_H) $(COMMON_SIM_INLINE_H) $(COMMON_SIM_FPU_H) $(SUPPORT_H)
-
-itable.o: itable.c $(ITABLE_H)
-
-mon.o: mon.c $(BASICS_H) $(CPU_H) $(MON_H)
-
-sim-fpu.o: $(srcdir)/../common/sim-fpu.c
-	$(ECHO_CC) $(CC) -c $(STD_CFLAGS) -DHAVE_CONFIG_H $(srcdir)/../common/sim-fpu.c 
-
-# Rebuild options whenever something changes so the date/time is up to date.
-options.o: options.c $(CPU_H) $(OPTIONS_H) $(DEFINES_H) $(BASICS_H) $(IDECODE_H) $(INLINE) $(LIB_SRC) ../config.status Makefile
-	$(ECHO_CC) $(CC) -c $(STD_CFLAGS) '-DOPCODE_RULES="@sim_ppc_opcode@"' '-DIGEN_FLAGS="$(ppc_IGEN_FLAGS)"' $(srcdir)/options.c
-
-hw_cpu.o: hw_cpu.c $(DEVICE_TABLE_H) $(HW_CPU_H) $(INTERRUPTS_H) $(CPU_H)
-hw_com.o: hw_com.c $(DEVICE_TABLE_H)
-hw_core.o: hw_core.c $(DEVICE_TABLE_H) $(COREFILE_H)
-hw_disk.o: hw_disk.c $(DEVICE_TABLE_H) $(PK_H)
-hw_eeprom.o: hw_eeprom.c $(DEVICE_TABLE_H)
-hw_glue.o: hw_glue.c $(DEVICE_TABLE_H)
-hw_htab.o: hw_htab.c $(DEVICE_TABLE_H) $(BFD_H)
-hw_ide.o: hw_ide.c $(DEVICE_TABLE_H)
-hw_init.o: hw_init.c $(DEVICE_TABLE_H) $(BFD_H) $(PSIM_H)
-hw_iobus.o: hw_iobus.c $(DEVICE_TABLE_H)
-hw_memory.o: hw_memory.c $(DEVICE_TABLE_H)
-hw_nvram.o: hw_nvram.c $(DEVICE_TABLE_H)
-hw_opic.o: hw_opic.c $(DEVICE_TABLE_H)
-hw_pal.o: hw_pal.c $(DEVICE_TABLE_H) $(CPU_H)
-hw_phb.o: hw_phb.c $(DEVICE_TABLE_H) $(HW_PHB_H) $(COREFILE_H)
-hw_register.o: hw_register.c $(DEVICE_TABLE_H) $(PSIM_H)
-hw_sem.o: hw_sem.c $(DEVICE_TABLE_H) $(PSIM_H)
-hw_shm.o: hw_shm.c $(DEVICE_TABLE_H) $(PSIM_H)
-hw_trace.o: hw_trace.c $(DEVICE_TABLE_H)
-hw_vm.o: hw_vm.c $(DEVICE_TABLE_H) $(CPU_H)
-# ignore this line, it stops make from getting confused
-
-
-
-pk_disklabel.o: pk_disklabel.c $(DEVICE_TABLE_H) $(PK_H)
-# ignore this line, it stops make from getting confused
-
-
-
-tags etags: TAGS
-
-TAGS:
-	etags $(srcdir)/*.h $(srcdir)/*.c
-
-clean mostlyclean:
-	rm -f tmp-* *.[oasi] core
-
-distclean realclean: clean
-	rm -f TAGS Makefile
-
-maintainer-clean: distclean
-	rm -f *~ *.log core *.core
-
-Makefile: Makefile.in ../config.status
-	cd .. && $(SHELL) ./config.status ppc/Makefile
-
-../config.status: ../configure
-	cd .. && $(SHELL) ./config.status --recheck
-
-check:
-
-html:
-clean-html:
-install-html:
-
-info:
-clean-info:
-install-info:
-
-pdf:
-clean-pdf:
-install-pdf:
-
-install:
-installdirs:
-uninstall:
diff --git a/sim/ppc/local.mk b/sim/ppc/local.mk
index 90f9489e4644..01cc1251a89b 100644
--- a/sim/ppc/local.mk
+++ b/sim/ppc/local.mk
@@ -25,6 +25,7 @@ AM_CPPFLAGS_%C% = \
 	$(sim_ppc_monitor) \
 	$(sim_ppc_model) $(sim_ppc_default_model) $(sim_ppc_model_issue) \
 	$(sim_ppc_switch)
+AM_CPPFLAGS_%C%_options.o = '-DOPCODE_RULES="$(IGEN_OPCODE_RULES)"' '-DIGEN_FLAGS="$(ppc_IGEN_FLAGS)"'
 
 %C%_libsim_a_SOURCES = \
 	$(common_libcommon_a_SOURCES)
@@ -79,11 +80,6 @@ noinst_LIBRARIES += %D%/libsim.a
 	%D%/libsim.a \
 	$(SIM_COMMON_LIBS)
 
-## This makes sure common parts are available before building the arch-subdirs
-## which will refer to these.
-%D%/%.o: %D%/%.c | common/libcommon.a %D%/defines.h %D%/stamp-igen %D%/hw.c %D%/hw.h
-	$(AM_V_at)$(MAKE) $(AM_MAKEFLAGS) -C $(@D) $(@F)
-
 noinst_PROGRAMS += %D%/run
 
 %D%/defines.h: %D%/stamp-defines ; @true
@@ -92,6 +88,7 @@ noinst_PROGRAMS += %D%/run
 	$(AM_V_at)$(SHELL) $(srcroot)/move-if-change %D%/defines.hin %D%/defines.h
 	$(AM_V_at)touch $@
 
+BUILT_SOURCES += %D%/defines.h
 MOSTLYCLEANFILES += %D%/defines.h %D%/stamp-defines
 
 %D%/spreg.c: @MAINT@ %D%/ppc-spr-table %D%/spreg-gen.py %D%/$(am__dirstamp)
