mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
xen: asm-generic support
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/Makefile To use a generic header is needed to add to arch/$(ARCH)/include/asm/Makefile : generic-y += <name-of-header-file.h> For each mentioned header in arch/$(ARCH)/include/asm/Makefile, the necessary wrapper in arch/$(ARCH)/include/generated/asm will be generated. As the base Makefile.asm-generic from Linux kernel was taken. ( 06c2afb862f9da8 "Linux 6.5-rc1" ). Signed-off-by: Oleksii Kurochko <oleksii.kurochko@gmail.com> Reviewed-by: Anthony PERARD <anthony.perard@citrix.com> Acked-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
bd31678c84
commit
56a9e44e7d
4 files changed
+68
-1
No files matched your search
@@ -267,6 +267,7 @@ xen/arch/*/efi/efi.h
|
||||
xen/arch/*/efi/pe.c
|
||||
xen/arch/*/efi/runtime.c
|
||||
xen/arch/*/include/asm/asm-offsets.h
|
||||
xen/arch/*/include/generated
|
||||
xen/build-dir-cppcheck/
|
||||
xen/common/config_data.S
|
||||
xen/common/config.gz
|
||||
|
||||
+8
-1
@@ -438,6 +438,7 @@ ifdef building_out_of_srctree
|
||||
endif
|
||||
CFLAGS += -I$(srctree)/include
|
||||
CFLAGS += -I$(srctree)/arch/$(SRCARCH)/include
|
||||
CFLAGS += -I$(objtree)/arch/$(SRCARCH)/include/generated
|
||||
|
||||
# Note that link order matters!
|
||||
ALL_OBJS-y := common/built_in.o
|
||||
@@ -580,16 +581,22 @@ _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 $(objtree)/arch/*/include/generated
|
||||
|
||||
.PHONY: _distclean
|
||||
_distclean: clean
|
||||
rm -f tags TAGS cscope.files cscope.in.out cscope.out cscope.po.out GTAGS GPATH GRTAGS GSYMS .config source
|
||||
|
||||
# Support for using generic headers in asm-generic
|
||||
PHONY += asm-generic
|
||||
asm-generic:
|
||||
$(Q)$(MAKE) $(asm-generic)=arch/$(SRCARCH)/include/generated/asm
|
||||
|
||||
$(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
|
||||
|
||||
@@ -91,6 +91,12 @@ cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || e
|
||||
|
||||
clang-ifversion = $(shell [ $(CONFIG_CLANG_VERSION)0 $(1) $(2)000 ] && echo $(3) || echo $(4))
|
||||
|
||||
###
|
||||
# Shorthand for $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.asm-generic obj
|
||||
# Usage:
|
||||
# $(Q)$(MAKE) $(asm-generic)=dir
|
||||
asm-generic := -f $(srctree)/scripts/Makefile.asm-generic obj
|
||||
|
||||
###
|
||||
# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=
|
||||
# Usage:
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only
|
||||
# include/asm-generic contains a lot of files that are used
|
||||
# verbatim by several architectures.
|
||||
#
|
||||
# This Makefile reads the file arch/$(SRCARCH)/include/asm/Makefile
|
||||
# and for each file listed in this file with generic-y creates
|
||||
# a small wrapper file in arch/$(SRCARCH)/include/generated/asm.
|
||||
|
||||
PHONY := all
|
||||
all:
|
||||
|
||||
src := $(subst /generated,,$(obj))
|
||||
|
||||
include $(srctree)/scripts/Kbuild.include
|
||||
-include $(src)/Makefile
|
||||
|
||||
redundant := $(filter $(mandatory-y) $(generated-y), $(generic-y))
|
||||
redundant += $(foreach f, $(generic-y), $(if $(wildcard $(srctree)/$(src)/$(f)),$(f)))
|
||||
redundant := $(sort $(redundant))
|
||||
$(if $(redundant),\
|
||||
$(warning redundant generic-y found in $(src)/Makefile: $(redundant)))
|
||||
|
||||
# If arch does not implement mandatory headers, fallback to asm-generic ones.
|
||||
mandatory-y := $(filter-out $(generated-y), $(mandatory-y))
|
||||
generic-y += $(foreach f, $(mandatory-y), $(if $(wildcard $(srctree)/$(src)/$(f)),,$(f)))
|
||||
|
||||
generic-y := $(addprefix $(obj)/, $(generic-y))
|
||||
generated-y := $(addprefix $(obj)/, $(generated-y))
|
||||
|
||||
# Remove stale wrappers when the corresponding files are removed from generic-y
|
||||
old-headers := $(wildcard $(obj)/*.h)
|
||||
unwanted := $(filter-out $(generic-y) $(generated-y),$(old-headers))
|
||||
|
||||
quiet_cmd_wrap = WRAP $@
|
||||
cmd_wrap = echo "\#include <asm-generic/$*.h>" > $@
|
||||
|
||||
quiet_cmd_remove = REMOVE $(unwanted)
|
||||
cmd_remove = rm -f $(unwanted)
|
||||
|
||||
all: $(generic-y)
|
||||
$(if $(unwanted),$(call cmd,remove))
|
||||
@:
|
||||
|
||||
$(obj)/%.h:
|
||||
$(call cmd,wrap)
|
||||
|
||||
# Create output directory. Skip it if at least one old header exists
|
||||
# since we know the output directory already exists.
|
||||
ifeq ($(old-headers),)
|
||||
$(shell mkdir -p $(obj))
|
||||
endif
|
||||
|
||||
.PHONY: $(PHONY)
|
||||