This is the mail archive of the
cygwin-apps@cygwin.com
mailing list for the Cygwin project.
mknetrel: build cross tools
- From: Jan Nieuwenhuizen <janneke at gnu dot org>
- To: cygwin-apps at cygwin dot com
- Date: Tue, 23 Jul 2002 18:52:11 +0200
- Subject: mknetrel: build cross tools
- Organization: Jan at Appel
As mentioned in a previous mail, I've been using mknetrel to build
the cross-tools and setup a cross building environment.
I had to make some notable additions to read_user_config () and some
changes to dorebuild (), wrt setting of tooldir.
Btw, this patch include the necessary, but very minor, $build and $ver
patch from my previous post.
Hope you like [to include] it.
Greetings,
Jan.
2002-07-23 Jan Nieuwenhuizen <janneke@gnu.org>
* extra/cross-binutils: New file.
* extra/cross-gcc: Likewise.
* extra/cross-cygwin: Likewise.
* bin/setup-cross: Likewise.
* CROSS-TOOLS: Likewise.
* README: Mention CROSS-TOOLS for building cross tools.
2002-07-22 Jan Nieuwenhuizen <janneke@gnu.org>
* bin/mknetrel (read_user_config): Test and set build vars for
cross compiling. Replace `i686-pc-linux' with `$(gcc
-dumpmachine)'.
(setvars): Set $tooldir and $gcc_tooldir, for both cygwin builds
and cross-tool builds.
(dorebuild): Use $tooldir and $gcc_tooldir.
* bin/mknetrel (setvars): Handle package names with dashes for
setting of $base and $ver.
diff -purNX.cvsignore -x'*~' -xCVS -xpatch -xChangeLog.jcn ../mknetrel.cvs/CROSS-TOOLS ./CROSS-TOOLS
--- ../mknetrel.cvs/CROSS-TOOLS 1970-01-01 01:00:00.000000000 +0100
+++ ./CROSS-TOOLS 2002-07-23 18:44:12.000000000 +0200
@@ -0,0 +1,36 @@
+Mknetrel can be used natively on Cygwin, or in a cross
+build environment (the default is cross building on GNU/Linux).
+
+Mknetrel can also be used to setup such a cross build environment. A
+shell snippet, `extra/cross-cygwin' is provided to prepare the cross
+build environment. Two other shell snippets are included for building
+binutils and gcc as cross tools: `extra/cross-binutils' and
+`extra/cross-gcc'.
+
+The process of setting up and testing the cross build environment is
+automated in the script `bin/setup-cross'.
+
+Before using this script, you need to setup /cygwin and /netrel roots,
+and download at least binary packages cygwin and w32api, and source
+packages binutils and gcc from a Cygwin mirror. It is advised to also
+download the source package for ed, that will be used to test your
+setup.
+
+Do something like:
+
+ mirror='ftp://mirrors.rcn.net/mirrors/sources.redhat.com/cygwin/release'
+
+ wget -P/tmp $mirror/cygwin/cygwin-1.3.12-2.tar.bz2
+ wget -P/tmp $mirror/w32api/w32api-1.5.1-1.tar.bz
+
+ wget -P/tmp $mirror/binutils/binutils-20020706-2-src.tar.bz2
+ wget -P/tmp $mirror/gcc/gcc-2.95.3-5-src.tar.bz2
+ wget -P/tmp $mirror/ed/ed-0.2-1-src.tar.bz2
+
+ mkdir -p /cygwin /netrel
+ ./bin/setup-cross
+
+Good luck,
+
+Jan Nieuwenhuizen
+<janneke@gnu.org>
diff -purNX.cvsignore -x'*~' -xCVS -xpatch -xChangeLog.jcn ../mknetrel.cvs/README ./README
--- ../mknetrel.cvs/README 2002-07-09 05:34:52.000000000 +0200
+++ ./README 2002-07-23 00:59:52.000000000 +0200
@@ -11,9 +11,10 @@ installed. You may also need all of the
available in the cygwin distribution like zlib, gettext, etc.
Mknetrel reads config vars from your `~/.mknetrel'. In a pure cygwin
-environment, installed on Windows, cygwin_root would be '/'. On linux,
-I have the cross build tools in /cygwin/{bin,lib}. The netrel directory
-is in /netrel.
+environment, installed on Windows, cygwin_root would be '/'. On
+linux, I have the cross build tools in /cygwin/{bin,lib}. See
+CROSS-TOOLS for how to build and install cross build tools using
+mknetrel. The netrel directory is in /netrel.
cygwin_root=/cygwin
netrel_root=/netrel
diff -purNX.cvsignore -x'*~' -xCVS -xpatch -xChangeLog.jcn ../mknetrel.cvs/bin/mknetrel ./bin/mknetrel
--- ../mknetrel.cvs/bin/mknetrel 2002-07-14 06:29:33.000000000 +0200
+++ ./bin/mknetrel 2002-07-23 17:36:11.000000000 +0200
@@ -6,8 +6,28 @@ read_user_config() {
CYGWIN*) iscygwin() { :; } ;;
*) iscygwin() { return 1; } ;;
esac
+
if iscygwin; then
: ${cygwin_root=/}
+ : ${cygwin_prefix=/usr}
+ else
+ : ${cygwin_root=/cygwin}
+ : ${cygwin_prefix=/cygwin/usr}
+ fi
+
+ : ${knownpath="${cygwin_root}/bin:${cygwin_prefix}/bin:"}
+ PATH="$knownpath/usr/local/bin:$PATH:babe"
+
+ if [ -x "$(type -p i686-pc-cygwin-gcc 2> /dev/null)" ]; then
+ havecrosscompiler () { :; }
+ else
+ havecrosscompiler () { return 1; }
+ fi
+
+ : ${build_arch="$(gcc -dumpmachine)"}
+ [ "$build_arch" != "i686-pc-cygwin" ] && target_arch='i686-pc-cygwin'
+
+ if iscygwin; then
: ${build_cxx='g++'}
: ${build_cc='gcc'}
: ${build_ranlib='ranlib'}
@@ -16,8 +36,7 @@ read_user_config() {
: ${build_nm='nm'}
: ${build_strip='strip'}
: ${build_config_opts=''}
- else
- : ${cygwin_root=/cygwin}
+ elif havecrosscompiler; then
: ${build_cxx='i686-pc-cygwin-g++'}
: ${build_cc='i686-pc-cygwin-gcc'}
: ${build_ranlib='i686-pc-cygwin-ranlib'}
@@ -25,10 +44,19 @@ read_user_config() {
: ${build_ar='i686-pc-cygwin-ar'}
: ${build_nm='i686-pc-cygwin-nm'}
: ${build_strip='i686-pc-cygwin-strip'}
- : ${build_config_opts='--build=i686-pc-linux --host=i686-pc-cygwin --target=i686-pc-cygwin'}
+ : ${build_config_opts="--build=$build_arch --host=i686-pc-cygwin --target=i686-pc-cygwin"}
+ else
+ : ${build_cxx='g++'}
+ : ${build_cc='gcc'}
+ : ${build_ranlib='ranlib'}
+ : ${build_dllwrap='dllwrap'}
+ : ${build_ar='ar'}
+ : ${build_nm='nm'}
+ : ${build_strip='strip'}
+ : ${build_config_opts="--build=$build_arch --host=$build_arch --target=i686-pc-cygwin"}
fi
+
: ${netrel_root=/netrel}
- : ${knownpath="${cygwin_root}/bin:"}
export knownpath
}
@@ -62,8 +90,8 @@ setvars() {
package_name="$package"
package_src="$package"
- base=`expr "$package" : '\([^-]*\)-.*$'`
- ver=`expr "$package" : '[^-]*-\(.*\)$'`
+ ver=`expr "$package" : '.*-\([-.0-9]*-[0-9]*\)'`
+ base=`expr "$package" : "\(.*\)-$ver"`
src="$here/src/$package"
build=$here/build/$package
inst=$here/inst/$package
@@ -78,6 +106,8 @@ setvars() {
includedir=/nonexistent/include
libexecdir=/usr/sbin
bindir=/usr/bin
+ tooldir=$(echo $cygwin_prefix/$target_arch | sed 's@//@/@g')
+ gcc_tooldir=$(echo $cygwin_prefix/$target_arch | sed s'@//@/@g')
}
setup() {
@@ -208,7 +238,7 @@ dorebuild() {
addmakeflags '"TARGET_FLAGS_TO_PASS=$EXTRABUILDARGS"' "' " '$(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS)' "'"
addmakeflags '"FLAGS_TO_PASS=$EXTRABUILDARGS"' "' " '$(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS)' "'"
fi
- eval "make $makeflags tooldir=/usr gcc_tooldir=/usr" || exit 1
+ eval "make $makeflags tooldir=$tooldir gcc_tooldir=$gcc_tooldir" || exit 1
# make "$EXTRABUILDARGS" "TARGET_FLAGS_TO_PASS=$EXTRABUILDARGS"' $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS)' "FLAGS_TO_PASS=$EXTRABUILDARGS"' $(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS)' CFLAGS="$opt" CXXFLAGS="$opt" tooldir=/usr gcc_tooldir=/usr || exit 1
postbuild
makeflags=
@@ -219,11 +249,11 @@ dorebuild() {
addmakeflags '"TARGET_FLAGS_TO_PASS=$EXTRAINSTALLARGS"' "' " '$(BASE_FLAGS_TO_PASS) $(EXTRA_TARGET_FLAGS)' "'"
addmakeflags '"FLAGS_TO_PASS=$EXTRAINSTALLARGS"' "' " '$(BASE_FLAGS_TO_PASS) $(EXTRA_HOST_FLAGS)' "'"
fi
- addmakeflags 'AM_MAKEFLAGS="prefix=$inst$prefix exec_prefix=$inst$exec_prefix bindir=$inst$bindir libdir=$inst$libdir tcl_libdir=$inst$libdir sysconfdir=$inst$sysconfdir includedir=$inst$prefix/include tooldir=$inst/$prefix gcc_tooldir=$inst/$prefix libexecdir=$inst$libexecdir $EXTRAINSTALLARGS"'
- addmakeflags 'prefix=$inst$prefix exec_prefix=$inst$exec_prefix bindir=$inst$bindir libdir=$inst$libdir tcl_libdir=$inst$libdir sysconfdir=$inst$sysconfdir includedir=$inst$prefix/include tooldir=$inst$prefix gcc_tooldir=$inst$prefix libexecdir=$inst$libexecdir'
+ addmakeflags 'AM_MAKEFLAGS="prefix=$inst$prefix exec_prefix=$inst$exec_prefix bindir=$inst$bindir libdir=$inst$libdir tcl_libdir=$inst$libdir sysconfdir=$inst$sysconfdir includedir=$inst$prefix/include tooldir=$inst$tooldir gcc_tooldir=$inst$gcc_tooldir libexecdir=$inst$libexecdir $EXTRAINSTALLARGS"'
+ addmakeflags 'prefix=$inst$prefix exec_prefix=$inst$exec_prefix bindir=$inst$bindir libdir=$inst$libdir tcl_libdir=$inst$libdir sysconfdir=$inst$sysconfdir includedir=$inst$prefix/include tooldir=$inst$tooldir gcc_tooldir=$inst$gcc_tooldir libexecdir=$inst$libexecdir'
eval "make $makeflags install" || exit 1
- needinstall_info && gcc_tooldir=$inst$prefix make -i prefix=$inst$prefix exec_prefix=$inst$exec_prefix bindir=$inst$bindir libdir=$inst$libdir tcl_libdir=$inst$libdir sysconfdir=$inst$sysconfdir includedir=$inst$prefix/include tooldir=$inst$prefix gcc_tooldir=$inst$prefix libexecdir=$inst$libexecdir \
-AM_MAKEFLAGS="prefix=$inst$prefix exec_prefix=$inst$exec_prefix bindir=$inst$bindir libdir=$inst$libdir tcl_libdir=$inst$libdir sysconfdir=$inst$sysconfdir includedir=$inst$prefix/include tooldir=$inst$prefix gcc_tooldir=$inst$prefix libexecdir=$inst$libexecdir $EXTRAINSTALLARGS" install-info || :
+ needinstall_info && gcc_tooldir=$inst$gcc_tooldir make -i prefix=$inst$prefix exec_prefix=$inst$exec_prefix bindir=$inst$bindir libdir=$inst$libdir tcl_libdir=$inst$libdir sysconfdir=$inst$sysconfdir includedir=$inst$prefix/include tooldir=$inst$tooldir gcc_tooldir=$inst$gcc_tooldir libexecdir=$inst$libexecdir \
+AM_MAKEFLAGS="prefix=$inst$prefix exec_prefix=$inst$exec_prefix bindir=$inst$bindir libdir=$inst$libdir tcl_libdir=$inst$libdir sysconfdir=$inst$sysconfdir includedir=$inst$prefix/include tooldir=$inst$tooldir gcc_tooldir=$inst$gcc_tooldir libexecdir=$inst$libexecdir $EXTRAINSTALLARGS" install-info || :
postinstall
cd $here || exit 1
}
diff -purNX.cvsignore -x'*~' -xCVS -xpatch -xChangeLog.jcn ../mknetrel.cvs/bin/setup-cross ./bin/setup-cross
--- ../mknetrel.cvs/bin/setup-cross 1970-01-01 01:00:00.000000000 +0100
+++ ./bin/setup-cross 2002-07-23 16:03:41.000000000 +0200
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+[ "$1" = '-x' ] && { shift; set -x; }
+[ -n "$1" ] && { echo "Usage: $0 [-x]"; exit 2; }
+
+[ -r "$HOME/.mknetrel" ] && . "$HOME/.mknetrel"
+: ${cygwin_root=/cygwin}
+: ${netrel_root=/netrel}
+: ${downloads=/tmp}
+
+here=$(pwd)
+uploads=$netrel_root/uploads
+src=$netrel_root/src
+mkdir -p $src
+
+./bin/mknetrel cross-cygwin
+
+for i in binutils gcc; do
+ rm -rf $src/*-x-$i-[0-9]*
+ mkdir -p $src && cd $src
+
+ tar xjf $downloads/$i-[0-9]*
+ mv $i-[0-9]* $(echo $i-[0-9]* | sed s/^/$(gcc -dumpmachine)-x-/)
+
+ cd $here
+
+ ln -s cross-$i extra/$(gcc -dumpmachine)-x-$i
+ ./bin/mknetrel $(gcc -dumpmachine)-x-$i
+
+ tarball=$(echo $uploads/*-x-$i*[0-9].tar.bz2)
+ [ -r "$tarball" ] || exit 1
+ cd /
+ tar xkjf $tarball
+done
+
+edball=$(echo $downloads/ed-[0-9]*.tar.bz2)
+
+if [ -r "$edball" ]; then
+ cd $here
+ rm -rf $src/ed-[0-9]*
+ cd $src || exit 1
+ tar xjf $downloads/ed-[0-9]*
+
+ cd $here
+ ./bin/mknetrel ed
+fi
+
+
diff -purNX.cvsignore -x'*~' -xCVS -xpatch -xChangeLog.jcn ../mknetrel.cvs/extra/cross-binutils ./extra/cross-binutils
--- ../mknetrel.cvs/extra/cross-binutils 1970-01-01 01:00:00.000000000 +0100
+++ ./extra/cross-binutils 2002-07-23 18:01:51.000000000 +0200
@@ -0,0 +1,21 @@
+# -*- shell-script -*-
+
+prefix=$cygwin_prefix
+exec_prefix=$prefix
+sysconfdir=$prefix/etc
+libdir=$prefix/lib
+includedir=$prefix/include
+libexecdir=$prefix/sbin
+bindir=$prefix/bin
+
+needdevoflags () {
+ return 1
+}
+
+
+preconfig () {
+ CONFIGOPTS="--cache config.cache --with-gnu-ld $CONFIGOPTS"
+ iscygwin || cat <<EOF >> config.cache
+ac_cv_exeext=no
+EOF
+}
diff -purNX.cvsignore -x'*~' -xCVS -xpatch -xChangeLog.jcn ../mknetrel.cvs/extra/cross-cygwin ./extra/cross-cygwin
--- ../mknetrel.cvs/extra/cross-cygwin 1970-01-01 01:00:00.000000000 +0100
+++ ./extra/cross-cygwin 2002-07-23 18:44:56.000000000 +0200
@@ -0,0 +1,100 @@
+# -*-shell-script-*-
+
+x_prefix=$cygwin_prefix/X11R6
+
+
+packages="
+cygwin
+gettext
+guile-devel
+jpeg
+libiconv
+libiconv2
+libintl2
+libltdl3
+libncurses6
+libpng12
+libpng12-devel
+libtool-devel
+ncurses
+python
+readline
+libreadline5
+tiff
+w32api
+zlib
+"
+
+x_packages="
+Xbin.tgz
+Xprog.tgz
+"
+
+# for tetex-bin
+# jpeg ncurses libncurses6 libpng12 libpng12-devel tiff zlib
+
+# for guile
+# libtool-devel libltdl3 readline libreadline5 ncurses libncurses6
+
+# for lily
+# gettext libiconv libiconv2 libintl2 libiconv2 python for lily
+
+
+# mingw-runtime for strings.h
+# ftp://ftp.sf.net/pub/sourceforge/mingw/mingw-1.0.1-20010726.tar.gz
+# ftp://ftp.sf.net/pub/sourceforge/mingw/w32api-1.4.tar.gz
+# ftp://ftp.sf.net/pub/sourceforge/mingw/gcc-2.95.3-20010828.tar.gz
+
+# jpeg, libpng10, libpng10-devel, tiff, zlib for netpbm
+
+
+cd $cygwin_root || exit 1
+
+for i in $packages; do
+ p=$downloads/$i-[0-9]*
+ if [ -r $p ]; then
+ echo -n "Untarring $p ..."
+ tar xjf $p 2> /dev/null || tar xzf $p
+ echo "done"
+ else
+ echo "No such package: $i"
+ fi
+done
+
+mkdir -p $x_prefix
+cd $x_prefix || exit 1
+
+for i in $x_packages; do
+ p=$downloads/$i*
+ if [ -r $p ]; then
+ echo -n "Untarring $p ..."
+ tar xjf $p 2> /dev/null || tar xzf $p
+ echo "done"
+ else
+ echo "No such package: $i"
+ fi
+done
+
+
+echo -n "Fixing up ..."
+
+cd $cygwin_prefix || exit 1
+mkdir -p $target_arch lib include
+cd $target_arch
+ln -s ../include ../lib .
+
+cd $cygwin_prefix/include
+f=/usr/include/FlexLexer.h && [ -r $f ] && ln -sf $f .
+f=/usr/local/include/FlexLexer.h && [ -r $f ] && ln -sf $f .
+
+echo "done"
+echo
+
+postinstall="$(ls -1 $cygwin_root/etc/postinstall/* | grep -v '.done$')"
+if [ -n "$postinstall" ]; then
+ echo "Please see after postinstall scripts:"
+ echo " $postinstall"
+ echo "yourself"
+fi
+
+exit 0
diff -purNX.cvsignore -x'*~' -xCVS -xpatch -xChangeLog.jcn ../mknetrel.cvs/extra/cross-gcc ./extra/cross-gcc
--- ../mknetrel.cvs/extra/cross-gcc 1970-01-01 01:00:00.000000000 +0100
+++ ./extra/cross-gcc 2002-07-23 18:18:21.000000000 +0200
@@ -0,0 +1,39 @@
+# -*- shell-script -*-
+
+prefix=$cygwin_prefix
+exec_prefix=$prefix
+sysconfdir=$prefix/etc
+libdir=$prefix/lib
+includedir=$prefix/include
+libexecdir=$prefix/sbin
+bindir=$prefix/bin
+
+## PATH=$cygwin_prefix/bin:$PATH
+
+needdevoflags () {
+ return 1
+}
+
+preconfig () {
+ CPPFLAGS="-I $cygwin_prefix/include/w32api"
+
+ opt="-O2 -g -DATTRIBUTE_NORETURN= -DATTRIBUTE_UNUSED= $CPPFLAGS"
+
+ CONFIGOPTS="--enable-threads \
+ --with-headers=$cygwin_prefix/include \
+ --with-libs=$cygwin_prefix/lib \
+ $CONFIGOPTS"
+
+ CONFIGOPTS="--cache config.cache --with-gnu-ld $CONFIGOPTS"
+ iscygwin || cat <<EOF >> config.cache
+ac_cv_exeext=no
+EOF
+}
+
+prebuild () {
+ addmakeflags mflags="LANGUAGES='c c++'"
+}
+
+preinstall () {
+ addmakeflags mflags="LANGUAGES='c c++'"
+}
--
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond - The music typesetter
http://www.xs4all.nl/~jantien | http://www.lilypond.org