This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
Home Products Support Community News


Re: [Xen-devel] CFLAGS are for C compilers and other Unix traditions

To: Keir Fraser <Keir.Fraser@xxxxxxxxxxxx>
Subject: Re: [Xen-devel] CFLAGS are for C compilers and other Unix traditions
From: ramsdell@xxxxxxxxx (John D. Ramsdell)
Date: 21 May 2006 12:40:03 -0400
Cc: xen-devel@xxxxxxxxxxxxxxxxxxx
Delivery-date: Sun, 21 May 2006 09:40:54 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
In-reply-to: <c3eb784636090763af47f3aec7327c4e@xxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <ogtwtcg9j9g.fsf@xxxxxxxxxxxxxxx> <c3eb784636090763af47f3aec7327c4e@xxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.3
Keir Fraser <Keir.Fraser@xxxxxxxxxxxx> writes:

> On 21 May 2006, at 03:58, John D. Ramsdell wrote:
> > If you execute this command, you will note that the rule for
> > assembling .S files is:
> >
> >
> > Note that you don't give the assembler CFLAGS.  It's not a C
> > compiler.
> We fixed this for Xen itself some time ago. If there are other places
> in the tree that do this (maybe minios?), please do provide a patch.

The Mini-OS makefile was recently patched so as to include the
following rules:

%.o: %.c $(HDRS) Makefile
        $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@

%.o: %.S $(HDRS) Makefile
        $(CC) $(ASFLAGS) $(CPPFLAGS) -c $< -o $@

Note the rules fail to include $(TARGET_MACH), which is part of the
default rule for COMPILE.S, and $(TARGET_ARCH), which is normally
part of COMPILE.c.  

When the appropriate GCC backends are installed on an i386 32-bit
machine, the $(TARGET_MACH) flags, and the $(TARGET_ARCH) flags can be
used to produce a Mini-OS elf file for both the 32 and 64 i386
architectures.  You don't have to put your cross compilers in separate

I decided to test the use of Mini-OS as a library.  My test
application included just one file, app.c, and it resided in a
directory outside the Xen sources.  I wrote the obvious Makefile, and
used the default rule to build app.o from app.c.

This Makefile fails, of course, because $(TARGET_ARCH) is set to
x86_32 by Config.mk, and the default rule is:


I hadn't tracked down the source of my problem before I sent my post
last night.  I somehow thought that COMPILE.c used $(TARGET_MACH),
instead of $(TARGET_ARCH), and therefore thought a fix was plausible.
I now see that modifying Xen to work with the default rules is a big
pain.  On the plus side, tracking down this problem forced me to
look at Config.mk, and see I can select a cross-compiler by setting
CROSS_COMPILER to the bin directory of my cross compiler, rather than
setting my path.


Xen-devel mailing list