From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.33) id 1Cc1mr-00035T-Lp for mharc-grub-devel@gnu.org; Wed, 08 Dec 2004 08:23:21 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.33) id 1Cc1mq-000357-Ba for grub-devel@gnu.org; Wed, 08 Dec 2004 08:23:20 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.33) id 1Cc1mp-00034Z-R4 for grub-devel@gnu.org; Wed, 08 Dec 2004 08:23:20 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1Cc1mo-00034T-8E for grub-devel@gnu.org; Wed, 08 Dec 2004 08:23:19 -0500 Received: from [193.45.208.6] (helo=griffin.skarpodata.com) by monty-python.gnu.org with esmtp (TLSv1:DES-CBC3-SHA:168) (Exim 4.34) id 1Cc1cq-0004Bi-AT for grub-devel@gnu.org; Wed, 08 Dec 2004 08:13:01 -0500 Received: from localhost.localdomain (183.201.216.81.s-s.siw.siwnet.net [81.216.201.183]) by griffin.skarpodata.com (8.12.10/8.12.10) with ESMTP id iB8EbAld024231; Wed, 8 Dec 2004 15:37:10 +0100 To: Marco Gerards References: <87sm6iqs9s.fsf@night.trouble.net> <87acsqp3fe.fsf@marco.marco-g.com> <87k6rtoyrj.fsf@night.trouble.net> <87hdmxhufk.fsf@marco.marco-g.com> <87fz2hotzi.fsf@night.trouble.net> <87d5xlhtcb.fsf@marco.marco-g.com> From: Johan Rydberg Date: Wed, 08 Dec 2004 14:24:37 +0100 In-Reply-To: <87d5xlhtcb.fsf@marco.marco-g.com> (Marco Gerards's message of "Wed, 08 Dec 2004 12:23:16 +0000") Message-ID: <87brd4q5wq.fsf@night.trouble.net> User-Agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Cc: The development of GRUB 2 Subject: Re: multiboot X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Dec 2004 13:23:20 -0000 --=-=-= Marco Gerards writes: >> I didn't manage to do so. I'll research it a bit and probably send in >> a patch. > > Nice. The initial problem was that AC_CHECK_SIZEOF doesn't work if you're cross-compiling. I fixed this by using AC_COMPILE_CHECK_SIZEOF [1] instead. But the major problem is that parts of GRUB2 requires a C library to be installed, at least headers such as alloca.h and stdint.h. Is this really a valid demand? Another issue regarding BUILD_CC. The normal convention is that if you want to build something that should run on the build machine, you use something similar to BUILD_CC. That's why I think the following patch is self-explaining. --- configure.ac 4 Apr 2004 13:45:59 -0000 1.9 +++ configure.ac 8 Dec 2004 12:57:07 -0000 @@ -109,7 +109,7 @@ AC_PATH_PROG(RUBY, ruby) # For cross-compiling. -if test "x$build" = "x$host"; then +if test "x$build" != "x$host"; then AC_CHECK_PROGS(BUILD_CC, [gcc egcs cc], [AC_MSG_ERROR([none of gcc, egcs and cc is found. set BUILD_CC manually.])]) else @@ -127,8 +127,8 @@ That brings us the next issue; BUILD_CC is used to build _everything_, including the host-specific object files, and since BUILD_CC is set to /usr/bin/gcc in my cross-compiler environment it will try to compile PPC assembler sources with a i386 compiler. Not good. My suggestion is to create a new class for programs that should be host-specific, and let Utilities be compiled on the build machine. See the patch. ~j [1] http://ac-archive.sourceforge.net/Miscellaneous/ac_compile_check_sizeof.html --=-=-= Content-Type: text/x-patch Content-Disposition: inline; filename=grub-build-cc.patch Index: genmk.rb =================================================================== RCS file: /cvsroot/grub/grub2/genmk.rb,v retrieving revision 1.8 diff -u -r1.8 genmk.rb --- genmk.rb 4 Apr 2004 13:45:59 -0000 1.8 +++ genmk.rb 8 Dec 2004 13:11:19 -0000 @@ -205,9 +205,55 @@ end end +class Program + def initialize(dir, name) + @dir = dir + @name = name + end + attr_reader :dir, :name + + def rule(sources) + prefix = @name.to_var + objs = sources.collect do |src| + raise "unknown source file `#{src}'" if /\.[cS]$/ !~ src + prefix + '-' + src.to_obj + end + objs_str = objs.join(' '); + deps = objs.collect {|obj| obj.suffix('d')} + deps_str = deps.join(' '); + + "CLEANFILES += #{@name} #{objs_str} +MOSTLYCLEANFILES += #{deps_str} + +#{@name}: #{objs_str} + $(BUILD_CC) -o $@ $^ $(BUILD_LDFLAGS) $(#{prefix}_LDFLAGS) + +" + objs.collect_with_index do |obj, i| + src = sources[i] + fake_obj = File.basename(src).suffix('o') + dep = deps[i] + dir = File.dirname(src) + + "#{obj}: #{src} + $(CC) -I#{dir} -I$(srcdir)/#{dir} $(CPPFLAGS) $(CFLAGS) -DGRUB_UTIL=1 $(#{prefix}_CFLAGS) -c -o $@ $< + +#{dep}: #{src} + set -e; \ + $(CC) -I#{dir} -I$(srcdir)/#{dir} $(CPPFLAGS) $(CFLAGS) -DGRUB_UTIL=1 $(#{prefix}_CFLAGS) -M $< \ + | sed 's,#{Regexp.quote(fake_obj)}[ :]*,#{obj} $@ : ,g' > $@; \ + [ -s $@ ] || rm -f $@ + +-include #{dep} + +" + end.join('') + end +end + images = [] utils = [] pmodules = [] +programs = [] cont = false s = nil @@ -245,6 +291,11 @@ Utility.new(prefix, util) end + when 'PROGRAMS' + programs += args.split(/\s+/).collect do |util| + Program.new(prefix, util) + end + when 'SOURCES' if img = images.detect() {|i| i.name.to_var == prefix} print img.rule(args.split(/\s+/)) @@ -252,6 +303,8 @@ print pmod.rule(args.split(/\s+/)) elsif util = utils.detect() {|u| u.name.to_var == prefix} print util.rule(args.split(/\s+/)) + elsif program = programs.detect() {|u| u.name.to_var == prefix} + print program.rule(args.split(/\s+/)) end end end Index: conf/powerpc-ieee1275.rmk =================================================================== RCS file: /cvsroot/grub/grub2/conf/powerpc-ieee1275.rmk,v retrieving revision 1.15 diff -u -r1.15 powerpc-ieee1275.rmk --- conf/powerpc-ieee1275.rmk 4 Dec 2004 18:45:45 -0000 1.15 +++ conf/powerpc-ieee1275.rmk 8 Dec 2004 13:11:19 -0000 @@ -15,8 +15,10 @@ kernel_syms.lst: $(addprefix include/grub/,$(kernel_img_HEADERS)) genkernsyms.sh sh $(srcdir)/genkernsyms.sh $(filter %h,$^) > $@ +# Programs. +sbin_PROGRAMS = grubof + # Utilities. -sbin_UTILITIES = grubof bin_UTILITIES = grub-emu noinst_UTILITIES = genmoddep --=-=-=--