grub-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: multiboot


From: Johan Rydberg
Subject: Re: multiboot
Date: Wed, 08 Dec 2004 14:24:37 +0100
User-agent: Gnus/5.1006 (Gnus v5.10.6) Emacs/21.3 (gnu/linux)

Marco Gerards <address@hidden> 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

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 += address@hidden #{objs_str}
+MOSTLYCLEANFILES += #{deps_str}
+
address@hidden: #{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
 

reply via email to

[Prev in Thread] Current Thread [Next in Thread]