Some headers are shared between individual architectures or are empty.
To avoid duplication of these headers, asm-generic is introduced.

With the following patch, an architecture uses generic headers
mentioned in the file arch/$(ARCH)/include/asm/Kbuild.

To use a generic header is needed to add to
arch/$(ARCH)/include/asm/Kbuild :
        generic-y += <name-of-header-file.h>

For each mentioned header in arch/$(ARCH)/include/asm/Kbuild,
kbuild will generate the necessary wrapper in
arch/$(ARCH)/include/generated/asm.

Signed-off-by: Oleksii Kurochko <oleksii.kuroc...@gmail.com>
---
Changes in V4:
 - introduce asm-generic support
 - update commit message
---
Changes in V3:
 - Rename stubs dir to asm-generic
---
Changes in V2:
 - Nothing changed.
---
 xen/Makefile                      | 10 +++++++++-
 xen/arch/arm/include/asm/Kbuild   |  1 +
 xen/arch/ppc/include/asm/Kbuild   |  1 +
 xen/arch/riscv/include/asm/Kbuild |  1 +
 xen/arch/x86/include/asm/Kbuild   |  1 +
 xen/scripts/Makefile.asm-generic  | 23 +++++++++++++++++++++++
 6 files changed, 36 insertions(+), 1 deletion(-)
 create mode 100644 xen/arch/arm/include/asm/Kbuild
 create mode 100644 xen/arch/ppc/include/asm/Kbuild
 create mode 100644 xen/arch/riscv/include/asm/Kbuild
 create mode 100644 xen/arch/x86/include/asm/Kbuild
 create mode 100644 xen/scripts/Makefile.asm-generic

diff --git a/xen/Makefile b/xen/Makefile
index f57e5a596c..698d6ddeb8 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -438,6 +438,7 @@ ifdef building_out_of_srctree
 endif
 CFLAGS += -I$(srctree)/include
 CFLAGS += -I$(srctree)/arch/$(SRCARCH)/include
+CFLAGS += -I$(srctree)/arch/$(SRCARCH)/include/generated
 
 # Note that link order matters!
 ALL_OBJS-y                := common/built_in.o
@@ -580,6 +581,7 @@ _clean:
        rm -f $(TARGET).efi $(TARGET).efi.map $(TARGET).efi.elf 
$(TARGET).efi.stripped
        rm -f asm-offsets.s arch/*/include/asm/asm-offsets.h
        rm -f .banner .allconfig.tmp include/xen/compile.h
+       rm -rf arch/*/include/generated
 
 .PHONY: _distclean
 _distclean: clean
@@ -589,7 +591,7 @@ $(TARGET).gz: $(TARGET)
        gzip -n -f -9 < $< > $@.new
        mv $@.new $@
 
-$(TARGET): outputmakefile FORCE
+$(TARGET): outputmakefile asm-generic FORCE
        $(Q)$(MAKE) $(build)=tools
        $(Q)$(MAKE) $(build)=. include/xen/compile.h
        $(Q)$(MAKE) $(build)=include all
@@ -667,6 +669,12 @@ endif # need-sub-make
 PHONY += FORCE
 FORCE:
 
+# Support for using generic headers in asm-generic
+PHONY += asm-generic
+asm-generic:
+       $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-generic \
+                   obj=arch/$(SRCARCH)/include/generated/asm
+
 # 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/arm/include/asm/Kbuild b/xen/arch/arm/include/asm/Kbuild
new file mode 100644
index 0000000000..a4e40e534e
--- /dev/null
+++ b/xen/arch/arm/include/asm/Kbuild
@@ -0,0 +1 @@
+# SPDX-License-Identifier: GPL-2.0-only
diff --git a/xen/arch/ppc/include/asm/Kbuild b/xen/arch/ppc/include/asm/Kbuild
new file mode 100644
index 0000000000..a4e40e534e
--- /dev/null
+++ b/xen/arch/ppc/include/asm/Kbuild
@@ -0,0 +1 @@
+# SPDX-License-Identifier: GPL-2.0-only
diff --git a/xen/arch/riscv/include/asm/Kbuild 
b/xen/arch/riscv/include/asm/Kbuild
new file mode 100644
index 0000000000..a4e40e534e
--- /dev/null
+++ b/xen/arch/riscv/include/asm/Kbuild
@@ -0,0 +1 @@
+# SPDX-License-Identifier: GPL-2.0-only
diff --git a/xen/arch/x86/include/asm/Kbuild b/xen/arch/x86/include/asm/Kbuild
new file mode 100644
index 0000000000..a4e40e534e
--- /dev/null
+++ b/xen/arch/x86/include/asm/Kbuild
@@ -0,0 +1 @@
+# SPDX-License-Identifier: GPL-2.0-only
diff --git a/xen/scripts/Makefile.asm-generic b/xen/scripts/Makefile.asm-generic
new file mode 100644
index 0000000000..0aac3f50b8
--- /dev/null
+++ b/xen/scripts/Makefile.asm-generic
@@ -0,0 +1,23 @@
+# SPDX-License-Identifier: GPL-2.0
+# include/asm-generic contains a lot of files that are used
+# verbatim by several architectures.
+#
+# This Makefile reads the file arch/$(SRCARCH)/include/asm/Kbuild
+# and for each file listed in this file with generic-y creates
+# a small wrapper file in $(obj) (arch/$(SRCARCH)/include/generated/asm)
+
+kbuild-file := $(srctree)/arch/$(SRCARCH)/include/asm/Kbuild
+include $(kbuild-file)
+
+include scripts/Kbuild.include
+
+# Create output directory if not already present
+_dummy := $(shell [ -d $(obj) ] || mkdir -p $(obj))
+
+quiet_cmd_wrap = WRAP    $@
+cmd_wrap = echo "\#include <asm-generic/$*.h>" >$@
+
+all: $(patsubst %, $(obj)/%, $(generic-y))
+
+$(obj)/%.h:
+       $(call cmd,wrap)
-- 
2.41.0


Reply via email to