From b260b9acff7d70a1dc6b1a00dd6af99cfbf9c92f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krystian=20Bac=C5=82awski?= Date: Mon, 13 Feb 2012 20:48:35 -0800 Subject: [PATCH] Updated script and documentation. --- README | 38 +++++++++------ bootstrap.sh | 130 +++++++++++++++++++++++++++++++-------------------- 2 files changed, 103 insertions(+), 65 deletions(-) diff --git a/README b/README index dd2a031..cb76178 100644 --- a/README +++ b/README @@ -1,8 +1,14 @@ -info: m68k-amigaos gcc toolchain bootstrap -author: Krystian Bacławski +Info: m68k-amigaos gcc/binutils toolchain bootstrap. +Author: Krystian Bacławski 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: * Ubuntu 10.04 ia32 @@ -12,31 +18,33 @@ Prerequisites (look at bootstrap.conf file): - gcc 3.4.6 - flex - make + - lha + - perl 5.10 * sources from GNU project: - gcc 2.95.3 - binutils 2.9.1 - bison 1.28 * Amiga specific sources & binaries: - - libnix 2.1: - http://sourceforge.net/projects/libnix/ - - AmigaOS NDK 3.9: - http://www.haage-partner.de/download/AmigaOS/ - - fd2inline 1.21: - 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/ + - libnix 2.1 + - AmigaOS NDK 3.9 + - fd2inline 1.21 + - sfdc 1.4 + - libamiga-bin Usage: - 1) Download sources, and put them into archive directory. + 1) Download sources (use fetch.sh script in archives directory). 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: * Testing on: - MacOS X 10.7 - Cygwin * Remove dependencies: + - gcc 3.4 - fd2inline - libamiga-bin + * Make it installable into some prefix. + * Provide some rudimentary testing (C / C++ sources). + * Build ixemul. diff --git a/bootstrap.sh b/bootstrap.sh index 0abf7a3..444a770 100755 --- a/bootstrap.sh +++ b/bootstrap.sh @@ -1,7 +1,9 @@ #!/bin/bash -Eeux 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 HOST_DIR="${TOP_DIR}/host" readonly TARGET_DIR="${TOP_DIR}/target" @@ -18,7 +20,6 @@ function prepare_target { mkdir -p "m68k-amigaos" "lib" "os-include" "os-lib" ln -sf "../os-include" "m68k-amigaos/include" ln -sf "../lib" "m68k-amigaos/lib" - tar -xjf "${TOP_DIR}/${LIBAMIGA_SRC}" popd touch "${STAMP}/prepare-target" @@ -27,45 +28,57 @@ function prepare_target { function unpack_sources { [ -f "${STAMP}/unpack-sources" ] && return 0 - rm -rf "${SRC_DIR}" - mkdir -p "${SRC_DIR}" - pushd "${SRC_DIR}" + rm -rf "${SOURCES}" + mkdir -p "${SOURCES}" + pushd "${SOURCES}" rm -rf "${BISON}" - tar -xjf "${TOP_DIR}/${BISON_SRC}" + tar -xzf "${ARCHIVES}/${BISON_SRC}" rm -rf "${BINUTILS}" - tar -xjf "${TOP_DIR}/${BINUTILS_SRC}" + tar -xzf "${ARCHIVES}/${BINUTILS_SRC}" pushd "${BINUTILS}" - zcat "${TOP_DIR}/${BINUTILS_PATCH}" | patch -p1 + zcat "${PATCHES}/${BINUTILS_PATCH}" | patch -p1 popd rm -rf "${GCC}" - tar -xjf "${TOP_DIR}/${GCC_CORE_SRC}" - tar -xjf "${TOP_DIR}/${GCC_CPP_SRC}" + tar -xzf "${ARCHIVES}/${GCC_CORE_SRC}" + tar -xzf "${ARCHIVES}/${GCC_CPP_SRC}" pushd "${GCC}" - zcat "${TOP_DIR}/${GCC_CORE_PATCH}" | patch -p1 - zcat "${TOP_DIR}/${GCC_CPP_PATCH}" | patch -p1 + zcat "${PATCHES}/${GCC_CORE_PATCH}" | patch -p1 + zcat "${PATCHES}/${GCC_CPP_PATCH}" | patch -p1 popd rm -rf "${FD2INLINE}" - tar -xjf "${TOP_DIR}/${FD2INLINE_SRC}" + tar -xzf "${ARCHIVES}/${FD2INLINE_SRC}" 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}" - lha x "${TOP_DIR}/${NDK_SRC}" + lha -xq "${ARCHIVES}/${NDK_SRC}" rm -rf ndk_* *.info rm -rf "${IXEMUL}" - tar -xjf "${TOP_DIR}/${IXEMUL_SRC}" + lha -xq "${ARCHIVES}/${IXEMUL_SRC}" + mv "ixemul" "${IXEMUL}" chmod a+x "${IXEMUL}/configure" rm -rf "${LIBNIX}" - tar -xjf "${TOP_DIR}/${LIBNIX_SRC}" + tar -xzf "${ARCHIVES}/${LIBNIX_SRC}" + mv "libnix" "${LIBNIX}" chmod a+x "${LIBNIX}/mkinstalldirs" + rm -rf "${LIBAMIGA}" + mkdir "${LIBAMIGA}" + pushd "${LIBAMIGA}" + tar -xzf "${ARCHIVES}/${LIBAMIGA_SRC}" + popd + popd touch "${STAMP}/unpack-sources" @@ -81,7 +94,7 @@ function build_tools { rm -rf "${BISON}" mkdir -p "${BISON}" cd "${BISON}" - "${SRC_DIR}/${BISON}/configure" \ + "${SOURCES}/${BISON}/configure" \ --prefix="${HOST_DIR}" make make install @@ -97,7 +110,7 @@ function build_binutils { rm -rf "${BINUTILS}" mkdir -p "${BINUTILS}" cd "${BINUTILS}" - "${SRC_DIR}/${BINUTILS}/configure" \ + "${SOURCES}/${BINUTILS}/configure" \ --prefix="${TARGET_DIR}" \ --target=m68k-amigaos make all @@ -125,11 +138,11 @@ function build_gcc { rm -rf "${GCC}" mkdir -p "${GCC}" cd "${GCC}" - "${SRC_DIR}/${GCC}/configure" \ + "${SOURCES}/${GCC}/configure" \ --prefix="${TARGET_DIR}" \ --target=m68k-amigaos \ --enable-languages=c \ - --with-headers="${SRC_DIR}/${IXEMUL}/include" + --with-headers="${SOURCES}/${IXEMUL}/include" make all ${FLAGS_FOR_TARGET[*]} make install ${FLAGS_FOR_TARGET[*]} popd @@ -144,11 +157,11 @@ function build_gpp { rm -rf "${GCC}" mkdir -p "${GCC}" cd "${GCC}" - "${SRC_DIR}/${GCC}/configure" \ + "${SOURCES}/${GCC}/configure" \ --prefix="${TARGET_DIR}" \ --target=m68k-amigaos \ --enable-languages=c++ \ - --with-headers="${SRC_DIR}/${IXEMUL}/include" + --with-headers="${SOURCES}/${IXEMUL}/include" make all ${FLAGS_FOR_TARGET[*]} make install ${FLAGS_FOR_TARGET[*]} popd @@ -161,7 +174,7 @@ function process_headers { pushd "${BUILD_DIR}" rm -rf "${SFDC}" - cp -a "${SRC_DIR}/${SFDC}" "${SFDC}" + cp -a "${SOURCES}/${SFDC}" "${SFDC}" cd "${SFDC}" ./configure \ --prefix="${TARGET_DIR}" @@ -170,14 +183,14 @@ function process_headers { popd pushd "${TARGET_DIR}/include" - cp -av "${SRC_DIR}/${NDK}/Include/include_h/"* . + cp -av "${SOURCES}/${NDK}/Include/include_h/"* . mkdir -p clib proto inline - patch -d devices -p0 < ${SRC_DIR}/${FD2INLINE}/patches/timer.h.diff - cp -v "${SRC_DIR}/${FD2INLINE}/include-src/inline/alib.h" inline/ - cp -v "${SRC_DIR}/${FD2INLINE}/include-src/inline/macros.h" inline/ - cp -v "${SRC_DIR}/${FD2INLINE}/include-src/inline/stubs.h" inline/ - cp -v "${SRC_DIR}/${FD2INLINE}/include-src/proto/alib.h" proto/ - for file in ${SRC_DIR}/${NDK}/Include/sfd/*.sfd; do + patch -d devices -p0 < ${SOURCES}/${FD2INLINE}/patches/timer.h.diff + cp -v "${SOURCES}/${FD2INLINE}/include-src/inline/alib.h" inline/ + cp -v "${SOURCES}/${FD2INLINE}/include-src/inline/macros.h" inline/ + cp -v "${SOURCES}/${FD2INLINE}/include-src/inline/stubs.h" inline/ + cp -v "${SOURCES}/${FD2INLINE}/include-src/proto/alib.h" proto/ + for file in ${SOURCES}/${NDK}/Include/sfd/*.sfd; do base=$(basename ${file%_lib.sfd}) sfdc --target=m68k-amigaos --mode=clib \ @@ -192,6 +205,16 @@ function 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 { [ -f "${STAMP}/build-libnix" ] && return 0 @@ -199,7 +222,7 @@ function build_libnix { rm -rf "${LIBNIX}" mkdir -p "${LIBNIX}" cd "${LIBNIX}" - "${SRC_DIR}/${LIBNIX}/configure" \ + "${SOURCES}/${LIBNIX}/configure" \ --prefix="${TARGET_DIR}" \ --target=m68k-amigaos make all \ @@ -228,7 +251,7 @@ function build_ixemul { CFLAGS=-noixemul \ AR=m68k-amigaos-ar \ RANLIB=m68k-amigaos-ranlib \ - "${SRC_DIR}/${IXEMUL}/configure" \ + "${SOURCES}/${IXEMUL}/configure" \ --prefix=${TARGET_DIR} \ --target=m68k-amigaos make MAKEINFO=: all @@ -238,30 +261,37 @@ function 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 { local -r action="${1:-build}" case "${action}" in "build") - prepare_target - 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 + build ;; "clean") - for dir in ${SRC_DIR} ${BUILD_DIR} ${HOST_DIR} ${TARGET_DIR} ${STAMP}; do - echo rm -rf "${dir}" + for dir in ${SOURCES} ${BUILD_DIR} ${HOST_DIR} ${TARGET_DIR} ${STAMP}; do + rm -rf "${dir}" done ;; *)