All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony PERARD <anthony.perard@citrix.com>
To: <xen-devel@lists.xenproject.org>
Cc: "Anthony PERARD" <anthony.perard@citrix.com>,
	"Andrew Cooper" <andrew.cooper3@citrix.com>,
	"George Dunlap" <george.dunlap@citrix.com>,
	"Ian Jackson" <iwj@xenproject.org>,
	"Jan Beulich" <jbeulich@suse.com>,
	"Julien Grall" <julien@xen.org>,
	"Stefano Stabellini" <sstabellini@kernel.org>,
	"Wei Liu" <wl@xen.org>, "Roger Pau Monné" <roger.pau@citrix.com>
Subject: [XEN PATCH v7 27/51] build: introduce if_changed_deps
Date: Tue, 24 Aug 2021 11:50:14 +0100	[thread overview]
Message-ID: <20210824105038.1257926-28-anthony.perard@citrix.com> (raw)
In-Reply-To: <20210824105038.1257926-1-anthony.perard@citrix.com>

This macro does compare command line like if_changed, but it also
rewrite the dependencies generated by $(CC) in order to depend on a
CONFIG_* as generated by kconfig instead of depending on autoconf.h.
This allow to make a change in kconfig options and only rebuild the
object that uses that CONFIG_* option.

cmd_and_record isn't needed anymore as it is replace by
cmd_and_fixdep.

There's only one .*.d dependency file left which is explicitly
included as a workound, all the other are been absorb into the .*.cmd
dependency files via `fixdep`. So including .*.d can be removed from
the makefile.

This imports fixdep.c and if_changed_deps macro from Linux v5.12.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 .gitignore                 |   1 +
 xen/Makefile               |  15 +-
 xen/Rules.mk               |  17 +-
 xen/arch/x86/Makefile      |   8 +-
 xen/build.mk               |   1 +
 xen/scripts/Kbuild.include |  17 +-
 xen/tools/Makefile         |   7 +-
 xen/tools/fixdep.c         | 404 +++++++++++++++++++++++++++++++++++++
 8 files changed, 441 insertions(+), 29 deletions(-)
 create mode 100644 xen/tools/fixdep.c

diff --git a/.gitignore b/.gitignore
index 59a22d1685e2..550b38b9fa3c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -338,6 +338,7 @@ xen/include/xen/lib/x86/cpuid-autogen.h
 xen/test/livepatch/config.h
 xen/test/livepatch/expect_config.h
 xen/test/livepatch/*.livepatch
+xen/tools/fixdep
 xen/tools/kconfig/.tmp_gtkcheck
 xen/tools/kconfig/.tmp_qtcheck
 xen/tools/symbols
diff --git a/xen/Makefile b/xen/Makefile
index eb9ea70aaa29..1b5517b02a8c 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -187,6 +187,13 @@ endif
 export root-make-done := y
 endif # root-make-done
 
+# ===========================================================================
+# Rules shared between *config targets and build targets
+
+PHONY += tools_fixdep
+tools_fixdep:
+	$(MAKE) -C tools fixdep
+
 # Shorthand for kconfig
 kconfig = -f $(BASEDIR)/tools/kconfig/Makefile.kconfig ARCH=$(ARCH) SRCARCH=$(SRCARCH) HOSTCC="$(HOSTCC)" HOSTCXX="$(HOSTCXX)"
 
@@ -400,7 +407,7 @@ $(TARGET).gz: $(TARGET)
 	gzip -n -f -9 < $< > $@.new
 	mv $@.new $@
 
-$(TARGET): FORCE
+$(TARGET): tools_fixdep FORCE
 	$(MAKE) -C tools
 	$(MAKE) $(build)=. include/xen/compile.h
 	[ -e arch/$(TARGET_ARCH)/efi ] && for f in $$(cd common/efi; echo *.[ch]); \
@@ -457,13 +464,13 @@ cscope:
 _MAP:
 	$(NM) -n $(TARGET)-syms | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' > System.map
 
-%.o %.i %.s: %.c FORCE
+%.o %.i %.s: %.c tools_fixdep FORCE
 	$(MAKE) $(build)=$(*D) $(*D)/$(@F)
 
-%.o %.s: %.S FORCE
+%.o %.s: %.S tools_fixdep FORCE
 	$(MAKE) $(build)=$(*D) $(*D)/$(@F)
 
-%/: FORCE
+%/: tools_fixdep FORCE
 	$(MAKE) $(build)=$* need-builtin=1
 
 .PHONY: cloc
diff --git a/xen/Rules.mk b/xen/Rules.mk
index 2e1435ff4ada..9b8415160649 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -148,8 +148,8 @@ cpp_flags = $(filter-out -Wa$(comma)% -flto,$(1))
 # Calculation of flags, first the generic flags, then the arch specific flags,
 # and last the flags modified for a target or a directory.
 
-c_flags = -MMD -MP -MF $(@D)/.$(@F).d $(XEN_CFLAGS)
-a_flags = -MMD -MP -MF $(@D)/.$(@F).d $(XEN_AFLAGS)
+c_flags = -MMD -MP -MF $(depfile) $(XEN_CFLAGS)
+a_flags = -MMD -MP -MF $(depfile) $(XEN_AFLAGS)
 
 include $(BASEDIR)/arch/$(TARGET_ARCH)/Rules.mk
 
@@ -206,7 +206,7 @@ else
 endif
 
 define rule_cc_o_c
-    $(call cmd_and_record,cc_o_c)
+    $(call cmd_and_fixdep,cc_o_c)
     $(call cmd,objcopy_fix_sym)
 endef
 
@@ -217,7 +217,7 @@ quiet_cmd_cc_o_S = CC      $@
 cmd_cc_o_S = $(CC) $(a_flags) -c $< -o $@
 
 $(obj)/%.o: $(src)/%.S FORCE
-	$(call if_changed,cc_o_S)
+	$(call if_changed_dep,cc_o_S)
 
 
 quiet_cmd_obj_init_o = INIT_O  $@
@@ -247,13 +247,13 @@ quiet_cmd_cpp_s_S = CPP     $@
 cmd_cpp_s_S = $(CPP) $(call cpp_flags,$(a_flags)) -MQ $@ -o $@ $<
 
 $(obj)/%.i: $(src)/%.c FORCE
-	$(call if_changed,cpp_i_c)
+	$(call if_changed_dep,cpp_i_c)
 
 $(obj)/%.s: $(src)/%.c FORCE
-	$(call if_changed,cc_s_c)
+	$(call if_changed_dep,cc_s_c)
 
 $(obj)/%.s: $(src)/%.S FORCE
-	$(call if_changed,cpp_s_S)
+	$(call if_changed_dep,cpp_s_S)
 
 # Linker scripts, .lds.S -> .lds
 quiet_cmd_cpp_lds_S = LDS     $@
@@ -292,9 +292,6 @@ existing-targets := $(wildcard $(sort $(targets)))
 
 -include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
 
-DEPS:= $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).d)
--include $(DEPS_INCLUDE)
-
 # Declare the contents of the PHONY variable as phony.  We keep that
 # information in a variable so we can use it in if_changed and friends.
 .PHONY: $(PHONY)
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index f60084eb73e7..05f1d12065a0 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -248,7 +248,7 @@ $(BASEDIR)/arch/x86/include/asm/asm-macros.h: $(obj)/asm-macros.i $(src)/Makefil
 
 $(obj)/efi.lds: AFLAGS-y += -DEFI
 $(obj)/xen.lds $(obj)/efi.lds: $(src)/xen.lds.S FORCE
-	$(call if_changed,cpp_lds_S)
+	$(call if_changed_dep,cpp_lds_S)
 
 $(obj)/boot/mkelf32: $(src)/boot/mkelf32.c
 	$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
@@ -264,9 +264,3 @@ clean::
 	rm -f $(BASEDIR)/.xen.efi.[0-9]* efi/*.efi efi/mkreloc
 	rm -f boot/cmdline.S boot/reloc.S boot/*.lnk boot/*.bin
 	rm -f note.o
-
-# Suppress loading of DEPS files for internal, temporary target files.  This
-# then also suppresses re-generation of the respective .*.d2 files.
-ifeq ($(filter-out .xen%.o,$(notdir $(MAKECMDGOALS))),)
-DEPS_INCLUDE:=
-endif
diff --git a/xen/build.mk b/xen/build.mk
index c6c06d9f17f5..537c32f42d25 100644
--- a/xen/build.mk
+++ b/xen/build.mk
@@ -37,6 +37,7 @@ include/xen/compile.h: include/xen/compile.h.in .banner FORCE
 	$(call if_changed,compile.h)
 targets += include/xen/compile.h
 
+-include $(wildcard .asm-offsets.s.d)
 asm-offsets.s: arch/$(TARGET_ARCH)/$(TARGET_SUBARCH)/asm-offsets.c
 	$(CC) $(call cpp_flags,$(c_flags)) -S -g0 -o $@.new -MQ $@ $<
 	$(call move-if-changed,$@.new,$@)
diff --git a/xen/scripts/Kbuild.include b/xen/scripts/Kbuild.include
index 62c7caeba1d1..aa3a8a1bd9e7 100644
--- a/xen/scripts/Kbuild.include
+++ b/xen/scripts/Kbuild.include
@@ -15,8 +15,7 @@ dot-target = $(@D)/.$(@F)
 
 ###
 # dependencies
-DEPS = .*.d
-DEPS_INCLUDE = $(addsuffix .d2, $(basename $(wildcard $(DEPS))))
+depfile = $(dot-target).d
 
 ###
 # real prerequisites without phony targets
@@ -81,6 +80,8 @@ cmd = @set -e; $(echo-cmd) $(cmd_$(1))
 ###
 # if_changed      - execute command if any prerequisite is newer than
 #                   target, or command line has changed
+# if_changed_dep  - as if_changed, but uses fixdep to reveal dependencies
+#                   including used config symbols
 # if_changed_rule - as if_changed but execute rule instead
 
 ifneq ($(KBUILD_NOCMDDEP),1)
@@ -109,15 +110,19 @@ if_changed = $(if $(any-prereq)$(cmd-check),                                 \
         $(cmd);                                                              \
         printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd, @:)
 
+# Execute the command and also postprocess generated .d dependencies file.
+if_changed_dep = $(if $(any-prereq)$(cmd-check),$(cmd_and_fixdep),@:)
+
+cmd_and_fixdep =                                                             \
+        $(cmd);                                                              \
+        tools/fixdep $(depfile) $@ '$(make-cmd)' > $(dot-target).cmd;        \
+        rm -f $(depfile)
+
 # Usage: $(call if_changed_rule,foo)
 # Will check if $(cmd_foo) or any of the prerequisites changed,
 # and if so will execute $(rule_foo).
 if_changed_rule = $(if $(any-prereq)$(cmd-check),$(rule_$(1)),@:)
 
-cmd_and_record =                                                             \
-        $(cmd);                                                              \
-        printf '%s\n' 'cmd_$@ := $(make-cmd)' > $(dot-target).cmd
-
 ###
 # why - tell why a target got built
 #       enabled by make V=2
diff --git a/xen/tools/Makefile b/xen/tools/Makefile
index 4e42163f981c..722f3664549d 100644
--- a/xen/tools/Makefile
+++ b/xen/tools/Makefile
@@ -2,11 +2,14 @@
 include $(XEN_ROOT)/Config.mk
 
 .PHONY: default
-default: symbols
+default: symbols fixdep
 
 .PHONY: clean
 clean:
-	rm -f *.o symbols
+	rm -f *.o symbols fixdep
 
 symbols: symbols.c
 	$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
+
+fixdep: fixdep.c
+	$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
diff --git a/xen/tools/fixdep.c b/xen/tools/fixdep.c
new file mode 100644
index 000000000000..d98540552941
--- /dev/null
+++ b/xen/tools/fixdep.c
@@ -0,0 +1,404 @@
+/*
+ * "Optimize" a list of dependencies as spit out by gcc -MD
+ * for the kernel build
+ * ===========================================================================
+ *
+ * Author       Kai Germaschewski
+ * Copyright    2002 by Kai Germaschewski  <kai.germaschewski@gmx.de>
+ *
+ * This software may be used and distributed according to the terms
+ * of the GNU General Public License, incorporated herein by reference.
+ *
+ *
+ * Introduction:
+ *
+ * gcc produces a very nice and correct list of dependencies which
+ * tells make when to remake a file.
+ *
+ * To use this list as-is however has the drawback that virtually
+ * every file in the kernel includes autoconf.h.
+ *
+ * If the user re-runs make *config, autoconf.h will be
+ * regenerated.  make notices that and will rebuild every file which
+ * includes autoconf.h, i.e. basically all files. This is extremely
+ * annoying if the user just changed CONFIG_HIS_DRIVER from n to m.
+ *
+ * So we play the same trick that "mkdep" played before. We replace
+ * the dependency on autoconf.h by a dependency on every config
+ * option which is mentioned in any of the listed prerequisites.
+ *
+ * kconfig populates a tree in include/config/ with an empty file
+ * for each config symbol and when the configuration is updated
+ * the files representing changed config options are touched
+ * which then let make pick up the changes and the files that use
+ * the config symbols are rebuilt.
+ *
+ * So if the user changes his CONFIG_HIS_DRIVER option, only the objects
+ * which depend on "include/config/his/driver.h" will be rebuilt,
+ * so most likely only his driver ;-)
+ *
+ * The idea above dates, by the way, back to Michael E Chastain, AFAIK.
+ *
+ * So to get dependencies right, there are two issues:
+ * o if any of the files the compiler read changed, we need to rebuild
+ * o if the command line given to the compile the file changed, we
+ *   better rebuild as well.
+ *
+ * The former is handled by using the -MD output, the later by saving
+ * the command line used to compile the old object and comparing it
+ * to the one we would now use.
+ *
+ * Again, also this idea is pretty old and has been discussed on
+ * kbuild-devel a long time ago. I don't have a sensibly working
+ * internet connection right now, so I rather don't mention names
+ * without double checking.
+ *
+ * This code here has been based partially based on mkdep.c, which
+ * says the following about its history:
+ *
+ *   Copyright abandoned, Michael Chastain, <mailto:mec@shout.net>.
+ *   This is a C version of syncdep.pl by Werner Almesberger.
+ *
+ *
+ * It is invoked as
+ *
+ *   fixdep <depfile> <target> <cmdline>
+ *
+ * and will read the dependency file <depfile>
+ *
+ * The transformed dependency snipped is written to stdout.
+ *
+ * It first generates a line
+ *
+ *   cmd_<target> = <cmdline>
+ *
+ * and then basically copies the .<target>.d file to stdout, in the
+ * process filtering out the dependency on autoconf.h and adding
+ * dependencies on include/config/my/option.h for every
+ * CONFIG_MY_OPTION encountered in any of the prerequisites.
+ *
+ * We don't even try to really parse the header files, but
+ * merely grep, i.e. if CONFIG_FOO is mentioned in a comment, it will
+ * be picked up as well. It's not a problem with respect to
+ * correctness, since that can only give too many dependencies, thus
+ * we cannot miss a rebuild. Since people tend to not mention totally
+ * unrelated CONFIG_ options all over the place, it's not an
+ * efficiency problem either.
+ *
+ * (Note: it'd be easy to port over the complete mkdep state machine,
+ *  but I don't think the added complexity is worth it)
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+
+static void usage(void)
+{
+	fprintf(stderr, "Usage: fixdep <depfile> <target> <cmdline>\n");
+	exit(1);
+}
+
+/*
+ * In the intended usage of this program, the stdout is redirected to .*.cmd
+ * files. The return value of printf() and putchar() must be checked to catch
+ * any error, e.g. "No space left on device".
+ */
+static void xprintf(const char *format, ...)
+{
+	va_list ap;
+	int ret;
+
+	va_start(ap, format);
+	ret = vprintf(format, ap);
+	if (ret < 0) {
+		perror("fixdep");
+		exit(1);
+	}
+	va_end(ap);
+}
+
+static void xputchar(int c)
+{
+	int ret;
+
+	ret = putchar(c);
+	if (ret == EOF) {
+		perror("fixdep");
+		exit(1);
+	}
+}
+
+/*
+ * Print out a dependency path from a symbol name
+ */
+static void print_dep(const char *m, int slen, const char *dir)
+{
+	int c, prev_c = '/', i;
+
+	xprintf("    $(wildcard %s/", dir);
+	for (i = 0; i < slen; i++) {
+		c = m[i];
+		if (c == '_')
+			c = '/';
+		else
+			c = tolower(c);
+		if (c != '/' || prev_c != '/')
+			xputchar(c);
+		prev_c = c;
+	}
+	xprintf(".h) \\\n");
+}
+
+struct item {
+	struct item	*next;
+	unsigned int	len;
+	unsigned int	hash;
+	char		name[];
+};
+
+#define HASHSZ 256
+static struct item *hashtab[HASHSZ];
+
+static unsigned int strhash(const char *str, unsigned int sz)
+{
+	/* fnv32 hash */
+	unsigned int i, hash = 2166136261U;
+
+	for (i = 0; i < sz; i++)
+		hash = (hash ^ str[i]) * 0x01000193;
+	return hash;
+}
+
+/*
+ * Lookup a value in the configuration string.
+ */
+static int is_defined_config(const char *name, int len, unsigned int hash)
+{
+	struct item *aux;
+
+	for (aux = hashtab[hash % HASHSZ]; aux; aux = aux->next) {
+		if (aux->hash == hash && aux->len == len &&
+		    memcmp(aux->name, name, len) == 0)
+			return 1;
+	}
+	return 0;
+}
+
+/*
+ * Add a new value to the configuration string.
+ */
+static void define_config(const char *name, int len, unsigned int hash)
+{
+	struct item *aux = malloc(sizeof(*aux) + len);
+
+	if (!aux) {
+		perror("fixdep:malloc");
+		exit(1);
+	}
+	memcpy(aux->name, name, len);
+	aux->len = len;
+	aux->hash = hash;
+	aux->next = hashtab[hash % HASHSZ];
+	hashtab[hash % HASHSZ] = aux;
+}
+
+/*
+ * Record the use of a CONFIG_* word.
+ */
+static void use_config(const char *m, int slen)
+{
+	unsigned int hash = strhash(m, slen);
+
+	if (is_defined_config(m, slen, hash))
+	    return;
+
+	define_config(m, slen, hash);
+	print_dep(m, slen, "include/config");
+}
+
+/* test if s ends in sub */
+static int str_ends_with(const char *s, int slen, const char *sub)
+{
+	int sublen = strlen(sub);
+
+	if (sublen > slen)
+		return 0;
+
+	return !memcmp(s + slen - sublen, sub, sublen);
+}
+
+static void parse_config_file(const char *p)
+{
+	const char *q, *r;
+	const char *start = p;
+
+	while ((p = strstr(p, "CONFIG_"))) {
+		if (p > start && (isalnum(p[-1]) || p[-1] == '_')) {
+			p += 7;
+			continue;
+		}
+		p += 7;
+		q = p;
+		while (isalnum(*q) || *q == '_')
+			q++;
+		if (str_ends_with(p, q - p, "_MODULE"))
+			r = q - 7;
+		else
+			r = q;
+		if (r > p)
+			use_config(p, r - p);
+		p = q;
+	}
+}
+
+static void *read_file(const char *filename)
+{
+	struct stat st;
+	int fd;
+	char *buf;
+
+	fd = open(filename, O_RDONLY);
+	if (fd < 0) {
+		fprintf(stderr, "fixdep: error opening file: ");
+		perror(filename);
+		exit(2);
+	}
+	if (fstat(fd, &st) < 0) {
+		fprintf(stderr, "fixdep: error fstat'ing file: ");
+		perror(filename);
+		exit(2);
+	}
+	buf = malloc(st.st_size + 1);
+	if (!buf) {
+		perror("fixdep: malloc");
+		exit(2);
+	}
+	if (read(fd, buf, st.st_size) != st.st_size) {
+		perror("fixdep: read");
+		exit(2);
+	}
+	buf[st.st_size] = '\0';
+	close(fd);
+
+	return buf;
+}
+
+/* Ignore certain dependencies */
+static int is_ignored_file(const char *s, int len)
+{
+	return str_ends_with(s, len, "include/generated/autoconf.h") ||
+	       str_ends_with(s, len, "include/generated/autoksyms.h");
+}
+
+/*
+ * Important: The below generated source_foo.o and deps_foo.o variable
+ * assignments are parsed not only by make, but also by the rather simple
+ * parser in scripts/mod/sumversion.c.
+ */
+static void parse_dep_file(char *m, const char *target)
+{
+	char *p;
+	int is_last, is_target;
+	int saw_any_target = 0;
+	int is_first_dep = 0;
+	void *buf;
+
+	while (1) {
+		/* Skip any "white space" */
+		while (*m == ' ' || *m == '\\' || *m == '\n')
+			m++;
+
+		if (!*m)
+			break;
+
+		/* Find next "white space" */
+		p = m;
+		while (*p && *p != ' ' && *p != '\\' && *p != '\n')
+			p++;
+		is_last = (*p == '\0');
+		/* Is the token we found a target name? */
+		is_target = (*(p-1) == ':');
+		/* Don't write any target names into the dependency file */
+		if (is_target) {
+			/* The /next/ file is the first dependency */
+			is_first_dep = 1;
+		} else if (!is_ignored_file(m, p - m)) {
+			*p = '\0';
+
+			/*
+			 * Do not list the source file as dependency, so that
+			 * kbuild is not confused if a .c file is rewritten
+			 * into .S or vice versa. Storing it in source_* is
+			 * needed for modpost to compute srcversions.
+			 */
+			if (is_first_dep) {
+				/*
+				 * If processing the concatenation of multiple
+				 * dependency files, only process the first
+				 * target name, which will be the original
+				 * source name, and ignore any other target
+				 * names, which will be intermediate temporary
+				 * files.
+				 */
+				if (!saw_any_target) {
+					saw_any_target = 1;
+					xprintf("source_%s := %s\n\n",
+						target, m);
+					xprintf("deps_%s := \\\n", target);
+				}
+				is_first_dep = 0;
+			} else {
+				xprintf("  %s \\\n", m);
+			}
+
+			buf = read_file(m);
+			parse_config_file(buf);
+			free(buf);
+		}
+
+		if (is_last)
+			break;
+
+		/*
+		 * Start searching for next token immediately after the first
+		 * "whitespace" character that follows this token.
+		 */
+		m = p + 1;
+	}
+
+	if (!saw_any_target) {
+		fprintf(stderr, "fixdep: parse error; no targets found\n");
+		exit(1);
+	}
+
+	xprintf("\n%s: $(deps_%s)\n\n", target, target);
+	xprintf("$(deps_%s):\n", target);
+}
+
+int main(int argc, char *argv[])
+{
+	const char *depfile, *target, *cmdline;
+	void *buf;
+
+	if (argc != 4)
+		usage();
+
+	depfile = argv[1];
+	target = argv[2];
+	cmdline = argv[3];
+
+	xprintf("cmd_%s := %s\n\n", target, cmdline);
+
+	buf = read_file(depfile);
+	parse_dep_file(buf, target);
+	free(buf);
+
+	return 0;
+}
-- 
Anthony PERARD



  parent reply	other threads:[~2021-08-24 11:01 UTC|newest]

Thread overview: 161+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
2021-08-24 10:49 ` [XEN PATCH v7 01/51] build: introduce cpp_flags macro Anthony PERARD
2021-09-02 10:08   ` Jan Beulich
2021-09-06 10:06     ` Anthony PERARD
2021-09-06 10:30       ` Jan Beulich
2021-09-06 11:21         ` Anthony PERARD
2021-08-24 10:49 ` [XEN PATCH v7 02/51] build: use if_changed on built_in.o Anthony PERARD
2021-08-24 10:49 ` [XEN PATCH v7 03/51] build: use if_changed_rules with %.o:%.c targets Anthony PERARD
2021-08-24 10:49 ` [XEN PATCH v7 04/51] build: factorise generation of the linker scripts Anthony PERARD
2021-09-07 14:22   ` Anthony PERARD
2021-08-24 10:49 ` [XEN PATCH v7 05/51] x86/mm: avoid building multiple .o from a single .c file Anthony PERARD
2021-09-07  6:14   ` Jan Beulich
2021-09-08 11:14     ` Anthony PERARD
2021-09-08 11:44       ` Ian Jackson
2021-10-11 14:13         ` Andrew Cooper
2021-09-08 12:01       ` Jan Beulich
2021-09-09 10:03         ` Anthony PERARD
2021-08-24 10:49 ` [XEN PATCH v7 06/51] build,include: rework compat-build-source.py Anthony PERARD
2021-08-24 10:49 ` [XEN PATCH v7 07/51] build,include: rework compat-build-header.py Anthony PERARD
2021-08-24 10:49 ` [XEN PATCH v7 08/51] build: fix clean targets when subdir-y is used Anthony PERARD
2021-08-24 10:49 ` [XEN PATCH v7 09/51] build: use subdir-y in test/Makefile Anthony PERARD
2021-09-02 10:17   ` Jan Beulich
2021-08-24 10:49 ` [XEN PATCH v7 10/51] build,arm: move LDFLAGS change to arch.mk Anthony PERARD
2021-08-24 12:50   ` Julien Grall
2021-08-24 15:00     ` Anthony PERARD
2021-08-24 15:23       ` Julien Grall
2021-08-24 16:14         ` Anthony PERARD
2021-08-24 10:49 ` [XEN PATCH v7 11/51] build: move make option changes check earlier Anthony PERARD
2021-08-24 10:49 ` [XEN PATCH v7 12/51] build: avoid building arm/arm/*/head.o twice Anthony PERARD
2021-08-24 12:53   ` Julien Grall
2021-08-24 15:12     ` Anthony PERARD
2021-08-24 15:20       ` Julien Grall
2021-08-24 10:50 ` [XEN PATCH v7 13/51] build: convert binfile use to if_changed Anthony PERARD
2021-10-07 13:55   ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 14/51] xen: move include/asm-* to arch/*/include/asm Anthony PERARD
2021-10-07 14:17   ` Jan Beulich
2021-10-11 13:57     ` Anthony PERARD
2021-08-24 10:50 ` [XEN PATCH v7 15/51] build,riscv: tell the build system about riscv64/head.S Anthony PERARD
2021-08-24 10:50 ` [XEN PATCH v7 16/51] build: generate "include/xen/compile.h" with if_changed Anthony PERARD
2021-10-07 14:55   ` Jan Beulich
2021-10-11 14:11     ` Anthony PERARD
2021-08-24 10:50 ` [XEN PATCH v7 17/51] build: set XEN_BUILD_EFI earlier Anthony PERARD
2021-10-07 16:14   ` Jan Beulich
2021-10-11 14:21     ` Anthony PERARD
2021-08-24 10:50 ` [XEN PATCH v7 18/51] build: fix $(TARGET).efi creation in arch/arm Anthony PERARD
2021-10-11 10:37   ` Jan Beulich
2021-10-11 14:22     ` Anthony PERARD
2021-08-24 10:50 ` [XEN PATCH v7 19/51] build: fix arch/x86/note.o rule Anthony PERARD
2021-08-24 10:50 ` [XEN PATCH v7 20/51] build: avoid re-executing the main Makefile by introducing build.mk Anthony PERARD
2021-10-11 10:56   ` Jan Beulich
2021-10-11 14:58     ` Anthony PERARD
2021-10-11 15:31       ` Jan Beulich
2021-10-11 17:07         ` Anthony PERARD
2021-10-12  8:06           ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 21/51] build: set ALL_OBJS to main Makefile; move prelink.o to main Makefile Anthony PERARD
2021-10-11 11:31   ` Jan Beulich
2021-10-13 12:30     ` Anthony PERARD
2021-10-13 12:41       ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 22/51] build: clean common temporary files from root makefile Anthony PERARD
2021-10-11 11:41   ` Jan Beulich
2021-10-13 10:36     ` Anthony PERARD
2021-10-13 12:32       ` Jan Beulich
2021-10-13 14:26         ` Anthony PERARD
2021-08-24 10:50 ` [XEN PATCH v7 23/51] build,include: remove arch-*/*.h public header listing from headers*.chk Anthony PERARD
2021-10-11 11:49   ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 24/51] build: prepare to always invoke $(MAKE) from xen/, use $(obj) Anthony PERARD
2021-10-11 12:39   ` Jan Beulich
2021-10-13 10:57     ` Anthony PERARD
2021-10-13 12:35       ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 25/51] build: rework test/livepatch/Makefile Anthony PERARD
2021-10-11 13:28   ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 26/51] build: build everything from the root dir, use obj=$subdir Anthony PERARD
2021-10-11 14:02   ` Jan Beulich
2021-10-13 14:24     ` Anthony PERARD
2021-10-14 13:33       ` Anthony PERARD
2021-10-14 13:54         ` Jan Beulich
2021-08-24 10:50 ` Anthony PERARD [this message]
2021-10-11 14:20   ` [XEN PATCH v7 27/51] build: introduce if_changed_deps Jan Beulich
2021-10-14 13:56     ` Anthony PERARD
2021-08-24 10:50 ` [XEN PATCH v7 28/51] build: rename __LINKER__ to LINKER_SCRIPT Anthony PERARD
2021-10-11 14:23   ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 29/51] build: add an other explicite rules to not build $(XEN_ROOT)/.config Anthony PERARD
2021-10-11 14:29   ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 30/51] build: hook kconfig into xen build system Anthony PERARD
2021-10-11 15:38   ` Jan Beulich
2021-10-14 15:09     ` Anthony PERARD
2021-08-24 10:50 ` [XEN PATCH v7 31/51] xen/tools/kconfig: fix build with -Wdeclaration-after-statement Anthony PERARD
2021-08-24 10:50 ` [XEN PATCH v7 32/51] build: Remove KBUILD_ specific from Makefile.host Anthony PERARD
2021-10-11 15:47   ` Jan Beulich
2021-10-14 14:18     ` Anthony PERARD
2021-08-24 10:50 ` [XEN PATCH v7 33/51] build: handle always-y and hostprogs-always-y Anthony PERARD
2021-10-11 15:48   ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 34/51] build: start building the tools with the main makefiles Anthony PERARD
2021-10-11 15:49   ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 35/51] build: Add headers path to CFLAGS once for all archs Anthony PERARD
2021-10-11 15:51   ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 36/51] build: generate x86's asm-macros.h with filechk Anthony PERARD
2021-10-11 15:52   ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 37/51] build: clean-up "clean" rules of duplication Anthony PERARD
2021-10-11 15:53   ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 38/51] build: use main rune to build host binary x86's mkelf32 and mkreloc Anthony PERARD
2021-10-11 15:56   ` Jan Beulich
2021-10-14 14:20     ` Anthony PERARD
2021-08-24 10:50 ` [XEN PATCH v7 39/51] build: rework coverage and ubsan CFLAGS handling Anthony PERARD
2021-10-11 16:04   ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 40/51] build: fix dependencies in arch/x86/boot Anthony PERARD
2021-10-14  8:08   ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 41/51] build,x86: remove the need for build32.mk Anthony PERARD
2021-10-14  8:32   ` Jan Beulich
2021-10-15 15:52     ` Anthony PERARD
2021-10-18  8:43       ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 42/51] build: grab common EFI source files in arch specific dir Anthony PERARD
2021-10-14  8:51   ` Jan Beulich
2021-10-15 16:29     ` Anthony PERARD
2021-10-18  8:48       ` Jan Beulich
2021-10-21 11:03         ` Anthony PERARD
2021-10-21 11:24           ` Jan Beulich
2021-10-21 13:54             ` Anthony PERARD
2021-10-21 14:16               ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 43/51] build: replace $(BASEDIR) by $(objtree) Anthony PERARD
2021-10-14  9:21   ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 44/51] build: add $(srctree) in few key places Anthony PERARD
2021-10-14  9:26   ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 45/51] build: rework cloc recipe Anthony PERARD
2021-10-14  9:33   ` Jan Beulich
2021-10-15 16:34     ` Anthony PERARD
2021-08-24 10:50 ` [XEN PATCH v7 46/51] build: replace $(BASEDIR) by $(srctree) Anthony PERARD
2021-10-14  9:36   ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 47/51] build: Rework "clean" to clean from the root dir Anthony PERARD
2021-10-14  9:44   ` Jan Beulich
2021-10-15 16:40     ` Anthony PERARD
2021-08-24 10:50 ` [XEN PATCH v7 48/51] build: Rework "headers*.chk" prerequisite in include/ Anthony PERARD
2021-10-14  9:48   ` Jan Beulich
2021-08-24 10:50 ` [XEN PATCH v7 49/51] build: adding out-of-tree support to the xen build Anthony PERARD
2021-10-14 10:14   ` Jan Beulich
2021-10-15 16:58     ` Anthony PERARD
2021-10-18  9:02       ` Jan Beulich
2021-10-18  9:51         ` Anthony PERARD
2021-10-18 10:05           ` Jan Beulich
2021-10-18 10:28           ` Juergen Gross
2021-10-18 10:36             ` Jan Beulich
2021-10-18 10:40               ` Juergen Gross
2021-10-18 11:07                 ` Jan Beulich
2021-10-18 11:20                   ` Juergen Gross
2021-10-18 12:03                     ` Jan Beulich
2021-10-21 14:10               ` Anthony PERARD
2021-08-24 10:50 ` [XEN PATCH v7 50/51] build: specify source tree in include/ for prerequisite Anthony PERARD
2021-10-14 10:19   ` Jan Beulich
2021-10-15 17:02     ` Anthony PERARD
2021-08-24 10:50 ` [XEN PATCH v7 51/51] build: add %.E targets Anthony PERARD
2021-10-13 15:48   ` Jan Beulich
2021-10-14  6:52     ` Jan Beulich
2021-09-02 10:22 ` [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Jan Beulich
2021-09-06 16:13 ` Anthony PERARD
2021-09-07  6:20   ` Jan Beulich
2021-09-07  7:46   ` Jan Beulich
2021-09-15  9:53 ` Michal Orzel
2021-11-04 15:49 ` Alex Bennée
2021-11-04 16:12   ` Alex Bennée
2021-11-04 16:34   ` Anthony PERARD
2021-11-04 16:59     ` Alex Bennée

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=20210824105038.1257926-28-anthony.perard@citrix.com \
    --to=anthony.perard@citrix.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=george.dunlap@citrix.com \
    --cc=iwj@xenproject.org \
    --cc=jbeulich@suse.com \
    --cc=julien@xen.org \
    --cc=roger.pau@citrix.com \
    --cc=sstabellini@kernel.org \
    --cc=wl@xen.org \
    --cc=xen-devel@lists.xenproject.org \
    /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.