joeylib/joeylib/build.sh

261 lines
7.1 KiB
Bash
Executable file

#!/bin/bash -e
# Amiga
# https://github.com/bebbo/amiga-gcc
# m68k-amigaos-gcc -idirafter /home/scott/joey/sdks/amiga/m68k-amigaos/sys-include/machine -c ../src/joey.c
# m68k-amigaos-gcc -idirafter /home/scott/joey/sdks/amiga/m68k-amigaos/sys-include/machine -c ../src/jAmiga.c
# m68k-amigaos-ar rcs libjoeylib.a *.o
# ST
# http://tho-otto.de/crossmint.php
# https://github.com/pmandin/cleancode
# wget http://tho-otto.de/download/mint/m68k-atari-mint-base-20190606-linux.tar.xz
# xz -d m68k-atari-mint-base-20190606-linux.tar.xz
# tar --strip-components=1 -xf ../../stuff/m68k-atari-mint-base-20190606-linux.tar
# m68k-atari-mint-gcc -c ../src/joey.c
# m68k-atari-mint-gcc -c ../src/jST.c
# m68k-atari-ar rcs libjoeylib.a *.o
# 68k Mac
# https://github.com/autc04/Retro68
# Win16
# http://blog.ssokolow.com/archives/2017/10/19/useful-info-on-win16-targeting-compilers-and-a-list-of-resources/
# https://github.com/open-watcom/open-watcom-v2
# ./setup -i -dDstDir=/opt/watcom -dFullCDInstall=1
# DOS
# https://github.com/open-watcom/open-watcom-v2
# OS/2
# https://github.com/open-watcom/open-watcom-v2
SRC="${JOEY}/joeylib/joeylib/src"
BUILD="${JOEY}/joeylib/joeylib/build"
OUT="${JOEY}/sdks/IIgs/ORCA/out/joey"
DEPS="${JOEY}/sdks"
function clearBuild() {
if [[ -d "${BUILD}" ]]; then
rm -rf "${BUILD}"
fi
}
function createBuildAndDist() {
clearBuild
mkdir -p "${BUILD}"
if [[ -d "${DIST}" ]]; then
rm -rf "${DIST}"
fi
mkdir -p "${DIST}"
}
function doIIgsBuild() {
local CADIUS="${JOEY}/sdks/IIgs/cadius/cadius"
local IMPORT="/tmp/IIgs/import.po"
local VOL=Import
local RUNTEST=$1
echo "*** Starting ${DIST}"
if [[ -d "${OUT}" ]]; then
rm -rf "${OUT}"
fi
mkdir -p "${OUT}"
if [[ -d "${DIST}" ]]; then
rm -rf "${DIST}"
fi
mkdir -p "${DIST}"
pushd "${SRC}"
iix assemble +L jIIgs.asm keep=31:/out/joey/jIIgsasm > jIIgs.asm.dis
iix compile jIIgs.c keep=31:/out/joey/jIIgsc
iix compile joey.c keep=31:/out/joey/joey
iix makelib 31:/out/joey/joeylib +31:/out/joey/jIIgsasm.A
iix makelib 31:/out/joey/joeylib +31:/out/joey/jIIgsasm.ROOT
iix makelib 31:/out/joey/joeylib +31:/out/joey/jIIgsc.a
iix makelib 31:/out/joey/joeylib +31:/out/joey/joey.a
iix compile test.c keep=31:/out/joey/test
iix -DKeepType=S16 link +L 31:/out/joey/test 31:/out/joey/joeylib keep=31:/out/joey/test > test.map
iix dumpobj +D 31:/out/joey/test &> test.dis || true
php "${JOEY}/sdks/IIgs/ntconverter/ntconverter.php" *.mod
popd
cp -f "${OUT}/joeylib" "${DIST}/joeylib#b20000"
cp -f "${JOEY}/sdks/IIgs/Tool221#ba0000" "${JOEY}/dist/IIgs/."
cp -f "${JOEY}/joeylib/scripts/build-IIgs.helper.sh" "${JOEY}/dist/."
if [[ ! -z ${RUNTEST} ]]; then
mkdir -p `dirname ${IMPORT}`
rm "/tmp/IIgs/JLSTATS#040000" 2> /dev/null || true
rm "${IMPORT}" 2> /dev/null || true
cp "${OUT}/test" "${OUT}/Test#b3db03"
cp "${JOEY}/joeylib/joeylib/src/kanga.img" "${OUT}/kanga.img#060000"
cp "${JOEY}/joeylib/joeylib/src/font.img" "${OUT}/font.img#060000"
cp "${JOEY}/joeylib/joeylib/src/font.stn" "${OUT}/font.stn#060000"
cp "${JOEY}/joeylib/joeylib/src/music" "${OUT}/music#D50000"
cp "${JOEY}/joeylib/joeylib/src/music.w" "${OUT}/music.w#060000"
"${CADIUS}" createvolume "${IMPORT}" ${VOL} 32MB > /dev/null
"${CADIUS}" createfolder "${IMPORT}" ${VOL}/data > /dev/null
"${CADIUS}" addfile "${IMPORT}" ${VOL} "${JOEY}/dist/IIgs/Tool221#ba0000" > /dev/null
"${CADIUS}" addfile "${IMPORT}" ${VOL} "${OUT}/Test#b3db03" > /dev/null
"${CADIUS}" addfile "${IMPORT}" ${VOL}/data "${OUT}/kanga.img#060000" > /dev/null
"${CADIUS}" addfile "${IMPORT}" ${VOL}/data "${OUT}/font.img#060000" > /dev/null
"${CADIUS}" addfile "${IMPORT}" ${VOL}/data "${OUT}/font.stn#060000" > /dev/null
"${CADIUS}" addfile "${IMPORT}" ${VOL}/data "${OUT}/music#D50000" > /dev/null
"${CADIUS}" addfile "${IMPORT}" ${VOL}/data "${OUT}/music.w#060000" > /dev/null
pushd "${JOEY}/sdks/IIgs/gsplus"
./GSplus -resizeable -config IIgsTest.cfg || true
popd
echo ""
"${CADIUS}" extractfile "${IMPORT}" ${VOL}/JLSTATS /tmp/IIgs/. > /dev/null
if [[ -e "/tmp/IIgs/JLSTATS#040000" ]]; then
echo ""
cat "/tmp/IIgs/JLSTATS#040000" | tr "\r" "\n" 2> /dev/null
echo ""
fi
fi
}
function doPCBuild() {
local G_CFLAGS="-Wall -D_REENTRANT_ -I${SRC} -I${INSTALLED}/include -c"
echo "*** Starting ${DIST}"
createBuildAndDist
pushd "${BUILD}"
"${CC}" ${CFLAGS} ${G_CFLAGS} -o jSDL2.o "${SRC}/jSDL2.c"
"${CC}" ${CFLAGS} ${G_CFLAGS} -o joey.o "${SRC}/joey.c"
ar x "${INSTALLED}/lib/libSDL2.a"
ar x "${INSTALLED}/lib/libSDL2_mixer.a"
ar x "${INSTALLED}/lib/libmodplug.a"
ar rcs "${DIST}/libjoeylib.a" *.o
popd
cp -f "${JOEY}/joeylib/joeylib/joey.pri" "${JOEY}/dist/."
cp -f "${JOEY}/joeylib/scripts/build-PC.helper.sh" "${JOEY}/dist/."
clearBuild
#***TODO*** Add optional test app execution for Windows (WINE) and Linux here - maybe even a macOS VM
}
ARCH=$1
TEST=$2
if [[ "${ARCH}x" == "x" ]]; then
echo "$0 [arch | \"all\"]"
echo '(Where "arch" is amiga, iigs, linux32, linux64, macos32, macos64, st, windows32, or windows64.)'
exit 0
fi
if [[ "${ARCH}x" == "allx" || "${ARCH}x" == "amigax" ]]; then
DIST="${JOEY}/dist/amiga"
echo "*** Starting ${DIST}"
createBuildAndDist
pushd "${BUILD}"
m68k-amigaos-gcc -c "${SRC}/joey.c"
m68k-amigaos-gcc -c "${SRC}/jAmiga.c"
m68k-amigaos-ar rcs "${DIST}/libjoeylib.a" *.o
popd
clearBuild
#***TODO*** Emulator
fi
if [[ "${ARCH}x" == "allx" || "${ARCH}x" == "iigsx" ]]; then
DIST="${JOEY}/dist/IIgs"
doIIgsBuild ${TEST}
fi
if [[ "${ARCH}x" == "allx" || "${ARCH}x" == "linux64x" ]]; then
CC="gcc"
CFLAGS=""
LDFLAGS=""
DIST="${JOEY}/dist/linux/x64"
INSTALLED="${DEPS}/linux/x64"
doPCBuild
fi
if [[ "${ARCH}x" == "allx" || "${ARCH}x" == "linux32x" ]]; then
CC="gcc"
CFLAGS="-m32"
LDFLAGS=""
DIST="${JOEY}/dist/linux/i386"
INSTALLED="${DEPS}/linux/i386"
doPCBuild
fi
if [[ "${ARCH}x" == "allx" || "${ARCH}x" == "macos32x" ]]; then
CC="o32-clang"
CFLAGS=""
LDFLAGS=""
DIST="${JOEY}/dist/macOS/i386"
INSTALLED="${DEPS}/macOS/i386"
doPCBuild
fi
if [[ "${ARCH}x" == "allx" || "${ARCH}x" == "macos64x" ]]; then
CC="o64-clang"
CFLAGS=""
LDFLAGS=""
DIST="${JOEY}/dist/macOS/x64"
INSTALLED="${DEPS}/macOS/x64"
doPCBuild
fi
if [[ "${ARCH}x" == "allx" || "${ARCH}x" == "stx" ]]; then
DIST="${JOEY}/dist/st"
echo "*** Starting ${DIST}"
createBuildAndDist
pushd "${BUILD}"
m68k-atari-mint-gcc -c "${SRC}/joey.c"
m68k-atari-mint-gcc -c "${SRC}/jST.c"
m68k-atari-mint-ar x "${DEPS}/st/lib/libSDL.a"
m68k-atari-mint-ar x "${DEPS}/st/lib/libSDL_mixer.a"
m68k-atari-mint-ar x "${DEPS}/st/lib/libmikmod.a"
m68k-atari-mint-ar rcs "${DIST}/libjoeylib.a" *.o
popd
clearBuild
#***TODO***
#hatari -c "${JOEY}/sdks/st/hatari.cfg" -d out/
fi
if [[ "${ARCH}x" == "allx" || "${ARCH}x" == "windows64x" ]]; then
CC="x86_64-w64-mingw32-gcc"
CFLAGS=""
LDFLAGS=""
DIST="${JOEY}/dist/windows/x64"
INSTALLED="${DEPS}/windows/x64"
doPCBuild
fi
if [[ "${ARCH}x" == "allx" || "${ARCH}x" == "windows32x" ]]; then
CC="i686-w64-mingw32-gcc"
CFLAGS=""
LDFLAGS=""
DIST="${JOEY}/dist/windows/i386"
INSTALLED="${DEPS}/windows/i386"
doPCBuild
fi
mkdir -p "${JOEY}/dist"
cp -f "${SRC}/joey.h" "${JOEY}/dist/."