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:
> > COMPILE.S = $(CC) $(ASFLAGS) $(CPPFLAGS) $(TARGET_MACH) -c
> > 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
%.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:
COMPILE.c = $(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
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