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