From: Samuel Thibault <samuel.thibault@eu.citrix.com>
To: xen-devel@lists.xensource.com
Subject: [PATCH] minios, stubdom: Add OBJ_DIR parameter to compile outside sources
Date: Mon, 16 Jun 2008 18:40:22 +0100 [thread overview]
Message-ID: <20080616174022.GD4381@implementation.uk.xensource.com> (raw)
minios,stubdom: Add OBJ_DIR parameter to compile outside sources, 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>
diff -r 0df3bf8aac1e .hgignore
--- a/.hgignore Mon Jun 16 16:35:17 2008 +0100
+++ b/.hgignore Mon Jun 16 18:40:25 2008 +0100
@@ -90,12 +90,10 @@
^stubdom/ioemu$
^stubdom/libxc$
^stubdom/lwip-.*$
-^stubdom/mini-os$
+^stubdom/mini-os-.*$
^stubdom/newlib-.*$
^stubdom/pciutils-.*$
^stubdom/zlib-.*$
-^stubdom/c/main-c.c$
-^stubdom/caml/main-c.c$
^tools/.*/TAGS$
^tools/.*/build/lib.*/.*\.py$
^tools/blktap/Makefile\.smh$
diff -r 0df3bf8aac1e extras/mini-os/Makefile
--- a/extras/mini-os/Makefile Mon Jun 16 16:35:17 2008 +0100
+++ b/extras/mini-os/Makefile Mon Jun 16 18:40:25 2008 +0100
@@ -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 @@
# 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 @@
# 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 @@
.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 += 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 @@
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 @@
.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
diff -r 0df3bf8aac1e extras/mini-os/arch/ia64/Makefile
--- a/extras/mini-os/arch/ia64/Makefile Mon Jun 16 16:35:17 2008 +0100
+++ b/extras/mini-os/arch/ia64/Makefile Mon Jun 16 18:40:25 2008 +0100
@@ -40,12 +40,13 @@
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_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)
diff -r 0df3bf8aac1e extras/mini-os/arch/x86/Makefile
--- a/extras/mini-os/arch/x86/Makefile Mon Jun 16 16:35:17 2008 +0100
+++ b/extras/mini-os/arch/x86/Makefile Mon Jun 16 18:40:25 2008 +0100
@@ -17,15 +17,15 @@
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 -r 0df3bf8aac1e extras/mini-os/main.c
--- a/extras/mini-os/main.c Mon Jun 16 16:35:17 2008 +0100
+++ b/extras/mini-os/main.c Mon Jun 16 18:40:25 2008 +0100
@@ -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 @@
} \
}
- 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 @@
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 @@
main_thread = create_thread("main", call_main, si);
return 0;
}
+#endif
diff -r 0df3bf8aac1e extras/mini-os/minios.mk
--- a/extras/mini-os/minios.mk Mon Jun 16 16:35:17 2008 +0100
+++ b/extras/mini-os/minios.mk Mon Jun 16 18:40:25 2008 +0100
@@ -57,13 +57,13 @@
# 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 $@
diff -r 0df3bf8aac1e stubdom/Makefile
--- a/stubdom/Makefile Mon Jun 16 16:35:17 2008 +0100
+++ b/stubdom/Makefile Mon Jun 16 18:40:25 2008 +0100
@@ -1,4 +1,5 @@
XEN_ROOT = ..
+MINI_OS = $(XEN_ROOT)/extras/mini-os
export XEN_OS=MiniOS
@@ -38,6 +39,8 @@
export CROSS_COMPILE=$(GNU_TARGET_ARCH)-xen-elf-
export PATH:=$(CROSS_PREFIX)/bin:$(PATH)
+TARGETS=ioemu c caml
+
.PHONY: all
all: ioemu-stubdom c-stubdom
@@ -48,8 +51,8 @@
binutils-$(BINUTILS_VERSION).tar.bz2:
$(WGET) http://ftp.gnu.org/gnu/binutils/$@
binutils-$(BINUTILS_VERSION): binutils-$(BINUTILS_VERSION).tar.bz2
- tar xjf $@.tar.bz2
- ( cd binutils-$(BINUTILS_VERSION) && patch -p1 < ../binutils.patch )
+ tar xjf $<
+ patch -d $@ -p1 < binutils.patch
touch $@
BINUTILS_STAMPFILE=$(CROSS_ROOT)/bin/$(GNU_TARGET_ARCH)-xen-elf-ar
@@ -70,8 +73,8 @@
gcc-$(GCC_VERSION).tar.bz2:
$(WGET) http://ftp.gnu.org/gnu/gcc/gcc-$(GCC_VERSION)/gcc-$(GCC_VERSION).tar.bz2
gcc-$(GCC_VERSION): gcc-$(GCC_VERSION).tar.bz2
- tar xjf gcc-$(GCC_VERSION).tar.bz2
- ( cd gcc-$(GCC_VERSION) && patch -p1 < ../gcc.patch )
+ tar xjf $<
+ patch -d $@ -p1 < gcc.patch
touch $@
GCC_STAMPFILE=$(CROSS_ROOT)/bin/$(GNU_TARGET_ARCH)-xen-elf-gcc-$(GCC_VERSION)
@@ -91,7 +94,7 @@
newlib-cvs:
cvs -z 9 -d :pserver:anoncvs@sources.redhat.com:/cvs/src co -D $(NEWLIB_DATE) newlib
mv src newlib-cvs
- ( cd newlib-cvs && patch -p0 < ../newlib.patch)
+ patch -d $@ -p0 < newlib.patch
NEWLIB_STAMPFILE=$(CROSS_ROOT)/$(GNU_TARGET_ARCH)-xen-elf/lib/libc.a
.PHONY: cross-newlib
@@ -147,8 +150,7 @@
######
lwip-cvs:
- cvs -z 9 -d :pserver:anonymous@cvs.savannah.nongnu.org:/sources/lwip co -D $(LWIP_DATE) lwip
- mv lwip lwip-cvs
+ cvs -z 9 -d :pserver:anonymous@cvs.savannah.nongnu.org:/sources/lwip co -D $(LWIP_DATE) -d $@ lwip
#######
# Links
@@ -162,29 +164,36 @@
[ -h include ] || ln -sf ../tools/include .
mkdir -p libxc
[ -h libxc/Makefile ] || ( cd libxc && \
- ln -sf ../../tools/libxc/*.h . && \
- ln -sf ../../tools/libxc/*.c . && \
- ln -sf ../../tools/libxc/Makefile . )
+ ln -sf ../$(XEN_ROOT)/tools/libxc/*.h . && \
+ ln -sf ../$(XEN_ROOT)/tools/libxc/*.c . && \
+ ln -sf ../$(XEN_ROOT)/tools/libxc/Makefile . )
mkdir -p libxc/$(XEN_TARGET_ARCH)
[ -h libxc/$(XEN_TARGET_ARCH) ] || ( cd libxc/$(XEN_TARGET_ARCH) && \
- ln -sf ../../tools/libxc/$(XEN_TARGET_ARCH)/*.c . && \
- ln -sf ../../tools/libxc/$(XEN_TARGET_ARCH)/*.h . && \
- ln -sf ../../tools/libxc/$(XEN_TARGET_ARCH)/Makefile . )
+ ln -sf ../$(XEN_ROOT)/tools/libxc/$(XEN_TARGET_ARCH)/*.c . && \
+ ln -sf ../$(XEN_ROOT)/tools/libxc/$(XEN_TARGET_ARCH)/*.h . && \
+ ln -sf ../$(XEN_ROOT)/tools/libxc/$(XEN_TARGET_ARCH)/Makefile . )
mkdir -p ioemu
[ -h ioemu/Makefile ] || ( cd ioemu && \
- ln -sf ../../tools/ioemu/* . && \
+ ln -sf ../$(XEN_ROOT)/tools/ioemu/* . && \
([ ! -h config-host.h ] || rm -f config-host.h) && \
([ ! -h config-host.mak ] || rm -f config-host.mak) )
- [ -h mini-os ] || ln -sf ../extras/mini-os .
- [ -h mini-os/include/xen ] || ln -sf ../../../xen/include/public mini-os/include/xen
+ $(MAKE) -C $(MINI_OS) links
+
+TARGETS_MINIOS=$(addprefix mini-os-,$(TARGETS))
+$(TARGETS_MINIOS): mini-os-%:
+ [ -d $@ ] || \
+ for i in $$(cd $(MINI_OS) ; find . -type d) ; do \
+ mkdir -p $@/$$i ; \
+ done
#######
# libxc
#######
.PHONY: libxc
-libxc: cross-zlib mk-symlinks
- $(MAKE) -C $@
+libxc: libxc/libxenctrl.a libxc/libxenguest.a
+libxc/libxenctrl.a libxc/libxenguest.a: cross-zlib mk-symlinks
+ $(MAKE) -C libxc
#######
# ioemu
@@ -217,23 +226,23 @@
########
.PHONY: ioemu-stubdom
-ioemu-stubdom: lwip-cvs libxc ioemu
- $(MAKE) -C mini-os TARGET=$@ LWIPDIR=$(CURDIR)/lwip-cvs APP_OBJS="$(CURDIR)/ioemu/i386-dm-stubdom/qemu.a $(CURDIR)/ioemu/i386-dm-stubdom/libqemu.a"
+ioemu-stubdom: mini-os-ioemu lwip-cvs libxc ioemu
+ $(MAKE) -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< LWIPDIR=$(CURDIR)/lwip-cvs APP_OBJS="$(CURDIR)/ioemu/i386-dm-stubdom/qemu.a $(CURDIR)/ioemu/i386-dm-stubdom/libqemu.a" CFLAGS=-DCONFIG_QEMU
CAMLLIB = $(shell ocamlc -where)
.PHONY: caml-stubdom
-caml-stubdom: lwip-cvs libxc caml
- $(MAKE) -C mini-os TARGET=$@ LWIPDIR=$(CURDIR)/lwip-cvs APP_OBJS="$(CURDIR)/caml/main-c.o $(CURDIR)/caml/main-caml.o $(CURDIR)/caml/caml.o $(CAMLLIB)/libasmrun.a"
+caml-stubdom: mini-os-caml lwip-cvs libxc caml
+ $(MAKE) -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< LWIPDIR=$(CURDIR)/lwip-cvs APP_OBJS="$(CURDIR)/caml/main-caml.o $(CURDIR)/caml/caml.o $(CAMLLIB)/libasmrun.a" CFLAGS=-DCONFIG_CAML
.PHONY: c-stubdom
-c-stubdom: lwip-cvs libxc c
- $(MAKE) -C mini-os TARGET=$@ LWIPDIR=$(CURDIR)/lwip-cvs APP_OBJS=$(CURDIR)/c/main.a
+c-stubdom: mini-os-c lwip-cvs libxc c
+ $(MAKE) -C $(MINI_OS) OBJ_DIR=$(CURDIR)/$< LWIPDIR=$(CURDIR)/lwip-cvs APP_OBJS=$(CURDIR)/c/main.a CFLAGS=-DCONFIG_C
#########
# install
#########
-install: mini-os/ioemu-stubdom.gz
+install: mini-os-ioemu/mini-os.gz
$(INSTALL_PROG) stubdom-dm "$(DESTDIR)/usr/lib/xen/bin"
$(INSTALL_PROG) $< "$(DESTDIR)/usr/lib/xen/boot/stubdom.gz"
@@ -244,10 +253,9 @@
# Only clean the libxc/ioemu/mini-os part
.PHONY: clean
clean:
- -$(MAKE) -C mini-os LWIPDIR=$(CURDIR)/lwip-cvs clean
- -$(MAKE) -C mini-os TARGET=ioemu-stubdom LWIPDIR=$(CURDIR)/lwip-cvs clean
- -$(MAKE) -C mini-os TARGET=c-stubdom LWIPDIR=$(CURDIR)/lwip-cvs clean
- -$(MAKE) -C mini-os TARGET=caml-stubdom LWIPDIR=$(CURDIR)/lwip-cvs clean
+ rm -fr mini-os-ioemu
+ rm -fr mini-os-c
+ rm -fr mini-os-caml
$(MAKE) -C caml clean
$(MAKE) -C c clean
rm -fr libxc ioemu mini-os include
diff -r 0df3bf8aac1e stubdom/c/Makefile
--- a/stubdom/c/Makefile Mon Jun 16 16:35:17 2008 +0100
+++ b/stubdom/c/Makefile Mon Jun 16 18:40:25 2008 +0100
@@ -4,10 +4,7 @@
all: main.a
-main-c.c:
- ln -sf $(XEN_ROOT)/extras/mini-os/main.c $@
-
-main.a: main-c.o main.o
+main.a: main.o
$(AR) cr $@ $^
clean:
diff -r 0df3bf8aac1e stubdom/caml/Makefile
--- a/stubdom/caml/Makefile Mon Jun 16 16:35:17 2008 +0100
+++ b/stubdom/caml/Makefile Mon Jun 16 18:40:25 2008 +0100
@@ -11,10 +11,7 @@
OBJS := hello.cmx
LIBS :=
-all: main-c.o main-caml.o caml.o
-
-main-c.c:
- ln -sf $(XEN_ROOT)/extras/mini-os/main.c $@
+all: main-caml.o caml.o
%.cmx: %.ml
$(OCAMLFIND) $(OCAMLOPT) -c $< -o $@
diff -r 0df3bf8aac1e tools/ioemu/Makefile.target
--- a/tools/ioemu/Makefile.target Mon Jun 16 16:35:17 2008 +0100
+++ b/tools/ioemu/Makefile.target Mon Jun 16 18:40:25 2008 +0100
@@ -355,13 +355,6 @@
endif
ifdef CONFIG_WIN32
VL_OBJS+=tap-win32.o
-endif
-
-ifdef CONFIG_STUBDOM
-VL_OBJS+=main-qemu.o
-CFLAGS += -DCONFIG_QEMU
-main-qemu.c:
- ln -s $(XEN_ROOT)/extras/mini-os/main.c $@
endif
ifdef CONFIG_STUBDOM
reply other threads:[~2008-06-16 17:40 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20080616174022.GD4381@implementation.uk.xensource.com \
--to=samuel.thibault@eu.citrix.com \
--cc=xen-devel@lists.xensource.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.