Updated script and documentation.

This commit is contained in:
Krystian Bacławski
2012-02-13 20:48:35 -08:00
parent b389c793cd
commit b260b9acff
2 changed files with 103 additions and 65 deletions
+23 -15
View File
@@ -1,8 +1,14 @@
info: m68k-amigaos gcc toolchain bootstrap Info: m68k-amigaos gcc/binutils toolchain bootstrap.
author: Krystian Bacławski <firstname [dot] lastname [at] gmail [dot] com> Author: Krystian Bacławski <firstname [dot] lastname [at] gmail [dot] com>
This project enables one to build m68k-amigaos toolchain on your un*x like This project enables one to build m68k-amigaos toolchain on your un*x like
platform with minimum hassle. platform with minimum hassle. Thanks to it you should get complete environment
targeting m68k-amigaos with:
* gcc 2.95.3
* g++ 2.95.2 + libstdc++
* binutils 2.9.1 (assembler, linker, etc.)
* libnix 2.1 (standard ANSI/C library replacement for AmigaOS)
* AmigaOS headers & libraries (for AmigaOS 3.9)
Tested on: Tested on:
* Ubuntu 10.04 ia32 * Ubuntu 10.04 ia32
@@ -12,31 +18,33 @@ Prerequisites (look at bootstrap.conf file):
- gcc 3.4.6 - gcc 3.4.6
- flex - flex
- make - make
- lha
- perl 5.10
* sources from GNU project: * sources from GNU project:
- gcc 2.95.3 - gcc 2.95.3
- binutils 2.9.1 - binutils 2.9.1
- bison 1.28 - bison 1.28
* Amiga specific sources & binaries: * Amiga specific sources & binaries:
- libnix 2.1: - libnix 2.1
http://sourceforge.net/projects/libnix/ - AmigaOS NDK 3.9
- AmigaOS NDK 3.9: - fd2inline 1.21
http://www.haage-partner.de/download/AmigaOS/ - sfdc 1.4
- fd2inline 1.21: - libamiga-bin
http://ftp.back2roots.org/geekgadgets/amiga/m68k/alpha/fd2inline/
- sfdc 1.4:
http://aminet.net/package/dev/gcc/sfdc/
- libamiga-bin:
http://ftp.back2roots.org/geekgadgets/amiga/m68k/snapshots/990529/bin/
Usage: Usage:
1) Download sources, and put them into archive directory. 1) Download sources (use fetch.sh script in archives directory).
2) Run bootstrap script. 2) Run bootstrap script.
3) Wait for the result and if something crashes you can try to reach me. 3) Wait for the result.
?) If something fails, you can try to reach me.
TODO: TODO:
* Testing on: * Testing on:
- MacOS X 10.7 - MacOS X 10.7
- Cygwin - Cygwin
* Remove dependencies: * Remove dependencies:
- gcc 3.4
- fd2inline - fd2inline
- libamiga-bin - libamiga-bin
* Make it installable into some prefix.
* Provide some rudimentary testing (C / C++ sources).
* Build ixemul.
+80 -50
View File
@@ -1,7 +1,9 @@
#!/bin/bash -Eeux #!/bin/bash -Eeux
readonly TOP_DIR="$(pwd)" readonly TOP_DIR="$(pwd)"
readonly SRC_DIR="${TOP_DIR}/src" readonly ARCHIVES="${TOP_DIR}/archives"
readonly PATCHES="${TOP_DIR}/patches"
readonly SOURCES="${TOP_DIR}/sources"
readonly BUILD_DIR="${TOP_DIR}/build" readonly BUILD_DIR="${TOP_DIR}/build"
readonly HOST_DIR="${TOP_DIR}/host" readonly HOST_DIR="${TOP_DIR}/host"
readonly TARGET_DIR="${TOP_DIR}/target" readonly TARGET_DIR="${TOP_DIR}/target"
@@ -18,7 +20,6 @@ function prepare_target {
mkdir -p "m68k-amigaos" "lib" "os-include" "os-lib" mkdir -p "m68k-amigaos" "lib" "os-include" "os-lib"
ln -sf "../os-include" "m68k-amigaos/include" ln -sf "../os-include" "m68k-amigaos/include"
ln -sf "../lib" "m68k-amigaos/lib" ln -sf "../lib" "m68k-amigaos/lib"
tar -xjf "${TOP_DIR}/${LIBAMIGA_SRC}"
popd popd
touch "${STAMP}/prepare-target" touch "${STAMP}/prepare-target"
@@ -27,45 +28,57 @@ function prepare_target {
function unpack_sources { function unpack_sources {
[ -f "${STAMP}/unpack-sources" ] && return 0 [ -f "${STAMP}/unpack-sources" ] && return 0
rm -rf "${SRC_DIR}" rm -rf "${SOURCES}"
mkdir -p "${SRC_DIR}" mkdir -p "${SOURCES}"
pushd "${SRC_DIR}" pushd "${SOURCES}"
rm -rf "${BISON}" rm -rf "${BISON}"
tar -xjf "${TOP_DIR}/${BISON_SRC}" tar -xzf "${ARCHIVES}/${BISON_SRC}"
rm -rf "${BINUTILS}" rm -rf "${BINUTILS}"
tar -xjf "${TOP_DIR}/${BINUTILS_SRC}" tar -xzf "${ARCHIVES}/${BINUTILS_SRC}"
pushd "${BINUTILS}" pushd "${BINUTILS}"
zcat "${TOP_DIR}/${BINUTILS_PATCH}" | patch -p1 zcat "${PATCHES}/${BINUTILS_PATCH}" | patch -p1
popd popd
rm -rf "${GCC}" rm -rf "${GCC}"
tar -xjf "${TOP_DIR}/${GCC_CORE_SRC}" tar -xzf "${ARCHIVES}/${GCC_CORE_SRC}"
tar -xjf "${TOP_DIR}/${GCC_CPP_SRC}" tar -xzf "${ARCHIVES}/${GCC_CPP_SRC}"
pushd "${GCC}" pushd "${GCC}"
zcat "${TOP_DIR}/${GCC_CORE_PATCH}" | patch -p1 zcat "${PATCHES}/${GCC_CORE_PATCH}" | patch -p1
zcat "${TOP_DIR}/${GCC_CPP_PATCH}" | patch -p1 zcat "${PATCHES}/${GCC_CPP_PATCH}" | patch -p1
popd popd
rm -rf "${FD2INLINE}" rm -rf "${FD2INLINE}"
tar -xjf "${TOP_DIR}/${FD2INLINE_SRC}" tar -xzf "${ARCHIVES}/${FD2INLINE_SRC}"
rm -rf "${SFDC}" rm -rf "${SFDC}"
tar -xjf "${TOP_DIR}/${SFDC_SRC}" lha -xq "${ARCHIVES}/${SFDC_SRC}"
tar -xzf "${SFDC}.tar.gz"
for file in $(ls -1d sfdc*); do
[ -f "${file}" ] && rm "${file}"
done
rm -rf "${NDK}" rm -rf "${NDK}"
lha x "${TOP_DIR}/${NDK_SRC}" lha -xq "${ARCHIVES}/${NDK_SRC}"
rm -rf ndk_* *.info rm -rf ndk_* *.info
rm -rf "${IXEMUL}" rm -rf "${IXEMUL}"
tar -xjf "${TOP_DIR}/${IXEMUL_SRC}" lha -xq "${ARCHIVES}/${IXEMUL_SRC}"
mv "ixemul" "${IXEMUL}"
chmod a+x "${IXEMUL}/configure" chmod a+x "${IXEMUL}/configure"
rm -rf "${LIBNIX}" rm -rf "${LIBNIX}"
tar -xjf "${TOP_DIR}/${LIBNIX_SRC}" tar -xzf "${ARCHIVES}/${LIBNIX_SRC}"
mv "libnix" "${LIBNIX}"
chmod a+x "${LIBNIX}/mkinstalldirs" chmod a+x "${LIBNIX}/mkinstalldirs"
rm -rf "${LIBAMIGA}"
mkdir "${LIBAMIGA}"
pushd "${LIBAMIGA}"
tar -xzf "${ARCHIVES}/${LIBAMIGA_SRC}"
popd
popd popd
touch "${STAMP}/unpack-sources" touch "${STAMP}/unpack-sources"
@@ -81,7 +94,7 @@ function build_tools {
rm -rf "${BISON}" rm -rf "${BISON}"
mkdir -p "${BISON}" mkdir -p "${BISON}"
cd "${BISON}" cd "${BISON}"
"${SRC_DIR}/${BISON}/configure" \ "${SOURCES}/${BISON}/configure" \
--prefix="${HOST_DIR}" --prefix="${HOST_DIR}"
make make
make install make install
@@ -97,7 +110,7 @@ function build_binutils {
rm -rf "${BINUTILS}" rm -rf "${BINUTILS}"
mkdir -p "${BINUTILS}" mkdir -p "${BINUTILS}"
cd "${BINUTILS}" cd "${BINUTILS}"
"${SRC_DIR}/${BINUTILS}/configure" \ "${SOURCES}/${BINUTILS}/configure" \
--prefix="${TARGET_DIR}" \ --prefix="${TARGET_DIR}" \
--target=m68k-amigaos --target=m68k-amigaos
make all make all
@@ -125,11 +138,11 @@ function build_gcc {
rm -rf "${GCC}" rm -rf "${GCC}"
mkdir -p "${GCC}" mkdir -p "${GCC}"
cd "${GCC}" cd "${GCC}"
"${SRC_DIR}/${GCC}/configure" \ "${SOURCES}/${GCC}/configure" \
--prefix="${TARGET_DIR}" \ --prefix="${TARGET_DIR}" \
--target=m68k-amigaos \ --target=m68k-amigaos \
--enable-languages=c \ --enable-languages=c \
--with-headers="${SRC_DIR}/${IXEMUL}/include" --with-headers="${SOURCES}/${IXEMUL}/include"
make all ${FLAGS_FOR_TARGET[*]} make all ${FLAGS_FOR_TARGET[*]}
make install ${FLAGS_FOR_TARGET[*]} make install ${FLAGS_FOR_TARGET[*]}
popd popd
@@ -144,11 +157,11 @@ function build_gpp {
rm -rf "${GCC}" rm -rf "${GCC}"
mkdir -p "${GCC}" mkdir -p "${GCC}"
cd "${GCC}" cd "${GCC}"
"${SRC_DIR}/${GCC}/configure" \ "${SOURCES}/${GCC}/configure" \
--prefix="${TARGET_DIR}" \ --prefix="${TARGET_DIR}" \
--target=m68k-amigaos \ --target=m68k-amigaos \
--enable-languages=c++ \ --enable-languages=c++ \
--with-headers="${SRC_DIR}/${IXEMUL}/include" --with-headers="${SOURCES}/${IXEMUL}/include"
make all ${FLAGS_FOR_TARGET[*]} make all ${FLAGS_FOR_TARGET[*]}
make install ${FLAGS_FOR_TARGET[*]} make install ${FLAGS_FOR_TARGET[*]}
popd popd
@@ -161,7 +174,7 @@ function process_headers {
pushd "${BUILD_DIR}" pushd "${BUILD_DIR}"
rm -rf "${SFDC}" rm -rf "${SFDC}"
cp -a "${SRC_DIR}/${SFDC}" "${SFDC}" cp -a "${SOURCES}/${SFDC}" "${SFDC}"
cd "${SFDC}" cd "${SFDC}"
./configure \ ./configure \
--prefix="${TARGET_DIR}" --prefix="${TARGET_DIR}"
@@ -170,14 +183,14 @@ function process_headers {
popd popd
pushd "${TARGET_DIR}/include" pushd "${TARGET_DIR}/include"
cp -av "${SRC_DIR}/${NDK}/Include/include_h/"* . cp -av "${SOURCES}/${NDK}/Include/include_h/"* .
mkdir -p clib proto inline mkdir -p clib proto inline
patch -d devices -p0 < ${SRC_DIR}/${FD2INLINE}/patches/timer.h.diff patch -d devices -p0 < ${SOURCES}/${FD2INLINE}/patches/timer.h.diff
cp -v "${SRC_DIR}/${FD2INLINE}/include-src/inline/alib.h" inline/ cp -v "${SOURCES}/${FD2INLINE}/include-src/inline/alib.h" inline/
cp -v "${SRC_DIR}/${FD2INLINE}/include-src/inline/macros.h" inline/ cp -v "${SOURCES}/${FD2INLINE}/include-src/inline/macros.h" inline/
cp -v "${SRC_DIR}/${FD2INLINE}/include-src/inline/stubs.h" inline/ cp -v "${SOURCES}/${FD2INLINE}/include-src/inline/stubs.h" inline/
cp -v "${SRC_DIR}/${FD2INLINE}/include-src/proto/alib.h" proto/ cp -v "${SOURCES}/${FD2INLINE}/include-src/proto/alib.h" proto/
for file in ${SRC_DIR}/${NDK}/Include/sfd/*.sfd; do for file in ${SOURCES}/${NDK}/Include/sfd/*.sfd; do
base=$(basename ${file%_lib.sfd}) base=$(basename ${file%_lib.sfd})
sfdc --target=m68k-amigaos --mode=clib \ sfdc --target=m68k-amigaos --mode=clib \
@@ -192,6 +205,16 @@ function process_headers {
touch "${STAMP}/process-headers" touch "${STAMP}/process-headers"
} }
function install_libamiga {
[ -f "${STAMP}/install-libamiga" ] && return 0
pushd "${TARGET_DIR}"
cp -av "${SOURCES}/${LIBAMIGA}/lib" .
popd
touch "${STAMP}/install-libamiga"
}
function build_libnix { function build_libnix {
[ -f "${STAMP}/build-libnix" ] && return 0 [ -f "${STAMP}/build-libnix" ] && return 0
@@ -199,7 +222,7 @@ function build_libnix {
rm -rf "${LIBNIX}" rm -rf "${LIBNIX}"
mkdir -p "${LIBNIX}" mkdir -p "${LIBNIX}"
cd "${LIBNIX}" cd "${LIBNIX}"
"${SRC_DIR}/${LIBNIX}/configure" \ "${SOURCES}/${LIBNIX}/configure" \
--prefix="${TARGET_DIR}" \ --prefix="${TARGET_DIR}" \
--target=m68k-amigaos --target=m68k-amigaos
make all \ make all \
@@ -228,7 +251,7 @@ function build_ixemul {
CFLAGS=-noixemul \ CFLAGS=-noixemul \
AR=m68k-amigaos-ar \ AR=m68k-amigaos-ar \
RANLIB=m68k-amigaos-ranlib \ RANLIB=m68k-amigaos-ranlib \
"${SRC_DIR}/${IXEMUL}/configure" \ "${SOURCES}/${IXEMUL}/configure" \
--prefix=${TARGET_DIR} \ --prefix=${TARGET_DIR} \
--target=m68k-amigaos --target=m68k-amigaos
make MAKEINFO=: all make MAKEINFO=: all
@@ -238,30 +261,37 @@ function build_ixemul {
touch "${STAMP}/build-ixemul" touch "${STAMP}/build-ixemul"
} }
function build {
export CC="gcc-3.4"
prepare_target
unpack_sources
build_tools
export PATH="${HOST_DIR}/bin:${PATH}"
build_binutils
build_gcc
export PATH="${TARGET_DIR}/bin:${PATH}"
process_headers
install_libamiga
build_libnix
#build_ixemul
build_gpp
}
function main { function main {
local -r action="${1:-build}" local -r action="${1:-build}"
case "${action}" in case "${action}" in
"build") "build")
prepare_target build
unpack_sources
build_tools
export PATH="${HOST_DIR}/bin:${PATH}"
build_binutils
build_gcc
export PATH="${TARGET_DIR}/bin:${PATH}"
process_headers
build_libnix
#build_ixemul
build_gpp
;; ;;
"clean") "clean")
for dir in ${SRC_DIR} ${BUILD_DIR} ${HOST_DIR} ${TARGET_DIR} ${STAMP}; do for dir in ${SOURCES} ${BUILD_DIR} ${HOST_DIR} ${TARGET_DIR} ${STAMP}; do
echo rm -rf "${dir}" rm -rf "${dir}"
done done
;; ;;
*) *)