diff --git a/CMakeLists.txt b/CMakeLists.txt
index fc5759c1ef..6bcbfe7065 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -47,6 +47,7 @@ else()
set(RETRO68_ROOT ${CMAKE_INSTALL_PREFIX})
configure_file(cmake/intree.toolchain.cmake.in cmake/intree.toolchain.cmake @ONLY)
+configure_file(cmake/intreeppc.toolchain.cmake.in cmake/intreeppc.toolchain.cmake @ONLY)
add_subdirectory(ResourceFiles)
add_subdirectory(MakeAPPL)
diff --git a/build-toolchain.sh b/build-toolchain.sh
index 22950d0b2e..f6f4682b52 100644
--- a/build-toolchain.sh
+++ b/build-toolchain.sh
@@ -21,7 +21,7 @@ set -e
SRC=$(cd `dirname $0` && pwd -P)
PREFIX=`pwd -P`/toolchain/
BINUTILS=`pwd -P`/binutils-build
-
+if false; then
# Remove old install tree
rm -rf toolchain
mkdir -p toolchain
@@ -44,6 +44,23 @@ make -j8
make install
cd ..
+unset CFLAGS
+# Build binutils for PPC
+mkdir -p binutils-build-ppc
+cd binutils-build-ppc
+$SRC/binutils/configure --target=powerpc-apple-macos --prefix=$PREFIX --disable-doc
+make -j8
+make install
+cd ..
+
+# Build gcc for PPC
+mkdir -p gcc-build-ppc
+cd gcc-build-ppc
+$SRC/gcc/configure --target=powerpc-apple-macos --prefix=$PREFIX --enable-languages=c,c++ --disable-libssp MAKEINFO=missing
+make -j8
+make install
+cd ..
+
# Install elf.h (for elf2flt)
mkdir -p $PREFIX/include
cp $SRC/elf.h $PREFIX/include/
@@ -68,11 +85,13 @@ make
make install
cd ..
+fi
# Install Universal Interfaces
-sh "$SRC/prepare-headers.sh" "$SRC/CIncludes" toolchain/m68k-apple-macos/include
-
-mkdir -p toolchain/m68k-apple-macos/RIncludes
-sh "$SRC/prepare-rincludes.sh" "$SRC/RIncludes" toolchain/m68k-apple-macos/RIncludes
+for arch in m68k powerpc; do
+ sh "$SRC/prepare-headers.sh" "$SRC/CIncludes" toolchain/${arch}-apple-macos/include
+ mkdir -p toolchain/${arch}-apple-macos/RIncludes
+ sh "$SRC/prepare-rincludes.sh" "$SRC/RIncludes" toolchain/${arch}-apple-macos/RIncludes
+done
# Build host-based components
mkdir -p build-host
@@ -82,14 +101,23 @@ cd ..
make -C build-host install
# create an empty libretrocrt.a so that cmake's compiler test doesn't fail
-$PREFIX/bin/m68k-apple-macos-ar cqs $PREFIX/m68k-apple-macos/lib/libretrocrt.a
+for arch in m68k powerpc; do
+ $PREFIX/bin/${arch}-apple-macos-ar cqs $PREFIX/${arch}-apple-macos/lib/libretrocrt.a
+done
# the real libretrocrt.a is built and installed by `make -C build-target install` later
-# Build target-based components
+# Build target-based components for 68K
mkdir -p build-target
cd build-target
cmake ${SRC} -DCMAKE_TOOLCHAIN_FILE=../build-host/cmake/intree.toolchain.cmake \
- -DIN_RETRO68_TREE=True \
-DCMAKE_BUILD_TYPE=Release
cd ..
make -C build-target install
+
+# Build target-based components for PPC
+mkdir -p build-target-ppc
+cd build-target-ppc
+cmake ${SRC} -DCMAKE_TOOLCHAIN_FILE=../build-host/cmake/intreeppc.toolchain.cmake \
+ -DCMAKE_BUILD_TYPE=Release
+cd ..
+make -C build-target-ppc install
diff --git a/cmake/Platform/RetroPPC.cmake b/cmake/Platform/RetroPPC.cmake
new file mode 100644
index 0000000000..da853da4fc
--- /dev/null
+++ b/cmake/Platform/RetroPPC.cmake
@@ -0,0 +1,2 @@
+# Nothing platform-specific to do for now.
+# All the basic setup is in retroppc.toolchain.cmake
diff --git a/cmake/intreeppc.toolchain.cmake.in b/cmake/intreeppc.toolchain.cmake.in
new file mode 100644
index 0000000000..a04548f575
--- /dev/null
+++ b/cmake/intreeppc.toolchain.cmake.in
@@ -0,0 +1,32 @@
+# Copyright 2012 Wolfgang Thaller.
+#
+# This file is part of Retro68.
+#
+# Retro68 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.
+#
+# Retro68 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 Retro68. If not, see .
+
+set( CMAKE_SYSTEM_NAME RetroPPC )
+set( CMAKE_SYSTEM_VERSION 1)
+
+set( RETRO68_ROOT "@RETRO68_ROOT@" CACHE PATH "path to root of Retro68 Toolchain" )
+set( CMAKE_INSTALL_PREFIX "${RETRO68_ROOT}/powerpc-apple-macos/" CACHE PATH "installation prefix" )
+
+set( MAKE_PEF "@CMAKE_BINARY_DIR@/PEFTools/MakePEF" )
+set( MAKE_IMPORT "@CMAKE_BINARY_DIR@/PEFTools/MakeImport" )
+set( REZ "@CMAKE_BINARY_DIR@/Rez/Rez" )
+set( REZ_INCLUDE_PATH "${CMAKE_INSTALL_PREFIX}/RIncludes" )
+
+set( CMAKE_C_COMPILER "${RETRO68_ROOT}/bin/powerpc-apple-macos-gcc" )
+set( CMAKE_CXX_COMPILER "${RETRO68_ROOT}/bin/powerpc-apple-macos-g++" )
+
+list( APPEND CMAKE_MODULE_PATH "@CMAKE_SOURCE_DIR@/cmake" )
diff --git a/gcc/gcc/config/rs6000/macos.h b/gcc/gcc/config/rs6000/macos.h
index 89c3749905..e1ce2c87f9 100644
--- a/gcc/gcc/config/rs6000/macos.h
+++ b/gcc/gcc/config/rs6000/macos.h
@@ -145,10 +145,12 @@
builtin_define ("__ppc__"); \
builtin_define ("__POWERPC__"); \
builtin_define ("__NATURAL_ALIGNMENT__"); \
- builtin_define ("__APPLE__"); \
builtin_assert ("system=macos"); \
builtin_assert ("cpu=powerpc"); \
builtin_assert ("machine=powerpc"); \
+ builtin_assert ("cpu=m68k"); \
+ builtin_assert ("machine=m68k"); \
+ builtin_define("pascal="); \
builtin_define("__IEEE_BIG_ENDIAN"); \
} \
while (0)
diff --git a/prepare-headers.sh b/prepare-headers.sh
index 6f455acade..b802389a7e 100644
--- a/prepare-headers.sh
+++ b/prepare-headers.sh
@@ -15,13 +15,20 @@ cat > $OUT/ConditionalMacros.h <