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

Re: [Xen-devel] [PATCH 5/7] Mini-OS: standalone build



On Mon, 2015-02-02 at 12:59 +0000, Wei Liu wrote:
> In order to keep the tree bisectable all the changes are done in one
> single commit.
> 
> Things done in this commit:
> 
> 1. Import necessary .mk files from Xen.
> 2. Move all XEN_ related variables to MINIOS_ namespace.
> 3. Import Xen public header files.
> 4. Import BSD's list.h and helper script.
> 
> Mini-OS's vanilla Config.mk is modified to contain some macros copied
> from Xen's Config.mk. It also contains compatibility handling logic for
> Xen's stubdom build environment.
> 
> Files modified:
>    Config.mk
>    Makefile
>    arch/x86/Makefile
>    arch/x86/arch.mk
>    minios.mk
> 
> All other files are just imported from Xen.
> 
> Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
> Cc: Ian Campbell <ian.campbell@xxxxxxxxxx>
> Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>

I've not reviewed in depth, but:
Acked-by: Ian Campbell <ian.campbell@xxxxxxxxxx>

> ---
>  .gitignore                                         |    1 -
>  extras/mini-os/Config.mk                           |   50 +-
>  extras/mini-os/Makefile                            |   16 +-
>  extras/mini-os/arch/x86/Makefile                   |    5 +-
>  extras/mini-os/arch/x86/arch.mk                    |    8 +-
>  extras/mini-os/config/MiniOS.mk                    |   10 +
>  extras/mini-os/config/StdGNU.mk                    |   47 +
>  extras/mini-os/config/arm32.mk                     |   22 +
>  extras/mini-os/config/arm64.mk                     |   19 +
>  extras/mini-os/config/x86_32.mk                    |   20 +
>  extras/mini-os/config/x86_64.mk                    |   33 +
>  [ import output trimmed ]
>  extras/mini-os/minios.mk                           |    4 +-
>  76 files changed, 16511 insertions(+), 23 deletions(-)
>  [ import output trimmed ]
> 
> diff --git a/.gitignore b/.gitignore
> index 13ee05b..cdbdca7 100644
> --- a/.gitignore
> +++ b/.gitignore
> @@ -48,7 +48,6 @@ docs/pdf/
>  docs/txt/
>  extras/mini-os/include/mini-os
>  extras/mini-os/include/x86/mini-os
> -extras/mini-os/include/xen
>  extras/mini-os/include/list.h
>  extras/mini-os/mini-os*
>  install/*
> diff --git a/extras/mini-os/Config.mk b/extras/mini-os/Config.mk
> index 4852443..e5d8ade 100644
> --- a/extras/mini-os/Config.mk
> +++ b/extras/mini-os/Config.mk
> @@ -1,7 +1,49 @@
> -# Set mini-os root path, used in mini-os.mk.
> +#
> +# Compare $(1) and $(2) and replace $(2) with $(1) if they differ
> +#
> +# Typically $(1) is a newly generated file and $(2) is the target file
> +# being regenerated. This prevents changing the timestamp of $(2) only
> +# due to being auto regenereated with the same contents.
> +define move-if-changed
> +        if ! cmp -s $(1) $(2); then mv -f $(1) $(2); else rm -f $(1); fi
> +endef
> +
> +# cc-option: Check if compiler supports first option, else fall back to 
> second.
> +#
> +# This is complicated by the fact that unrecognised -Wno-* options:
> +#   (a) are ignored unless the compilation emits a warning; and
> +#   (b) even then produce a warning rather than an error
> +# To handle this we do a test compile, passing the option-under-test, on a 
> code
> +# fragment that will always produce a warning (integer assigned to pointer).
> +# We then grep for the option-under-test in the compiler's output, the 
> presence
> +# of which would indicate an "unrecognized command-line option" 
> warning/error.
> +#
> +# Usage: cflags-y += $(call cc-option,$(CC),-march=winchip-c6,-march=i586)
> +cc-option = $(shell if test -z "`echo 'void*p=1;' | \
> +              $(1) $(2) -S -o /dev/null -x c - 2>&1 | grep -- $(2) -`"; \
> +              then echo "$(2)"; else echo "$(3)"; fi ;)
> +
> +# Compatibility with Xen's stubdom build environment.  If we are building
> +# stubdom, some XEN_ variables are set, set MINIOS_ variables accordingly.
> +#
> +ifneq ($(XEN_ROOT),)
>  MINI-OS_ROOT=$(XEN_ROOT)/extras/mini-os
> +else
> +MINI-OS_ROOT=$(TOPLEVEL_DIR)
> +endif
>  export MINI-OS_ROOT
>  
> +ifneq ($(XEN_TARGET_ARCH),)
> +MINIOS_TARGET_ARCH = $(XEN_TARGET_ARCH)
> +else
> +MINIOS_COMPILE_ARCH    ?= $(shell uname -m | sed -e s/i.86/x86_32/ \
> +                            -e s/i86pc/x86_32/ -e s/amd64/x86_64/ \
> +                            -e s/armv7.*/arm32/ -e s/armv8.*/arm64/ \
> +                            -e s/aarch64/arm64/)
> +
> +MINIOS_TARGET_ARCH     ?= $(MINIOS_COMPILE_ARCH)
> +endif
> +
>  libc = $(stubdom)
>  
>  XEN_INTERFACE_VERSION := 0x00030205
> @@ -9,11 +51,11 @@ export XEN_INTERFACE_VERSION
>  
>  # Try to find out the architecture family TARGET_ARCH_FAM.
>  # First check whether x86_... is contained (for x86_32, x86_32y, x86_64).
> -# If not x86 then use $(XEN_TARGET_ARCH)
> -ifeq ($(findstring x86_,$(XEN_TARGET_ARCH)),x86_)
> +# If not x86 then use $(MINIOS_TARGET_ARCH)
> +ifeq ($(findstring x86_,$(MINIOS_TARGET_ARCH)),x86_)
>  TARGET_ARCH_FAM = x86
>  else
> -TARGET_ARCH_FAM = $(XEN_TARGET_ARCH)
> +TARGET_ARCH_FAM = $(MINIOS_TARGET_ARCH)
>  endif
>  
>  # The architecture family directory below mini-os.
> diff --git a/extras/mini-os/Makefile b/extras/mini-os/Makefile
> index 6d6537e..f16520e 100644
> --- a/extras/mini-os/Makefile
> +++ b/extras/mini-os/Makefile
> @@ -4,9 +4,8 @@
>  # Makefile and a arch.mk.
>  #
>  
> -export XEN_ROOT = $(CURDIR)/../..
> -include $(XEN_ROOT)/Config.mk
> -OBJ_DIR ?= $(CURDIR)
> +OBJ_DIR=$(CURDIR)
> +TOPLEVEL_DIR=$(CURDIR)
>  
>  ifeq ($(MINIOS_CONFIG),)
>  include Config.mk
> @@ -15,6 +14,8 @@ EXTRA_DEPS += $(MINIOS_CONFIG)
>  include $(MINIOS_CONFIG)
>  endif
>  
> +include $(MINI-OS_ROOT)/config/MiniOS.mk
> +
>  # Configuration defaults
>  CONFIG_START_NETWORK ?= y
>  CONFIG_SPARSE_BSS ?= y
> @@ -51,7 +52,7 @@ flags-$(CONFIG_XENBUS) += -DCONFIG_XENBUS
>  DEF_CFLAGS += $(flags-y)
>  
>  # Symlinks and headers that must be created before building the C files
> -GENERATED_HEADERS := include/list.h $(ARCH_LINKS) include/mini-os 
> include/xen include/$(TARGET_ARCH_FAM)/mini-os
> +GENERATED_HEADERS := include/list.h $(ARCH_LINKS) include/mini-os 
> include/$(TARGET_ARCH_FAM)/mini-os
>  
>  EXTRA_DEPS += $(GENERATED_HEADERS)
>  
> @@ -65,7 +66,7 @@ include minios.mk
>  LDLIBS := 
>  APP_LDLIBS := 
>  LDARCHLIB := -L$(OBJ_DIR)/$(TARGET_ARCH_DIR) -l$(ARCH_LIB_NAME)
> -LDFLAGS_FINAL := -T $(TARGET_ARCH_DIR)/minios-$(XEN_TARGET_ARCH).lds
> +LDFLAGS_FINAL := -T $(TARGET_ARCH_DIR)/minios-$(MINIOS_TARGET_ARCH).lds
>  
>  # Prefix for global API names. All other symbols are localised before
>  # linking with EXTRA_OBJS.
> @@ -125,7 +126,7 @@ $(ARCH_LINKS):
>       $(arch_links)
>  endif
>  
> -include/list.h: 
> $(XEN_ROOT)/tools/include/xen-external/bsd-sys-queue-h-seddery 
> $(XEN_ROOT)/tools/include/xen-external/bsd-sys-queue.h
> +include/list.h: include/minios-external/bsd-sys-queue-h-seddery 
> include/minios-external/bsd-sys-queue.h
>       perl $^ --prefix=minios  >$@.new
>       $(call move-if-changed,$@.new,$@)
>  
> @@ -133,9 +134,6 @@ include/list.h: 
> $(XEN_ROOT)/tools/include/xen-external/bsd-sys-queue-h-seddery $
>  .PHONY: links
>  links: $(GENERATED_HEADERS)
>  
> -include/xen:
> -     ln -sf ../../../xen/include/public $@
> -
>  include/mini-os:
>       ln -sf . $@
>  
> diff --git a/extras/mini-os/arch/x86/Makefile 
> b/extras/mini-os/arch/x86/Makefile
> index 1073e36..9f04a93 100644
> --- a/extras/mini-os/arch/x86/Makefile
> +++ b/extras/mini-os/arch/x86/Makefile
> @@ -3,8 +3,7 @@
>  # It's is used for x86_32, x86_32y and x86_64
>  #
>  
> -XEN_ROOT = $(CURDIR)/../../../..
> -include $(XEN_ROOT)/Config.mk
> +TOPLEVEL_DIR = $(CURDIR)/../..
>  include ../../Config.mk
>  
>  # include arch.mk has to be before mini-os.mk!
> @@ -12,7 +11,7 @@ include ../../Config.mk
>  include arch.mk
>  include ../../minios.mk
>  
> -# Sources here are all *.c *.S without $(XEN_TARGET_ARCH).S
> +# Sources here are all *.c *.S without $(MINIOS_TARGET_ARCH).S
>  # This is handled in $(HEAD_ARCH_OBJ)
>  ARCH_SRCS := $(wildcard *.c)
>  
> diff --git a/extras/mini-os/arch/x86/arch.mk b/extras/mini-os/arch/x86/arch.mk
> index b27f322..81e8118 100644
> --- a/extras/mini-os/arch/x86/arch.mk
> +++ b/extras/mini-os/arch/x86/arch.mk
> @@ -3,20 +3,20 @@
>  # (including x86_32, x86_32y and x86_64).
>  #
>  
> -ifeq ($(XEN_TARGET_ARCH),x86_32)
> +ifeq ($(MINIOS_TARGET_ARCH),x86_32)
>  ARCH_CFLAGS  := -m32 -march=i686
>  ARCH_LDFLAGS := -m elf_i386
>  ARCH_ASFLAGS := -m32
> -EXTRA_INC += $(TARGET_ARCH_FAM)/$(XEN_TARGET_ARCH)
> +EXTRA_INC += $(TARGET_ARCH_FAM)/$(MINIOS_TARGET_ARCH)
>  EXTRA_SRC += arch/$(EXTRA_INC)
>  endif
>  
> -ifeq ($(XEN_TARGET_ARCH),x86_64)
> +ifeq ($(MINIOS_TARGET_ARCH),x86_64)
>  ARCH_CFLAGS := -m64 -mno-red-zone -fno-reorder-blocks
>  ARCH_CFLAGS += -fno-asynchronous-unwind-tables
>  ARCH_ASFLAGS := -m64
>  ARCH_LDFLAGS := -m elf_x86_64
> -EXTRA_INC += $(TARGET_ARCH_FAM)/$(XEN_TARGET_ARCH)
> +EXTRA_INC += $(TARGET_ARCH_FAM)/$(MINIOS_TARGET_ARCH)
>  EXTRA_SRC += arch/$(EXTRA_INC)
>  endif
>  
> [ import output trimmed ]
> 
> diff --git a/extras/mini-os/minios.mk b/extras/mini-os/minios.mk
> index f42f48b..b0d9f71 100644
> --- a/extras/mini-os/minios.mk
> +++ b/extras/mini-os/minios.mk
> @@ -56,12 +56,12 @@ override CPPFLAGS := $(CPPFLAGS) $(extra_incl)
>  # The name of the architecture specific library.
>  # This is on x86_32: libx86_32.a
>  # $(ARCH_LIB) has to built in the architecture specific directory.
> -ARCH_LIB_NAME = $(XEN_TARGET_ARCH)
> +ARCH_LIB_NAME = $(MINIOS_TARGET_ARCH)
>  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_ARCH_OBJ := $(MINIOS_TARGET_ARCH).o
>  HEAD_OBJ := $(OBJ_DIR)/$(TARGET_ARCH_DIR)/$(HEAD_ARCH_OBJ)
>  
> 



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.