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 <