This is the mail archive of the cygwin-apps@cygwin.com mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

mknetrel: build cross tools


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]