]> xenbits.xensource.com Git - people/liuw/mini-os.git/commitdiff
minios,stubdom: Add OBJ_DIR parameter to compile outside sources,
authorKeir Fraser <keir.fraser@citrix.com>
Tue, 17 Jun 2008 08:36:25 +0000 (09:36 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Tue, 17 Jun 2008 08:36:25 +0000 (09:36 +0100)
which permits to easily compile mini-os in various flavors. Also clean
some parts of stubdom build.

Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com>
Makefile
arch/ia64/Makefile
arch/x86/Makefile
main.c
minios.mk

index 18497e1843e92c2b22e5e0f846ba1b8cc93229e3..bc55145f3a2c7740a4eed1285e433deb1badd074 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -6,6 +6,7 @@
 
 export XEN_ROOT = ../..
 include $(XEN_ROOT)/Config.mk
+OBJ_DIR ?= $(CURDIR)
 
 ifneq ($(stubdom),y)
 include Config.mk
@@ -20,7 +21,7 @@ include minios.mk
 # Define some default flags for linking.
 LDLIBS := 
 APP_LDLIBS := 
-LDARCHLIB := -L$(TARGET_ARCH_DIR) -l$(ARCH_LIB_NAME)
+LDARCHLIB := -L$(OBJ_DIR)/$(TARGET_ARCH_DIR) -l$(ARCH_LIB_NAME)
 LDFLAGS_FINAL := -T $(TARGET_ARCH_DIR)/minios-$(XEN_TARGET_ARCH).lds
 
 # Prefix for global API names. All other symbols are localised before
@@ -35,14 +36,14 @@ SUBDIRS := lib xenbus console
 
 # The common mini-os objects to build.
 APP_OBJS :=
-OBJS := $(patsubst %.c,%.o,$(wildcard *.c))
-OBJS += $(patsubst %.c,%.o,$(wildcard lib/*.c))
-OBJS += $(patsubst %.c,%.o,$(wildcard xenbus/*.c))
-OBJS += $(patsubst %.c,%.o,$(wildcard console/*.c))
+OBJS := $(patsubst %.c,$(OBJ_DIR)/%.o,$(wildcard *.c))
+OBJS += $(patsubst %.c,$(OBJ_DIR)/%.o,$(wildcard lib/*.c))
+OBJS += $(patsubst %.c,$(OBJ_DIR)/%.o,$(wildcard xenbus/*.c))
+OBJS += $(patsubst %.c,$(OBJ_DIR)/%.o,$(wildcard console/*.c))
 
 
 .PHONY: default
-default: $(TARGET)
+default: $(OBJ_DIR)/$(TARGET)
 
 # Create special architecture specific links. The function arch_links
 # has to be defined in arch.mk (see include above).
@@ -57,7 +58,7 @@ links:        $(ARCH_LINKS)
 
 .PHONY: arch_lib
 arch_lib:
-       $(MAKE) --directory=$(TARGET_ARCH_DIR) || exit 1;
+       $(MAKE) --directory=$(TARGET_ARCH_DIR) OBJ_DIR=$(OBJ_DIR)/$(TARGET_ARCH_DIR) || exit 1;
 
 ifeq ($(lwip),y)
 # lwIP library
@@ -66,14 +67,14 @@ LWC := $(filter-out %6.c %ip6_addr.c %ethernetif.c, $(LWC))
 LWC    += lwip-arch.c lwip-net.c
 LWO    := $(patsubst %.c,%.o,$(LWC))
 
-lwip.a: $(LWO)
+$(OBJ_DIR)/lwip.a: $(LWO)
        $(RM) $@
        $(AR) cqs $@ $^
 
-OBJS += lwip.a
+OBJS += $(OBJ_DIR)/lwip.a
 endif
 
-OBJS := $(filter-out main.o lwip%.o $(LWO), $(OBJS))
+OBJS := $(filter-out $(OBJ_DIR)/lwip%.o $(LWO), $(OBJS))
 
 ifeq ($(libc),y)
 APP_LDLIBS += -L$(XEN_ROOT)/stubdom/libxc -whole-archive -lxenguest -lxenctrl -no-whole-archive
@@ -84,14 +85,14 @@ LDLIBS += -lc
 endif
 
 ifneq ($(APP_OBJS)-$(lwip),-y)
-OBJS := $(filter-out daytime.o, $(OBJS))
+OBJS := $(filter-out $(OBJ_DIR)/daytime.o, $(OBJS))
 endif
 
-$(TARGET)_app.o: $(APP_OBJS) app.lds
-       $(LD) -r -d $(LDFLAGS) $^ $(APP_LDLIBS) --undefined app_main -o $@
+$(OBJ_DIR)/$(TARGET)_app.o: $(APP_OBJS) app.lds
+       $(LD) -r -d $(LDFLAGS) $^ $(APP_LDLIBS) --undefined main -o $@
 
-$(TARGET): links $(OBJS) $(TARGET)_app.o arch_lib
-       $(LD) -r $(LDFLAGS) $(HEAD_OBJ) $(TARGET)_app.o $(OBJS) $(LDARCHLIB) $(LDLIBS) -o $@.o
+$(OBJ_DIR)/$(TARGET): links $(OBJS) $(OBJ_DIR)/$(TARGET)_app.o arch_lib
+       $(LD) -r $(LDFLAGS) $(HEAD_OBJ) $(OBJ_DIR)/$(TARGET)_app.o $(OBJS) $(LDARCHLIB) $(LDLIBS) -o $@.o
        $(OBJCOPY) -w -G $(GLOBAL_PREFIX)* -G _start $@.o $@.o
        $(LD) $(LDFLAGS) $(LDFLAGS_FINAL) $@.o $(EXTRA_OBJS) -o $@
        gzip -f -9 -c $@ >$@.gz
@@ -99,15 +100,15 @@ $(TARGET): links $(OBJS) $(TARGET)_app.o arch_lib
 .PHONY: clean arch_clean
 
 arch_clean:
-       $(MAKE) --directory=$(TARGET_ARCH_DIR) clean || exit 1;
+       $(MAKE) --directory=$(TARGET_ARCH_DIR) OBJ_DIR=$(OBJ_DIR)/$(TARGET_ARCH_DIR) clean || exit 1;
 
 clean: arch_clean
-       for dir in $(SUBDIRS); do \
+       for dir in $(addprefix $(OBJ_DIR)/,$(SUBDIRS)); do \
                rm -f $$dir/*.o; \
        done
-       rm -f *.o *~ core $(TARGET).elf $(TARGET).raw $(TARGET) $(TARGET).gz
-       find . -type l | xargs rm -f
-       $(RM) lwip.a $(LWO)
+       rm -f $(OBJ_DIR)/*.o *~ $(OBJ_DIR)/core $(OBJ_DIR)/$(TARGET).elf $(OBJ_DIR)/$(TARGET).raw $(OBJ_DIR)/$(TARGET) $(OBJ_DIR)/$(TARGET).gz
+       find . $(OBJ_DIR) -type l | xargs rm -f
+       $(RM) $(OBJ_DIR)/lwip.a $(LWO)
        rm -f tags TAGS
 
 
index 6e46aa67efc389962552f30f854c9a2c8611d29c..405066215d282098069d84286626a6a40b8c7d1b 100644 (file)
@@ -40,12 +40,13 @@ ARCH_OBJS += __umoddi3.o
 ARCH_OBJS += __udivdi3.o
 ARCH_OBJS += __udivsi3.o
 ARCH_OBJS += __divdi3.o
+ARCH_OBJS := $(addprefix $(OBJ_DIR)/,$(ARCH_OBJS))
 
 GEN_OFF_SRC := gen_off.c
 GEN_OFF_ASM := gen_off.s
 GEN_OFF_H   := $(MINI-OS_ROOT)/include/$(ARCH_INC)/offsets.h
 
-all: $(ARCH_LIB)
+all: $(OBJ_DIR)/$(ARCH_LIB)
 
 $(GEN_OFF_ASM): $(GEN_OFF_SRC)
        $(CC) -S -o $@ $(CPPFLAGS) $<
@@ -53,10 +54,10 @@ $(GEN_OFF_ASM): $(GEN_OFF_SRC)
 $(GEN_OFF_H): $(GEN_OFF_ASM)
        sed -ne "/^->/ {s/->/#define /; p}" < $< > $@
 
-$(ARCH_LIB): $(GEN_OFF_H) $(ARCH_OBJS) $(HEAD_ARCH_OBJ)
+$(OBJ_DIR)/$(ARCH_LIB): $(GEN_OFF_H) $(ARCH_OBJS) $(OBJ_DIR)/$(HEAD_ARCH_OBJ)
        $(AR) rv $(ARCH_LIB) $(ARCH_OBJS)
 
 clean:
-       rm -f $(ARCH_LIB) $(ARCH_OBJS) $(HEAD_ARCH_OBJ)
+       rm -f $(OBJ_DIR)/$(ARCH_LIB) $(ARCH_OBJS) $(OBJ_DIR)/$(HEAD_ARCH_OBJ)
        rm -f $(GEN_OFF_ASM)
        rm -f $(GEN_OFF_H)
index 21f0958f6a51de89c9fb53041eb9ebea54430293..3c5fb6ae782132528d6e852e3b3850daf2e5eae8 100644 (file)
@@ -17,15 +17,15 @@ include ../../minios.mk
 ARCH_SRCS := $(wildcard *.c)
 
 # The objects built from the sources.
-ARCH_OBJS := $(patsubst %.c,%.o,$(ARCH_SRCS))
+ARCH_OBJS := $(patsubst %.c,$(OBJ_DIR)/%.o,$(ARCH_SRCS))
 
-all: $(ARCH_LIB)
+all: $(OBJ_DIR)/$(ARCH_LIB)
 
 # $(HEAD_ARCH_OBJ) is only build here, needed on linking
 # in ../../Makefile.
-$(ARCH_LIB): $(ARCH_OBJS) $(HEAD_ARCH_OBJ)
-       $(AR) rv $(ARCH_LIB) $(ARCH_OBJS)
+$(OBJ_DIR)/$(ARCH_LIB): $(ARCH_OBJS) $(OBJ_DIR)/$(HEAD_ARCH_OBJ)
+       $(AR) rv $(OBJ_DIR)/$(ARCH_LIB) $(ARCH_OBJS)
 
 clean:
-       rm -f $(ARCH_LIB) $(ARCH_OBJS) $(HEAD_ARCH_OBJ)
+       rm -f $(OBJ_DIR)/$(ARCH_LIB) $(ARCH_OBJS) $(OBJ_DIR)/$(HEAD_ARCH_OBJ)
 
diff --git a/main.c b/main.c
index d31a4b4c2dd0473396ebbe6d3dbd6051d97ea8d3..6c26e960577f50ec262bc4e7b3847203581263fc 100644 (file)
--- a/main.c
+++ b/main.c
@@ -4,6 +4,7 @@
  * Samuel Thibault <Samuel.Thibault@eu.citrix.net>, October 2007
  */
 
+#ifdef HAVE_LIBC
 #include <os.h>
 #include <sched.h>
 #include <console.h>
@@ -112,7 +113,7 @@ static void call_main(void *p)
        } \
     }
 
-    PARSE_ARGS(start_info.cmd_line, argc++, );
+    PARSE_ARGS((char*)start_info.cmd_line, argc++, );
 #ifdef CONFIG_QEMU
     PARSE_ARGS(domargs, argc++, );
 #endif
@@ -121,7 +122,7 @@ static void call_main(void *p)
     argv[0] = "main";
     argc = 1;
 
-    PARSE_ARGS(start_info.cmd_line, argv[argc++] = c, *c++ = 0)
+    PARSE_ARGS((char*)start_info.cmd_line, argv[argc++] = c, *c++ = 0)
 #ifdef CONFIG_QEMU
     PARSE_ARGS(domargs, argv[argc++] = c, *c++ = 0)
 #endif
@@ -168,3 +169,4 @@ int app_main(start_info_t *si)
     main_thread = create_thread("main", call_main, si);
     return 0;
 }
+#endif
index 2282a187e20f99693a098acab9170fad6c2c3d99..cc45c2d4f564cf2fcc38af8febe72fef19f859e2 100644 (file)
--- a/minios.mk
+++ b/minios.mk
@@ -57,13 +57,13 @@ ARCH_LIB := lib$(ARCH_LIB_NAME).a
 # This object contains the entrypoint for startup from Xen.
 # $(HEAD_ARCH_OBJ) has to be built in the architecture specific directory.
 HEAD_ARCH_OBJ := $(XEN_TARGET_ARCH).o
-HEAD_OBJ := $(TARGET_ARCH_DIR)/$(HEAD_ARCH_OBJ)
+HEAD_OBJ := $(OBJ_DIR)/$(TARGET_ARCH_DIR)/$(HEAD_ARCH_OBJ)
 
 
-%.o: %.c $(HDRS) Makefile $(EXTRA_DEPS)
+$(OBJ_DIR)/%.o: %.c $(HDRS) Makefile $(EXTRA_DEPS)
        $(CC) $(CFLAGS) $(CPPFLAGS) -c $< -o $@
 
-%.o: %.S $(HDRS) Makefile $(EXTRA_DEPS)
+$(OBJ_DIR)/%.o: %.S $(HDRS) Makefile $(EXTRA_DEPS)
        $(CC) $(ASFLAGS) $(CPPFLAGS) -c $< -o $@