mirror of
https://frontier.innolan.net/github/amigaos-cross-toolchain6.git
synced 2024-10-19 10:29:55 +00:00
243 lines
6.8 KiB
Bash
Executable File
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 "$@"
|