mirror of
https://github.com/autc04/Retro68.git
synced 2024-09-28 18:56:06 +00:00
Merge pull request #93 from autc04/multiversal
Automatically use multiversal interfaces; add azure build
This commit is contained in:
commit
5c2a845f60
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[submodule "multiversal"]
|
||||||
|
path = multiversal
|
||||||
|
url = https://github.com/autc04/multiversal.git
|
33
README.md
33
README.md
@ -19,12 +19,13 @@ Installing/Building
|
|||||||
- CMake 3.9 or later
|
- CMake 3.9 or later
|
||||||
- GCC dependencies: GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+
|
- GCC dependencies: GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+
|
||||||
- bison version 3.0.2 or later
|
- bison version 3.0.2 or later
|
||||||
- Apple Universal Interfaces (version 3.x; version 3.4 is tested)
|
- ruby version 2.1 or later
|
||||||
|
- Recommended: Apple Universal Interfaces (version 3.x; version 3.4 is tested)
|
||||||
- An ancient Mac and/or an emulator.
|
- An ancient Mac and/or an emulator.
|
||||||
|
|
||||||
For Ubuntu Linux, the following should help a bit:
|
For Ubuntu Linux, the following should help a bit:
|
||||||
|
|
||||||
sudo apt-get install cmake libgmp-dev libmpfr-dev libmpc-dev libboost-all-dev bison texinfo
|
sudo apt-get install cmake libgmp-dev libmpfr-dev libmpc-dev libboost-all-dev bison texinfo ruby
|
||||||
|
|
||||||
On a Mac, get the homebrew package manager and:
|
On a Mac, get the homebrew package manager and:
|
||||||
|
|
||||||
@ -37,14 +38,16 @@ In that case, get the tigerbrew package manager and
|
|||||||
brew install gcc cmake gmp mpfr libmpc bison
|
brew install gcc cmake gmp mpfr libmpc bison
|
||||||
brew install boost --c++11
|
brew install boost --c++11
|
||||||
|
|
||||||
### Apple Universal Interfaces
|
### Apple Universal Interfaces vs. Multiversal Interfaces
|
||||||
|
|
||||||
Before you can build Retro68, you need to find a copy of Apple's Universal Interfaces
|
To compile code for the Mac, you need header files and libraries describing
|
||||||
and put it inside the InterfacesAndLibraries directory in the source tree.
|
the APIs. There are two choices: Apple's Universal Interfaces, or the
|
||||||
Version 3.4 has received the most testing, but any 3.x version could theoretically
|
brand-new open source reimplementation, the Multiversal Interfaces.
|
||||||
work.
|
|
||||||
The exact directory layout inside the InterfacesAndLibraries directory does
|
The Multiversal Interfaces are included with Retro68 out of the box, and they
|
||||||
not matter. The resource forks of the files are not required.
|
are free software. However, they are incomplete and may still contain serious
|
||||||
|
bugs. Missing things include Carbon, MacTCP, OpenTransport, Navigation Services,
|
||||||
|
and basically everything introduced after System 7.0.
|
||||||
|
|
||||||
The Universal Interfaces used to be a free download from Apple. However,
|
The Universal Interfaces used to be a free download from Apple. However,
|
||||||
they have taken the site off-line and the license agreement does not allow
|
they have taken the site off-line and the license agreement does not allow
|
||||||
@ -52,17 +55,23 @@ redistribution, which is why it's not included in this repository.
|
|||||||
The concept of fair use might cover keeping it available for reasons of historical
|
The concept of fair use might cover keeping it available for reasons of historical
|
||||||
interest, or it might not. I am not a lawyer.
|
interest, or it might not. I am not a lawyer.
|
||||||
|
|
||||||
|
If you find a copy of Apple's Universal Interfaces, you can put it
|
||||||
|
inside the InterfacesAndLibraries directory in the source tree, and
|
||||||
|
Version 3.4 has received the most testing, but any 3.x version could theoretically
|
||||||
|
work. The exact directory layout inside the InterfacesAndLibraries directory does
|
||||||
|
not matter. It will be picked up automatically when Retro68 is built.
|
||||||
|
|
||||||
The Universal Interfaces were also included with Apple's free-to-download
|
The Universal Interfaces were also included with Apple's free-to-download
|
||||||
Macintosh Programmer's Workshop (MPW; redistribution is not officially allowed, either)
|
Macintosh Programmer's Workshop (MPW; redistribution is not officially allowed, either)
|
||||||
and with Metrowerks CodeWarrior.
|
and with Metrowerks CodeWarrior.
|
||||||
|
|
||||||
One of the most easily found downloads is the MPW 3.5 Golden Master release,
|
One of the most easily found downloads is the MPW 3.5 Golden Master release,
|
||||||
usually in a file named *mpw-gm.img_.bin*. At the time of this writing, this can be
|
usually in a file named *MPW-GM.img.bin* or *mpw-gm.img_.bin*. At the time of
|
||||||
found at:
|
this writing, this can be found at:
|
||||||
|
|
||||||
http://macintoshgarden.org/apps/macintosh-programmers-workshop
|
http://macintoshgarden.org/apps/macintosh-programmers-workshop
|
||||||
https://www.macintoshrepository.org/1360-macintosh-programmer-s-workshop-mpw-3-0-to-3-5
|
https://www.macintoshrepository.org/1360-macintosh-programmer-s-workshop-mpw-3-0-to-3-5
|
||||||
|
https://staticky.com/mirrors/ftp.apple.com/developer/Tool_Chest/Core_Mac_OS_Tools/MPW_etc./MPW-GM_Images/MPW-GM.img.bin
|
||||||
|
|
||||||
You will need a Mac or a Mac emulator (with DiscCopy) to read that file.
|
You will need a Mac or a Mac emulator (with DiscCopy) to read that file.
|
||||||
|
|
||||||
|
45
azure-pipelines.yml
Normal file
45
azure-pipelines.yml
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
trigger:
|
||||||
|
- master
|
||||||
|
jobs:
|
||||||
|
|
||||||
|
- job: Linux
|
||||||
|
pool:
|
||||||
|
vmImage: 'ubuntu-16.04'
|
||||||
|
container:
|
||||||
|
image: 'ubuntu:18.04'
|
||||||
|
options: "--name ci-container -v /usr/bin/docker:/tmp/docker:ro"
|
||||||
|
steps:
|
||||||
|
- script: |
|
||||||
|
/tmp/docker exec -t -u 0 ci-container \
|
||||||
|
sh -c "apt-get update && DEBIAN_FRONTEND=noninteractive apt-get -o Dpkg::Options::="--force-confold" -y install sudo"
|
||||||
|
displayName: set up sudo
|
||||||
|
- checkout: self
|
||||||
|
submodules: true
|
||||||
|
- script: |
|
||||||
|
whoami
|
||||||
|
pwd
|
||||||
|
sudo apt-get install -y \
|
||||||
|
cmake libgmp-dev libmpfr-dev libmpc-dev \
|
||||||
|
libboost-all-dev bison texinfo \
|
||||||
|
ruby
|
||||||
|
displayName: 'install prerequisites'
|
||||||
|
- script: |
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
../build-toolchain.bash --no-carbon
|
||||||
|
displayName: 'build'
|
||||||
|
|
||||||
|
- job: macOS
|
||||||
|
pool:
|
||||||
|
vmImage: 'macOS-10.14'
|
||||||
|
steps:
|
||||||
|
- checkout: self
|
||||||
|
submodules: true
|
||||||
|
- script: |
|
||||||
|
brew install boost cmake gmp mpfr libmpc bison
|
||||||
|
displayName: 'brew prerequisites'
|
||||||
|
- script: |
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
../build-toolchain.bash --no-carbon
|
||||||
|
displayName: build
|
@ -48,6 +48,8 @@ function usage()
|
|||||||
echo " --host-cxx-compiler specify C++ compiler (needed on Mac OS X 10.4)"
|
echo " --host-cxx-compiler specify C++ compiler (needed on Mac OS X 10.4)"
|
||||||
echo " --host-c-compiler specify C compiler (needed on Mac OS X 10.4)"
|
echo " --host-c-compiler specify C compiler (needed on Mac OS X 10.4)"
|
||||||
echo " --ninja use ninja for cmake builds"
|
echo " --ninja use ninja for cmake builds"
|
||||||
|
echo " --universal use Apple's universal interfaces (default: autodetect)"
|
||||||
|
echo " --multiversal use the open-source multiversal interfaces (default: autodetect)"
|
||||||
echo " --help show this help message"
|
echo " --help show this help message"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,6 +85,12 @@ for ARG in $*; do
|
|||||||
--ninja)
|
--ninja)
|
||||||
CMAKE_GENERATOR=-GNinja
|
CMAKE_GENERATOR=-GNinja
|
||||||
;;
|
;;
|
||||||
|
--universal)
|
||||||
|
INTERFACES_KIND=universal
|
||||||
|
;;
|
||||||
|
--multiversal)
|
||||||
|
INTERFACES_KIND=multiversal
|
||||||
|
;;
|
||||||
--help)
|
--help)
|
||||||
usage
|
usage
|
||||||
exit 0
|
exit 0
|
||||||
@ -180,6 +188,12 @@ INTERFACES_DIR="$SRC/InterfacesAndLibraries"
|
|||||||
. "$SRC/interfaces-and-libraries.sh"
|
. "$SRC/interfaces-and-libraries.sh"
|
||||||
|
|
||||||
locateAndCheckInterfacesAndLibraries
|
locateAndCheckInterfacesAndLibraries
|
||||||
|
if [ ${INTERFACES_KIND} = multiversal ] && [ ${BUILD_CARBON} != false ]; then
|
||||||
|
echo
|
||||||
|
echo "Unfortunately, the Multiversal Interfaces don't yet support the Carbon API."
|
||||||
|
echo "Use either --universal or --no-carbon."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
##################### Third-Party components: binutils, gcc, hfsutils
|
##################### Third-Party components: binutils, gcc, hfsutils
|
||||||
|
|
||||||
@ -332,7 +346,11 @@ export PATH=$PREFIX/bin:$PATH
|
|||||||
|
|
||||||
##################### Set up Interfaces & Libraries
|
##################### Set up Interfaces & Libraries
|
||||||
|
|
||||||
|
(cd "${SRC}/multiversal" && ruby make-multiverse.rb -G CIncludes -o "${PREFIX}/multiversal")
|
||||||
|
mkdir -p "${PREFIX}/multiversal/libppc"
|
||||||
|
cp "${SRC}/ImportLibraries"/*.a "${PREFIX}/multiversal/libppc/"
|
||||||
setUpInterfacesAndLibraries
|
setUpInterfacesAndLibraries
|
||||||
|
linkInterfacesAndLibraries ${INTERFACES_KIND}
|
||||||
|
|
||||||
##################### Build target libraries and samples
|
##################### Build target libraries and samples
|
||||||
|
|
||||||
@ -383,7 +401,21 @@ if [ $BUILD_CARBON != false ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
echo
|
echo
|
||||||
|
echo "==============================================================================="
|
||||||
echo "Done building Retro68."
|
echo "Done building Retro68."
|
||||||
|
echo "The toolchain has been installed to: ${PREFIX}"
|
||||||
|
if [ `which Rez` != $PREFIX/bin/Rez ]; then
|
||||||
|
echo "you might want to add ${PREFIX}/bin to your PATH."
|
||||||
|
fi
|
||||||
|
case "${INTERFACES_KIND}" in
|
||||||
|
universal)
|
||||||
|
echo "Using Apple's Universal Interfaces."
|
||||||
|
;;
|
||||||
|
multiversal)
|
||||||
|
echo "Using the open-source Multiversal Interfaces."
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
if [ $BUILD_68K != false ]; then
|
if [ $BUILD_68K != false ]; then
|
||||||
echo "You will find 68K sample appliations in build-target/Samples/."
|
echo "You will find 68K sample appliations in build-target/Samples/."
|
||||||
fi
|
fi
|
||||||
|
@ -36,9 +36,23 @@ function locateInterfaceThing()
|
|||||||
|
|
||||||
function explainInterfaces()
|
function explainInterfaces()
|
||||||
{
|
{
|
||||||
|
if [ "$INTERFACES_KIND" = "multiversal" ]; then
|
||||||
|
echo "Apple's Universal Interfaces & Libraries will not be installed."
|
||||||
|
echo "Continuing with the open-source Multiversal Interfaces."
|
||||||
|
echo
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
echo "==============================================================================="
|
||||||
|
if [ -z "$INTERFACES_KIND" ]; then
|
||||||
|
echo "If you want to use Apple's Universal Interfaces & Libraries "
|
||||||
|
echo "rather than the open-source Multiversal Interfaces, get a copy of"
|
||||||
|
echo "version 3.x, and place it in the InterfacesAndLibraries directory inside"
|
||||||
|
echo "the Retro68 source directory."
|
||||||
|
else
|
||||||
echo "Please get a copy of Apple's Universal Interfaces & Libraries, "
|
echo "Please get a copy of Apple's Universal Interfaces & Libraries, "
|
||||||
echo "version 3.x, and place it in the InterfacesAndLibraries directory inside"
|
echo "version 3.x, and place it in the InterfacesAndLibraries directory inside"
|
||||||
echo "the Retro68 source directory."
|
echo "the Retro68 source directory."
|
||||||
|
fi
|
||||||
echo
|
echo
|
||||||
echo "The exact directory layout does not matter, but there has to be"
|
echo "The exact directory layout does not matter, but there has to be"
|
||||||
echo " - a directory with C header files (usually \"CIncludes\")"
|
echo " - a directory with C header files (usually \"CIncludes\")"
|
||||||
@ -49,7 +63,17 @@ function explainInterfaces()
|
|||||||
echo
|
echo
|
||||||
echo "The Interfaces&Libraries folder from Apple's last MPW release (MPW 3.5 "
|
echo "The Interfaces&Libraries folder from Apple's last MPW release (MPW 3.5 "
|
||||||
echo "aka MPW GM 'Golden Master') is known to work."
|
echo "aka MPW GM 'Golden Master') is known to work."
|
||||||
|
|
||||||
|
if [ -z "$INTERFACES_KIND" ]; then
|
||||||
|
INTERFACES_KIND=multiversal
|
||||||
|
echo
|
||||||
|
echo "Continuing with the open-source Multiversal Interfaces."
|
||||||
|
echo "==============================================================================="
|
||||||
|
echo
|
||||||
|
else
|
||||||
|
echo "==============================================================================="
|
||||||
exit 1
|
exit 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function locateAndCheckInterfacesAndLibraries()
|
function locateAndCheckInterfacesAndLibraries()
|
||||||
@ -59,17 +83,19 @@ function locateAndCheckInterfacesAndLibraries()
|
|||||||
if locateInterfaceThing CONDITIONALMACROS_H ConditionalMacros.h; then
|
if locateInterfaceThing CONDITIONALMACROS_H ConditionalMacros.h; then
|
||||||
CINCLUDES=`dirname "$CONDITIONALMACROS_H"`
|
CINCLUDES=`dirname "$CONDITIONALMACROS_H"`
|
||||||
else
|
else
|
||||||
echo "Could not find ConditionalMacros.h anywhere inside InterfaceAndLibraries/"
|
echo "Could not find ConditionalMacros.h anywhere inside $INTERFACES_DIR"
|
||||||
echo
|
echo
|
||||||
explainInterfaces
|
explainInterfaces
|
||||||
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if locateInterfaceThing CONDITIONALMACROS_R ConditionalMacros.r; then
|
if locateInterfaceThing CONDITIONALMACROS_R ConditionalMacros.r; then
|
||||||
RINCLUDES=`dirname "$CONDITIONALMACROS_R"`
|
RINCLUDES=`dirname "$CONDITIONALMACROS_R"`
|
||||||
else
|
else
|
||||||
echo "Could not find ConditionalMacros.r anywhere inside InterfaceAndLibraries/"
|
echo "Could not find ConditionalMacros.r anywhere inside $INTERFACES_DIR"
|
||||||
echo
|
echo
|
||||||
explainInterfaces
|
explainInterfaces
|
||||||
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $BUILD_68K != false ]; then
|
if [ $BUILD_68K != false ]; then
|
||||||
@ -79,10 +105,11 @@ function locateAndCheckInterfacesAndLibraries()
|
|||||||
elif locateInterfaceThing INTERFACELIB_68K libInterface.a; then
|
elif locateInterfaceThing INTERFACELIB_68K libInterface.a; then
|
||||||
M68KLIBRARIES=`dirname "$INTERFACELIB_68K"`
|
M68KLIBRARIES=`dirname "$INTERFACELIB_68K"`
|
||||||
else
|
else
|
||||||
echo "Could not find Interface.o anywhere inside InterfaceAndLibraries/"
|
echo "Could not find Interface.o anywhere inside $INTERFACES_DIR"
|
||||||
echo "(This file is required for 68K support only)"
|
echo "(This file is required for 68K support only)"
|
||||||
echo
|
echo
|
||||||
explainInterfaces
|
explainInterfaces
|
||||||
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
@ -99,10 +126,9 @@ function locateAndCheckInterfacesAndLibraries()
|
|||||||
if locateInterfaceThing OPENTRANSPORTAPPPPC OpenTransportAppPPC.o; then
|
if locateInterfaceThing OPENTRANSPORTAPPPPC OpenTransportAppPPC.o; then
|
||||||
PPCLIBRARIES=`dirname "$OPENTRANSPORTAPPPPC"`
|
PPCLIBRARIES=`dirname "$OPENTRANSPORTAPPPPC"`
|
||||||
else
|
else
|
||||||
echo "Could not find OpenTransportAppPPC.o anywhere inside InterfaceAndLibraries/"
|
echo "Could not find OpenTransportAppPPC.o anywhere inside $INTERFACES_DIR"
|
||||||
echo "(This file is required for OpenTransport on PPC only)"
|
echo "(This file is required for OpenTransport on PPC only)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $BUILD_CARBON != false ]; then
|
if [ $BUILD_CARBON != false ]; then
|
||||||
@ -113,12 +139,14 @@ function locateAndCheckInterfacesAndLibraries()
|
|||||||
echo "This is confusing."
|
echo "This is confusing."
|
||||||
echo
|
echo
|
||||||
explainInterfaces
|
explainInterfaces
|
||||||
|
return
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "Could not find Carbon.h anywhere inside InterfaceAndLibraries/"
|
echo "Could not find Carbon.h anywhere inside $INTERFACES_DIR"
|
||||||
echo "(This file is required for Carbon support only)"
|
echo "(This file is required for Carbon support only)"
|
||||||
echo
|
echo
|
||||||
explainInterfaces
|
explainInterfaces
|
||||||
|
return
|
||||||
fi
|
fi
|
||||||
if locateInterfaceThing CARBONLIB CarbonLib; then
|
if locateInterfaceThing CARBONLIB CarbonLib; then
|
||||||
carbondir=`dirname "$CARBONLIB"`
|
carbondir=`dirname "$CARBONLIB"`
|
||||||
@ -127,96 +155,120 @@ function locateAndCheckInterfacesAndLibraries()
|
|||||||
echo "This is confusing."
|
echo "This is confusing."
|
||||||
echo
|
echo
|
||||||
explainInterfaces
|
explainInterfaces
|
||||||
|
return
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "Could not find CarbonLib anywhere inside InterfaceAndLibraries/"
|
echo "Could not find CarbonLib anywhere inside $INTERFACES_DIR"
|
||||||
echo "(This file is required for Carbon support only)"
|
echo "(This file is required for Carbon support only)"
|
||||||
echo
|
echo
|
||||||
explainInterfaces
|
explainInterfaces
|
||||||
|
return
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if [ -z "$INTERFACES_KIND" ]; then
|
||||||
|
INTERFACES_KIND=universal
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# remove old symlinks in $PREFIX/*-apple-macos/include/
|
|
||||||
# and link files from $PREFIX/CIncludes
|
function linkThings()
|
||||||
function linkHeaders()
|
{
|
||||||
|
FROM="$1"
|
||||||
|
TO="$2"
|
||||||
|
PATTERN="$3"
|
||||||
|
|
||||||
|
mkdir -p "$TO"
|
||||||
|
(cd "$TO" && find "$FROM" -name "$PATTERN" -exec ln -s {} . \;)
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeConflictingHeaders()
|
||||||
{
|
{
|
||||||
# On case-insensitive file systems, there will be some conflicts with
|
# On case-insensitive file systems, there will be some conflicts with
|
||||||
# newlib. For now, universal interfaces get the right of way.
|
# newlib. For now, universal interfaces get the right of way.
|
||||||
rm -f "$1/Threads.h" # thread.h: does not currently work anyways
|
rm -f "$2/Threads.h" # thread.h: does not currently work anyways
|
||||||
rm -f "$1/Memory.h" # memory.h: non-standard aliasof string.h
|
rm -f "$2/Memory.h" # memory.h: non-standard aliasof string.h
|
||||||
rm -f "$1/Strings.h" # strings.h: traditional bsd string functions
|
rm -f "$2/Strings.h" # strings.h: traditional bsd string functions
|
||||||
|
|
||||||
(cd "$1" && find "../../CIncludes" -name '*.h' -exec ln -s {} . \;)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function unlinkHeaders()
|
|
||||||
|
function unlinkThings()
|
||||||
{
|
{
|
||||||
for file in "$1/"*; do
|
for file in "$1/"*; do
|
||||||
if [[ `readlink "$file"` == ../../CIncludes/* ]]; then
|
if [[ `readlink "$file"` == $2/* ]]; then
|
||||||
rm "$file"
|
rm "$file"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
function setUpInterfacesAndLibraries()
|
function linkInterfacesAndLibraries()
|
||||||
{
|
{
|
||||||
echo "Preparing CIncludes..."
|
linkThings "../$1/RIncludes" "$PREFIX/RIncludes" "*.r"
|
||||||
rm -rf "$PREFIX/CIncludes"
|
|
||||||
mkdir "$PREFIX/CIncludes"
|
|
||||||
sh "$SRC/prepare-headers.sh" "$CINCLUDES" "$PREFIX/CIncludes"
|
|
||||||
|
|
||||||
echo "Preparing RIncludes..."
|
|
||||||
mkdir -p "$PREFIX/RIncludes"
|
|
||||||
find "$PREFIX/RIncludes" ! -name 'Retro*.r' -type f -exec rm -f {} \;
|
|
||||||
sh "$SRC/prepare-rincludes.sh" "$RINCLUDES" "$PREFIX/RIncludes"
|
|
||||||
|
|
||||||
echo "Creating Symlinks for CIncludes and RIncludes..."
|
|
||||||
|
|
||||||
if [ $BUILD_68K != false ]; then
|
if [ $BUILD_68K != false ]; then
|
||||||
ln -sf ../RIncludes $PREFIX/m68k-apple-macos/RIncludes
|
ln -sf ../RIncludes "$PREFIX/m68k-apple-macos/RIncludes"
|
||||||
linkHeaders $PREFIX/m68k-apple-macos/include
|
removeConflictingHeaders "$PREFIX/m68k-apple-macos/include"
|
||||||
|
linkThings "../../$1/CIncludes" "$PREFIX/m68k-apple-macos/include" "*.h"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $BUILD_PPC != false ]; then
|
if [ $BUILD_PPC != false ]; then
|
||||||
ln -sf ../RIncludes $PREFIX/powerpc-apple-macos/RIncludes
|
ln -sf ../RIncludes "$PREFIX/powerpc-apple-macos/RIncludes"
|
||||||
linkHeaders $PREFIX/powerpc-apple-macos/include
|
linkThings "../../$1/CIncludes" "$PREFIX/powerpc-apple-macos/include" "*.h"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
FILE_LIST="$PREFIX/apple-libraries.txt"
|
linkThings "../../$1/lib68k" "$PREFIX/m68k-apple-macos/lib" "*.a"
|
||||||
rm -f "$FILE_LIST"
|
linkThings "../../$1/libppc" "$PREFIX/powerpc-apple-macos/lib" "*.a"
|
||||||
touch "$FILE_LIST"
|
}
|
||||||
|
|
||||||
|
function unlinkInterfacesAndLibraries()
|
||||||
|
{
|
||||||
|
unlinkThings "$PREFIX/RIncludes" "../*/RIncludes"
|
||||||
|
unlinkThings "$PREFIX/m68k-apple-macos/include" "../../*/CIncludes"
|
||||||
|
unlinkThings "$PREFIX/powerpc-apple-macos/include" "../../*/CIncludes"
|
||||||
|
unlinkThings "$PREFIX/m68k-apple-macos/lib" "../../*/lib68k"
|
||||||
|
unlinkThings "$PREFIX/powerpc-apple-macos/lib" "../../*/libppc"
|
||||||
|
rm -f "$PREFIX/m68k-apple-macos/RIncludes"
|
||||||
|
rm -f "$PREFIX/powerpc-apple-macos/RIncludes"
|
||||||
|
}
|
||||||
|
|
||||||
|
function setUpInterfacesAndLibraries()
|
||||||
|
{
|
||||||
|
rm -rf "$PREFIX/universal"
|
||||||
|
mkdir "$PREFIX/universal"
|
||||||
|
|
||||||
|
echo "Preparing CIncludes..."
|
||||||
|
mkdir "$PREFIX/universal/CIncludes"
|
||||||
|
sh "$SRC/prepare-headers.sh" "$CINCLUDES" "$PREFIX/universal/CIncludes"
|
||||||
|
|
||||||
|
echo "Preparing RIncludes..."
|
||||||
|
mkdir "$PREFIX/universal/RIncludes"
|
||||||
|
sh "$SRC/prepare-rincludes.sh" "$RINCLUDES" "$PREFIX/universal/RIncludes"
|
||||||
|
|
||||||
if [ $BUILD_68K != false ]; then
|
if [ $BUILD_68K != false ]; then
|
||||||
echo "Converting 68K static libraries..."
|
echo "Converting 68K static libraries..."
|
||||||
|
mkdir -p "$PREFIX/universal/lib68k"
|
||||||
for macobj in "${M68KLIBRARIES}/"*.o; do
|
for macobj in "${M68KLIBRARIES}/"*.o; do
|
||||||
if [ -r "$macobj" ]; then
|
if [ -r "$macobj" ]; then
|
||||||
libname=`basename "$macobj"`
|
libname=`basename "$macobj"`
|
||||||
libname=${libname%.o}
|
libname=${libname%.o}
|
||||||
printf " %30s => %-30s\n" ${libname}.o lib${libname}.a
|
printf " %30s => %-30s\n" ${libname}.o lib${libname}.a
|
||||||
asm="$PREFIX/m68k-apple-macos/lib/$libname.s"
|
asm="$PREFIX/universal/lib68k/$libname.s"
|
||||||
obj="$PREFIX/m68k-apple-macos/lib/$libname.o"
|
obj="$PREFIX/universal/lib68k/$libname.o"
|
||||||
lib="$PREFIX/m68k-apple-macos/lib/lib${libname}.a"
|
lib="$PREFIX/universal/lib68k/lib${libname}.a"
|
||||||
|
|
||||||
rm -f $lib
|
rm -f $lib
|
||||||
|
|
||||||
if ConvertObj "$macobj" > "$asm"; then
|
if ConvertObj "$macobj" > "$asm"; then
|
||||||
m68k-apple-macos-as "$asm" -o "$obj"
|
m68k-apple-macos-as "$asm" -o "$obj"
|
||||||
m68k-apple-macos-ar cqs "$lib" "$obj"
|
m68k-apple-macos-ar cqs "$lib" "$obj"
|
||||||
echo "m68k-apple-macos/lib/$libname.o" >> "$FILE_LIST"
|
|
||||||
echo "m68k-apple-macos/lib/lib${libname}.a" >> "$FILE_LIST"
|
|
||||||
fi
|
fi
|
||||||
rm -f "$asm"
|
rm -f "$asm"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
for lib in "${M68KLIBRARIES}/"lib*.a; do
|
|
||||||
libname=`basename "$lib"`
|
|
||||||
cp $lib "$PREFIX/m68k-apple-macos/lib/"
|
|
||||||
echo "m68k-apple-macos/lib/${libname}" >> "$FILE_LIST"
|
|
||||||
done
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $BUILD_PPC != false ]; then
|
if [ $BUILD_PPC != false ]; then
|
||||||
|
mkdir -p "$PREFIX/universal/libppc"
|
||||||
case `ResInfo -n "$INTERFACELIB" > /dev/null || echo 0` in
|
case `ResInfo -n "$INTERFACELIB" > /dev/null || echo 0` in
|
||||||
0)
|
0)
|
||||||
if [ -n "$INTERFACELIB" ]; then
|
if [ -n "$INTERFACELIB" ]; then
|
||||||
@ -224,7 +276,7 @@ function setUpInterfacesAndLibraries()
|
|||||||
echo " Falling back to included import libraries."
|
echo " Falling back to included import libraries."
|
||||||
fi
|
fi
|
||||||
echo "Copying readymade PowerPC import libraries..."
|
echo "Copying readymade PowerPC import libraries..."
|
||||||
cp $SRC/ImportLibraries/*.a $PREFIX/powerpc-apple-macos/lib/
|
cp $PREFIX/multiversal/libppc/*.a $PREFIX/universal/libppc/
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Building PowerPC import libraries..."
|
echo "Building PowerPC import libraries..."
|
||||||
@ -232,8 +284,7 @@ function setUpInterfacesAndLibraries()
|
|||||||
libname=`basename "$shlib"`
|
libname=`basename "$shlib"`
|
||||||
implib=lib${libname}.a
|
implib=lib${libname}.a
|
||||||
printf " %30s => %-30s\n" ${libname} ${implib}
|
printf " %30s => %-30s\n" ${libname} ${implib}
|
||||||
MakeImport "$shlib" "$PREFIX/powerpc-apple-macos/lib/$implib" \
|
MakeImport "$shlib" "$PREFIX/universal/libppc/$implib" || true
|
||||||
&& echo "powerpc-apple-macos/lib/$implib" >> "$FILE_LIST"
|
|
||||||
done
|
done
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@ -243,14 +294,12 @@ function setUpInterfacesAndLibraries()
|
|||||||
for obj in "${PPCLIBRARIES}/"OpenT*.o "${PPCLIBRARIES}/CarbonAccessors.o" "${PPCLIBRARIES}/CursorDevicesGlue.o"; do
|
for obj in "${PPCLIBRARIES}/"OpenT*.o "${PPCLIBRARIES}/CarbonAccessors.o" "${PPCLIBRARIES}/CursorDevicesGlue.o"; do
|
||||||
if [ -r "$obj" ]; then
|
if [ -r "$obj" ]; then
|
||||||
# copy the library:
|
# copy the library:
|
||||||
cp "$obj" "$PREFIX/powerpc-apple-macos/lib/"
|
cp "$obj" "$PREFIX/universal/libppc/"
|
||||||
basename=`basename "${obj%.o}"`
|
basename=`basename "${obj%.o}"`
|
||||||
# and wrap it in a .a archive for convenience
|
# and wrap it in a .a archive for convenience
|
||||||
lib="$PREFIX"/powerpc-apple-macos/lib/lib$basename.a
|
lib="$PREFIX"/universal/libppc/lib$basename.a
|
||||||
rm -f "$lib"
|
rm -f "$lib"
|
||||||
powerpc-apple-macos-ar cqs "$lib" "$obj"
|
powerpc-apple-macos-ar cqs "$lib" "$obj"
|
||||||
echo "powerpc-apple-macos/lib/$basename.o" >> "$FILE_LIST"
|
|
||||||
echo "powerpc-apple-macos/lib/lib$basename.a" >> "$FILE_LIST"
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
fi
|
fi
|
||||||
@ -259,20 +308,8 @@ function setUpInterfacesAndLibraries()
|
|||||||
|
|
||||||
function removeInterfacesAndLibraries()
|
function removeInterfacesAndLibraries()
|
||||||
{
|
{
|
||||||
FILE_LIST="$PREFIX/apple-libraries.txt"
|
unlinkInterfacesAndLibraries
|
||||||
if [ -r "$FILE_LIST" ]; then
|
rm -rf "$PREFIX/universal"
|
||||||
echo "Removing currently installed Apple Interfaces and Libraries..."
|
|
||||||
for file in `cat "$FILE_LIST"`; do
|
|
||||||
rm -f "$PREFIX/$file"
|
|
||||||
done
|
|
||||||
unlinkHeaders "$PREFIX/m68k-apple-macos/include"
|
|
||||||
unlinkHeaders "$PREFIX/powerpc-apple-macos/include"
|
|
||||||
rm -f "$PREFIX/m68k-apple-macos/RIncludes"
|
|
||||||
rm -f "$PREFIX/powerpc-apple-macos/RIncludes"
|
|
||||||
rm -rf "$PREFIX/CIncludes"
|
|
||||||
find "$PREFIX/RIncludes" ! -name 'Retro*.r' -type f -exec rm -f {} \;
|
|
||||||
rm -f "$FILE_LIST"
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (return 0 2>/dev/null); then
|
if (return 0 2>/dev/null); then
|
||||||
@ -297,9 +334,19 @@ else
|
|||||||
|
|
||||||
if [ "${INTERFACES_DIR}" = "--remove" ]; then
|
if [ "${INTERFACES_DIR}" = "--remove" ]; then
|
||||||
removeInterfacesAndLibraries
|
removeInterfacesAndLibraries
|
||||||
|
elif [ "${INTERFACES_DIR}" = "--unlink" ]; then
|
||||||
|
unlinkInterfacesAndLibraries
|
||||||
|
elif [ "${INTERFACES_DIR}" = "--multiversal" ]; then
|
||||||
|
unlinkInterfacesAndLibraries
|
||||||
|
linkInterfacesAndLibraries "multiversal"
|
||||||
|
elif [ "${INTERFACES_DIR}" = "--universal" ]; then
|
||||||
|
unlinkInterfacesAndLibraries
|
||||||
|
linkInterfacesAndLibraries "universal"
|
||||||
else
|
else
|
||||||
|
INTERFACES_KIND=universal
|
||||||
locateAndCheckInterfacesAndLibraries
|
locateAndCheckInterfacesAndLibraries
|
||||||
removeInterfacesAndLibraries
|
removeInterfacesAndLibraries
|
||||||
setUpInterfacesAndLibraries
|
setUpInterfacesAndLibraries
|
||||||
|
linkInterfacesAndLibraries "universal"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
1
multiversal
Submodule
1
multiversal
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 762bb2eb52be72539904da2ad22c786bd3ac24c5
|
Loading…
Reference in New Issue
Block a user