From 051c81d3d2bb9e2acf5c520b37b3262087e9c5e8 Mon Sep 17 00:00:00 2001 From: Scott Duensing Date: Mon, 26 Sep 2022 17:54:32 -0500 Subject: [PATCH] Build VM producing Windows, MacOS, Linux, and IIgs binaries. --- scripts/buildVm.sh | 251 +++++++++++++++++++++++++++------------------ 1 file changed, 149 insertions(+), 102 deletions(-) diff --git a/scripts/buildVm.sh b/scripts/buildVm.sh index a12d8e0..40f720a 100755 --- a/scripts/buildVm.sh +++ b/scripts/buildVm.sh @@ -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