Build VM producing Windows, MacOS, Linux, and IIgs binaries.

This commit is contained in:
Scott Duensing 2022-09-26 17:54:32 -05:00
parent 99b1ac8e6d
commit 051c81d3d2

View file

@ -30,6 +30,7 @@ TRIPLE=
BUILD_PROJECT=
BUILD_PLATFORMS=
BUILD_RESULTS=
LDFIRST=
EHOME=$(getent passwd $(logname) | cut -d: -f6)
SRC=${EHOME}/joeylib/joeylib/src
@ -43,6 +44,7 @@ export CC=
export AR=
export CFLAGS=
export LD_LIBRARY_PATH=
export LDFLAGS=
export GOLDEN_GATE=${IIGS}/ORCA
@ -79,14 +81,14 @@ function buildIIgsSDK() {
mkdir -p ~/.ssh
cp -f "${PUBLIC}" ~/.ssh/id_rsa.pub
cp -f "${PRIVATE}" ~/.ssh/id_rsa
touch ${HOME}/.ssh/authorized_keys
touch ${HOME}/.ssh/config
chmod go-w ${HOME}
chmod 700 ${HOME}/.ssh
chmod 600 ${HOME}/.ssh/*id_rsa
chmod 644 ${HOME}/.ssh/*.pub
chmod 644 ${HOME}/.ssh/authorized_keys
chmod 644 ${HOME}/.ssh/config
touch ${EHOME}/.ssh/authorized_keys
touch ${EHOME}/.ssh/config
chmod go-w ${EHOME}
chmod 700 ${EHOME}/.ssh
chmod 600 ${EHOME}/.ssh/*id_rsa
chmod 644 ${EHOME}/.ssh/*.pub
chmod 644 ${EHOME}/.ssh/authorized_keys
chmod 644 ${EHOME}/.ssh/config
if [[ ! -e "${IIGS}/jfsDrive.img" ]]; then
O=${IIGS}/mountORCA.sh
@ -131,7 +133,7 @@ function buildIIgsSDK() {
mkdir -p ${IIGS}
cp -f bin/{iix,dumpobj,opus-extractor} "${IIGS}/."
cd installed
msiextract "${HOME}/${GGATE}"
msiextract "${EHOME}/${GGATE}"
find -name ".*" -delete
cp -rf GoldenGate/* "${IIGS}/ORCA/."
popd
@ -230,7 +232,7 @@ function buildJoeyLib() {
;;
SDL2)
export CFLAGS="${CFLAGS} -DBUILD_SERVER -Wall -D_REENTRANT_ -I${SRC} -I${INSTALLED}/include -c"
export CFLAGS="${CFLAGS} -I${SRC} -I${INSTALLED}/include -c"
${CC} ${CFLAGS} -o jPixBuf.o ${SRC}/jPixBuf.c
${CC} ${CFLAGS} -o jSDL2.o ${SRC}/jSDL2.c
${CC} ${CFLAGS} -o joey.o ${SRC}/joey.c
@ -361,18 +363,19 @@ function doBuild() {
if [[ -z ${BUILD_PROJECT} ]]; then
BUILD_PROJECT=${LINE}
# Generate a list of non-source files.
for FILE in $(ls -1); do
if [[ "${FILE}" != "build.start" && "${FILE}" != "build.temp" && "${FILE}" != "build.tar.bz2" && "${FILE}" != "results" ]]; then
EXTENSION="${FILE##*.}"
if [[ "${EXTENSION}" != "c" && "${EXTENSION}" != "h" && "${EXTENSION}" != "asm" && "${EXTENSION}" != "macro" && "${EXTENSION}" != "inc" ]]; then
DATA+=(${FILE})
for FILE in $(ls -1B); do
if [[ -f "${FILE}" ]]; then
if [[ "${FILE}" != "build.start" && "${FILE}" != "build.temp" && "${FILE}" != "build.tar.bz2" ]]; then
EXTENSION="${FILE##*.}"
if [[ "${EXTENSION}" != "c" && "${EXTENSION}" != "h" && "${EXTENSION}" != "asm" && "${EXTENSION}" != "macro" && "${EXTENSION}" != "inc" ]]; then
DATA+=(${FILE})
fi
fi
fi
done
# Generate a list of C files to compile.
CFILES=($(ls -1 *.c))
else
BUILD_PLATFORMS="${BUILD_PLATFORMS}${LINE,,} "
case ${LINE,,} in
iigs)
setCompiler gsos 816
@ -423,78 +426,89 @@ function doBuild() {
EXT=.exe
;;
*)
TARGET=
esac
LOG="${BUILD_RESULTS}/build.${LINE,,}"
LIB="${DIST}/${NAME}-${ARCH}"
if [[ ! -z "${TARGET}" ]]; then
[[ -d "${TARGET}" ]] && rm -rf "${TARGET}"
mkdir -p "${TARGET}"
BUILD_PLATFORMS="${BUILD_PLATFORMS}${LINE,,} "
LOG="${BUILD_RESULTS}/build.${LINE,,}"
LIB="${DIST}/${NAME}-${ARCH}"
[[ -d "${TARGET}" ]] && rm -rf "${TARGET}"
mkdir -p "${TARGET}"
mkdir -p ${BUILD_RESULTS}/${LINE,,}
# Make sure we have the official JoeyLib header.
cp -f "${DIST}/joey.h" "${SOURCE}/."
case ${BACKEND} in
orca)
#***TODO*** Somehow pass in -DBUILD_SERVER
# Compile C files and generate object list.
OFILES=""
for FILE in "${CFILES[@]}"; do
O=${FILE%.*}
OFILES="${OFILES} ${GSTARGET}/${O}"
iix compile ${FILE} keep=${GSTARGET}/${O}
done
# We need a local copy of JoeyLib to link.
cp -f "${LIB}/jIIgsc.a#b10000" "${TARGET}/jIIgsc.a"
cp -f "${LIB}/jIIgsc.root#b10000" "${TARGET}/jIIgsc.root"
cp -f "${LIB}/jIIgsasm.a#b10000" "${TARGET}/jIIgsasm.a"
cp -f "${LIB}/jIIgsasm.root#b10000" "${TARGET}/jIIgsasm.root"
cp -f "${LIB}/joey.a#b10000" "${TARGET}/joey.a"
iix chtyp -t obj ${GSTARGET}/jIIgsc.a
iix chtyp -t obj ${GSTARGET}/jIIgsc.root
iix chtyp -t obj ${GSTARGET}/jIIgsasm.a
iix chtyp -t obj ${GSTARGET}/jIIgsasm.root
iix chtyp -t obj ${GSTARGET}/joey.a
# Add our library files to OFILES
OFILES="${GSTARGET}/jIIgsc ${GSTARGET}/joey ${GSTARGET}/jIIgsasm ${OFILES}"
# Link.
iix -DKeepType=S16 link ${OFILES} keep=${GSTARGET}/${BUILD_PROJECT}#b3db03
# Create disk image, setting known file types
DISK=${BUILD_RESULTS}/${LINE,,}/build.po
${CADIUS} createvolume ${DISK} ${BUILD_PROJECT} 32MB
${CADIUS} createfolder ${DISK} ${BUILD_PROJECT}/data
${CADIUS} addfile ${DISK} ${BUILD_PROJECT} ${TARGET}/${BUILD_PROJECT}#b3db03
${CADIUS} addfile ${DISK} ${BUILD_PROJECT}/data ${LIB}/Tool222#ba0000
# Copy game data.
for FILE in "${DATA[@]}"; do
#***TODO*** Data conversion here!
O=`basename ${FILE}`#060000
cp -f ${FILE} ${O}
${CADIUS} addfile ${DISK} ${BUILD_PROJECT}/data ${O}
rm ${O}
done
;;
SDL2)
export CFLAGS="${CFLAGS} -DBUILD_SERVER -Wall -D_REENTRANT_ -I${DIST}"
# Compile C files and generate object list.
OFILES=""
for FILE in "${CFILES[@]}"; do
O=${FILE%.*}.o
OFILES="${OFILES} ${TARGET}/${O}"
${CC} ${CFLAGS} -c ${FILE} -o ${TARGET}/${O}
done
# Link.
${CC} ${CFLAGS} -o ${BUILD_RESULTS}/${LINE,,}/${BUILD_PROJECT}${EXT} ${OFILES} ${LIB}/libjoeylib.a -lm -ldl -lpthread
# Copy game data.
for FILE in "${DATA[@]}"; do
#***TODO*** Data conversion here!
cp -f ${FILE} ${BUILD_RESULTS}/${LINE,,}/.
done
;;
esac
mkdir -p ${BUILD_RESULTS}/${LINE,,}
# Make sure we have the official JoeyLib header.
cp -f "${DIST}/joey.h" "${SOURCE}/."
case ${BACKEND} in
orca)
#***TODO*** Somehow pass in -DBUILD_SERVER
# Compile C files and generate object list.
OFILES=""
for FILE in "${CFILES[@]}"; do
O=${FILE%.*}
OFILES="${OFILES} ${GSTARGET}/${O}"
iix compile ${FILE} keep=${GSTARGET}/${O}
done
# We need a local copy of JoeyLib to link.
cp -f "${LIB}/jIIgsc.a#b10000" "${TARGET}/jIIgsc.a"
cp -f "${LIB}/jIIgsc.root#b10000" "${TARGET}/jIIgsc.root"
cp -f "${LIB}/jIIgsasm.a#b10000" "${TARGET}/jIIgsasm.a"
cp -f "${LIB}/jIIgsasm.root#b10000" "${TARGET}/jIIgsasm.root"
cp -f "${LIB}/joey.a#b10000" "${TARGET}/joey.a"
iix chtyp -t obj ${GSTARGET}/jIIgsc.a
iix chtyp -t obj ${GSTARGET}/jIIgsc.root
iix chtyp -t obj ${GSTARGET}/jIIgsasm.a
iix chtyp -t obj ${GSTARGET}/jIIgsasm.root
iix chtyp -t obj ${GSTARGET}/joey.a
# Add our library files to OFILES
OFILES="${GSTARGET}/jIIgsc ${GSTARGET}/joey ${GSTARGET}/jIIgsasm ${OFILES}"
# Link.
iix -DKeepType=S16 link ${OFILES} keep=${GSTARGET}/${BUILD_PROJECT}#b3db03
rm -f *.sym || true
# Create disk image, setting known file types
DISK=${BUILD_RESULTS}/${LINE,,}/build.po
${CADIUS} createvolume ${DISK} ${BUILD_PROJECT} 32MB
${CADIUS} createfolder ${DISK} ${BUILD_PROJECT}/data
${CADIUS} addfile ${DISK} ${BUILD_PROJECT} ${TARGET}/${BUILD_PROJECT}#b3db03
${CADIUS} addfile ${DISK} ${BUILD_PROJECT}/data ${LIB}/Tool222#ba0000
# Copy game data.
for FILE in "${DATA[@]}"; do
#***TODO*** Data conversion here!
O=`basename ${FILE}`#060000
cp -f ${FILE} ${O}
${CADIUS} addfile ${DISK} ${BUILD_PROJECT}/data ${O}
rm ${O}
done
;;
SDL2)
export CFLAGS="${CFLAGS} -I${DIST}"
# Compile C files and generate object list.
OFILES=""
for FILE in "${CFILES[@]}"; do
O=${FILE%.*}.o
OFILES="${OFILES} ${TARGET}/${O}"
${CC} ${CFLAGS} -c ${FILE} -o ${TARGET}/${O}
done
# Link.
${CC} ${CFLAGS} -o ${BUILD_RESULTS}/${LINE,,}/${BUILD_PROJECT}${EXT} ${LDFIRST} ${OFILES} ${LIB}/libjoeylib.a ${LDFLAGS}
# Copy game data.
mkdir -p ${BUILD_RESULTS}/${LINE,,}/data
for FILE in "${DATA[@]}"; do
#***TODO*** Data conversion here!
cp -f ${FILE} ${BUILD_RESULTS}/${LINE,,}/data/.
done
;;
esac
fi
fi
done < build.start
@ -517,36 +531,28 @@ function doInstall() {
buildMacOSSDK MacOSX10.13.sdk.tar.xz macos-intel
buildMacOSSDK MacOSX11.3.sdk.tar.xz macos-apple
setCompiler gsos 816
buildJoeyLib
setCompiler linux i386
buildSDL2 ${SDL2_NEW}
buildJoeyLib
setCompiler linux x86_64
buildSDL2 ${SDL2_NEW}
buildJoeyLib
setCompiler macos i386
buildSDL2 ${SDL2_OLD}
buildJoeyLib
setCompiler macos x86_64
buildSDL2 ${SDL2_OLD}
buildJoeyLib
setCompiler macos arm
buildSDL2 ${SDL2_NEW}
buildJoeyLib
setCompiler windows i386
buildSDL2 ${SDL2_NEW}
buildJoeyLib
setCompiler windows x86_64
buildSDL2 ${SDL2_NEW}
buildJoeyLib
rebuildJoeyLib
}
@ -584,6 +590,33 @@ function fetchGitHubRelease() {
}
function rebuildJoeyLib() {
setCompiler gsos 816
buildJoeyLib
setCompiler linux i386
buildJoeyLib
setCompiler linux x86_64
buildJoeyLib
setCompiler macos i386
buildJoeyLib
setCompiler macos x86_64
buildJoeyLib
setCompiler macos arm
buildJoeyLib
setCompiler windows i386
buildJoeyLib
setCompiler windows x86_64
buildJoeyLib
}
function setCompiler() {
local OS=$1
local CPU=$2
@ -608,18 +641,21 @@ function setCompiler() {
NAME="linux-intel"
ARCH=i386
TRIPLE="x86_64-linux-gnu"
export CFLAGS="-m32"
export CFLAGS="-m32 -DBUILD_SERVER -Wall -D_REENTRANT_"
export LDFLAGS="-lm -ldl -lpthread"
;;
x86_64)
NAME="linux-intel"
ARCH=x86_64
TRIPLE="${ARCH}-linux-gnu"
export CFLAGS=
export CFLAGS="-DBUILD_SERVER -Wall -D_REENTRANT_"
export LDFLAGS="-lm -ldl -lpthread"
;;
esac
BACKEND=SDL2
LDFIRST=
export PATH=${OLD_PATH}
export LD_LIBRARY_PATH=
export CC=${TRIPLE}-gcc
@ -632,29 +668,33 @@ function setCompiler() {
NAME="macos-intel"
ARCH=i386
TRIPLE="${ARCH}-apple-darwin17"
export LDFLAGS="-lm -liconv -Wl,-framework,CoreAudio -Wl,-framework,AudioToolbox -Wl,-framework,ForceFeedback -lobjc -Wl,-framework,CoreVideo -Wl,-framework,Cocoa -Wl,-framework,Carbon -Wl,-framework,IOKit -Wl,-weak_framework,QuartzCore -Wl,-weak_framework,Metal"
;;
x86_64)
NAME="macos-intel"
ARCH=x86_64
TRIPLE="${ARCH}-apple-darwin17"
export LDFLAGS="-lm -liconv -Wl,-framework,CoreAudio -Wl,-framework,AudioToolbox -Wl,-framework,ForceFeedback -lobjc -Wl,-framework,CoreVideo -Wl,-framework,Cocoa -Wl,-framework,Carbon -Wl,-framework,IOKit -Wl,-weak_framework,QuartzCore -Wl,-weak_framework,Metal"
;;
arm)
NAME="macos-apple"
ARCH=aarch64
TRIPLE="${ARCH}-apple-darwin20.4"
export LDFLAGS="-lm -liconv -Wl,-framework,CoreAudio -Wl,-framework,AudioToolbox -Wl,-weak_framework,CoreHaptics -Wl,-weak_framework,GameController -Wl,-framework,ForceFeedback -lobjc -Wl,-framework,CoreVideo -Wl,-framework,Cocoa -Wl,-framework,Carbon -Wl,-framework,IOKit -Wl,-weak_framework,QuartzCore -Wl,-weak_framework,Metal"
;;
esac
BACKEND=SDL2
export CFLAGS=
export PATH=${HOME}/cross/${NAME}/bin:${OLD_PATH}
export LD_LIBRARY_PATH=${HOME}/cross/${NAME}/lib
LDFIRST=
export CFLAGS="-DBUILD_SERVER -Wall -D_THREAD_SAFE"
export PATH=${EHOME}/cross/${NAME}/bin:${OLD_PATH}
export LD_LIBRARY_PATH=${EHOME}/cross/${NAME}/lib
export CC=${TRIPLE}-clang
export AR=${TRIPLE}-ar
sudo rm -f /usr/lib/llvm-10/lib/clang/10.0.0/lib/darwin && true
sudo ln -s ${HOME}/cross/${NAME}/darwin /usr/lib/llvm-10/lib/clang/10.0.0/lib/.
sudo ln -s ${EHOME}/cross/${NAME}/darwin /usr/lib/llvm-10/lib/clang/10.0.0/lib/.
;;
windows)
@ -673,16 +713,18 @@ function setCompiler() {
esac
BACKEND=SDL2
LDFIRST="-lmingw32"
export PATH=${OLD_PATH}
export LD_LIBRARY_PATH=
export CFLAGS="-static-libgcc"
export CFLAGS="-DBUILD_SERVER -Dmain=SDL_main -Wall -static-libgcc"
export LDFLAGS="-mwindows -Wl,--dynamicbase -Wl,--nxcompat -lm -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lsetupapi -lversion -luuid"
export CC=${TRIPLE}-gcc
export AR=${TRIPLE}-ar
;;
esac
INSTALLED=${HOME}/installed/${NAME}-${ARCH}
INSTALLED=${EHOME}/installed/${NAME}-${ARCH}
mkdir -p ${INSTALLED}
}
@ -707,6 +749,10 @@ function scriptIsDownloaded() {
doInstall "${2}" "${3}"
;;
rebuild)
rebuildJoeyLib
;;
server)
startBuildServer "${2}"
;;
@ -716,6 +762,7 @@ function scriptIsDownloaded() {
echo "${0} build DIST SRC"
echo "${0} del USER"
echo "${0} install GGUSER GGPASS"
echo "${0} rebuild"
echo "${0} server DIST"
;;
esac