2
0
mirror of https://frontier.innolan.net/github/amigaos-cross-toolchain6.git synced 2024-10-19 10:29:55 +00:00
Files
amigaos-cross-toolchain6/install-sdk.sh
2014-01-05 13:04:09 +01:00

243 lines
6.8 KiB
Bash
Executable File

#!/bin/bash
readonly TOP_DIR="$(pwd)"
function download {
local -r url="$1"
local -r file="${2:-$(basename "${url}")}"
if [ ! -f "${file}" ]; then
wget -O "${file}" "${url}"
fi
}
function list {
echo "Available SDKs:"
for sdk in ${TOP_DIR}/sdk/*.sdk; do
name=$(basename ${sdk})
short=`sed -ne "s/Short: //p" ${sdk}`
ver=`sed -ne "s/Version: //p" ${sdk}`
echo " - ${name%%.sdk} : $short $ver"
done
}
function add_stubs {
local src="$1"
local libdir="$2"
local obj="${src%.c}.o"
echo "${obj} -> ${PREFIX}/lib/${libdir}/libstubs.a"
m68k-amigaos-gcc "${CFLAGS}" -noixemul -c -o "${obj}" "${src}" && \
m68k-amigaos-ar rs "${PREFIX}/lib/${libdir}/libstubs.a" "${obj}"
rm -f "${obj}"
}
function add_lib {
local src="$1"
local lib="$2"
local obj="${src%.a}.o"
echo "${src} -> ${PREFIX}/lib/${lib}"
m68k-amigaos-gcc "${CFLAGS}" -noixemul -c -o "${obj}" "${src}" && \
m68k-amigaos-ar rcs "${PREFIX}/lib/${lib}" "${obj}"
rm -f "${obj}"
}
function install_sdk {
local name="$1"
local sdk="$2"
local url=`sed -ne "s/Url: //p" ${sdk}`
local tmp=`mktemp -d -t "${name}"`
pushd ${tmp}
download "${url}"
lha -xgq `basename ${url}`
sed -ne '5,$p' ${sdk} | while read -a line; do
if [[ ${#line[@]} > 1 ]]; then
case ${line[1]} in
"=")
file=${line[2]}
path=${line[0]}
new_path=$(dirname ${path})/${file}
mv -v ${path} ${new_path}
path=${new_path}
;;
":")
case ${line[0]} in
"fd2sfd")
sfd="$(basename ${line[2]%%.fd}.sfd)"
echo "${line[2]} ${line[3]} -> ${sfd}"
fd2sfd -o ${sfd} ${line[2]} ${line[3]}
mkdir -p "${PREFIX}/os-lib/sfd"
cp -v ${sfd} "${PREFIX}/os-lib/sfd/${sfd}"
;;
"sfdc")
path=${line[2]}
file=$(basename ${path})
base=${file%_lib.sfd}
mkdir -p "${PREFIX}/os-include/proto"
mkdir -p "${PREFIX}/os-include/inline"
mkdir -p "${PREFIX}/os-include/lvo"
echo "${path} -> ${PREFIX}/os-include/proto/${base}.h"
sfdc --quiet --target=m68k-amigaos --mode=proto \
--output="${PREFIX}/os-include/proto/${base}.h" ${path}
echo "${path} -> ${PREFIX}/os-include/inline/${base}.h"
sfdc --quiet --target=m68k-amigaos --mode=macros \
--output="${PREFIX}/os-include/inline/${base}.h" ${path}
echo "${path} -> ${PREFIX}/os-include/lvo/${base}.i"
sfdc --quiet --target=m68k-amigaos --mode=lvo \
--output="${PREFIX}/os-include/lvo/${base}.i" ${path}
;;
"stubs")
path=${line[2]}
filepart=$(basename ${path})
file="${filepart%_lib.sfd}.c"
echo "${path} -> ${file}"
sfdc --quiet --target=m68k-amigaos --mode=autoopen \
--output="${file}" ${path}
CFLAGS="-Wall -O3 -fomit-frame-pointer"
add_stubs "${file}" "libnix"
CFLAGS="-Wall -O3 -fomit-frame-pointer -fbaserel -DSMALL_DATA"
add_stubs "${file}" "libb/libnix"
CFLAGS="-Wall -O3 -fomit-frame-pointer -m68020"
add_stubs "${file}" "libm020/libnix"
CFLAGS="-Wall -O3 -fomit-frame-pointer -fbaserel -DSMALL_DATA -m68020"
add_stubs "${file}" "libb/libm020/libnix"
CFLAGS="-Wall -O3 -fomit-frame-pointer -m68020 -m68881"
add_stubs "${file}" "libm020/libm881/libnix"
CFLAGS="-Wall -O3 -fomit-frame-pointer -fbaserel -DSMALL_DATA -m68020 -m68881"
add_stubs "${file}" "libb/libm020/libm881/libnix"
CFLAGS="-Wall -O3 -fomit-frame-pointer -fbaserel32 -DSMALL_DATA -m68020"
add_stubs "${file}" "libb32/libm020/libnix"
;;
"lib")
path=${line[2]}
filepart=$(basename ${path})
file="${filepart%_lib.sfd}.c"
lib="lib${name}.a"
echo "${path} -> ${file}"
sfdc --quiet --target=m68k-amigaos --mode=stubs \
--output="${file}" ${path}
CFLAGS="-Wall -O3 -fomit-frame-pointer"
add_lib "${file}" "${lib}"
CFLAGS="-Wall -O3 -fomit-frame-pointer -fbaserel -DSMALL_DATA"
add_lib "${file}" "libb/${lib}"
CFLAGS="-Wall -O3 -fomit-frame-pointer -m68020"
add_lib "${file}" "libm020/${lib}"
CFLAGS="-Wall -O3 -fomit-frame-pointer -fbaserel -DSMALL_DATA -m68020"
add_lib "${file}" "libb/libm020/${lib}"
CFLAGS="-Wall -O3 -fomit-frame-pointer -m68020 -m68881"
add_lib "${file}" "libm020/libm881/${lib}"
CFLAGS="-Wall -O3 -fomit-frame-pointer -fbaserel -DSMALL_DATA -m68020 -m68881"
add_lib "${file}" "libb/libm020/libm881/${lib}"
CFLAGS="-Wall -O3 -fomit-frame-pointer -fbaserel32 -DSMALL_DATA -m68020"
add_lib "${file}" "libb32/libm020/${lib}"
;;
*)
echo "Unknown preprocessor: '${line}'"
exit 1
;;
esac
continue
;;
*)
echo "Syntax error: '${line}'"
exit 1
;;
esac
else
file=$(basename ${line})
path=${line}
fi
lastdir=$(basename $(dirname ${path}))
case ${file} in
*.doc|*.html|*.pdf|*.ps)
mkdir -p "${PREFIX}/doc"
cp -v ${path} ${PREFIX}/doc/${file}
;;
*.guide)
mkdir -p "${PREFIX}/guide"
cp -v ${path} ${PREFIX}/guide/${file}
;;
*.i|*.h)
mkdir -p "${PREFIX}/os-include/${lastdir}"
cp -v ${path} ${PREFIX}/os-include/${lastdir}/${file}
;;
*.fd)
mkdir -p "${PREFIX}/os-lib/fd"
cp -v ${path} ${PREFIX}/os-lib/fd/${file}
;;
*.sfd)
mkdir -p "${PREFIX}/os-lib/sfd"
cp -v ${path} ${PREFIX}/os-lib/sfd/${file}
;;
*)
echo "${path} ???"
exit 1
;;
esac
done
popd
rm -rf "${tmp}"
}
function main {
PREFIX="${TOP_DIR}/target"
local action
while [ -n "${1:-}" ]; do
case "$1" in
--prefix=*)
PREFIX=${1#*=}
;;
--*)
echo "Unknown option: $1"
exit 1
;;
*)
break
;;
esac
shift
done
if [[ "$@" == "" ]]; then
echo "Usage: $0 sdk1 sdk2 ..."
echo ""
list
exit 1
fi
for name in $@; do
sdk="${TOP_DIR}/sdk/${name}.sdk"
if [ ! -f "${sdk}" ]; then
echo "Unknown SDK - '${name}' !"
exit 1
fi
echo "Installing '${name}'..."
install_sdk "${name}" "${sdk}"
done
}
main "$@"