All of lore.kernel.org
 help / color / mirror / Atom feed
* [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build!
@ 2021-08-24 10:49 Anthony PERARD
  2021-08-24 10:49 ` [XEN PATCH v7 01/51] build: introduce cpp_flags macro Anthony PERARD
                   ` (54 more replies)
  0 siblings, 55 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:49 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Roger Pau Monné,
	Kevin Tian, George Dunlap, Ian Jackson, Connor Davis,
	Bob Eshleman, Alistair Francis, Tim Deegan, Jun Nakajima,
	Tamas K Lengyel, Doug Goldstein, Jan Beulich,
	Konrad Rzeszutek Wilk, Julien Grall, Alexandru Isaila,
	Stefano Stabellini, Ross Lagerwall, Petre Pircalabu,
	Paul Durrant, Daniel De Graaf, Daniel P. Smith,
	Volodymyr Babchuk, Wei Liu, Andrew Cooper, Lukasz Hawrylko

Patch series available in this git branch:
https://xenbits.xen.org/git-http/people/aperard/xen-unstable.git br.build-system-xen-v7

v7:
    Out-of-tree build!

    This mean many more patches. Everything after patch 27 is new.

    There's a few new patch before that, but otherwise are rework of v6.

v6:
    This new version of the series get's us very close to be able to do
    out-of-tree build, but I've stop at been able to use Linux's `fixdep` and
    getting rid of those annoying *.d2 files generation.

    There a few patch left from the previous round within the first 8 patches
    (mixed with new or replaced patches). All the rest is new.

    The main patch is probably "build: build everything from the root dir, use
    obj=$subdir" which has still quite a few changes left. I might be still be
    able to break it down even more if needed to help with review (and might
    allow me to better explain some changes in it).

v5:
https://lore.kernel.org/xen-devel/20200421161208.2429539-1-anthony.perard@citrix.com/
- few changes detailed in patch notes.
- 1 new patch

Hi,

I have work toward building Xen (the hypervisor) with Linux's build system,
Kbuild.

The main reason for that is to be able to have out-of-tree build. It's annoying
when a build fail because of the pvshim. Other benefit is a much faster
rebuild, and `make clean` doesn't take ages, and better dependencies to figure
out what needs to be rebuild.

This new version of the series get's us very close to be able to do out-of-tree
build, but I've stop at been able to use Linux's `fixdep` and getting rid of
those annoying *.d2 files.

Cheers,

Anthony PERARD (51):
  build: introduce cpp_flags macro
  build: use if_changed on built_in.o
  build: use if_changed_rules with %.o:%.c targets
  build: factorise generation of the linker scripts
  x86/mm: avoid building multiple .o from a single .c file
  build,include: rework compat-build-source.py
  build,include: rework compat-build-header.py
  build: fix clean targets when subdir-y is used
  build: use subdir-y in test/Makefile
  build,arm: move LDFLAGS change to arch.mk
  build: move make option changes check earlier
  build: avoid building arm/arm/*/head.o twice
  build: convert binfile use to if_changed
  xen: move include/asm-* to arch/*/include/asm
  build,riscv: tell the build system about riscv64/head.S
  build: generate "include/xen/compile.h" with if_changed
  build: set XEN_BUILD_EFI earlier
  build: fix $(TARGET).efi creation in arch/arm
  build: fix arch/x86/note.o rule
  build: avoid re-executing the main Makefile by introducing build.mk
  build: set ALL_OBJS to main Makefile; move prelink.o to main Makefile
  build: clean common temporary files from root makefile
  build,include: remove arch-*/*.h public header listing from
    headers*.chk
  build: prepare to always invoke $(MAKE) from xen/, use $(obj)
  build: rework test/livepatch/Makefile
  build: build everything from the root dir, use obj=$subdir
  build: introduce if_changed_deps
  build: rename __LINKER__ to LINKER_SCRIPT
  build: add an other explicite rules to not build $(XEN_ROOT)/.config
  build: hook kconfig into xen build system
  xen/tools/kconfig: fix build with -Wdeclaration-after-statement
  build: Remove KBUILD_ specific from Makefile.host
  build: handle always-y and hostprogs-always-y
  build: start building the tools with the main makefiles
  build: Add headers path to CFLAGS once for all archs
  build: generate x86's asm-macros.h with filechk
  build: clean-up "clean" rules of duplication
  build: use main rune to build host binary x86's mkelf32 and mkreloc
  build: rework coverage and ubsan CFLAGS handling
  build: fix dependencies in arch/x86/boot
  build,x86: remove the need for build32.mk
  build: grab common EFI source files in arch specific dir
  build: replace $(BASEDIR) by $(objtree)
  build: add $(srctree) in few key places
  build: rework cloc recipe
  build: replace $(BASEDIR) by $(srctree)
  build: Rework "clean" to clean from the root dir
  build: Rework "headers*.chk" prerequisite in include/
  build: adding out-of-tree support to the xen build
  build: specify source tree in include/ for prerequisite
  build: add %.E targets

 .gitignore                                    |   7 +-
 MAINTAINERS                                   |  37 +-
 tools/include/Makefile                        |   2 +-
 tools/misc/xen-access.c                       |   4 +-
 tools/tests/vhpet/Makefile                    |   2 +-
 xen/Kconfig                                   |   4 +-
 xen/Makefile                                  | 408 +++++++++++-------
 xen/Rules.mk                                  | 293 ++++++++-----
 xen/arch/arm/Makefile                         |  62 +--
 xen/arch/arm/README.LinuxPrimitives           |  10 +-
 xen/arch/arm/arch.mk                          |  12 +-
 xen/arch/arm/arm32/Makefile                   |   1 +
 xen/arch/arm/arm32/head.S                     |   2 +-
 xen/arch/arm/arm64/Makefile                   |   2 +
 xen/arch/arm/arm64/head.S                     |   2 +-
 xen/arch/arm/efi/Makefile                     |   9 +
 .../asm-arm => arch/arm/include/asm}/acpi.h   |   0
 .../arm/include/asm}/alternative.h            |   0
 .../asm-arm => arch/arm/include/asm}/altp2m.h |   0
 .../arm/include/asm}/arm32/atomic.h           |   0
 .../arm/include/asm}/arm32/bitops.h           |   0
 .../arm/include/asm}/arm32/bug.h              |   0
 .../arm/include/asm}/arm32/cmpxchg.h          |   0
 .../arm/include/asm}/arm32/flushtlb.h         |   0
 .../arm/include/asm}/arm32/insn.h             |   0
 .../arm/include/asm}/arm32/io.h               |   0
 .../arm/include/asm}/arm32/macros.h           |   0
 .../arm/include/asm}/arm32/mm.h               |   0
 .../arm/include/asm}/arm32/page.h             |   0
 .../arm/include/asm}/arm32/processor.h        |   0
 .../arm/include/asm}/arm32/sysregs.h          |   0
 .../arm/include/asm}/arm32/system.h           |   0
 .../arm/include/asm}/arm32/traps.h            |   0
 .../arm/include/asm}/arm32/vfp.h              |   0
 .../arm/include/asm}/arm64/atomic.h           |   0
 .../arm/include/asm}/arm64/bitops.h           |   0
 .../arm/include/asm}/arm64/brk.h              |   0
 .../arm/include/asm}/arm64/bug.h              |   0
 .../arm/include/asm}/arm64/cmpxchg.h          |   0
 .../arm/include/asm}/arm64/efibind.h          |   0
 .../arm/include/asm}/arm64/flushtlb.h         |   0
 .../arm/include/asm}/arm64/hsr.h              |   0
 .../arm/include/asm}/arm64/insn.h             |   0
 .../arm/include/asm}/arm64/io.h               |   0
 .../arm/include/asm}/arm64/macros.h           |   0
 .../arm/include/asm}/arm64/mm.h               |   0
 .../arm/include/asm}/arm64/page.h             |   0
 .../arm/include/asm}/arm64/processor.h        |   0
 .../arm/include/asm}/arm64/sysregs.h          |   0
 .../arm/include/asm}/arm64/system.h           |   0
 .../arm/include/asm}/arm64/traps.h            |   0
 .../arm/include/asm}/arm64/vfp.h              |   0
 .../arm/include/asm}/asm_defns.h              |   0
 .../asm-arm => arch/arm/include/asm}/atomic.h |   0
 .../asm-arm => arch/arm/include/asm}/bitops.h |   0
 .../asm-arm => arch/arm/include/asm}/bug.h    |   0
 .../arm/include/asm}/byteorder.h              |   0
 .../asm-arm => arch/arm/include/asm}/cache.h  |   0
 .../arm/include/asm}/cadence-uart.h           |   0
 .../asm-arm => arch/arm/include/asm}/config.h |   2 +-
 .../asm-arm => arch/arm/include/asm}/cpregs.h |   0
 .../arm/include/asm}/cpuerrata.h              |   0
 .../arm/include/asm}/cpufeature.h             |   0
 .../arm/include/asm}/current.h                |   0
 .../arm/include/asm}/debugger.h               |   0
 .../asm-arm => arch/arm/include/asm}/delay.h  |   0
 .../asm-arm => arch/arm/include/asm}/desc.h   |   0
 .../asm-arm => arch/arm/include/asm}/device.h |   0
 .../asm-arm => arch/arm/include/asm}/div64.h  |   0
 .../asm-arm => arch/arm/include/asm}/domain.h |   0
 .../arm/include/asm}/domain_build.h           |   0
 .../arm/include/asm}/early_printk.h           |   0
 .../arm/include/asm}/efibind.h                |   0
 .../asm-arm => arch/arm/include/asm}/elf.h    |   0
 .../asm-arm => arch/arm/include/asm}/event.h  |   0
 .../arm/include/asm}/exynos4210-uart.h        |   0
 .../arm/include/asm}/flushtlb.h               |   0
 .../asm-arm => arch/arm/include/asm}/gic.h    |   0
 .../arm/include/asm}/gic_v3_defs.h            |   0
 .../arm/include/asm}/gic_v3_its.h             |   0
 .../arm/include/asm}/grant_table.h            |   0
 .../arm/include/asm}/guest_access.h           |   0
 .../arm/include/asm}/guest_atomics.h          |   0
 .../arm/include/asm}/guest_walk.h             |   0
 .../arm/include/asm}/hardirq.h                |   0
 .../asm-arm => arch/arm/include/asm}/hsr.h    |   0
 .../arm/include/asm}/hypercall.h              |   0
 .../asm-arm => arch/arm/include/asm}/init.h   |   0
 .../asm-arm => arch/arm/include/asm}/insn.h   |   0
 .../asm-arm => arch/arm/include/asm}/io.h     |   0
 .../asm-arm => arch/arm/include/asm}/iocap.h  |   0
 .../asm-arm => arch/arm/include/asm}/iommu.h  |   0
 .../arm/include/asm}/iommu_fwspec.h           |   0
 .../asm-arm => arch/arm/include/asm}/ioreq.h  |   0
 .../asm-arm => arch/arm/include/asm}/irq.h    |   0
 .../asm-arm => arch/arm/include/asm}/kernel.h |   0
 .../arm/include/asm}/livepatch.h              |   0
 .../asm-arm => arch/arm/include/asm}/lpae.h   |   0
 .../asm-arm => arch/arm/include/asm}/macros.h |   0
 .../arm/include/asm}/mem_access.h             |   0
 .../asm-arm => arch/arm/include/asm}/mm.h     |   0
 .../asm-arm => arch/arm/include/asm}/mmio.h   |   0
 .../arm/include/asm}/monitor.h                |   0
 .../arm/include/asm}/new_vgic.h               |   0
 .../asm-arm => arch/arm/include/asm}/nospec.h |   0
 .../asm-arm => arch/arm/include/asm}/numa.h   |   0
 .../asm-arm => arch/arm/include/asm}/p2m.h    |   0
 .../arm/include/asm}/page-bits.h              |   0
 .../asm-arm => arch/arm/include/asm}/page.h   |   0
 .../asm-arm => arch/arm/include/asm}/paging.h |   0
 .../asm-arm => arch/arm/include/asm}/pci.h    |   0
 .../asm-arm => arch/arm/include/asm}/percpu.h |   0
 .../asm-arm => arch/arm/include/asm}/perfc.h  |   0
 .../arm/include/asm}/perfc_defn.h             |   0
 .../arm/include/asm}/pl011-uart.h             |   0
 .../arm/include/asm}/platform.h               |   0
 .../arm/include/asm}/platforms/exynos5.h      |   0
 .../arm/include/asm}/platforms/midway.h       |   0
 .../arm/include/asm}/platforms/omap5.h        |   0
 .../arm/include/asm}/platforms/vexpress.h     |   0
 .../asm}/platforms/xilinx-zynqmp-eemi.h       |   0
 .../arm/include/asm}/processor.h              |   0
 .../arm/include/asm}/procinfo.h               |   0
 .../asm-arm => arch/arm/include/asm}/psci.h   |   0
 .../asm-arm => arch/arm/include/asm}/random.h |   0
 .../asm-arm => arch/arm/include/asm}/regs.h   |   0
 .../arm/include/asm}/scif-uart.h              |   0
 .../asm-arm => arch/arm/include/asm}/setup.h  |   0
 .../arm/include/asm}/short-desc.h             |   0
 .../asm-arm => arch/arm/include/asm}/smccc.h  |   0
 .../asm-arm => arch/arm/include/asm}/smp.h    |   0
 .../arm/include/asm}/softirq.h                |   0
 .../arm/include/asm}/spinlock.h               |   0
 .../asm-arm => arch/arm/include/asm}/string.h |   0
 .../arm/include/asm}/sysregs.h                |   0
 .../asm-arm => arch/arm/include/asm}/system.h |   0
 .../arm/include/asm}/tee/optee_msg.h          |   0
 .../arm/include/asm}/tee/optee_rpc_cmd.h      |   0
 .../arm/include/asm}/tee/optee_smc.h          |   0
 .../arm/include/asm}/tee/tee.h                |   0
 .../asm-arm => arch/arm/include/asm}/time.h   |   0
 .../asm-arm => arch/arm/include/asm}/trace.h  |   0
 .../asm-arm => arch/arm/include/asm}/traps.h  |   0
 .../asm-arm => arch/arm/include/asm}/types.h  |   0
 .../asm-arm => arch/arm/include/asm}/vfp.h    |   0
 .../arm/include/asm}/vgic-emul.h              |   0
 .../asm-arm => arch/arm/include/asm}/vgic.h   |   0
 .../arm/include/asm}/vm_event.h               |   0
 .../asm-arm => arch/arm/include/asm}/vpl011.h |   0
 .../asm-arm => arch/arm/include/asm}/vpsci.h  |   0
 .../asm-arm => arch/arm/include/asm}/vreg.h   |   0
 .../asm-arm => arch/arm/include/asm}/vtimer.h |   0
 .../arm/include/asm}/xenoprof.h               |   0
 xen/arch/arm/smpboot.c                        |   2 +-
 xen/arch/arm/vpsci.c                          |   2 +-
 xen/arch/riscv/arch.mk                        |   1 -
 .../riscv/include/asm}/config.h               |   0
 xen/arch/riscv/riscv64/Makefile               |   1 +
 xen/arch/x86/Makefile                         | 204 ++++-----
 xen/arch/x86/Rules.mk                         |   4 +-
 xen/arch/x86/arch.mk                          |  54 ++-
 xen/arch/x86/boot/Makefile                    |  62 ++-
 xen/arch/x86/boot/build32.mk                  |  40 --
 xen/arch/x86/efi/Makefile                     |  15 +-
 .../asm-x86 => arch/x86/include/asm}/acpi.h   |   0
 .../x86/include/asm}/alternative-asm.h        |   0
 .../x86/include/asm}/alternative.h            |   0
 .../asm-x86 => arch/x86/include/asm}/altp2m.h |   0
 .../asm-x86 => arch/x86/include/asm}/amd.h    |   0
 .../asm-x86 => arch/x86/include/asm}/apic.h   |   0
 .../x86/include/asm}/apicdef.h                |   0
 .../x86/include/asm}/asm-defns.h              |   0
 .../x86/include/asm}/asm_defns.h              |   0
 .../asm-x86 => arch/x86/include/asm}/atomic.h |   0
 .../asm-x86 => arch/x86/include/asm}/bitops.h |   0
 .../asm-x86 => arch/x86/include/asm}/bug.h    |   0
 .../x86/include/asm}/byteorder.h              |   0
 .../x86/include/asm}/bzimage.h                |   0
 .../asm-x86 => arch/x86/include/asm}/cache.h  |   0
 .../asm-x86 => arch/x86/include/asm}/compat.h |   0
 .../asm-x86 => arch/x86/include/asm}/config.h |   0
 .../x86/include/asm}/cpufeature.h             |   0
 .../x86/include/asm}/cpufeatures.h            |   0
 .../x86/include/asm}/cpufeatureset.h          |   0
 .../asm-x86 => arch/x86/include/asm}/cpuid.h  |   0
 .../x86/include/asm}/cpuidle.h                |   0
 .../x86/include/asm}/current.h                |   2 +-
 .../x86/include/asm}/debugger.h               |   0
 .../x86/include/asm}/debugreg.h               |   0
 .../asm-x86 => arch/x86/include/asm}/delay.h  |   0
 .../asm-x86 => arch/x86/include/asm}/desc.h   |   0
 .../asm-x86 => arch/x86/include/asm}/device.h |   0
 .../asm-x86 => arch/x86/include/asm}/div64.h  |   0
 .../x86/include/asm}/dom0_build.h             |   0
 .../asm-x86 => arch/x86/include/asm}/domain.h |   2 +-
 .../asm-x86 => arch/x86/include/asm}/e820.h   |   0
 .../asm-x86 => arch/x86/include/asm}/edd.h    |   0
 .../x86/include/asm}/efibind.h                |   0
 .../asm-x86 => arch/x86/include/asm}/elf.h    |   0
 .../asm-x86 => arch/x86/include/asm}/event.h  |   0
 .../asm-x86 => arch/x86/include/asm}/fixmap.h |   0
 .../x86/include/asm}/flushtlb.h               |   0
 .../x86/include/asm}/genapic.h                |   0
 .../x86/include/asm}/grant_table.h            |   0
 .../asm-x86 => arch/x86/include/asm}/guest.h  |   0
 .../x86/include/asm}/guest/hyperv-hcall.h     |   0
 .../x86/include/asm}/guest/hyperv-tlfs.h      |   0
 .../x86/include/asm}/guest/hyperv.h           |   0
 .../x86/include/asm}/guest/hypervisor.h       |   0
 .../x86/include/asm}/guest/pvh-boot.h         |   0
 .../x86/include/asm}/guest/xen-hcall.h        |   0
 .../x86/include/asm}/guest/xen.h              |   0
 .../x86/include/asm}/guest_access.h           |   0
 .../x86/include/asm}/guest_atomics.h          |   0
 .../x86/include/asm}/guest_pt.h               |   0
 .../asm-x86 => arch/x86/include/asm}/hap.h    |   0
 .../x86/include/asm}/hardirq.h                |   0
 .../asm-x86 => arch/x86/include/asm}/hpet.h   |   0
 .../x86/include/asm}/hvm/asid.h               |   0
 .../x86/include/asm}/hvm/cacheattr.h          |   0
 .../x86/include/asm}/hvm/domain.h             |   0
 .../x86/include/asm}/hvm/emulate.h            |   0
 .../x86/include/asm}/hvm/grant_table.h        |   0
 .../x86/include/asm}/hvm/guest_access.h       |   0
 .../x86/include/asm}/hvm/hvm.h                |   0
 .../asm-x86 => arch/x86/include/asm}/hvm/io.h |   0
 .../x86/include/asm}/hvm/ioreq.h              |   0
 .../x86/include/asm}/hvm/irq.h                |   0
 .../x86/include/asm}/hvm/monitor.h            |   0
 .../x86/include/asm}/hvm/nestedhvm.h          |   0
 .../x86/include/asm}/hvm/save.h               |   0
 .../x86/include/asm}/hvm/support.h            |   0
 .../x86/include/asm}/hvm/svm/asid.h           |   0
 .../x86/include/asm}/hvm/svm/emulate.h        |   0
 .../x86/include/asm}/hvm/svm/intr.h           |   0
 .../x86/include/asm}/hvm/svm/nestedsvm.h      |   0
 .../x86/include/asm}/hvm/svm/svm.h            |   0
 .../x86/include/asm}/hvm/svm/svmdebug.h       |   0
 .../x86/include/asm}/hvm/svm/vmcb.h           |   0
 .../x86/include/asm}/hvm/trace.h              |   0
 .../x86/include/asm}/hvm/vcpu.h               |   0
 .../x86/include/asm}/hvm/vioapic.h            |   0
 .../x86/include/asm}/hvm/viridian.h           |   0
 .../x86/include/asm}/hvm/vlapic.h             |   0
 .../x86/include/asm}/hvm/vm_event.h           |   0
 .../x86/include/asm}/hvm/vmx/vmcs.h           |   0
 .../x86/include/asm}/hvm/vmx/vmx.h            |   0
 .../x86/include/asm}/hvm/vmx/vvmx.h           |   0
 .../x86/include/asm}/hvm/vpic.h               |   0
 .../x86/include/asm}/hvm/vpt.h                |   0
 .../x86/include/asm}/hypercall.h              |   0
 .../asm-x86 => arch/x86/include/asm}/i387.h   |   0
 .../asm-x86 => arch/x86/include/asm}/init.h   |   0
 .../x86/include/asm}/invpcid.h                |   0
 .../asm-x86 => arch/x86/include/asm}/io.h     |   0
 .../x86/include/asm}/io_apic.h                |   0
 .../asm-x86 => arch/x86/include/asm}/iocap.h  |   0
 .../asm-x86 => arch/x86/include/asm}/iommu.h  |   0
 .../asm-x86 => arch/x86/include/asm}/ioreq.h  |   0
 .../asm-x86 => arch/x86/include/asm}/irq.h    |   0
 .../asm-x86 => arch/x86/include/asm}/ldt.h    |   0
 .../x86/include/asm}/livepatch.h              |   0
 .../x86/include/asm}/mach-default/bios_ebda.h |   0
 .../x86/include/asm}/mach-default/io_ports.h  |   0
 .../include/asm}/mach-default/irq_vectors.h   |   0
 .../include/asm}/mach-default/mach_mpparse.h  |   0
 .../include/asm}/mach-default/mach_mpspec.h   |   0
 .../x86/include/asm}/mach-generic/mach_apic.h |   0
 .../include/asm}/mach-generic/mach_mpparse.h  |   0
 .../x86/include/asm}/machine_kexec.h          |   0
 .../x86/include/asm}/mc146818rtc.h            |   0
 .../asm-x86 => arch/x86/include/asm}/mce.h    |   0
 .../x86/include/asm}/mem_access.h             |   0
 .../x86/include/asm}/mem_paging.h             |   0
 .../x86/include/asm}/mem_sharing.h            |   0
 .../x86/include/asm}/microcode.h              |   0
 .../asm-x86 => arch/x86/include/asm}/mm.h     |   0
 .../x86/include/asm}/monitor.h                |   0
 .../asm-x86 => arch/x86/include/asm}/mpspec.h |   0
 .../x86/include/asm}/mpspec_def.h             |   0
 .../asm-x86 => arch/x86/include/asm}/msi.h    |   0
 .../x86/include/asm}/msr-index.h              |   0
 .../asm-x86 => arch/x86/include/asm}/msr.h    |   0
 .../asm-x86 => arch/x86/include/asm}/mtrr.h   |   0
 .../x86/include/asm}/multicall.h              |   0
 .../asm-x86 => arch/x86/include/asm}/mwait.h  |   0
 .../asm-x86 => arch/x86/include/asm}/nmi.h    |   0
 .../asm-x86 => arch/x86/include/asm}/nops.h   |   0
 .../asm-x86 => arch/x86/include/asm}/nospec.h |   0
 .../asm-x86 => arch/x86/include/asm}/numa.h   |   0
 .../asm-x86 => arch/x86/include/asm}/p2m.h    |   0
 .../x86/include/asm}/page-bits.h              |   0
 .../asm-x86 => arch/x86/include/asm}/page.h   |   0
 .../asm-x86 => arch/x86/include/asm}/paging.h |   0
 .../asm-x86 => arch/x86/include/asm}/pci.h    |   0
 .../asm-x86 => arch/x86/include/asm}/percpu.h |   0
 .../asm-x86 => arch/x86/include/asm}/perfc.h  |   0
 .../x86/include/asm}/perfc_defn.h             |   0
 .../x86/include/asm}/processor.h              |   0
 .../asm-x86 => arch/x86/include/asm}/psr.h    |   0
 .../x86/include/asm}/pv/domain.h              |   0
 .../x86/include/asm}/pv/grant_table.h         |   0
 .../asm-x86 => arch/x86/include/asm}/pv/mm.h  |   0
 .../x86/include/asm}/pv/shim.h                |   0
 .../x86/include/asm}/pv/traps.h               |   0
 .../asm-x86 => arch/x86/include/asm}/random.h |   0
 .../asm-x86 => arch/x86/include/asm}/regs.h   |   0
 .../asm-x86 => arch/x86/include/asm}/setup.h  |   0
 .../asm-x86 => arch/x86/include/asm}/shadow.h |   0
 .../asm-x86 => arch/x86/include/asm}/shared.h |   0
 .../asm-x86 => arch/x86/include/asm}/smp.h    |   0
 .../x86/include/asm}/softirq.h                |   0
 .../x86/include/asm}/spec_ctrl.h              |   0
 .../x86/include/asm}/spec_ctrl_asm.h          |   0
 .../x86/include/asm}/spinlock.h               |   0
 .../asm-x86 => arch/x86/include/asm}/string.h |   0
 .../asm-x86 => arch/x86/include/asm}/system.h |   0
 .../asm-x86 => arch/x86/include/asm}/tboot.h  |   0
 .../asm-x86 => arch/x86/include/asm}/time.h   |   0
 .../asm-x86 => arch/x86/include/asm}/trace.h  |   0
 .../asm-x86 => arch/x86/include/asm}/traps.h  |   0
 .../asm-x86 => arch/x86/include/asm}/types.h  |   0
 .../x86/include/asm}/uaccess.h                |   0
 .../x86/include/asm}/unaligned.h              |   0
 .../x86/include/asm}/vm_event.h               |   0
 .../asm-x86 => arch/x86/include/asm}/vpmu.h   |   0
 .../x86/include/asm}/x86-defns.h              |   0
 .../x86/include/asm}/x86-vendors.h            |   0
 .../x86/include/asm}/x86_64/efibind.h         |   0
 .../x86/include/asm}/x86_64/elf.h             |   0
 .../x86/include/asm}/x86_64/page.h            |   0
 .../x86/include/asm}/x86_64/regs.h            |   0
 .../x86/include/asm}/x86_64/system.h          |   0
 .../x86/include/asm}/x86_64/uaccess.h         |   0
 .../x86/include/asm}/x86_emulate.h            |   2 +-
 .../x86/include/asm}/xenoprof.h               |   0
 .../asm-x86 => arch/x86/include/asm}/xstate.h |   0
 xen/arch/x86/mm/Makefile                      |   9 -
 xen/arch/x86/mm/guest_walk.c                  |   3 -
 xen/arch/x86/mm/guest_walk_2.c                |   2 +
 xen/arch/x86/mm/guest_walk_3.c                |   2 +
 xen/arch/x86/mm/guest_walk_4.c                |   2 +
 xen/arch/x86/mm/hap/Makefile                  |  15 +-
 xen/arch/x86/mm/hap/guest_walk.c              |   3 -
 xen/arch/x86/mm/hap/guest_walk_2.c            |   2 +
 xen/arch/x86/mm/hap/guest_walk_3.c            |   2 +
 xen/arch/x86/mm/hap/guest_walk_4.c            |   2 +
 xen/arch/x86/mm/shadow/Makefile               |   9 -
 xen/arch/x86/mm/shadow/guest_2.c              |   2 +
 xen/arch/x86/mm/shadow/guest_3.c              |   2 +
 xen/arch/x86/mm/shadow/guest_4.c              |   2 +
 xen/arch/x86/mm/shadow/multi.c                |   3 -
 xen/build.mk                                  |  87 ++++
 xen/common/Makefile                           |  14 +-
 xen/common/efi/runtime.c                      |   2 +-
 xen/common/libelf/Makefile                    |   4 +-
 xen/common/libfdt/Makefile                    |   8 +-
 xen/common/page_alloc.c                       |   2 +-
 xen/include/Makefile                          |  81 ++--
 xen/include/xen/acpi.h                        |   5 +-
 xen/include/xen/bitmap.h                      |   2 +-
 xen/scripts/Kbuild.include                    |  65 ++-
 xen/scripts/Kconfig.include                   |   2 +-
 xen/scripts/Makefile.clean                    |  40 +-
 xen/{tools/kconfig => scripts}/Makefile.host  |  29 +-
 xen/scripts/mkmakefile                        |  17 +
 xen/test/Makefile                             |  16 +-
 xen/test/livepatch/Makefile                   | 213 ++++-----
 xen/tools/Makefile                            |  14 +-
 xen/tools/compat-build-header.py              |  44 +-
 xen/tools/compat-build-source.py              |   8 +-
 xen/tools/fixdep.c                            | 404 +++++++++++++++++
 xen/tools/kconfig/Makefile.kconfig            | 106 -----
 xen/tools/kconfig/confdata.c                  |   2 +-
 xen/tools/symbols.c                           |  18 +-
 xen/xsm/flask/Makefile                        |  45 +-
 xen/xsm/flask/policy/mkaccess_vector.sh       |   7 +-
 xen/xsm/flask/ss/Makefile                     |   5 +-
 378 files changed, 1572 insertions(+), 978 deletions(-)
 rename xen/{include/asm-arm => arch/arm/include/asm}/acpi.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/alternative.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/altp2m.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/atomic.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/bitops.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/bug.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/cmpxchg.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/flushtlb.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/insn.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/io.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/macros.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/mm.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/page.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/processor.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/sysregs.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/system.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/traps.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/vfp.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/atomic.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/bitops.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/brk.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/bug.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/cmpxchg.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/efibind.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/flushtlb.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/hsr.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/insn.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/io.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/macros.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/mm.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/page.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/processor.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/sysregs.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/system.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/traps.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/vfp.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/asm_defns.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/atomic.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/bitops.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/bug.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/byteorder.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/cache.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/cadence-uart.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/config.h (99%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/cpregs.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/cpuerrata.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/cpufeature.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/current.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/debugger.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/delay.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/desc.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/device.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/div64.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/domain.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/domain_build.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/early_printk.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/efibind.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/elf.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/event.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/exynos4210-uart.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/flushtlb.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/gic.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/gic_v3_defs.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/gic_v3_its.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/grant_table.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/guest_access.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/guest_atomics.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/guest_walk.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/hardirq.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/hsr.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/hypercall.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/init.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/insn.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/io.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/iocap.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/iommu.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/iommu_fwspec.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/ioreq.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/irq.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/kernel.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/livepatch.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/lpae.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/macros.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/mem_access.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/mm.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/mmio.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/monitor.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/new_vgic.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/nospec.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/numa.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/p2m.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/page-bits.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/page.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/paging.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/pci.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/percpu.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/perfc.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/perfc_defn.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/pl011-uart.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/platform.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/platforms/exynos5.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/platforms/midway.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/platforms/omap5.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/platforms/vexpress.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/platforms/xilinx-zynqmp-eemi.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/processor.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/procinfo.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/psci.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/random.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/regs.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/scif-uart.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/setup.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/short-desc.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/smccc.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/smp.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/softirq.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/spinlock.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/string.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/sysregs.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/system.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/tee/optee_msg.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/tee/optee_rpc_cmd.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/tee/optee_smc.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/tee/tee.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/time.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/trace.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/traps.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/types.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/vfp.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/vgic-emul.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/vgic.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/vm_event.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/vpl011.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/vpsci.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/vreg.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/vtimer.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/xenoprof.h (100%)
 rename xen/{include/asm-riscv => arch/riscv/include/asm}/config.h (100%)
 create mode 100644 xen/arch/riscv/riscv64/Makefile
 delete mode 100644 xen/arch/x86/boot/build32.mk
 rename xen/{include/asm-x86 => arch/x86/include/asm}/acpi.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/alternative-asm.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/alternative.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/altp2m.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/amd.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/apic.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/apicdef.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/asm-defns.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/asm_defns.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/atomic.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/bitops.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/bug.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/byteorder.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/bzimage.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/cache.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/compat.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/config.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/cpufeature.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/cpufeatures.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/cpufeatureset.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/cpuid.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/cpuidle.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/current.h (99%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/debugger.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/debugreg.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/delay.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/desc.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/device.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/div64.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/dom0_build.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/domain.h (99%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/e820.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/edd.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/efibind.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/elf.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/event.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/fixmap.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/flushtlb.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/genapic.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/grant_table.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/hyperv-hcall.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/hyperv-tlfs.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/hyperv.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/hypervisor.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/pvh-boot.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/xen-hcall.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/xen.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest_access.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest_atomics.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest_pt.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hap.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hardirq.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hpet.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/asid.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/cacheattr.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/domain.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/emulate.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/grant_table.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/guest_access.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/hvm.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/io.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/ioreq.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/irq.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/monitor.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/nestedhvm.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/save.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/support.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/asid.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/emulate.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/intr.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/nestedsvm.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/svm.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/svmdebug.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/vmcb.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/trace.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vcpu.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vioapic.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/viridian.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vlapic.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vm_event.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vmx/vmcs.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vmx/vmx.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vmx/vvmx.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vpic.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vpt.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hypercall.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/i387.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/init.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/invpcid.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/io.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/io_apic.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/iocap.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/iommu.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/ioreq.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/irq.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/ldt.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/livepatch.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-default/bios_ebda.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-default/io_ports.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-default/irq_vectors.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-default/mach_mpparse.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-default/mach_mpspec.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-generic/mach_apic.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-generic/mach_mpparse.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/machine_kexec.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mc146818rtc.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mce.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mem_access.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mem_paging.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mem_sharing.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/microcode.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mm.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/monitor.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mpspec.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mpspec_def.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/msi.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/msr-index.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/msr.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mtrr.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/multicall.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mwait.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/nmi.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/nops.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/nospec.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/numa.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/p2m.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/page-bits.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/page.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/paging.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/pci.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/percpu.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/perfc.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/perfc_defn.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/processor.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/psr.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/pv/domain.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/pv/grant_table.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/pv/mm.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/pv/shim.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/pv/traps.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/random.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/regs.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/setup.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/shadow.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/shared.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/smp.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/softirq.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/spec_ctrl.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/spec_ctrl_asm.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/spinlock.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/string.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/system.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/tboot.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/time.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/trace.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/traps.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/types.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/uaccess.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/unaligned.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/vm_event.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/vpmu.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/x86-defns.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/x86-vendors.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_64/efibind.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_64/elf.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_64/page.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_64/regs.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_64/system.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_64/uaccess.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_emulate.h (89%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/xenoprof.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/xstate.h (100%)
 create mode 100644 xen/arch/x86/mm/guest_walk_2.c
 create mode 100644 xen/arch/x86/mm/guest_walk_3.c
 create mode 100644 xen/arch/x86/mm/guest_walk_4.c
 create mode 100644 xen/arch/x86/mm/hap/guest_walk_2.c
 create mode 100644 xen/arch/x86/mm/hap/guest_walk_3.c
 create mode 100644 xen/arch/x86/mm/hap/guest_walk_4.c
 create mode 100644 xen/arch/x86/mm/shadow/guest_2.c
 create mode 100644 xen/arch/x86/mm/shadow/guest_3.c
 create mode 100644 xen/arch/x86/mm/shadow/guest_4.c
 create mode 100644 xen/build.mk
 rename xen/{tools/kconfig => scripts}/Makefile.host (88%)
 create mode 100755 xen/scripts/mkmakefile
 create mode 100644 xen/tools/fixdep.c
 delete mode 100644 xen/tools/kconfig/Makefile.kconfig

-- 
Anthony PERARD



^ permalink raw reply	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 01/51] build: introduce cpp_flags macro
  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 ` Anthony PERARD
  2021-09-02 10:08   ` Jan Beulich
  2021-08-24 10:49 ` [XEN PATCH v7 02/51] build: use if_changed on built_in.o Anthony PERARD
                   ` (53 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:49 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu,
	Roger Pau Monné,
	Tim Deegan

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---

Notes:
    v7:
    - also filter -flto
    - and convert "asm-offsets.s" and "xen/x86/%.lds" to use cpp_flags as
      well.
    
    v6:
    - switch to a macro as suggested
      which allows to be used with both a_flags and c_flags
    
    v5:
    - new patch

 xen/Makefile                    | 2 +-
 xen/Rules.mk                    | 7 +++++--
 xen/arch/x86/Makefile           | 2 +-
 xen/arch/x86/mm/Makefile        | 2 +-
 xen/arch/x86/mm/hap/Makefile    | 2 +-
 xen/arch/x86/mm/shadow/Makefile | 2 +-
 6 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index 94e837182615..4ceb02d37441 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -410,7 +410,7 @@ include/xen/compile.h: include/xen/compile.h.in .banner
 	@mv -f $@.new $@
 
 asm-offsets.s: arch/$(TARGET_ARCH)/$(TARGET_SUBARCH)/asm-offsets.c
-	$(CC) $(filter-out -Wa$(comma)% -flto,$(c_flags)) -S -g0 -o $@.new -MQ $@ $<
+	$(CC) $(call cpp_flags,$(c_flags)) -S -g0 -o $@.new -MQ $@ $<
 	$(call move-if-changed,$@.new,$@)
 
 include/asm-$(TARGET_ARCH)/asm-offsets.h: asm-offsets.s
diff --git a/xen/Rules.mk b/xen/Rules.mk
index d65d6a48993b..c99c4a9475c9 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -133,6 +133,9 @@ endif
 # Always build obj-bin files as binary even if they come from C source. 
 $(obj-bin-y): XEN_CFLAGS := $(filter-out -flto,$(XEN_CFLAGS))
 
+# To be use with $(a_flags) or $(c_flags) to produce CPP flags
+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.
 
@@ -222,13 +225,13 @@ $(filter %.init.o,$(obj-y) $(obj-bin-y) $(extra-y)): %.init.o: %.o FORCE
 	$(call if_changed,obj_init_o)
 
 quiet_cmd_cpp_i_c = CPP     $@
-cmd_cpp_i_c = $(CPP) $(filter-out -Wa$(comma)%,$(c_flags)) -MQ $@ -o $@ $<
+cmd_cpp_i_c = $(CPP) $(call cpp_flags,$(c_flags)) -MQ $@ -o $@ $<
 
 quiet_cmd_cc_s_c = CC      $@
 cmd_cc_s_c = $(CC) $(filter-out -Wa$(comma)%,$(c_flags)) -S $< -o $@
 
 quiet_cmd_cpp_s_S = CPP     $@
-cmd_cpp_s_S = $(CPP) $(filter-out -Wa$(comma)%,$(a_flags)) -MQ $@ -o $@ $<
+cmd_cpp_s_S = $(CPP) $(call cpp_flags,$(a_flags)) -MQ $@ -o $@ $<
 
 %.i: %.c FORCE
 	$(call if_changed,cpp_i_c)
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index fe38cfd54421..462472215c91 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -292,7 +292,7 @@ $(BASEDIR)/include/asm-x86/asm-macros.h: asm-macros.i Makefile
 
 efi.lds: AFLAGS-y += -DEFI
 xen.lds efi.lds: xen.lds.S
-	$(CPP) -P $(filter-out -Wa$(comma)%,$(a_flags)) -MQ $@ -o $@ $<
+	$(CPP) -P $(call cpp_flags,$(a_flags)) -MQ $@ -o $@ $<
 
 boot/mkelf32: boot/mkelf32.c
 	$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
diff --git a/xen/arch/x86/mm/Makefile b/xen/arch/x86/mm/Makefile
index b31041644fe8..2818c066f76a 100644
--- a/xen/arch/x86/mm/Makefile
+++ b/xen/arch/x86/mm/Makefile
@@ -15,7 +15,7 @@ guest_walk_%.o: guest_walk.c Makefile
 	$(CC) $(c_flags) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
 
 guest_walk_%.i: guest_walk.c Makefile
-	$(CPP) $(filter-out -Wa$(comma)%,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
+	$(CPP) $(call cpp_flags,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
 
 guest_walk_%.s: guest_walk.c Makefile
 	$(CC) $(filter-out -Wa$(comma)%,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -S $< -o $@
diff --git a/xen/arch/x86/mm/hap/Makefile b/xen/arch/x86/mm/hap/Makefile
index 22e7ad54bd33..c6d296b51720 100644
--- a/xen/arch/x86/mm/hap/Makefile
+++ b/xen/arch/x86/mm/hap/Makefile
@@ -9,7 +9,7 @@ guest_walk_%level.o: guest_walk.c Makefile
 	$(CC) $(c_flags) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
 
 guest_walk_%level.i: guest_walk.c Makefile
-	$(CPP) $(filter-out -Wa$(comma)%,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
+	$(CPP) $(call cpp_flags,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
 
 guest_walk_%level.s: guest_walk.c Makefile
 	$(CC) $(filter-out -Wa$(comma)%,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -S $< -o $@
diff --git a/xen/arch/x86/mm/shadow/Makefile b/xen/arch/x86/mm/shadow/Makefile
index 770213fe9d84..fd64b4dda925 100644
--- a/xen/arch/x86/mm/shadow/Makefile
+++ b/xen/arch/x86/mm/shadow/Makefile
@@ -10,7 +10,7 @@ guest_%.o: multi.c Makefile
 	$(CC) $(c_flags) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
 
 guest_%.i: multi.c Makefile
-	$(CPP) $(filter-out -Wa$(comma)%,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
+	$(CPP) $(call cpp_flags,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
 
 guest_%.s: multi.c Makefile
 	$(CC) $(filter-out -Wa$(comma)%,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -S $< -o $@
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 02/51] build: use if_changed on built_in.o
  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-08-24 10:49 ` Anthony PERARD
  2021-08-24 10:49 ` [XEN PATCH v7 03/51] build: use if_changed_rules with %.o:%.c targets Anthony PERARD
                   ` (52 subsequent siblings)
  54 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:49 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Jan Beulich, Andrew Cooper, George Dunlap,
	Ian Jackson, Julien Grall, Stefano Stabellini, Wei Liu

In the case where $(obj-y) is empty, we also replace $(c_flags) by
$(XEN_CFLAGS) to avoid generating an .%.d dependency file. This avoid
make trying to include %.h file in the ld command if $(obj-y) isn't
empty anymore on a second run.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
---

Notes:
    v7:
    - Display "CC" for cmd_cc_builtin instead of "LD".
    
    v6:
    - use $(if $(strip $(obj-y)),ld_builtin,cc_builtin)
      as suggested
    - rebased
    
    v4:
    - Have cmd_ld_builtin depends on CONFIG_LTO, which simplify built_in.o
      rule.

 xen/Rules.mk | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/xen/Rules.mk b/xen/Rules.mk
index c99c4a9475c9..5a6a5d63260f 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -147,17 +147,22 @@ include $(BASEDIR)/arch/$(TARGET_ARCH)/Rules.mk
 c_flags += $(CFLAGS-y)
 a_flags += $(CFLAGS-y) $(AFLAGS-y)
 
-built_in.o: $(obj-y) $(if $(strip $(lib-y)),lib.a) $(extra-y)
-ifeq ($(strip $(obj-y)),)
-	$(CC) $(c_flags) -c -x c /dev/null -o $@
-else
+quiet_cmd_cc_builtin = CC      $@
+cmd_cc_builtin = \
+    $(CC) $(XEN_CFLAGS) -c -x c /dev/null -o $@
+
+quiet_cmd_ld_builtin = LD      $@
 ifeq ($(CONFIG_LTO),y)
-	$(LD_LTO) -r -o $@ $(filter $(obj-y),$^)
+cmd_ld_builtin = \
+    $(LD_LTO) -r -o $@ $(filter $(obj-y),$(real-prereqs))
 else
-	$(LD) $(XEN_LDFLAGS) -r -o $@ $(filter $(obj-y),$^)
-endif
+cmd_ld_builtin = \
+    $(LD) $(XEN_LDFLAGS) -r -o $@ $(filter $(obj-y),$(real-prereqs))
 endif
 
+built_in.o: $(obj-y) $(if $(strip $(lib-y)),lib.a) $(extra-y) FORCE
+	$(call if_changed,$(if $(strip $(obj-y)),ld_builtin,cc_builtin))
+
 lib.a: $(lib-y) FORCE
 	$(call if_changed,ar)
 
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 03/51] build: use if_changed_rules with %.o:%.c targets
  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-08-24 10:49 ` [XEN PATCH v7 02/51] build: use if_changed on built_in.o Anthony PERARD
@ 2021-08-24 10:49 ` Anthony PERARD
  2021-08-24 10:49 ` [XEN PATCH v7 04/51] build: factorise generation of the linker scripts Anthony PERARD
                   ` (51 subsequent siblings)
  54 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:49 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Jan Beulich, Andrew Cooper, George Dunlap,
	Ian Jackson, Julien Grall, Stefano Stabellini, Wei Liu

Use $(dot-target) to have the target name prefix with a dot.

Now, when the CC command has run, it is recorded in .*.cmd
file, then if_changed_rules will compare it on subsequent runs.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
---
 xen/Rules.mk | 26 +++++++++++++++++---------
 1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/xen/Rules.mk b/xen/Rules.mk
index 5a6a5d63260f..eaf770414305 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -192,19 +192,27 @@ FORCE:
 
 SRCPATH := $(patsubst $(BASEDIR)/%,%,$(CURDIR))
 
-%.o: %.c Makefile
+quiet_cmd_cc_o_c = CC      $@
 ifeq ($(CONFIG_ENFORCE_UNIQUE_SYMBOLS),y)
-	$(CC) $(c_flags) -c $< -o $(@D)/.$(@F).tmp -MQ $@
-ifeq ($(CONFIG_CC_IS_CLANG),y)
-	$(OBJCOPY) --redefine-sym $<=$(SRCPATH)/$< $(@D)/.$(@F).tmp $@
-else
-	$(OBJCOPY) --redefine-sym $(<F)=$(SRCPATH)/$< $(@D)/.$(@F).tmp $@
-endif
-	rm -f $(@D)/.$(@F).tmp
+    cmd_cc_o_c = $(CC) $(c_flags) -c $< -o $(dot-target).tmp -MQ $@
+    ifeq ($(CONFIG_CC_IS_CLANG),y)
+        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $<=$(SRCPATH)/$< $(dot-target).tmp $@
+    else
+        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $(<F)=$(SRCPATH)/$< $(dot-target).tmp $@
+    endif
+    cmd_objcopy_fix_sym += && rm -f $(dot-target).tmp
 else
-	$(CC) $(c_flags) -c $< -o $@
+    cmd_cc_o_c = $(CC) $(c_flags) -c $< -o $@
 endif
 
+define rule_cc_o_c
+    $(call cmd_and_record,cc_o_c)
+    $(call cmd,objcopy_fix_sym)
+endef
+
+%.o: %.c FORCE
+	$(call if_changed_rule,cc_o_c)
+
 quiet_cmd_cc_o_S = CC      $@
 cmd_cc_o_S = $(CC) $(a_flags) -c $< -o $@
 
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 04/51] build: factorise generation of the linker scripts
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (2 preceding siblings ...)
  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 ` 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
                   ` (50 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:49 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Jan Beulich, Andrew Cooper, George Dunlap,
	Ian Jackson, Julien Grall, Stefano Stabellini, Wei Liu,
	Volodymyr Babchuk, Roger Pau Monné

In Arm and X86 makefile, generating the linker script is the same, so
we can simply have both call the same macro.

We need to add *.lds files into extra-y so that Rules.mk can find the
.*.cmd dependency file and load it.

Change made to the command line:
- Use cpp_flags macro which simply filter -Wa,% options from $(a_flags).
- Added -D__LINKER__ even it is only used by Arm's lds.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
---

Notes:
    v6:
    - CPP already used instead of CC -E
    - -Ui386 already removed
    - cpp_flags is now a macro
    - rebased
    
    v5:
    - rename cc_lds_S to cpp_lds_S as the binary runned is now CPP
    - Use new cpp_flags instead of the open-coded filter of a_flags.
    
    v4:
    - fix rebuild by adding FORCE as dependency
    - Use $(CPP)
    - remove -Ui386
    - avoid using "define" for cmd_cc_lds_S, as adding '; \' on each line is
      still mandatory for if_changed (or cmd) macro to work.

 xen/Rules.mk          | 4 ++++
 xen/arch/arm/Makefile | 6 ++++--
 xen/arch/x86/Makefile | 6 ++++--
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/xen/Rules.mk b/xen/Rules.mk
index eaf770414305..3f61682ceab7 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -255,6 +255,10 @@ cmd_cpp_s_S = $(CPP) $(call cpp_flags,$(a_flags)) -MQ $@ -o $@ $<
 %.s: %.S FORCE
 	$(call if_changed,cpp_s_S)
 
+# Linker scripts, .lds.S -> .lds
+quiet_cmd_cpp_lds_S = LDS     $@
+cmd_cpp_lds_S = $(CPP) -P $(call cpp_flags,$(a_flags)) -D__LINKER__ -MQ $@ -o $@ $<
+
 # Add intermediate targets:
 # When building objects with specific suffix patterns, add intermediate
 # targets that the final targets are derived from.
diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index 3d3b97b5b440..0edd9dee6f49 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -66,6 +66,8 @@ obj-y += vpsci.o
 obj-y += vuart.o
 extra-y += $(TARGET_SUBARCH)/head.o
 
+extra-y += xen.lds
+
 #obj-bin-y += ....o
 
 ifneq ($(CONFIG_DTB_FILE),"")
@@ -133,8 +135,8 @@ $(TARGET)-syms: prelink.o xen.lds
 .PHONY: include
 include:
 
-xen.lds: xen.lds.S
-	$(CPP) -P $(a_flags) -D__LINKER__ -MQ $@ -o $@ $<
+xen.lds: xen.lds.S FORCE
+	$(call if_changed,cpp_lds_S)
 
 dtb.o: $(patsubst "%",%,$(CONFIG_DTB_FILE))
 
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 462472215c91..929227f5a3ac 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -79,6 +79,7 @@ obj-y += sysctl.o
 endif
 
 extra-y += asm-macros.i
+extra-y += xen.lds
 
 ifneq ($(CONFIG_HVM),y)
 x86_emulate.o: CFLAGS-y += -Wno-unused-label
@@ -239,6 +240,7 @@ endif
 note_file_option ?= $(note_file)
 
 ifeq ($(XEN_BUILD_PE),y)
+extra-y += efi.lds
 $(TARGET).efi: prelink.o $(note_file) efi.lds efi/relocs-dummy.o efi/mkreloc
 ifeq ($(CONFIG_DEBUG_INFO),y)
 	$(if $(filter --strip-debug,$(EFI_LDFLAGS)),echo,:) "Will strip debug info from $(@F)"
@@ -291,8 +293,8 @@ $(BASEDIR)/include/asm-x86/asm-macros.h: asm-macros.i Makefile
 	$(call move-if-changed,$@.new,$@)
 
 efi.lds: AFLAGS-y += -DEFI
-xen.lds efi.lds: xen.lds.S
-	$(CPP) -P $(call cpp_flags,$(a_flags)) -MQ $@ -o $@ $<
+xen.lds efi.lds: xen.lds.S FORCE
+	$(call if_changed,cpp_lds_S)
 
 boot/mkelf32: boot/mkelf32.c
 	$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 05/51] x86/mm: avoid building multiple .o from a single .c file
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (3 preceding siblings ...)
  2021-08-24 10:49 ` [XEN PATCH v7 04/51] build: factorise generation of the linker scripts Anthony PERARD
@ 2021-08-24 10:49 ` Anthony PERARD
  2021-09-07  6:14   ` Jan Beulich
  2021-08-24 10:49 ` [XEN PATCH v7 06/51] build,include: rework compat-build-source.py Anthony PERARD
                   ` (49 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:49 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Jan Beulich, Andrew Cooper, George Dunlap,
	Ian Jackson, Julien Grall, Stefano Stabellini, Wei Liu,
	Roger Pau Monné,
	Tim Deegan

This replace the use of a single .c file use for multiple .o file by
creating multiple .c file including the first one.

There's quite a few issues with trying to build more than one object
file from a single source file: there's is a duplication of the make
rules to generate those targets; there is an additional ".file" symbol
added in order to differentiate between the object files; and the
tools/symbols have an heuristic to try to pick up the right ".file".

This patch adds new .c source file which avoid the need to add a
second ".file" symbol and thus avoid the need to deal with those
issues.

Also remove __OBJECT_FILE__ from $(CC) command line as it isn't used
anywhere anymore. And remove the macro "build-intermediate" since the
generic rules for single targets can be used.

And rename the objects in mm/hap/ to remove the extra "level".

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
---

Notes:
    v7:
    - rename hap/guest_walk_${level}level.c to hap/guest_walk_${level}.c
    
    v6:
    - new patch
      to replace both from v5:
        xen,symbols: rework file symbols selection
        build: use if_changed to build mm/*/guest_%.o
    
    The changes in the patch for symbols.c was too complicated to explain,
    and I probably didn't realize one important fact about the tool: it deal
    with all *.o been concatenated to each other, without a way to figure
    out which symbol belong to which original file, and certainly no way to
    figure out if there's more than one ".file" symbol to choose from beside
    some fragile heuristic.

 xen/Makefile                       | 11 -----------
 xen/Rules.mk                       |  2 +-
 xen/arch/x86/mm/Makefile           |  9 ---------
 xen/arch/x86/mm/guest_walk.c       |  3 ---
 xen/arch/x86/mm/guest_walk_2.c     |  2 ++
 xen/arch/x86/mm/guest_walk_3.c     |  2 ++
 xen/arch/x86/mm/guest_walk_4.c     |  2 ++
 xen/arch/x86/mm/hap/Makefile       | 15 +++------------
 xen/arch/x86/mm/hap/guest_walk.c   |  3 ---
 xen/arch/x86/mm/hap/guest_walk_2.c |  2 ++
 xen/arch/x86/mm/hap/guest_walk_3.c |  2 ++
 xen/arch/x86/mm/hap/guest_walk_4.c |  2 ++
 xen/arch/x86/mm/shadow/Makefile    |  9 ---------
 xen/arch/x86/mm/shadow/guest_2.c   |  2 ++
 xen/arch/x86/mm/shadow/guest_3.c   |  2 ++
 xen/arch/x86/mm/shadow/guest_4.c   |  2 ++
 xen/arch/x86/mm/shadow/multi.c     |  3 ---
 xen/tools/symbols.c                | 18 ++----------------
 18 files changed, 24 insertions(+), 67 deletions(-)
 create mode 100644 xen/arch/x86/mm/guest_walk_2.c
 create mode 100644 xen/arch/x86/mm/guest_walk_3.c
 create mode 100644 xen/arch/x86/mm/guest_walk_4.c
 create mode 100644 xen/arch/x86/mm/hap/guest_walk_2.c
 create mode 100644 xen/arch/x86/mm/hap/guest_walk_3.c
 create mode 100644 xen/arch/x86/mm/hap/guest_walk_4.c
 create mode 100644 xen/arch/x86/mm/shadow/guest_2.c
 create mode 100644 xen/arch/x86/mm/shadow/guest_3.c
 create mode 100644 xen/arch/x86/mm/shadow/guest_4.c

diff --git a/xen/Makefile b/xen/Makefile
index 4ceb02d37441..f35a4d84f7cd 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -482,17 +482,6 @@ _MAP:
 %/: FORCE
 	$(MAKE) -f $(BASEDIR)/Rules.mk -C $* built_in.o built_in_bin.o
 
-build-intermediate = $(eval $(call build-intermediate-closure,$(1)))
-define build-intermediate-closure
-$(1): FORCE
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C $$(@D) $$(@F)
-endef
-
-$(foreach base,arch/x86/mm/guest_walk_% \
-               arch/x86/mm/hap/guest_walk_%level \
-               arch/x86/mm/shadow/guest_%, \
-    $(foreach ext,o i s,$(call build-intermediate,$(base).$(ext))))
-
 .PHONY: cloc
 cloc:
 	$(eval tmpfile := $(shell mktemp))
diff --git a/xen/Rules.mk b/xen/Rules.mk
index 3f61682ceab7..48ae519d0153 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -139,7 +139,7 @@ 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) '-D__OBJECT_FILE__="$@"'
+c_flags = -MMD -MP -MF $(@D)/.$(@F).d $(XEN_CFLAGS)
 a_flags = -MMD -MP -MF $(@D)/.$(@F).d $(XEN_AFLAGS)
 
 include $(BASEDIR)/arch/$(TARGET_ARCH)/Rules.mk
diff --git a/xen/arch/x86/mm/Makefile b/xen/arch/x86/mm/Makefile
index 2818c066f76a..6b7882d992bb 100644
--- a/xen/arch/x86/mm/Makefile
+++ b/xen/arch/x86/mm/Makefile
@@ -10,12 +10,3 @@ obj-$(CONFIG_MEM_SHARING) += mem_sharing.o
 obj-y += p2m.o
 obj-$(CONFIG_HVM) += p2m-ept.o p2m-pod.o p2m-pt.o
 obj-y += paging.o
-
-guest_walk_%.o: guest_walk.c Makefile
-	$(CC) $(c_flags) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
-
-guest_walk_%.i: guest_walk.c Makefile
-	$(CPP) $(call cpp_flags,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
-
-guest_walk_%.s: guest_walk.c Makefile
-	$(CC) $(filter-out -Wa$(comma)%,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -S $< -o $@
diff --git a/xen/arch/x86/mm/guest_walk.c b/xen/arch/x86/mm/guest_walk.c
index 30d83cf1e0e6..b9f607272c39 100644
--- a/xen/arch/x86/mm/guest_walk.c
+++ b/xen/arch/x86/mm/guest_walk.c
@@ -21,9 +21,6 @@
  * along with this program; If not, see <http://www.gnu.org/licenses/>.
  */
 
-/* Allow uniquely identifying static symbols in the 3 generated objects. */
-asm(".file \"" __OBJECT_FILE__ "\"");
-
 #include <xen/types.h>
 #include <xen/mm.h>
 #include <xen/paging.h>
diff --git a/xen/arch/x86/mm/guest_walk_2.c b/xen/arch/x86/mm/guest_walk_2.c
new file mode 100644
index 000000000000..defcd59bc260
--- /dev/null
+++ b/xen/arch/x86/mm/guest_walk_2.c
@@ -0,0 +1,2 @@
+#define GUEST_PAGING_LEVELS 2
+#include "guest_walk.c"
diff --git a/xen/arch/x86/mm/guest_walk_3.c b/xen/arch/x86/mm/guest_walk_3.c
new file mode 100644
index 000000000000..1c9eca37741e
--- /dev/null
+++ b/xen/arch/x86/mm/guest_walk_3.c
@@ -0,0 +1,2 @@
+#define GUEST_PAGING_LEVELS 3
+#include "guest_walk.c"
diff --git a/xen/arch/x86/mm/guest_walk_4.c b/xen/arch/x86/mm/guest_walk_4.c
new file mode 100644
index 000000000000..aa3900338a2d
--- /dev/null
+++ b/xen/arch/x86/mm/guest_walk_4.c
@@ -0,0 +1,2 @@
+#define GUEST_PAGING_LEVELS 4
+#include "guest_walk.c"
diff --git a/xen/arch/x86/mm/hap/Makefile b/xen/arch/x86/mm/hap/Makefile
index c6d296b51720..8ef54b1faa50 100644
--- a/xen/arch/x86/mm/hap/Makefile
+++ b/xen/arch/x86/mm/hap/Makefile
@@ -1,15 +1,6 @@
 obj-y += hap.o
-obj-y += guest_walk_2level.o
-obj-y += guest_walk_3level.o
-obj-y += guest_walk_4level.o
+obj-y += guest_walk_2.o
+obj-y += guest_walk_3.o
+obj-y += guest_walk_4.o
 obj-y += nested_hap.o
 obj-y += nested_ept.o
-
-guest_walk_%level.o: guest_walk.c Makefile
-	$(CC) $(c_flags) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
-
-guest_walk_%level.i: guest_walk.c Makefile
-	$(CPP) $(call cpp_flags,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
-
-guest_walk_%level.s: guest_walk.c Makefile
-	$(CC) $(filter-out -Wa$(comma)%,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -S $< -o $@
diff --git a/xen/arch/x86/mm/hap/guest_walk.c b/xen/arch/x86/mm/hap/guest_walk.c
index f59ebc84a290..832a8058471e 100644
--- a/xen/arch/x86/mm/hap/guest_walk.c
+++ b/xen/arch/x86/mm/hap/guest_walk.c
@@ -18,9 +18,6 @@
  * this program; If not, see <http://www.gnu.org/licenses/>.
  */
 
-/* Allow uniquely identifying static symbols in the 3 generated objects. */
-asm(".file \"" __OBJECT_FILE__ "\"");
-
 #include <xen/domain_page.h>
 #include <xen/paging.h>
 #include <xen/sched.h>
diff --git a/xen/arch/x86/mm/hap/guest_walk_2.c b/xen/arch/x86/mm/hap/guest_walk_2.c
new file mode 100644
index 000000000000..defcd59bc260
--- /dev/null
+++ b/xen/arch/x86/mm/hap/guest_walk_2.c
@@ -0,0 +1,2 @@
+#define GUEST_PAGING_LEVELS 2
+#include "guest_walk.c"
diff --git a/xen/arch/x86/mm/hap/guest_walk_3.c b/xen/arch/x86/mm/hap/guest_walk_3.c
new file mode 100644
index 000000000000..1c9eca37741e
--- /dev/null
+++ b/xen/arch/x86/mm/hap/guest_walk_3.c
@@ -0,0 +1,2 @@
+#define GUEST_PAGING_LEVELS 3
+#include "guest_walk.c"
diff --git a/xen/arch/x86/mm/hap/guest_walk_4.c b/xen/arch/x86/mm/hap/guest_walk_4.c
new file mode 100644
index 000000000000..aa3900338a2d
--- /dev/null
+++ b/xen/arch/x86/mm/hap/guest_walk_4.c
@@ -0,0 +1,2 @@
+#define GUEST_PAGING_LEVELS 4
+#include "guest_walk.c"
diff --git a/xen/arch/x86/mm/shadow/Makefile b/xen/arch/x86/mm/shadow/Makefile
index fd64b4dda925..b4a1620b6920 100644
--- a/xen/arch/x86/mm/shadow/Makefile
+++ b/xen/arch/x86/mm/shadow/Makefile
@@ -5,12 +5,3 @@ obj-$(CONFIG_PV) += pv.o guest_4.o
 else
 obj-y += none.o
 endif
-
-guest_%.o: multi.c Makefile
-	$(CC) $(c_flags) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
-
-guest_%.i: multi.c Makefile
-	$(CPP) $(call cpp_flags,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -c $< -o $@
-
-guest_%.s: multi.c Makefile
-	$(CC) $(filter-out -Wa$(comma)%,$(c_flags)) -DGUEST_PAGING_LEVELS=$* -S $< -o $@
diff --git a/xen/arch/x86/mm/shadow/guest_2.c b/xen/arch/x86/mm/shadow/guest_2.c
new file mode 100644
index 000000000000..288b229982b0
--- /dev/null
+++ b/xen/arch/x86/mm/shadow/guest_2.c
@@ -0,0 +1,2 @@
+#define GUEST_PAGING_LEVELS 2
+#include "multi.c"
diff --git a/xen/arch/x86/mm/shadow/guest_3.c b/xen/arch/x86/mm/shadow/guest_3.c
new file mode 100644
index 000000000000..04e17b0b8adc
--- /dev/null
+++ b/xen/arch/x86/mm/shadow/guest_3.c
@@ -0,0 +1,2 @@
+#define GUEST_PAGING_LEVELS 3
+#include "multi.c"
diff --git a/xen/arch/x86/mm/shadow/guest_4.c b/xen/arch/x86/mm/shadow/guest_4.c
new file mode 100644
index 000000000000..c0c5d3cb11ad
--- /dev/null
+++ b/xen/arch/x86/mm/shadow/guest_4.c
@@ -0,0 +1,2 @@
+#define GUEST_PAGING_LEVELS 4
+#include "multi.c"
diff --git a/xen/arch/x86/mm/shadow/multi.c b/xen/arch/x86/mm/shadow/multi.c
index 8bb028c2e2fa..7207fcf9e75f 100644
--- a/xen/arch/x86/mm/shadow/multi.c
+++ b/xen/arch/x86/mm/shadow/multi.c
@@ -20,9 +20,6 @@
  * along with this program; If not, see <http://www.gnu.org/licenses/>.
  */
 
-/* Allow uniquely identifying static symbols in the 3 generated objects. */
-asm(".file \"" __OBJECT_FILE__ "\"");
-
 #include <xen/types.h>
 #include <xen/mm.h>
 #include <xen/trace.h>
diff --git a/xen/tools/symbols.c b/xen/tools/symbols.c
index 0b124526165d..710e9785d348 100644
--- a/xen/tools/symbols.c
+++ b/xen/tools/symbols.c
@@ -84,7 +84,6 @@ static int read_symbol(FILE *in, struct sym_entry *s)
 {
 	char str[500], type[20] = "";
 	char *sym, stype;
-	static enum { symbol, single_source, multi_source } last;
 	static char *filename;
 	int rc = -1;
 
@@ -118,24 +117,11 @@ static int read_symbol(FILE *in, struct sym_entry *s)
 	      */
 	     input_format == fmt_sysv && !*type && stype == '?' && sym &&
 	     sym[1] && strchr("cSsoh", sym[1]) && !sym[2])) {
-		/*
-		 * gas prior to binutils commit fbdf9406b0 (expected to appear
-		 * in 2.27) outputs symbol table entries resulting from .file
-		 * in reverse order. If we get two consecutive file symbols,
-		 * prefer the first one if that names an object file or has a
-		 * directory component (to cover multiply compiled files).
-		 */
-		bool multi = strchr(str, '/') || (sym && sym[1] == 'o');
-
-		if (multi || last != multi_source) {
-			free(filename);
-			filename = *str ? strdup(str) : NULL;
-		}
-		last = multi ? multi_source : single_source;
+		free(filename);
+		filename = *str ? strdup(str) : NULL;
 		goto skip_tail;
 	}
 
-	last = symbol;
 	rc = -1;
 
 	sym = str;
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 06/51] build,include: rework compat-build-source.py
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (4 preceding siblings ...)
  2021-08-24 10:49 ` [XEN PATCH v7 05/51] x86/mm: avoid building multiple .o from a single .c file Anthony PERARD
@ 2021-08-24 10:49 ` Anthony PERARD
  2021-08-24 10:49 ` [XEN PATCH v7 07/51] build,include: rework compat-build-header.py Anthony PERARD
                   ` (48 subsequent siblings)
  54 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:49 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Jan Beulich, Andrew Cooper, George Dunlap,
	Ian Jackson, Julien Grall, Stefano Stabellini, Wei Liu

Improvement are:
- give the path to xlat.lst as argument
- include `grep -v` in compat-build-source.py script, we don't need to
  write this in several scripted language.

No changes in final compat/%.h headers.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
---

Notes:
    v7:
    - actually keep the dependency on Makefile
    
    v6:
    - remove dependency on Makefile as it's not needed anymore
    
    v5:
    - removed "have 'xlat.lst' path as a variable" from the patch.
    
    v4:
    - new patch

 xen/include/Makefile             | 3 +--
 xen/tools/compat-build-source.py | 8 +++++++-
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/xen/include/Makefile b/xen/include/Makefile
index c8ca97eed0fc..4fa10e68f997 100644
--- a/xen/include/Makefile
+++ b/xen/include/Makefile
@@ -61,8 +61,7 @@ compat/%.i: compat/%.c Makefile
 
 compat/%.c: public/%.h xlat.lst Makefile $(BASEDIR)/tools/compat-build-source.py
 	mkdir -p $(@D)
-	grep -v 'DEFINE_XEN_GUEST_HANDLE(long)' $< | \
-	$(PYTHON) $(BASEDIR)/tools/compat-build-source.py >$@.new
+	$(PYTHON) $(BASEDIR)/tools/compat-build-source.py xlat.lst <$< >$@.new
 	mv -f $@.new $@
 
 compat/.xlat/%.h: compat/%.h compat/.xlat/%.lst $(BASEDIR)/tools/get-fields.sh Makefile
diff --git a/xen/tools/compat-build-source.py b/xen/tools/compat-build-source.py
index 2bcaf27d05a3..274d6917ab7f 100755
--- a/xen/tools/compat-build-source.py
+++ b/xen/tools/compat-build-source.py
@@ -13,7 +13,11 @@ pats = [
  [ r"XEN_GUEST_HANDLE", r"COMPAT_HANDLE" ],
 ];
 
-xlatf = open('xlat.lst', 'r')
+try:
+    xlatf = open(sys.argv[1], 'r')
+except IndexError:
+    print('missing path to xlat.lst argument')
+    sys.exit(1)
 for line in xlatf.readlines():
     match = re.subn(r"^\s*\?\s+(\w*)\s.*", r"\1", line.rstrip())
     if match[1]:
@@ -25,6 +29,8 @@ for pat in pats:
     pat[0] = re.compile(pat[0])
 
 for line in sys.stdin.readlines():
+    if 'DEFINE_XEN_GUEST_HANDLE(long)' in line:
+        continue
     for pat in pats:
         line = re.sub(pat[0], pat[1], line)
     print(line.rstrip())
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 07/51] build,include: rework compat-build-header.py
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (5 preceding siblings ...)
  2021-08-24 10:49 ` [XEN PATCH v7 06/51] build,include: rework compat-build-source.py Anthony PERARD
@ 2021-08-24 10:49 ` Anthony PERARD
  2021-08-24 10:49 ` [XEN PATCH v7 08/51] build: fix clean targets when subdir-y is used Anthony PERARD
                   ` (47 subsequent siblings)
  54 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:49 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Wei Liu, Andrew Cooper, George Dunlap,
	Ian Jackson, Jan Beulich, Julien Grall, Stefano Stabellini

Replace a mix of shell script and python script by all python script.

No change to the final generated headers.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Wei Liu <wl@xen.org>
---

Notes:
    v7:
    - actually keep the dependency on Makefile
    
    v6:
    - removed handling of $(prefix-y) and $(suffix-y), they've been removed.
    - remove dependency on Makefile as it's not needed anymore
    - rebased
    
    v5:
    - Removed -P from CPP when generating compat/%.i
      -> keep removing linemarkers and keep de-duplicating empty lines.
      So that all the blank line that currently exist in the generated
      headers stays in place.
    
    v4:
    - new patch

 xen/include/Makefile             |  9 +------
 xen/tools/compat-build-header.py | 44 ++++++++++++++++++++++++++++++--
 2 files changed, 43 insertions(+), 10 deletions(-)

diff --git a/xen/include/Makefile b/xen/include/Makefile
index 4fa10e68f997..95daa8a28975 100644
--- a/xen/include/Makefile
+++ b/xen/include/Makefile
@@ -46,14 +46,7 @@ public-$(CONFIG_ARM) := $(wildcard public/arch-arm/*.h public/arch-arm/*/*.h)
 all: $(headers-y)
 
 compat/%.h: compat/%.i Makefile $(BASEDIR)/tools/compat-build-header.py
-	set -e; id=_$$(echo $@ | tr '[:lower:]-/.' '[:upper:]___'); \
-	echo "#ifndef $$id" >$@.new; \
-	echo "#define $$id" >>$@.new; \
-	echo "#include <xen/compat.h>" >>$@.new; \
-	$(if $(filter-out compat/arch-%.h,$@),echo "#include <$(patsubst compat/%,public/%,$@)>" >>$@.new;) \
-	grep -v '^# [0-9]' $< | \
-	$(PYTHON) $(BASEDIR)/tools/compat-build-header.py | uniq >>$@.new; \
-	echo "#endif /* $$id */" >>$@.new
+	$(PYTHON) $(BASEDIR)/tools/compat-build-header.py <$< $@ >>$@.new; \
 	mv -f $@.new $@
 
 compat/%.i: compat/%.c Makefile
diff --git a/xen/tools/compat-build-header.py b/xen/tools/compat-build-header.py
index 065d3b1b6ee8..5f5474fba051 100755
--- a/xen/tools/compat-build-header.py
+++ b/xen/tools/compat-build-header.py
@@ -2,6 +2,12 @@
 
 import re,sys
 
+try:
+    maketrans = str.maketrans
+except AttributeError:
+    # For python2
+    from string import maketrans
+
 pats = [
  [ r"__InClUdE__(.*)", r"#include\1" ],
  [ r"__IfDeF__ (XEN_HAVE.*)", r"#ifdef \1" ],
@@ -23,7 +29,41 @@ pats = [
  [ r"(^|[^\w])long([^\w]|$$)", r"\1int\2" ]
 ];
 
+output_filename = sys.argv[1]
+
+# tr '[:lower:]-/.' '[:upper:]___'
+header_id = '_' + \
+    output_filename.upper().translate(maketrans('-/.','___'))
+
+header = """#ifndef {0}
+#define {0}
+#include <xen/compat.h>""".format(header_id)
+
+print(header)
+
+if not re.match("compat/arch-.*.h$", output_filename):
+    x = output_filename.replace("compat/","public/")
+    print('#include <%s>' % x)
+
+last_line_empty = False
 for line in sys.stdin.readlines():
+    line = line.rstrip()
+
+    # Remove linemarkers generated by the preprocessor.
+    if re.match(r"^# \d", line):
+        continue
+
+    # De-duplicate empty lines.
+    if len(line) == 0:
+        if not last_line_empty:
+            print(line)
+            last_line_empty = True
+        continue
+    else:
+        last_line_empty = False
+
     for pat in pats:
-        line = re.subn(pat[0], pat[1], line)[0]
-    print(line.rstrip())
+        line = re.sub(pat[0], pat[1], line)
+    print(line)
+
+print("#endif /* %s */" % header_id)
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 08/51] build: fix clean targets when subdir-y is used
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (6 preceding siblings ...)
  2021-08-24 10:49 ` [XEN PATCH v7 07/51] build,include: rework compat-build-header.py Anthony PERARD
@ 2021-08-24 10:49 ` Anthony PERARD
  2021-08-24 10:49 ` [XEN PATCH v7 09/51] build: use subdir-y in test/Makefile Anthony PERARD
                   ` (46 subsequent siblings)
  54 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:49 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Jan Beulich, Andrew Cooper, George Dunlap,
	Ian Jackson, Julien Grall, Stefano Stabellini, Wei Liu

The make variable $(subdir-y) isn't used yet but will be in a
following patch. Anything in $(subdir-y) doesn't to have a '/' as
suffix as we already now it's a directory.

Rework the rules so that it doesn't matter whether there is a '/' or
not. It also mimic more closely to the way Linux's Kbuild descend in
subdirectories.

FORCE phony target isn't needed anymore running clean, so it can be
removed.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
---
 xen/scripts/Makefile.clean | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/xen/scripts/Makefile.clean b/xen/scripts/Makefile.clean
index 53379e6102cc..027c200c0efc 100644
--- a/xen/scripts/Makefile.clean
+++ b/xen/scripts/Makefile.clean
@@ -12,19 +12,18 @@ include Makefile
 # Figure out what we need to clean from the various variables
 # ==========================================================================
 subdir-all := $(subdir-y) $(subdir-n) $(subdir-) \
-              $(filter %/, $(obj-y) $(obj-n) $(obj-))
+              $(patsubst %/,%, $(filter %/, $(obj-y) $(obj-n) $(obj-)))
 
 DEPS_RM = $(DEPS) $(DEPS_INCLUDE)
 .PHONY: clean
-clean:: $(addprefix _clean_, $(subdir-all))
+clean:: $(subdir-all)
 	rm -f *.o .*.o.tmp *~ core $(DEPS_RM)
 
 # Descending
 # ---------------------------------------------------------------------------
 
-_clean_%/: FORCE
-	$(MAKE) $(clean) $*
+PHONY += $(subdir-all)
+$(subdir-all):
+	$(MAKE) $(clean) $@
 
-# Force execution of pattern rules (for which PHONY cannot be directly used).
-.PHONY: FORCE
-FORCE:
+.PHONY: $(PHONY)
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 09/51] build: use subdir-y in test/Makefile
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (7 preceding siblings ...)
  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 ` 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
                   ` (45 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:49 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu

This allows Makefile.clean to recurse into livepatch without help.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/test/Makefile | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

diff --git a/xen/test/Makefile b/xen/test/Makefile
index aaa499664396..41e4d7bdb78b 100644
--- a/xen/test/Makefile
+++ b/xen/test/Makefile
@@ -4,15 +4,10 @@ tests all: build
 
 ifneq ($(XEN_TARGET_ARCH),x86_32)
 # Xen 32-bit x86 hypervisor no longer supported, so has no test livepatches
-SUBDIRS += livepatch
+subdir-y += livepatch
 endif
 
 install build subtree-force-update uninstall: %:
-	set -e; for s in $(SUBDIRS); do \
+	set -e; for s in $(subdir-y); do \
 		$(MAKE) -f $(BASEDIR)/Rules.mk -C $$s $*; \
 	done
-
-clean::
-	set -e; for s in $(SUBDIRS); do \
-		$(MAKE) -f $(BASEDIR)/Rules.mk -C $$s $@; \
-	done
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 10/51] build,arm: move LDFLAGS change to arch.mk
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (8 preceding siblings ...)
  2021-08-24 10:49 ` [XEN PATCH v7 09/51] build: use subdir-y in test/Makefile Anthony PERARD
@ 2021-08-24 10:49 ` Anthony PERARD
  2021-08-24 12:50   ` Julien Grall
  2021-08-24 10:49 ` [XEN PATCH v7 11/51] build: move make option changes check earlier Anthony PERARD
                   ` (44 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:49 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Stefano Stabellini, Julien Grall, Volodymyr Babchuk

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/arch/arm/Makefile | 8 --------
 xen/arch/arm/arch.mk  | 8 ++++++++
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index 0edd9dee6f49..3d0af8ebc93c 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -104,14 +104,6 @@ prelink.o: $(ALL_OBJS) $(ALL_LIBS) FORCE
 	$(call if_changed,ld)
 endif
 
-ifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
-    ifeq ($(call ld-option, --fix-cortex-a53-843419),n)
-        $(warning ld does not support --fix-cortex-a53-843419; xen may be susceptible to erratum)
-    else
-        XEN_LDFLAGS += --fix-cortex-a53-843419
-    endif
-endif
-
 targets += prelink.o
 
 $(TARGET)-syms: prelink.o xen.lds
diff --git a/xen/arch/arm/arch.mk b/xen/arch/arm/arch.mk
index 11caec86ba14..6a2982059486 100644
--- a/xen/arch/arm/arch.mk
+++ b/xen/arch/arm/arch.mk
@@ -17,3 +17,11 @@ $(call cc-option-add,CFLAGS-$(CONFIG_ARM_64),CC,-mno-outline-atomics)
 ifneq ($(filter command line environment,$(origin CONFIG_EARLY_PRINTK)),)
     $(error You must use 'make menuconfig' to enable/disable early printk now)
 endif
+
+ifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
+    ifeq ($(call ld-option, --fix-cortex-a53-843419),n)
+        $(warning ld does not support --fix-cortex-a53-843419; xen may be susceptible to erratum)
+    else
+        LDFLAGS += --fix-cortex-a53-843419
+    endif
+endif
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 11/51] build: move make option changes check earlier
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (9 preceding siblings ...)
  2021-08-24 10:49 ` [XEN PATCH v7 10/51] build,arm: move LDFLAGS change to arch.mk Anthony PERARD
@ 2021-08-24 10:49 ` Anthony PERARD
  2021-08-24 10:49 ` [XEN PATCH v7 12/51] build: avoid building arm/arm/*/head.o twice Anthony PERARD
                   ` (43 subsequent siblings)
  54 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:49 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Jan Beulich, Andrew Cooper, George Dunlap,
	Ian Jackson, Julien Grall, Stefano Stabellini, Wei Liu

And thus avoiding checking for those variable over and over again.

Also, add "e.g." in the error messages to hint that "menuconfig"
isn't the only way.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
---

Notes:
    v7:
    - Add "e.g." into the error message to hint that menuconfig isn't the
      only way.

 xen/Makefile | 22 ++++++++++++++++++++++
 xen/Rules.mk | 22 ----------------------
 2 files changed, 22 insertions(+), 22 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index f35a4d84f7cd..2c56546cd1dc 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -56,6 +56,28 @@ include scripts/Kbuild.include
 ifneq ($(root-make-done),y)
 # section to run before calling Rules.mk, but only once.
 
+ifneq ($(origin crash_debug),undefined)
+$(error "You must use e.g. 'make menuconfig' to enable/disable crash_debug now.")
+endif
+ifeq ($(origin debug),command line)
+$(warning "You must use e.g. 'make menuconfig' to enable/disable debug now.")
+endif
+ifneq ($(origin frame_pointer),undefined)
+$(error "You must use e.g. 'make menuconfig' to enable/disable frame_pointer now.")
+endif
+ifneq ($(origin kexec),undefined)
+$(error "You must use e.g. 'make menuconfig' to enable/disable kexec now.")
+endif
+ifneq ($(origin lock_profile),undefined)
+$(error "You must use e.g. 'make menuconfig' to enable/disable lock_profile now.")
+endif
+ifneq ($(origin perfc),undefined)
+$(error "You must use e.g. 'make menuconfig' to enable/disable perfc now.")
+endif
+ifneq ($(origin verbose),undefined)
+$(error "You must use e.g. 'make menuconfig' to enable/disable verbose now.")
+endif
+
 # Beautify output
 # ---------------------------------------------------------------------------
 #
diff --git a/xen/Rules.mk b/xen/Rules.mk
index 48ae519d0153..c313486ce0f6 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -9,28 +9,6 @@ include $(XEN_ROOT)/Config.mk
 include $(BASEDIR)/scripts/Kbuild.include
 
 
-ifneq ($(origin crash_debug),undefined)
-$(error "You must use 'make menuconfig' to enable/disable crash_debug now.")
-endif
-ifeq ($(origin debug),command line)
-$(warning "You must use 'make menuconfig' to enable/disable debug now.")
-endif
-ifneq ($(origin frame_pointer),undefined)
-$(error "You must use 'make menuconfig' to enable/disable frame_pointer now.")
-endif
-ifneq ($(origin kexec),undefined)
-$(error "You must use 'make menuconfig' to enable/disable kexec now.")
-endif
-ifneq ($(origin lock_profile),undefined)
-$(error "You must use 'make menuconfig' to enable/disable lock_profile now.")
-endif
-ifneq ($(origin perfc),undefined)
-$(error "You must use 'make menuconfig' to enable/disable perfc now.")
-endif
-ifneq ($(origin verbose),undefined)
-$(error "You must use 'make menuconfig' to enable/disable verbose now.")
-endif
-
 TARGET := $(BASEDIR)/xen
 
 # Note that link order matters!
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 12/51] build: avoid building arm/arm/*/head.o twice
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (10 preceding siblings ...)
  2021-08-24 10:49 ` [XEN PATCH v7 11/51] build: move make option changes check earlier Anthony PERARD
@ 2021-08-24 10:49 ` Anthony PERARD
  2021-08-24 12:53   ` Julien Grall
  2021-08-24 10:50 ` [XEN PATCH v7 13/51] build: convert binfile use to if_changed Anthony PERARD
                   ` (42 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:49 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Stefano Stabellini, Julien Grall, Volodymyr Babchuk

head.o is been built twice, once because it is in $(ALL_OBJS) and a
second time because it is in $(extra-y) and thus it is rebuilt when
building "arch/arm/built_in.o".

Fix this by adding a dependency of "head.o" on the directory
"arch/arm/".

Also, we should avoid building object that are in subdirectories, so
move the declaration in there. This doesn't change anything as
"arch/arm/built_in.o" depends on "arch/arm/$subarch/built_in.o" which
depends on $(extra-y), so we still need to depend on
"arch/arm/built_in.o".

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/arch/arm/Makefile       | 7 ++++++-
 xen/arch/arm/arm32/Makefile | 1 +
 xen/arch/arm/arm64/Makefile | 2 ++
 3 files changed, 9 insertions(+), 1 deletion(-)

diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index 3d0af8ebc93c..cc90d9796e6e 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -64,7 +64,6 @@ obj-$(CONFIG_SBSA_VUART_CONSOLE) += vpl011.o
 obj-y += vsmc.o
 obj-y += vpsci.o
 obj-y += vuart.o
-extra-y += $(TARGET_SUBARCH)/head.o
 
 extra-y += xen.lds
 
@@ -76,6 +75,12 @@ endif
 
 ALL_OBJS := $(TARGET_SUBARCH)/head.o $(ALL_OBJS)
 
+# head.o is built by descending into the sub-directory, depends on the part of
+# $(ALL_OBJS) that will eventually recurse into $(TARGET_SUBARCH)/ and build
+# head.o
+$(TARGET_SUBARCH)/head.o: $(BASEDIR)/arch/arm/built_in.o
+$(TARGET_SUBARCH)/head.o: ;
+
 ifdef CONFIG_LIVEPATCH
 all_symbols = --all-symbols
 ifdef CONFIG_FAST_SYMBOL_LOOKUP
diff --git a/xen/arch/arm/arm32/Makefile b/xen/arch/arm/arm32/Makefile
index 96105d238307..3040eabce3ad 100644
--- a/xen/arch/arm/arm32/Makefile
+++ b/xen/arch/arm/arm32/Makefile
@@ -11,3 +11,4 @@ obj-y += smpboot.o
 obj-y += traps.o
 obj-y += vfp.o
 
+extra-y += head.o
diff --git a/xen/arch/arm/arm64/Makefile b/xen/arch/arm/arm64/Makefile
index 40642ff57494..0bb284dedab2 100644
--- a/xen/arch/arm/arm64/Makefile
+++ b/xen/arch/arm/arm64/Makefile
@@ -13,3 +13,5 @@ obj-y += smpboot.o
 obj-y += traps.o
 obj-y += vfp.o
 obj-y += vsysreg.o
+
+extra-y += head.o
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 13/51] build: convert binfile use to if_changed
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (11 preceding siblings ...)
  2021-08-24 10:49 ` [XEN PATCH v7 12/51] build: avoid building arm/arm/*/head.o twice Anthony PERARD
@ 2021-08-24 10:50 ` 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
                   ` (41 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu,
	Daniel De Graaf, Daniel P. Smith

This will allow to detect command line changes and allow to regenerate
the file in that case.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---

Notes:
    v7:
    - define $(cmd_binfile) in Rules.mk so we can use the same one in both
      common/ and xsm/flask/

 xen/Rules.mk           | 5 +++++
 xen/common/Makefile    | 5 +++--
 xen/xsm/flask/Makefile | 6 ++++--
 3 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/xen/Rules.mk b/xen/Rules.mk
index c313486ce0f6..f449669475bd 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -57,6 +57,11 @@ cmd_ar = rm -f $@; $(AR) cr $@ $(real-prereqs)
 quiet_cmd_objcopy = OBJCOPY $@
 cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $< $@
 
+# binfile
+# use e.g. $(call if_changed,binfile,binary-file varname)
+quiet_cmd_binfile = BINFILE $@
+cmd_binfile = $(SHELL) $(BASEDIR)/tools/binfile $(BINFILE_FLAGS) $@ $(2)
+
 define gendep
     ifneq ($(1),$(subst /,:,$(1)))
         DEPS += $(dir $(1)).$(notdir $(1)).d
diff --git a/xen/common/Makefile b/xen/common/Makefile
index 54de70d42278..141d7d40d3dc 100644
--- a/xen/common/Makefile
+++ b/xen/common/Makefile
@@ -80,8 +80,9 @@ config.gz: $(CONF_FILE)
 
 config_data.o: config.gz
 
-config_data.S: $(BASEDIR)/tools/binfile
-	$(SHELL) $(BASEDIR)/tools/binfile $@ config.gz xen_config_data
+config_data.S: $(BASEDIR)/tools/binfile FORCE
+	$(call if_changed,binfile,config.gz xen_config_data)
+targets += config_data.S
 
 clean::
 	rm -f config_data.S config.gz 2>/dev/null
diff --git a/xen/xsm/flask/Makefile b/xen/xsm/flask/Makefile
index 637159ad8276..f4d4038c01bd 100644
--- a/xen/xsm/flask/Makefile
+++ b/xen/xsm/flask/Makefile
@@ -35,8 +35,10 @@ $(subst include/,%/,$(AV_H_FILES)): $(AV_H_DEPEND) $(mkaccess) FORCE
 obj-bin-$(CONFIG_XSM_FLASK_POLICY) += flask-policy.o
 flask-policy.o: policy.bin
 
-flask-policy.S: $(BASEDIR)/tools/binfile
-	$(SHELL) $(BASEDIR)/tools/binfile -i $@ policy.bin xsm_flask_init_policy
+flask-policy.S: BINFILE_FLAGS := -i
+flask-policy.S: $(BASEDIR)/tools/binfile FORCE
+	$(call if_changed,binfile,policy.bin xsm_flask_init_policy)
+targets += flask-policy.S
 
 FLASK_BUILD_DIR := $(CURDIR)
 POLICY_SRC := $(FLASK_BUILD_DIR)/xenpolicy-$(XEN_FULLVERSION)
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 14/51] xen: move include/asm-* to arch/*/include/asm
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (12 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 13/51] build: convert binfile use to if_changed Anthony PERARD
@ 2021-08-24 10:50 ` Anthony PERARD
  2021-10-07 14:17   ` Jan Beulich
  2021-08-24 10:50 ` [XEN PATCH v7 15/51] build,riscv: tell the build system about riscv64/head.S Anthony PERARD
                   ` (40 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Paul Durrant, Andrew Cooper, George Dunlap,
	Ian Jackson, Jan Beulich, Julien Grall, Stefano Stabellini,
	Wei Liu, Tamas K Lengyel, Alexandru Isaila, Petre Pircalabu,
	Volodymyr Babchuk, Konrad Rzeszutek Wilk, Ross Lagerwall,
	Bob Eshleman, Alistair Francis, Connor Davis,
	Roger Pau Monné,
	Jun Nakajima, Kevin Tian, Lukasz Hawrylko

This avoid the need to create the symbolic link "include/asm".

Whenever a comment refer to an "asm" headers, this patch avoid
spelling the arch when not needed to avoid some code churn.

One unrelated change is to sort entries in MAINTAINERS for "INTEL(R)
VT FOR X86 (VT-X)"

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Paul Durrant <paul@xen.org>
---

Notes:
    v7:
    - fix MAINTAINERS entry for arch-riscv
    - move to arch/*/include/asm instead
    - In most comment refering to an asm headers, avoid spelling the arch
      name when not needed.
      That doesn't work "common/efi/runtime.c" as the description of Xen's
      stack is only in x86's "asm/current.h" and not in arm's "asm/current.h".
    - sort entries in MAINTAINERS for "INTEL(R) VT FOR X86 (VT-X)"

 .gitignore                                    |  5 +--
 MAINTAINERS                                   | 37 +++++++++----------
 tools/include/Makefile                        |  2 +-
 tools/misc/xen-access.c                       |  4 +-
 tools/tests/vhpet/Makefile                    |  2 +-
 xen/Makefile                                  | 13 +++----
 xen/arch/arm/README.LinuxPrimitives           | 10 ++---
 xen/arch/arm/arch.mk                          |  1 +
 xen/arch/arm/arm32/head.S                     |  2 +-
 xen/arch/arm/arm64/head.S                     |  2 +-
 .../asm-arm => arch/arm/include/asm}/acpi.h   |  0
 .../arm/include/asm}/alternative.h            |  0
 .../asm-arm => arch/arm/include/asm}/altp2m.h |  0
 .../arm/include/asm}/arm32/atomic.h           |  0
 .../arm/include/asm}/arm32/bitops.h           |  0
 .../arm/include/asm}/arm32/bug.h              |  0
 .../arm/include/asm}/arm32/cmpxchg.h          |  0
 .../arm/include/asm}/arm32/flushtlb.h         |  0
 .../arm/include/asm}/arm32/insn.h             |  0
 .../arm/include/asm}/arm32/io.h               |  0
 .../arm/include/asm}/arm32/macros.h           |  0
 .../arm/include/asm}/arm32/mm.h               |  0
 .../arm/include/asm}/arm32/page.h             |  0
 .../arm/include/asm}/arm32/processor.h        |  0
 .../arm/include/asm}/arm32/sysregs.h          |  0
 .../arm/include/asm}/arm32/system.h           |  0
 .../arm/include/asm}/arm32/traps.h            |  0
 .../arm/include/asm}/arm32/vfp.h              |  0
 .../arm/include/asm}/arm64/atomic.h           |  0
 .../arm/include/asm}/arm64/bitops.h           |  0
 .../arm/include/asm}/arm64/brk.h              |  0
 .../arm/include/asm}/arm64/bug.h              |  0
 .../arm/include/asm}/arm64/cmpxchg.h          |  0
 .../arm/include/asm}/arm64/efibind.h          |  0
 .../arm/include/asm}/arm64/flushtlb.h         |  0
 .../arm/include/asm}/arm64/hsr.h              |  0
 .../arm/include/asm}/arm64/insn.h             |  0
 .../arm/include/asm}/arm64/io.h               |  0
 .../arm/include/asm}/arm64/macros.h           |  0
 .../arm/include/asm}/arm64/mm.h               |  0
 .../arm/include/asm}/arm64/page.h             |  0
 .../arm/include/asm}/arm64/processor.h        |  0
 .../arm/include/asm}/arm64/sysregs.h          |  0
 .../arm/include/asm}/arm64/system.h           |  0
 .../arm/include/asm}/arm64/traps.h            |  0
 .../arm/include/asm}/arm64/vfp.h              |  0
 .../arm/include/asm}/asm_defns.h              |  0
 .../asm-arm => arch/arm/include/asm}/atomic.h |  0
 .../asm-arm => arch/arm/include/asm}/bitops.h |  0
 .../asm-arm => arch/arm/include/asm}/bug.h    |  0
 .../arm/include/asm}/byteorder.h              |  0
 .../asm-arm => arch/arm/include/asm}/cache.h  |  0
 .../arm/include/asm}/cadence-uart.h           |  0
 .../asm-arm => arch/arm/include/asm}/config.h |  0
 .../asm-arm => arch/arm/include/asm}/cpregs.h |  0
 .../arm/include/asm}/cpuerrata.h              |  0
 .../arm/include/asm}/cpufeature.h             |  0
 .../arm/include/asm}/current.h                |  0
 .../arm/include/asm}/debugger.h               |  0
 .../asm-arm => arch/arm/include/asm}/delay.h  |  0
 .../asm-arm => arch/arm/include/asm}/desc.h   |  0
 .../asm-arm => arch/arm/include/asm}/device.h |  0
 .../asm-arm => arch/arm/include/asm}/div64.h  |  0
 .../asm-arm => arch/arm/include/asm}/domain.h |  0
 .../arm/include/asm}/domain_build.h           |  0
 .../arm/include/asm}/early_printk.h           |  0
 .../arm/include/asm}/efibind.h                |  0
 .../asm-arm => arch/arm/include/asm}/elf.h    |  0
 .../asm-arm => arch/arm/include/asm}/event.h  |  0
 .../arm/include/asm}/exynos4210-uart.h        |  0
 .../arm/include/asm}/flushtlb.h               |  0
 .../asm-arm => arch/arm/include/asm}/gic.h    |  0
 .../arm/include/asm}/gic_v3_defs.h            |  0
 .../arm/include/asm}/gic_v3_its.h             |  0
 .../arm/include/asm}/grant_table.h            |  0
 .../arm/include/asm}/guest_access.h           |  0
 .../arm/include/asm}/guest_atomics.h          |  0
 .../arm/include/asm}/guest_walk.h             |  0
 .../arm/include/asm}/hardirq.h                |  0
 .../asm-arm => arch/arm/include/asm}/hsr.h    |  0
 .../arm/include/asm}/hypercall.h              |  0
 .../asm-arm => arch/arm/include/asm}/init.h   |  0
 .../asm-arm => arch/arm/include/asm}/insn.h   |  0
 .../asm-arm => arch/arm/include/asm}/io.h     |  0
 .../asm-arm => arch/arm/include/asm}/iocap.h  |  0
 .../asm-arm => arch/arm/include/asm}/iommu.h  |  0
 .../arm/include/asm}/iommu_fwspec.h           |  0
 .../asm-arm => arch/arm/include/asm}/ioreq.h  |  0
 .../asm-arm => arch/arm/include/asm}/irq.h    |  0
 .../asm-arm => arch/arm/include/asm}/kernel.h |  0
 .../arm/include/asm}/livepatch.h              |  0
 .../asm-arm => arch/arm/include/asm}/lpae.h   |  0
 .../asm-arm => arch/arm/include/asm}/macros.h |  0
 .../arm/include/asm}/mem_access.h             |  0
 .../asm-arm => arch/arm/include/asm}/mm.h     |  0
 .../asm-arm => arch/arm/include/asm}/mmio.h   |  0
 .../arm/include/asm}/monitor.h                |  0
 .../arm/include/asm}/new_vgic.h               |  0
 .../asm-arm => arch/arm/include/asm}/nospec.h |  0
 .../asm-arm => arch/arm/include/asm}/numa.h   |  0
 .../asm-arm => arch/arm/include/asm}/p2m.h    |  0
 .../arm/include/asm}/page-bits.h              |  0
 .../asm-arm => arch/arm/include/asm}/page.h   |  0
 .../asm-arm => arch/arm/include/asm}/paging.h |  0
 .../asm-arm => arch/arm/include/asm}/pci.h    |  0
 .../asm-arm => arch/arm/include/asm}/percpu.h |  0
 .../asm-arm => arch/arm/include/asm}/perfc.h  |  0
 .../arm/include/asm}/perfc_defn.h             |  0
 .../arm/include/asm}/pl011-uart.h             |  0
 .../arm/include/asm}/platform.h               |  0
 .../arm/include/asm}/platforms/exynos5.h      |  0
 .../arm/include/asm}/platforms/midway.h       |  0
 .../arm/include/asm}/platforms/omap5.h        |  0
 .../arm/include/asm}/platforms/vexpress.h     |  0
 .../asm}/platforms/xilinx-zynqmp-eemi.h       |  0
 .../arm/include/asm}/processor.h              |  0
 .../arm/include/asm}/procinfo.h               |  0
 .../asm-arm => arch/arm/include/asm}/psci.h   |  0
 .../asm-arm => arch/arm/include/asm}/random.h |  0
 .../asm-arm => arch/arm/include/asm}/regs.h   |  0
 .../arm/include/asm}/scif-uart.h              |  0
 .../asm-arm => arch/arm/include/asm}/setup.h  |  0
 .../arm/include/asm}/short-desc.h             |  0
 .../asm-arm => arch/arm/include/asm}/smccc.h  |  0
 .../asm-arm => arch/arm/include/asm}/smp.h    |  0
 .../arm/include/asm}/softirq.h                |  0
 .../arm/include/asm}/spinlock.h               |  0
 .../asm-arm => arch/arm/include/asm}/string.h |  0
 .../arm/include/asm}/sysregs.h                |  0
 .../asm-arm => arch/arm/include/asm}/system.h |  0
 .../arm/include/asm}/tee/optee_msg.h          |  0
 .../arm/include/asm}/tee/optee_rpc_cmd.h      |  0
 .../arm/include/asm}/tee/optee_smc.h          |  0
 .../arm/include/asm}/tee/tee.h                |  0
 .../asm-arm => arch/arm/include/asm}/time.h   |  0
 .../asm-arm => arch/arm/include/asm}/trace.h  |  0
 .../asm-arm => arch/arm/include/asm}/traps.h  |  0
 .../asm-arm => arch/arm/include/asm}/types.h  |  0
 .../asm-arm => arch/arm/include/asm}/vfp.h    |  0
 .../arm/include/asm}/vgic-emul.h              |  0
 .../asm-arm => arch/arm/include/asm}/vgic.h   |  0
 .../arm/include/asm}/vm_event.h               |  0
 .../asm-arm => arch/arm/include/asm}/vpl011.h |  0
 .../asm-arm => arch/arm/include/asm}/vpsci.h  |  0
 .../asm-arm => arch/arm/include/asm}/vreg.h   |  0
 .../asm-arm => arch/arm/include/asm}/vtimer.h |  0
 .../arm/include/asm}/xenoprof.h               |  0
 xen/arch/arm/smpboot.c                        |  2 +-
 xen/arch/arm/vpsci.c                          |  2 +-
 xen/arch/riscv/arch.mk                        |  1 +
 .../riscv/include/asm}/config.h               |  0
 xen/arch/x86/Makefile                         |  6 +--
 xen/arch/x86/arch.mk                          |  5 ++-
 .../asm-x86 => arch/x86/include/asm}/acpi.h   |  0
 .../x86/include/asm}/alternative-asm.h        |  0
 .../x86/include/asm}/alternative.h            |  0
 .../asm-x86 => arch/x86/include/asm}/altp2m.h |  0
 .../asm-x86 => arch/x86/include/asm}/amd.h    |  0
 .../asm-x86 => arch/x86/include/asm}/apic.h   |  0
 .../x86/include/asm}/apicdef.h                |  0
 .../x86/include/asm}/asm-defns.h              |  0
 .../x86/include/asm}/asm_defns.h              |  0
 .../asm-x86 => arch/x86/include/asm}/atomic.h |  0
 .../asm-x86 => arch/x86/include/asm}/bitops.h |  0
 .../asm-x86 => arch/x86/include/asm}/bug.h    |  0
 .../x86/include/asm}/byteorder.h              |  0
 .../x86/include/asm}/bzimage.h                |  0
 .../asm-x86 => arch/x86/include/asm}/cache.h  |  0
 .../asm-x86 => arch/x86/include/asm}/compat.h |  0
 .../asm-x86 => arch/x86/include/asm}/config.h |  0
 .../x86/include/asm}/cpufeature.h             |  0
 .../x86/include/asm}/cpufeatures.h            |  0
 .../x86/include/asm}/cpufeatureset.h          |  0
 .../asm-x86 => arch/x86/include/asm}/cpuid.h  |  0
 .../x86/include/asm}/cpuidle.h                |  0
 .../x86/include/asm}/current.h                |  2 +-
 .../x86/include/asm}/debugger.h               |  0
 .../x86/include/asm}/debugreg.h               |  0
 .../asm-x86 => arch/x86/include/asm}/delay.h  |  0
 .../asm-x86 => arch/x86/include/asm}/desc.h   |  0
 .../asm-x86 => arch/x86/include/asm}/device.h |  0
 .../asm-x86 => arch/x86/include/asm}/div64.h  |  0
 .../x86/include/asm}/dom0_build.h             |  0
 .../asm-x86 => arch/x86/include/asm}/domain.h |  2 +-
 .../asm-x86 => arch/x86/include/asm}/e820.h   |  0
 .../asm-x86 => arch/x86/include/asm}/edd.h    |  0
 .../x86/include/asm}/efibind.h                |  0
 .../asm-x86 => arch/x86/include/asm}/elf.h    |  0
 .../asm-x86 => arch/x86/include/asm}/event.h  |  0
 .../asm-x86 => arch/x86/include/asm}/fixmap.h |  0
 .../x86/include/asm}/flushtlb.h               |  0
 .../x86/include/asm}/genapic.h                |  0
 .../x86/include/asm}/grant_table.h            |  0
 .../asm-x86 => arch/x86/include/asm}/guest.h  |  0
 .../x86/include/asm}/guest/hyperv-hcall.h     |  0
 .../x86/include/asm}/guest/hyperv-tlfs.h      |  0
 .../x86/include/asm}/guest/hyperv.h           |  0
 .../x86/include/asm}/guest/hypervisor.h       |  0
 .../x86/include/asm}/guest/pvh-boot.h         |  0
 .../x86/include/asm}/guest/xen-hcall.h        |  0
 .../x86/include/asm}/guest/xen.h              |  0
 .../x86/include/asm}/guest_access.h           |  0
 .../x86/include/asm}/guest_atomics.h          |  0
 .../x86/include/asm}/guest_pt.h               |  0
 .../asm-x86 => arch/x86/include/asm}/hap.h    |  0
 .../x86/include/asm}/hardirq.h                |  0
 .../asm-x86 => arch/x86/include/asm}/hpet.h   |  0
 .../x86/include/asm}/hvm/asid.h               |  0
 .../x86/include/asm}/hvm/cacheattr.h          |  0
 .../x86/include/asm}/hvm/domain.h             |  0
 .../x86/include/asm}/hvm/emulate.h            |  0
 .../x86/include/asm}/hvm/grant_table.h        |  0
 .../x86/include/asm}/hvm/guest_access.h       |  0
 .../x86/include/asm}/hvm/hvm.h                |  0
 .../asm-x86 => arch/x86/include/asm}/hvm/io.h |  0
 .../x86/include/asm}/hvm/ioreq.h              |  0
 .../x86/include/asm}/hvm/irq.h                |  0
 .../x86/include/asm}/hvm/monitor.h            |  0
 .../x86/include/asm}/hvm/nestedhvm.h          |  0
 .../x86/include/asm}/hvm/save.h               |  0
 .../x86/include/asm}/hvm/support.h            |  0
 .../x86/include/asm}/hvm/svm/asid.h           |  0
 .../x86/include/asm}/hvm/svm/emulate.h        |  0
 .../x86/include/asm}/hvm/svm/intr.h           |  0
 .../x86/include/asm}/hvm/svm/nestedsvm.h      |  0
 .../x86/include/asm}/hvm/svm/svm.h            |  0
 .../x86/include/asm}/hvm/svm/svmdebug.h       |  0
 .../x86/include/asm}/hvm/svm/vmcb.h           |  0
 .../x86/include/asm}/hvm/trace.h              |  0
 .../x86/include/asm}/hvm/vcpu.h               |  0
 .../x86/include/asm}/hvm/vioapic.h            |  0
 .../x86/include/asm}/hvm/viridian.h           |  0
 .../x86/include/asm}/hvm/vlapic.h             |  0
 .../x86/include/asm}/hvm/vm_event.h           |  0
 .../x86/include/asm}/hvm/vmx/vmcs.h           |  0
 .../x86/include/asm}/hvm/vmx/vmx.h            |  0
 .../x86/include/asm}/hvm/vmx/vvmx.h           |  0
 .../x86/include/asm}/hvm/vpic.h               |  0
 .../x86/include/asm}/hvm/vpt.h                |  0
 .../x86/include/asm}/hypercall.h              |  0
 .../asm-x86 => arch/x86/include/asm}/i387.h   |  0
 .../asm-x86 => arch/x86/include/asm}/init.h   |  0
 .../x86/include/asm}/invpcid.h                |  0
 .../asm-x86 => arch/x86/include/asm}/io.h     |  0
 .../x86/include/asm}/io_apic.h                |  0
 .../asm-x86 => arch/x86/include/asm}/iocap.h  |  0
 .../asm-x86 => arch/x86/include/asm}/iommu.h  |  0
 .../asm-x86 => arch/x86/include/asm}/ioreq.h  |  0
 .../asm-x86 => arch/x86/include/asm}/irq.h    |  0
 .../asm-x86 => arch/x86/include/asm}/ldt.h    |  0
 .../x86/include/asm}/livepatch.h              |  0
 .../x86/include/asm}/mach-default/bios_ebda.h |  0
 .../x86/include/asm}/mach-default/io_ports.h  |  0
 .../include/asm}/mach-default/irq_vectors.h   |  0
 .../include/asm}/mach-default/mach_mpparse.h  |  0
 .../include/asm}/mach-default/mach_mpspec.h   |  0
 .../x86/include/asm}/mach-generic/mach_apic.h |  0
 .../include/asm}/mach-generic/mach_mpparse.h  |  0
 .../x86/include/asm}/machine_kexec.h          |  0
 .../x86/include/asm}/mc146818rtc.h            |  0
 .../asm-x86 => arch/x86/include/asm}/mce.h    |  0
 .../x86/include/asm}/mem_access.h             |  0
 .../x86/include/asm}/mem_paging.h             |  0
 .../x86/include/asm}/mem_sharing.h            |  0
 .../x86/include/asm}/microcode.h              |  0
 .../asm-x86 => arch/x86/include/asm}/mm.h     |  0
 .../x86/include/asm}/monitor.h                |  0
 .../asm-x86 => arch/x86/include/asm}/mpspec.h |  0
 .../x86/include/asm}/mpspec_def.h             |  0
 .../asm-x86 => arch/x86/include/asm}/msi.h    |  0
 .../x86/include/asm}/msr-index.h              |  0
 .../asm-x86 => arch/x86/include/asm}/msr.h    |  0
 .../asm-x86 => arch/x86/include/asm}/mtrr.h   |  0
 .../x86/include/asm}/multicall.h              |  0
 .../asm-x86 => arch/x86/include/asm}/mwait.h  |  0
 .../asm-x86 => arch/x86/include/asm}/nmi.h    |  0
 .../asm-x86 => arch/x86/include/asm}/nops.h   |  0
 .../asm-x86 => arch/x86/include/asm}/nospec.h |  0
 .../asm-x86 => arch/x86/include/asm}/numa.h   |  0
 .../asm-x86 => arch/x86/include/asm}/p2m.h    |  0
 .../x86/include/asm}/page-bits.h              |  0
 .../asm-x86 => arch/x86/include/asm}/page.h   |  0
 .../asm-x86 => arch/x86/include/asm}/paging.h |  0
 .../asm-x86 => arch/x86/include/asm}/pci.h    |  0
 .../asm-x86 => arch/x86/include/asm}/percpu.h |  0
 .../asm-x86 => arch/x86/include/asm}/perfc.h  |  0
 .../x86/include/asm}/perfc_defn.h             |  0
 .../x86/include/asm}/processor.h              |  0
 .../asm-x86 => arch/x86/include/asm}/psr.h    |  0
 .../x86/include/asm}/pv/domain.h              |  0
 .../x86/include/asm}/pv/grant_table.h         |  0
 .../asm-x86 => arch/x86/include/asm}/pv/mm.h  |  0
 .../x86/include/asm}/pv/shim.h                |  0
 .../x86/include/asm}/pv/traps.h               |  0
 .../asm-x86 => arch/x86/include/asm}/random.h |  0
 .../asm-x86 => arch/x86/include/asm}/regs.h   |  0
 .../asm-x86 => arch/x86/include/asm}/setup.h  |  0
 .../asm-x86 => arch/x86/include/asm}/shadow.h |  0
 .../asm-x86 => arch/x86/include/asm}/shared.h |  0
 .../asm-x86 => arch/x86/include/asm}/smp.h    |  0
 .../x86/include/asm}/softirq.h                |  0
 .../x86/include/asm}/spec_ctrl.h              |  0
 .../x86/include/asm}/spec_ctrl_asm.h          |  0
 .../x86/include/asm}/spinlock.h               |  0
 .../asm-x86 => arch/x86/include/asm}/string.h |  0
 .../asm-x86 => arch/x86/include/asm}/system.h |  0
 .../asm-x86 => arch/x86/include/asm}/tboot.h  |  0
 .../asm-x86 => arch/x86/include/asm}/time.h   |  0
 .../asm-x86 => arch/x86/include/asm}/trace.h  |  0
 .../asm-x86 => arch/x86/include/asm}/traps.h  |  0
 .../asm-x86 => arch/x86/include/asm}/types.h  |  0
 .../x86/include/asm}/uaccess.h                |  0
 .../x86/include/asm}/unaligned.h              |  0
 .../x86/include/asm}/vm_event.h               |  0
 .../asm-x86 => arch/x86/include/asm}/vpmu.h   |  0
 .../x86/include/asm}/x86-defns.h              |  0
 .../x86/include/asm}/x86-vendors.h            |  0
 .../x86/include/asm}/x86_64/efibind.h         |  0
 .../x86/include/asm}/x86_64/elf.h             |  0
 .../x86/include/asm}/x86_64/page.h            |  0
 .../x86/include/asm}/x86_64/regs.h            |  0
 .../x86/include/asm}/x86_64/system.h          |  0
 .../x86/include/asm}/x86_64/uaccess.h         |  0
 .../x86/include/asm}/x86_emulate.h            |  2 +-
 .../x86/include/asm}/xenoprof.h               |  0
 .../asm-x86 => arch/x86/include/asm}/xstate.h |  0
 xen/common/efi/runtime.c                      |  2 +-
 xen/common/page_alloc.c                       |  2 +-
 xen/include/xen/acpi.h                        |  5 ++-
 xen/include/xen/bitmap.h                      |  2 +-
 330 files changed, 55 insertions(+), 56 deletions(-)
 rename xen/{include/asm-arm => arch/arm/include/asm}/acpi.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/alternative.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/altp2m.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/atomic.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/bitops.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/bug.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/cmpxchg.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/flushtlb.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/insn.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/io.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/macros.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/mm.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/page.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/processor.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/sysregs.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/system.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/traps.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/vfp.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/atomic.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/bitops.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/brk.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/bug.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/cmpxchg.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/efibind.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/flushtlb.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/hsr.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/insn.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/io.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/macros.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/mm.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/page.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/processor.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/sysregs.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/system.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/traps.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/vfp.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/asm_defns.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/atomic.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/bitops.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/bug.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/byteorder.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/cache.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/cadence-uart.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/config.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/cpregs.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/cpuerrata.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/cpufeature.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/current.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/debugger.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/delay.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/desc.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/device.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/div64.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/domain.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/domain_build.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/early_printk.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/efibind.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/elf.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/event.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/exynos4210-uart.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/flushtlb.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/gic.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/gic_v3_defs.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/gic_v3_its.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/grant_table.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/guest_access.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/guest_atomics.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/guest_walk.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/hardirq.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/hsr.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/hypercall.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/init.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/insn.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/io.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/iocap.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/iommu.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/iommu_fwspec.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/ioreq.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/irq.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/kernel.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/livepatch.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/lpae.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/macros.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/mem_access.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/mm.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/mmio.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/monitor.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/new_vgic.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/nospec.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/numa.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/p2m.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/page-bits.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/page.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/paging.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/pci.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/percpu.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/perfc.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/perfc_defn.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/pl011-uart.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/platform.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/platforms/exynos5.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/platforms/midway.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/platforms/omap5.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/platforms/vexpress.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/platforms/xilinx-zynqmp-eemi.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/processor.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/procinfo.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/psci.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/random.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/regs.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/scif-uart.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/setup.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/short-desc.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/smccc.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/smp.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/softirq.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/spinlock.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/string.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/sysregs.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/system.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/tee/optee_msg.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/tee/optee_rpc_cmd.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/tee/optee_smc.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/tee/tee.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/time.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/trace.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/traps.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/types.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/vfp.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/vgic-emul.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/vgic.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/vm_event.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/vpl011.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/vpsci.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/vreg.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/vtimer.h (100%)
 rename xen/{include/asm-arm => arch/arm/include/asm}/xenoprof.h (100%)
 rename xen/{include/asm-riscv => arch/riscv/include/asm}/config.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/acpi.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/alternative-asm.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/alternative.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/altp2m.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/amd.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/apic.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/apicdef.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/asm-defns.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/asm_defns.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/atomic.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/bitops.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/bug.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/byteorder.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/bzimage.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/cache.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/compat.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/config.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/cpufeature.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/cpufeatures.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/cpufeatureset.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/cpuid.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/cpuidle.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/current.h (99%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/debugger.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/debugreg.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/delay.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/desc.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/device.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/div64.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/dom0_build.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/domain.h (99%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/e820.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/edd.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/efibind.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/elf.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/event.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/fixmap.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/flushtlb.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/genapic.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/grant_table.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/hyperv-hcall.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/hyperv-tlfs.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/hyperv.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/hypervisor.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/pvh-boot.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/xen-hcall.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/xen.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest_access.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest_atomics.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/guest_pt.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hap.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hardirq.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hpet.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/asid.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/cacheattr.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/domain.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/emulate.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/grant_table.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/guest_access.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/hvm.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/io.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/ioreq.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/irq.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/monitor.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/nestedhvm.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/save.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/support.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/asid.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/emulate.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/intr.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/nestedsvm.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/svm.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/svmdebug.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/vmcb.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/trace.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vcpu.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vioapic.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/viridian.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vlapic.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vm_event.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vmx/vmcs.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vmx/vmx.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vmx/vvmx.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vpic.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vpt.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/hypercall.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/i387.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/init.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/invpcid.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/io.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/io_apic.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/iocap.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/iommu.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/ioreq.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/irq.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/ldt.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/livepatch.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-default/bios_ebda.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-default/io_ports.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-default/irq_vectors.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-default/mach_mpparse.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-default/mach_mpspec.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-generic/mach_apic.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-generic/mach_mpparse.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/machine_kexec.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mc146818rtc.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mce.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mem_access.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mem_paging.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mem_sharing.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/microcode.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mm.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/monitor.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mpspec.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mpspec_def.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/msi.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/msr-index.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/msr.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mtrr.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/multicall.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/mwait.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/nmi.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/nops.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/nospec.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/numa.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/p2m.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/page-bits.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/page.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/paging.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/pci.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/percpu.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/perfc.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/perfc_defn.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/processor.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/psr.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/pv/domain.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/pv/grant_table.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/pv/mm.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/pv/shim.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/pv/traps.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/random.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/regs.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/setup.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/shadow.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/shared.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/smp.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/softirq.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/spec_ctrl.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/spec_ctrl_asm.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/spinlock.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/string.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/system.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/tboot.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/time.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/trace.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/traps.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/types.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/uaccess.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/unaligned.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/vm_event.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/vpmu.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/x86-defns.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/x86-vendors.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_64/efibind.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_64/elf.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_64/page.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_64/regs.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_64/system.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_64/uaccess.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_emulate.h (89%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/xenoprof.h (100%)
 rename xen/{include/asm-x86 => arch/x86/include/asm}/xstate.h (100%)

diff --git a/.gitignore b/.gitignore
index 8ebb51b6c5e8..bc964663d25c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -315,6 +315,7 @@ xen/arch/x86/boot/*.lnk
 xen/arch/x86/efi.lds
 xen/arch/x86/efi/check.efi
 xen/arch/x86/efi/mkreloc
+xen/arch/x86/include/asm/asm-macros.h
 xen/arch/*/xen.lds
 xen/arch/*/efi/boot.c
 xen/arch/*/efi/compat.c
@@ -322,13 +323,11 @@ xen/arch/*/efi/ebmalloc.c
 xen/arch/*/efi/efi.h
 xen/arch/*/efi/pe.c
 xen/arch/*/efi/runtime.c
+xen/arch/*/include/asm/asm-offsets.h
 xen/asm-offsets.s
 xen/common/config_data.S
 xen/common/config.gz
 xen/include/headers*.chk
-xen/include/asm
-xen/include/asm-*/asm-offsets.h
-xen/include/asm-x86/asm-macros.h
 xen/include/compat/*
 xen/include/config/
 xen/include/generated/
diff --git a/MAINTAINERS b/MAINTAINERS
index 56d16e4328cf..d7041c3cc698 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -245,7 +245,6 @@ F:	xen/drivers/char/omap-uart.c
 F:	xen/drivers/char/pl011.c
 F:	xen/drivers/char/scif-uart.c
 F:	xen/drivers/passthrough/arm/
-F:	xen/include/asm-arm/
 F:	xen/include/public/arch-arm/
 F:	xen/include/public/arch-arm.h
 
@@ -291,10 +290,10 @@ EFI
 M:	Jan Beulich <jbeulich@suse.com>
 S:	Supported
 F:	xen/arch/x86/efi/
+F:	xen/arch/x86/include/asm/efi*.h
+F:	xen/arch/x86/include/asm/x86_*/efi*.h
 F:	xen/common/efi/
 F:	xen/include/efi/
-F:	xen/include/asm-x86/efi*.h
-F:	xen/include/asm-x86/x86_*/efi*.h
 
 GDBSX DEBUGGER
 M:	Elena Ufimtseva <elena.ufimtseva@oracle.com>
@@ -320,8 +319,8 @@ F:	xen/include/xen/hypfs.h
 INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT)
 R:	Lukasz Hawrylko <lukasz.hawrylko@linux.intel.com>
 S:	Odd Fixes
+F:	xen/arch/x86/include/asm/tboot.h
 F:	xen/arch/x86/tboot.c
-F:	xen/include/asm-x86/tboot.h
 
 INTEL(R) VT FOR DIRECTED I/O (VT-D)
 M:	Kevin Tian <kevin.tian@intel.com>
@@ -332,10 +331,10 @@ INTEL(R) VT FOR X86 (VT-X)
 M:	Jun Nakajima <jun.nakajima@intel.com>
 M:	Kevin Tian <kevin.tian@intel.com>
 S:	Supported
+F:	xen/arch/x86/cpu/vpmu_intel.c
 F:	xen/arch/x86/hvm/vmx/
+F:	xen/arch/x86/include/asm/hvm/vmx/
 F:	xen/arch/x86/mm/p2m-ept.c
-F:	xen/include/asm-x86/hvm/vmx/
-F:	xen/arch/x86/cpu/vpmu_intel.c
 
 IOMMU VENDOR INDEPENDENT CODE
 M:	Jan Beulich <jbeulich@suse.com>
@@ -411,10 +410,10 @@ M:	Ross Lagerwall <ross.lagerwall@citrix.com>
 S:	Supported
 F:	docs/misc/livepatch.pandoc
 F:	tools/misc/xen-livepatch.c
+F:	xen/arch/*/include/asm/livepatch.h
 F:	xen/arch/*/livepatch*
 F:	xen/arch/*/*/livepatch*
 F:	xen/common/livepatch*
-F:	xen/include/asm-*/livepatch.h
 F:	xen/include/xen/livepatch*
 F:	xen/test/livepatch/*
 
@@ -485,7 +484,6 @@ R:	Connor Davis <connojdavis@gmail.com>
 S:	Supported
 F:	config/riscv64.mk
 F:	xen/arch/riscv/
-F:	xen/include/asm-riscv/
 
 RTDS SCHEDULER
 M:	Dario Faggioli <dfaggioli@suse.com>
@@ -514,8 +512,8 @@ F:	stubdom/
 TEE MEDIATORS
 M:	Volodymyr Babchuk <volodymyr_babchuk@epam.com>
 S:	Supported
+F:	xen/arch/arm/include/asm/tee
 F:	xen/arch/arm/tee/
-F:	xen/include/asm-arm/tee
 
 TOOLSTACK
 M:	Ian Jackson <iwj@xenproject.org>
@@ -543,6 +541,8 @@ F:	tools/misc/xen-access.c
 F:	xen/arch/*/monitor.c
 F:	xen/arch/*/vm_event.c
 F:	xen/arch/arm/mem_access.c
+F:	xen/arch/x86/include/asm/hvm/monitor.h
+F:	xen/arch/x86/include/asm/hvm/vm_event.h
 F:	xen/arch/x86/mm/mem_access.c
 F:	xen/arch/x86/hvm/monitor.c
 F:	xen/arch/x86/hvm/vm_event.c
@@ -552,8 +552,6 @@ F:	xen/common/vm_event.c
 F:	xen/include/*/mem_access.h
 F:	xen/include/*/monitor.h
 F:	xen/include/*/vm_event.h
-F:	xen/include/asm-x86/hvm/monitor.h
-F:	xen/include/asm-x86/hvm/vm_event.h
 
 VPCI
 M:	Roger Pau Monné <roger.pau@citrix.com>
@@ -579,7 +577,6 @@ R:	Wei Liu <wl@xen.org>
 S:	Supported
 L:	xen-devel@lists.xenproject.org
 F:	xen/arch/x86/
-F:	xen/include/asm-x86/
 F:	xen/include/public/arch-x86/
 F:	xen/include/xen/lib/x86
 F:	xen/lib/x86
@@ -599,10 +596,10 @@ F:	xen/arch/x86/hvm/emulate.c
 F:	xen/arch/x86/hvm/intercept.c
 F:	xen/arch/x86/hvm/io.c
 F:	xen/arch/x86/hvm/ioreq.c
-F:	xen/include/asm-x86/hvm/emulate.h
-F:	xen/include/asm-x86/hvm/io.h
-F:	xen/include/asm-x86/hvm/ioreq.h
-F:	xen/include/asm-x86/ioreq.h
+F:	xen/arch/x86/include/asm/hvm/emulate.h
+F:	xen/arch/x86/include/asm/hvm/io.h
+F:	xen/arch/x86/include/asm/hvm/ioreq.h
+F:	xen/arch/x86/include/asm/ioreq.h
 
 X86 MEMORY MANAGEMENT
 M:	Jan Beulich <jbeulich@suse.com>
@@ -634,10 +631,10 @@ M:	Wei Liu <wl@xen.org>
 S:	Supported
 F:	xen/arch/x86/guest/hyperv/
 F:	xen/arch/x86/hvm/viridian/
-F:	xen/include/asm-x86/guest/hyperv.h
-F:	xen/include/asm-x86/guest/hyperv-hcall.h
-F:	xen/include/asm-x86/guest/hyperv-tlfs.h
-F:	xen/include/asm-x86/hvm/viridian.h
+F:	xen/arch/x86/include/asm/guest/hyperv.h
+F:	xen/arch/x86/include/asm/guest/hyperv-hcall.h
+F:	xen/arch/x86/include/asm/guest/hyperv-tlfs.h
+F:	xen/arch/x86/include/asm/hvm/viridian.h
 
 XENSTORE
 M:	Ian Jackson <iwj@xenproject.org>
diff --git a/tools/include/Makefile b/tools/include/Makefile
index 42605d46b937..6668756ceb63 100644
--- a/tools/include/Makefile
+++ b/tools/include/Makefile
@@ -30,7 +30,7 @@ xen-dir:
 	ln -s $(XEN_ROOT)/xen/include/acpi/platform acpi/
 	ln -s $(XEN_ROOT)/xen/include/acpi/ac*.h acpi/
 ifeq ($(CONFIG_X86),y)
-	ln -s $(XEN_ROOT)/xen/include/asm-x86 xen/asm
+	ln -s $(XEN_ROOT)/xen/arch/x86/include/asm xen/asm
 	mkdir -p xen/lib/x86
 	ln -s $(filter-out %autogen.h,$(wildcard $(XEN_ROOT)/xen/include/xen/lib/x86/*.h)) xen/lib/x86/
 	ln -s $(XEN_ROOT)/xen/include/xen/lib/x86/Makefile xen/lib/x86/
diff --git a/tools/misc/xen-access.c b/tools/misc/xen-access.c
index 4bbef0bd2e10..0731c20b8355 100644
--- a/tools/misc/xen-access.c
+++ b/tools/misc/xen-access.c
@@ -56,11 +56,11 @@
 #define ERROR(a, b...) fprintf(stderr, a "\n", ## b)
 #define PERROR(a, b...) fprintf(stderr, a ": %s\n", ## b, strerror(errno))
 
-/* From xen/include/asm-x86/processor.h */
+/* From xen/arch/x86/include/asm/processor.h */
 #define X86_TRAP_DEBUG  1
 #define X86_TRAP_INT3   3
 
-/* From xen/include/asm-x86/x86-defns.h */
+/* From xen/arch/x86/include/asm/x86-defns.h */
 #define X86_CR4_PGE        0x00000080 /* enable global pages */
 
 typedef struct vm_event {
diff --git a/tools/tests/vhpet/Makefile b/tools/tests/vhpet/Makefile
index cb88dd01c5f8..2d56ffdfd9c5 100644
--- a/tools/tests/vhpet/Makefile
+++ b/tools/tests/vhpet/Makefile
@@ -32,7 +32,7 @@ distclean: clean
 .PHONY: install
 install:
 
-hpet.h: $(XEN_ROOT)/xen/include/asm-x86/hpet.h
+hpet.h: $(XEN_ROOT)/xen/arch/x86/include/asm/hpet.h
 	cp $< $@
 
 hpet.c: $(XEN_ROOT)/xen/arch/x86/hvm/hpet.c
diff --git a/xen/Makefile b/xen/Makefile
index 2c56546cd1dc..da1b8ddb97ff 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -164,7 +164,7 @@ ifeq ($(TARGET_ARCH),x86)
 t1 = $(call as-insn,$(CC),".L0: .L1: .skip (.L1 - .L0)",,-no-integrated-as)
 
 # Check whether clang asm()-s support .include.
-t2 = $(call as-insn,$(CC) -I$(BASEDIR)/include,".include \"asm-x86/asm-defns.h\"",,-no-integrated-as)
+t2 = $(call as-insn,$(CC) -I$(BASEDIR)/arch/x86/include,".include \"asm/asm-defns.h\"",,-no-integrated-as)
 
 # Check whether clang keeps .macro-s between asm()-s:
 # https://bugs.llvm.org/show_bug.cgi?id=36110
@@ -367,7 +367,7 @@ _clean: delete-unfresh-files
 	find . \( -name "*.o" -o -name ".*.d" -o -name ".*.d2" \
 		-o -name "*.gcno" -o -name ".*.cmd" -o -name "lib.a" \) -exec rm -f {} \;
 	rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map *~ core
-	rm -f asm-offsets.s include/asm-*/asm-offsets.h
+	rm -f asm-offsets.s arch/*/include/asm/asm-offsets.h
 	rm -f .banner
 
 .PHONY: _distclean
@@ -381,7 +381,6 @@ $(TARGET).gz: $(TARGET)
 $(TARGET): delete-unfresh-files
 	$(MAKE) -C tools
 	$(MAKE) -f $(BASEDIR)/Rules.mk include/xen/compile.h
-	[ -e include/asm ] || ln -sf asm-$(TARGET_ARCH) include/asm
 	[ -e arch/$(TARGET_ARCH)/efi ] && for f in $$(cd common/efi; echo *.[ch]); \
 		do test -r arch/$(TARGET_ARCH)/efi/$$f || \
 		   ln -nsf ../../../common/efi/$$f arch/$(TARGET_ARCH)/efi/; \
@@ -389,7 +388,7 @@ $(TARGET): delete-unfresh-files
 		true
 	$(MAKE) -f $(BASEDIR)/Rules.mk -C include
 	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) include
-	$(MAKE) -f $(BASEDIR)/Rules.mk include/asm-$(TARGET_ARCH)/asm-offsets.h
+	$(MAKE) -f $(BASEDIR)/Rules.mk arch/$(TARGET_ARCH)/include/asm/asm-offsets.h
 	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) $@
 
 # drivers/char/console.o contains static banner/compile info. Blow it away.
@@ -435,7 +434,7 @@ 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,$@)
 
-include/asm-$(TARGET_ARCH)/asm-offsets.h: asm-offsets.s
+arch/$(TARGET_ARCH)/include/asm/asm-offsets.h: asm-offsets.s
 	@(set -e; \
 	  echo "/*"; \
 	  echo " * DO NOT MODIFY."; \
@@ -453,8 +452,8 @@ include/asm-$(TARGET_ARCH)/asm-offsets.h: asm-offsets.s
 
 SUBDIRS = xsm arch/$(TARGET_ARCH) common drivers lib test
 define all_sources
-    ( find include/asm-$(TARGET_ARCH) -name '*.h' -print; \
-      find include -name 'asm-*' -prune -o -name '*.h' -print; \
+    ( find arch/$(TARGET_ARCH)/include -name '*.h' -print; \
+      find include -name '*.h' -print; \
       find $(SUBDIRS) -name '*.[chS]' -print )
 endef
 
diff --git a/xen/arch/arm/README.LinuxPrimitives b/xen/arch/arm/README.LinuxPrimitives
index 664a9f89ed27..1d53e6a898da 100644
--- a/xen/arch/arm/README.LinuxPrimitives
+++ b/xen/arch/arm/README.LinuxPrimitives
@@ -8,19 +8,19 @@ arm64:
 
 bitops: last sync @ v3.16-rc6 (last commit: 8715466b6027)
 
-linux/arch/arm64/include/asm/bitops.h   xen/include/asm-arm/arm64/bitops.h
+linux/arch/arm64/include/asm/bitops.h   xen/arch/arm/include/asm/arm64/bitops.h
 
 ---------------------------------------------------------------------
 
 cmpxchg: last sync @ v3.16-rc6 (last commit: e1dfda9ced9b)
 
-linux/arch/arm64/include/asm/cmpxchg.h  xen/include/asm-arm/arm64/cmpxchg.h
+linux/arch/arm64/include/asm/cmpxchg.h  xen/arch/arm/include/asm/arm64/cmpxchg.h
 
 ---------------------------------------------------------------------
 
 atomics: last sync @ v3.16-rc6 (last commit: 8715466b6027)
 
-linux/arch/arm64/include/asm/atomic.h   xen/include/asm-arm/arm64/atomic.h
+linux/arch/arm64/include/asm/atomic.h   xen/arch/arm/include/asm/arm64/atomic.h
 
 The following functions were taken from Linux:
     atomic_add(), atomic_add_return(), atomic_sub(), atomic_sub_return(),
@@ -76,13 +76,13 @@ diff -u ../linux/arch/arm/lib/findbit.S xen/arch/arm/arm32/lib/findbit.S
 
 cmpxchg: last sync @ v3.16-rc6 (last commit: c32ffce0f66e)
 
-linux/arch/arm/include/asm/cmpxchg.h    xen/include/asm-arm/arm32/cmpxchg.h
+linux/arch/arm/include/asm/cmpxchg.h    xen/arch/arm/include/asm/arm32/cmpxchg.h
 
 ---------------------------------------------------------------------
 
 atomics: last sync @ v3.16-rc6 (last commit: 030d0178bdbd)
 
-linux/arch/arm/include/asm/atomic.h     xen/include/asm-arm/arm32/atomic.h
+linux/arch/arm/include/asm/atomic.h     xen/arch/arm/include/asm/arm32/atomic.h
 
 The following functions were taken from Linux:
     atomic_add(), atomic_add_return(), atomic_sub(), atomic_sub_return(),
diff --git a/xen/arch/arm/arch.mk b/xen/arch/arm/arch.mk
index 6a2982059486..c3ac443b3788 100644
--- a/xen/arch/arm/arch.mk
+++ b/xen/arch/arm/arch.mk
@@ -2,6 +2,7 @@
 # arm-specific definitions
 
 CFLAGS += -I$(BASEDIR)/include
+CFLAGS += -I$(BASEDIR)/arch/$(TARGET_ARCH)/include
 
 $(call cc-options-add,CFLAGS,CC,$(EMBEDDED_EXTRA_CFLAGS))
 $(call cc-option-add,CFLAGS,CC,-Wnested-externs)
diff --git a/xen/arch/arm/arm32/head.S b/xen/arch/arm/arm32/head.S
index 7178865f48c3..b5912d381b98 100644
--- a/xen/arch/arm/arm32/head.S
+++ b/xen/arch/arm/arm32/head.S
@@ -599,7 +599,7 @@ remove_identity_mapping:
         strd  r2, r3, [r0, r1]
 
 identity_mapping_removed:
-        /* See asm-arm/arm32/flushtlb.h for the explanation of the sequence. */
+        /* See asm/arm32/flushtlb.h for the explanation of the sequence. */
         dsb   nshst
         mcr   CP32(r0, TLBIALLH)
         dsb   nsh
diff --git a/xen/arch/arm/arm64/head.S b/xen/arch/arm/arm64/head.S
index aa1f88c76498..51b00ab0bea6 100644
--- a/xen/arch/arm/arm64/head.S
+++ b/xen/arch/arm/arm64/head.S
@@ -737,7 +737,7 @@ remove_identity_mapping:
         str   xzr, [x0, x1, lsl #3]
 
 identity_mapping_removed:
-        /* See asm-arm/arm64/flushtlb.h for the explanation of the sequence. */
+        /* See asm/arm64/flushtlb.h for the explanation of the sequence. */
         dsb   nshst
         tlbi  alle2
         dsb   nsh
diff --git a/xen/include/asm-arm/acpi.h b/xen/arch/arm/include/asm/acpi.h
similarity index 100%
rename from xen/include/asm-arm/acpi.h
rename to xen/arch/arm/include/asm/acpi.h
diff --git a/xen/include/asm-arm/alternative.h b/xen/arch/arm/include/asm/alternative.h
similarity index 100%
rename from xen/include/asm-arm/alternative.h
rename to xen/arch/arm/include/asm/alternative.h
diff --git a/xen/include/asm-arm/altp2m.h b/xen/arch/arm/include/asm/altp2m.h
similarity index 100%
rename from xen/include/asm-arm/altp2m.h
rename to xen/arch/arm/include/asm/altp2m.h
diff --git a/xen/include/asm-arm/arm32/atomic.h b/xen/arch/arm/include/asm/arm32/atomic.h
similarity index 100%
rename from xen/include/asm-arm/arm32/atomic.h
rename to xen/arch/arm/include/asm/arm32/atomic.h
diff --git a/xen/include/asm-arm/arm32/bitops.h b/xen/arch/arm/include/asm/arm32/bitops.h
similarity index 100%
rename from xen/include/asm-arm/arm32/bitops.h
rename to xen/arch/arm/include/asm/arm32/bitops.h
diff --git a/xen/include/asm-arm/arm32/bug.h b/xen/arch/arm/include/asm/arm32/bug.h
similarity index 100%
rename from xen/include/asm-arm/arm32/bug.h
rename to xen/arch/arm/include/asm/arm32/bug.h
diff --git a/xen/include/asm-arm/arm32/cmpxchg.h b/xen/arch/arm/include/asm/arm32/cmpxchg.h
similarity index 100%
rename from xen/include/asm-arm/arm32/cmpxchg.h
rename to xen/arch/arm/include/asm/arm32/cmpxchg.h
diff --git a/xen/include/asm-arm/arm32/flushtlb.h b/xen/arch/arm/include/asm/arm32/flushtlb.h
similarity index 100%
rename from xen/include/asm-arm/arm32/flushtlb.h
rename to xen/arch/arm/include/asm/arm32/flushtlb.h
diff --git a/xen/include/asm-arm/arm32/insn.h b/xen/arch/arm/include/asm/arm32/insn.h
similarity index 100%
rename from xen/include/asm-arm/arm32/insn.h
rename to xen/arch/arm/include/asm/arm32/insn.h
diff --git a/xen/include/asm-arm/arm32/io.h b/xen/arch/arm/include/asm/arm32/io.h
similarity index 100%
rename from xen/include/asm-arm/arm32/io.h
rename to xen/arch/arm/include/asm/arm32/io.h
diff --git a/xen/include/asm-arm/arm32/macros.h b/xen/arch/arm/include/asm/arm32/macros.h
similarity index 100%
rename from xen/include/asm-arm/arm32/macros.h
rename to xen/arch/arm/include/asm/arm32/macros.h
diff --git a/xen/include/asm-arm/arm32/mm.h b/xen/arch/arm/include/asm/arm32/mm.h
similarity index 100%
rename from xen/include/asm-arm/arm32/mm.h
rename to xen/arch/arm/include/asm/arm32/mm.h
diff --git a/xen/include/asm-arm/arm32/page.h b/xen/arch/arm/include/asm/arm32/page.h
similarity index 100%
rename from xen/include/asm-arm/arm32/page.h
rename to xen/arch/arm/include/asm/arm32/page.h
diff --git a/xen/include/asm-arm/arm32/processor.h b/xen/arch/arm/include/asm/arm32/processor.h
similarity index 100%
rename from xen/include/asm-arm/arm32/processor.h
rename to xen/arch/arm/include/asm/arm32/processor.h
diff --git a/xen/include/asm-arm/arm32/sysregs.h b/xen/arch/arm/include/asm/arm32/sysregs.h
similarity index 100%
rename from xen/include/asm-arm/arm32/sysregs.h
rename to xen/arch/arm/include/asm/arm32/sysregs.h
diff --git a/xen/include/asm-arm/arm32/system.h b/xen/arch/arm/include/asm/arm32/system.h
similarity index 100%
rename from xen/include/asm-arm/arm32/system.h
rename to xen/arch/arm/include/asm/arm32/system.h
diff --git a/xen/include/asm-arm/arm32/traps.h b/xen/arch/arm/include/asm/arm32/traps.h
similarity index 100%
rename from xen/include/asm-arm/arm32/traps.h
rename to xen/arch/arm/include/asm/arm32/traps.h
diff --git a/xen/include/asm-arm/arm32/vfp.h b/xen/arch/arm/include/asm/arm32/vfp.h
similarity index 100%
rename from xen/include/asm-arm/arm32/vfp.h
rename to xen/arch/arm/include/asm/arm32/vfp.h
diff --git a/xen/include/asm-arm/arm64/atomic.h b/xen/arch/arm/include/asm/arm64/atomic.h
similarity index 100%
rename from xen/include/asm-arm/arm64/atomic.h
rename to xen/arch/arm/include/asm/arm64/atomic.h
diff --git a/xen/include/asm-arm/arm64/bitops.h b/xen/arch/arm/include/asm/arm64/bitops.h
similarity index 100%
rename from xen/include/asm-arm/arm64/bitops.h
rename to xen/arch/arm/include/asm/arm64/bitops.h
diff --git a/xen/include/asm-arm/arm64/brk.h b/xen/arch/arm/include/asm/arm64/brk.h
similarity index 100%
rename from xen/include/asm-arm/arm64/brk.h
rename to xen/arch/arm/include/asm/arm64/brk.h
diff --git a/xen/include/asm-arm/arm64/bug.h b/xen/arch/arm/include/asm/arm64/bug.h
similarity index 100%
rename from xen/include/asm-arm/arm64/bug.h
rename to xen/arch/arm/include/asm/arm64/bug.h
diff --git a/xen/include/asm-arm/arm64/cmpxchg.h b/xen/arch/arm/include/asm/arm64/cmpxchg.h
similarity index 100%
rename from xen/include/asm-arm/arm64/cmpxchg.h
rename to xen/arch/arm/include/asm/arm64/cmpxchg.h
diff --git a/xen/include/asm-arm/arm64/efibind.h b/xen/arch/arm/include/asm/arm64/efibind.h
similarity index 100%
rename from xen/include/asm-arm/arm64/efibind.h
rename to xen/arch/arm/include/asm/arm64/efibind.h
diff --git a/xen/include/asm-arm/arm64/flushtlb.h b/xen/arch/arm/include/asm/arm64/flushtlb.h
similarity index 100%
rename from xen/include/asm-arm/arm64/flushtlb.h
rename to xen/arch/arm/include/asm/arm64/flushtlb.h
diff --git a/xen/include/asm-arm/arm64/hsr.h b/xen/arch/arm/include/asm/arm64/hsr.h
similarity index 100%
rename from xen/include/asm-arm/arm64/hsr.h
rename to xen/arch/arm/include/asm/arm64/hsr.h
diff --git a/xen/include/asm-arm/arm64/insn.h b/xen/arch/arm/include/asm/arm64/insn.h
similarity index 100%
rename from xen/include/asm-arm/arm64/insn.h
rename to xen/arch/arm/include/asm/arm64/insn.h
diff --git a/xen/include/asm-arm/arm64/io.h b/xen/arch/arm/include/asm/arm64/io.h
similarity index 100%
rename from xen/include/asm-arm/arm64/io.h
rename to xen/arch/arm/include/asm/arm64/io.h
diff --git a/xen/include/asm-arm/arm64/macros.h b/xen/arch/arm/include/asm/arm64/macros.h
similarity index 100%
rename from xen/include/asm-arm/arm64/macros.h
rename to xen/arch/arm/include/asm/arm64/macros.h
diff --git a/xen/include/asm-arm/arm64/mm.h b/xen/arch/arm/include/asm/arm64/mm.h
similarity index 100%
rename from xen/include/asm-arm/arm64/mm.h
rename to xen/arch/arm/include/asm/arm64/mm.h
diff --git a/xen/include/asm-arm/arm64/page.h b/xen/arch/arm/include/asm/arm64/page.h
similarity index 100%
rename from xen/include/asm-arm/arm64/page.h
rename to xen/arch/arm/include/asm/arm64/page.h
diff --git a/xen/include/asm-arm/arm64/processor.h b/xen/arch/arm/include/asm/arm64/processor.h
similarity index 100%
rename from xen/include/asm-arm/arm64/processor.h
rename to xen/arch/arm/include/asm/arm64/processor.h
diff --git a/xen/include/asm-arm/arm64/sysregs.h b/xen/arch/arm/include/asm/arm64/sysregs.h
similarity index 100%
rename from xen/include/asm-arm/arm64/sysregs.h
rename to xen/arch/arm/include/asm/arm64/sysregs.h
diff --git a/xen/include/asm-arm/arm64/system.h b/xen/arch/arm/include/asm/arm64/system.h
similarity index 100%
rename from xen/include/asm-arm/arm64/system.h
rename to xen/arch/arm/include/asm/arm64/system.h
diff --git a/xen/include/asm-arm/arm64/traps.h b/xen/arch/arm/include/asm/arm64/traps.h
similarity index 100%
rename from xen/include/asm-arm/arm64/traps.h
rename to xen/arch/arm/include/asm/arm64/traps.h
diff --git a/xen/include/asm-arm/arm64/vfp.h b/xen/arch/arm/include/asm/arm64/vfp.h
similarity index 100%
rename from xen/include/asm-arm/arm64/vfp.h
rename to xen/arch/arm/include/asm/arm64/vfp.h
diff --git a/xen/include/asm-arm/asm_defns.h b/xen/arch/arm/include/asm/asm_defns.h
similarity index 100%
rename from xen/include/asm-arm/asm_defns.h
rename to xen/arch/arm/include/asm/asm_defns.h
diff --git a/xen/include/asm-arm/atomic.h b/xen/arch/arm/include/asm/atomic.h
similarity index 100%
rename from xen/include/asm-arm/atomic.h
rename to xen/arch/arm/include/asm/atomic.h
diff --git a/xen/include/asm-arm/bitops.h b/xen/arch/arm/include/asm/bitops.h
similarity index 100%
rename from xen/include/asm-arm/bitops.h
rename to xen/arch/arm/include/asm/bitops.h
diff --git a/xen/include/asm-arm/bug.h b/xen/arch/arm/include/asm/bug.h
similarity index 100%
rename from xen/include/asm-arm/bug.h
rename to xen/arch/arm/include/asm/bug.h
diff --git a/xen/include/asm-arm/byteorder.h b/xen/arch/arm/include/asm/byteorder.h
similarity index 100%
rename from xen/include/asm-arm/byteorder.h
rename to xen/arch/arm/include/asm/byteorder.h
diff --git a/xen/include/asm-arm/cache.h b/xen/arch/arm/include/asm/cache.h
similarity index 100%
rename from xen/include/asm-arm/cache.h
rename to xen/arch/arm/include/asm/cache.h
diff --git a/xen/include/asm-arm/cadence-uart.h b/xen/arch/arm/include/asm/cadence-uart.h
similarity index 100%
rename from xen/include/asm-arm/cadence-uart.h
rename to xen/arch/arm/include/asm/cadence-uart.h
diff --git a/xen/include/asm-arm/config.h b/xen/arch/arm/include/asm/config.h
similarity index 100%
rename from xen/include/asm-arm/config.h
rename to xen/arch/arm/include/asm/config.h
diff --git a/xen/include/asm-arm/cpregs.h b/xen/arch/arm/include/asm/cpregs.h
similarity index 100%
rename from xen/include/asm-arm/cpregs.h
rename to xen/arch/arm/include/asm/cpregs.h
diff --git a/xen/include/asm-arm/cpuerrata.h b/xen/arch/arm/include/asm/cpuerrata.h
similarity index 100%
rename from xen/include/asm-arm/cpuerrata.h
rename to xen/arch/arm/include/asm/cpuerrata.h
diff --git a/xen/include/asm-arm/cpufeature.h b/xen/arch/arm/include/asm/cpufeature.h
similarity index 100%
rename from xen/include/asm-arm/cpufeature.h
rename to xen/arch/arm/include/asm/cpufeature.h
diff --git a/xen/include/asm-arm/current.h b/xen/arch/arm/include/asm/current.h
similarity index 100%
rename from xen/include/asm-arm/current.h
rename to xen/arch/arm/include/asm/current.h
diff --git a/xen/include/asm-arm/debugger.h b/xen/arch/arm/include/asm/debugger.h
similarity index 100%
rename from xen/include/asm-arm/debugger.h
rename to xen/arch/arm/include/asm/debugger.h
diff --git a/xen/include/asm-arm/delay.h b/xen/arch/arm/include/asm/delay.h
similarity index 100%
rename from xen/include/asm-arm/delay.h
rename to xen/arch/arm/include/asm/delay.h
diff --git a/xen/include/asm-arm/desc.h b/xen/arch/arm/include/asm/desc.h
similarity index 100%
rename from xen/include/asm-arm/desc.h
rename to xen/arch/arm/include/asm/desc.h
diff --git a/xen/include/asm-arm/device.h b/xen/arch/arm/include/asm/device.h
similarity index 100%
rename from xen/include/asm-arm/device.h
rename to xen/arch/arm/include/asm/device.h
diff --git a/xen/include/asm-arm/div64.h b/xen/arch/arm/include/asm/div64.h
similarity index 100%
rename from xen/include/asm-arm/div64.h
rename to xen/arch/arm/include/asm/div64.h
diff --git a/xen/include/asm-arm/domain.h b/xen/arch/arm/include/asm/domain.h
similarity index 100%
rename from xen/include/asm-arm/domain.h
rename to xen/arch/arm/include/asm/domain.h
diff --git a/xen/include/asm-arm/domain_build.h b/xen/arch/arm/include/asm/domain_build.h
similarity index 100%
rename from xen/include/asm-arm/domain_build.h
rename to xen/arch/arm/include/asm/domain_build.h
diff --git a/xen/include/asm-arm/early_printk.h b/xen/arch/arm/include/asm/early_printk.h
similarity index 100%
rename from xen/include/asm-arm/early_printk.h
rename to xen/arch/arm/include/asm/early_printk.h
diff --git a/xen/include/asm-arm/efibind.h b/xen/arch/arm/include/asm/efibind.h
similarity index 100%
rename from xen/include/asm-arm/efibind.h
rename to xen/arch/arm/include/asm/efibind.h
diff --git a/xen/include/asm-arm/elf.h b/xen/arch/arm/include/asm/elf.h
similarity index 100%
rename from xen/include/asm-arm/elf.h
rename to xen/arch/arm/include/asm/elf.h
diff --git a/xen/include/asm-arm/event.h b/xen/arch/arm/include/asm/event.h
similarity index 100%
rename from xen/include/asm-arm/event.h
rename to xen/arch/arm/include/asm/event.h
diff --git a/xen/include/asm-arm/exynos4210-uart.h b/xen/arch/arm/include/asm/exynos4210-uart.h
similarity index 100%
rename from xen/include/asm-arm/exynos4210-uart.h
rename to xen/arch/arm/include/asm/exynos4210-uart.h
diff --git a/xen/include/asm-arm/flushtlb.h b/xen/arch/arm/include/asm/flushtlb.h
similarity index 100%
rename from xen/include/asm-arm/flushtlb.h
rename to xen/arch/arm/include/asm/flushtlb.h
diff --git a/xen/include/asm-arm/gic.h b/xen/arch/arm/include/asm/gic.h
similarity index 100%
rename from xen/include/asm-arm/gic.h
rename to xen/arch/arm/include/asm/gic.h
diff --git a/xen/include/asm-arm/gic_v3_defs.h b/xen/arch/arm/include/asm/gic_v3_defs.h
similarity index 100%
rename from xen/include/asm-arm/gic_v3_defs.h
rename to xen/arch/arm/include/asm/gic_v3_defs.h
diff --git a/xen/include/asm-arm/gic_v3_its.h b/xen/arch/arm/include/asm/gic_v3_its.h
similarity index 100%
rename from xen/include/asm-arm/gic_v3_its.h
rename to xen/arch/arm/include/asm/gic_v3_its.h
diff --git a/xen/include/asm-arm/grant_table.h b/xen/arch/arm/include/asm/grant_table.h
similarity index 100%
rename from xen/include/asm-arm/grant_table.h
rename to xen/arch/arm/include/asm/grant_table.h
diff --git a/xen/include/asm-arm/guest_access.h b/xen/arch/arm/include/asm/guest_access.h
similarity index 100%
rename from xen/include/asm-arm/guest_access.h
rename to xen/arch/arm/include/asm/guest_access.h
diff --git a/xen/include/asm-arm/guest_atomics.h b/xen/arch/arm/include/asm/guest_atomics.h
similarity index 100%
rename from xen/include/asm-arm/guest_atomics.h
rename to xen/arch/arm/include/asm/guest_atomics.h
diff --git a/xen/include/asm-arm/guest_walk.h b/xen/arch/arm/include/asm/guest_walk.h
similarity index 100%
rename from xen/include/asm-arm/guest_walk.h
rename to xen/arch/arm/include/asm/guest_walk.h
diff --git a/xen/include/asm-arm/hardirq.h b/xen/arch/arm/include/asm/hardirq.h
similarity index 100%
rename from xen/include/asm-arm/hardirq.h
rename to xen/arch/arm/include/asm/hardirq.h
diff --git a/xen/include/asm-arm/hsr.h b/xen/arch/arm/include/asm/hsr.h
similarity index 100%
rename from xen/include/asm-arm/hsr.h
rename to xen/arch/arm/include/asm/hsr.h
diff --git a/xen/include/asm-arm/hypercall.h b/xen/arch/arm/include/asm/hypercall.h
similarity index 100%
rename from xen/include/asm-arm/hypercall.h
rename to xen/arch/arm/include/asm/hypercall.h
diff --git a/xen/include/asm-arm/init.h b/xen/arch/arm/include/asm/init.h
similarity index 100%
rename from xen/include/asm-arm/init.h
rename to xen/arch/arm/include/asm/init.h
diff --git a/xen/include/asm-arm/insn.h b/xen/arch/arm/include/asm/insn.h
similarity index 100%
rename from xen/include/asm-arm/insn.h
rename to xen/arch/arm/include/asm/insn.h
diff --git a/xen/include/asm-arm/io.h b/xen/arch/arm/include/asm/io.h
similarity index 100%
rename from xen/include/asm-arm/io.h
rename to xen/arch/arm/include/asm/io.h
diff --git a/xen/include/asm-arm/iocap.h b/xen/arch/arm/include/asm/iocap.h
similarity index 100%
rename from xen/include/asm-arm/iocap.h
rename to xen/arch/arm/include/asm/iocap.h
diff --git a/xen/include/asm-arm/iommu.h b/xen/arch/arm/include/asm/iommu.h
similarity index 100%
rename from xen/include/asm-arm/iommu.h
rename to xen/arch/arm/include/asm/iommu.h
diff --git a/xen/include/asm-arm/iommu_fwspec.h b/xen/arch/arm/include/asm/iommu_fwspec.h
similarity index 100%
rename from xen/include/asm-arm/iommu_fwspec.h
rename to xen/arch/arm/include/asm/iommu_fwspec.h
diff --git a/xen/include/asm-arm/ioreq.h b/xen/arch/arm/include/asm/ioreq.h
similarity index 100%
rename from xen/include/asm-arm/ioreq.h
rename to xen/arch/arm/include/asm/ioreq.h
diff --git a/xen/include/asm-arm/irq.h b/xen/arch/arm/include/asm/irq.h
similarity index 100%
rename from xen/include/asm-arm/irq.h
rename to xen/arch/arm/include/asm/irq.h
diff --git a/xen/include/asm-arm/kernel.h b/xen/arch/arm/include/asm/kernel.h
similarity index 100%
rename from xen/include/asm-arm/kernel.h
rename to xen/arch/arm/include/asm/kernel.h
diff --git a/xen/include/asm-arm/livepatch.h b/xen/arch/arm/include/asm/livepatch.h
similarity index 100%
rename from xen/include/asm-arm/livepatch.h
rename to xen/arch/arm/include/asm/livepatch.h
diff --git a/xen/include/asm-arm/lpae.h b/xen/arch/arm/include/asm/lpae.h
similarity index 100%
rename from xen/include/asm-arm/lpae.h
rename to xen/arch/arm/include/asm/lpae.h
diff --git a/xen/include/asm-arm/macros.h b/xen/arch/arm/include/asm/macros.h
similarity index 100%
rename from xen/include/asm-arm/macros.h
rename to xen/arch/arm/include/asm/macros.h
diff --git a/xen/include/asm-arm/mem_access.h b/xen/arch/arm/include/asm/mem_access.h
similarity index 100%
rename from xen/include/asm-arm/mem_access.h
rename to xen/arch/arm/include/asm/mem_access.h
diff --git a/xen/include/asm-arm/mm.h b/xen/arch/arm/include/asm/mm.h
similarity index 100%
rename from xen/include/asm-arm/mm.h
rename to xen/arch/arm/include/asm/mm.h
diff --git a/xen/include/asm-arm/mmio.h b/xen/arch/arm/include/asm/mmio.h
similarity index 100%
rename from xen/include/asm-arm/mmio.h
rename to xen/arch/arm/include/asm/mmio.h
diff --git a/xen/include/asm-arm/monitor.h b/xen/arch/arm/include/asm/monitor.h
similarity index 100%
rename from xen/include/asm-arm/monitor.h
rename to xen/arch/arm/include/asm/monitor.h
diff --git a/xen/include/asm-arm/new_vgic.h b/xen/arch/arm/include/asm/new_vgic.h
similarity index 100%
rename from xen/include/asm-arm/new_vgic.h
rename to xen/arch/arm/include/asm/new_vgic.h
diff --git a/xen/include/asm-arm/nospec.h b/xen/arch/arm/include/asm/nospec.h
similarity index 100%
rename from xen/include/asm-arm/nospec.h
rename to xen/arch/arm/include/asm/nospec.h
diff --git a/xen/include/asm-arm/numa.h b/xen/arch/arm/include/asm/numa.h
similarity index 100%
rename from xen/include/asm-arm/numa.h
rename to xen/arch/arm/include/asm/numa.h
diff --git a/xen/include/asm-arm/p2m.h b/xen/arch/arm/include/asm/p2m.h
similarity index 100%
rename from xen/include/asm-arm/p2m.h
rename to xen/arch/arm/include/asm/p2m.h
diff --git a/xen/include/asm-arm/page-bits.h b/xen/arch/arm/include/asm/page-bits.h
similarity index 100%
rename from xen/include/asm-arm/page-bits.h
rename to xen/arch/arm/include/asm/page-bits.h
diff --git a/xen/include/asm-arm/page.h b/xen/arch/arm/include/asm/page.h
similarity index 100%
rename from xen/include/asm-arm/page.h
rename to xen/arch/arm/include/asm/page.h
diff --git a/xen/include/asm-arm/paging.h b/xen/arch/arm/include/asm/paging.h
similarity index 100%
rename from xen/include/asm-arm/paging.h
rename to xen/arch/arm/include/asm/paging.h
diff --git a/xen/include/asm-arm/pci.h b/xen/arch/arm/include/asm/pci.h
similarity index 100%
rename from xen/include/asm-arm/pci.h
rename to xen/arch/arm/include/asm/pci.h
diff --git a/xen/include/asm-arm/percpu.h b/xen/arch/arm/include/asm/percpu.h
similarity index 100%
rename from xen/include/asm-arm/percpu.h
rename to xen/arch/arm/include/asm/percpu.h
diff --git a/xen/include/asm-arm/perfc.h b/xen/arch/arm/include/asm/perfc.h
similarity index 100%
rename from xen/include/asm-arm/perfc.h
rename to xen/arch/arm/include/asm/perfc.h
diff --git a/xen/include/asm-arm/perfc_defn.h b/xen/arch/arm/include/asm/perfc_defn.h
similarity index 100%
rename from xen/include/asm-arm/perfc_defn.h
rename to xen/arch/arm/include/asm/perfc_defn.h
diff --git a/xen/include/asm-arm/pl011-uart.h b/xen/arch/arm/include/asm/pl011-uart.h
similarity index 100%
rename from xen/include/asm-arm/pl011-uart.h
rename to xen/arch/arm/include/asm/pl011-uart.h
diff --git a/xen/include/asm-arm/platform.h b/xen/arch/arm/include/asm/platform.h
similarity index 100%
rename from xen/include/asm-arm/platform.h
rename to xen/arch/arm/include/asm/platform.h
diff --git a/xen/include/asm-arm/platforms/exynos5.h b/xen/arch/arm/include/asm/platforms/exynos5.h
similarity index 100%
rename from xen/include/asm-arm/platforms/exynos5.h
rename to xen/arch/arm/include/asm/platforms/exynos5.h
diff --git a/xen/include/asm-arm/platforms/midway.h b/xen/arch/arm/include/asm/platforms/midway.h
similarity index 100%
rename from xen/include/asm-arm/platforms/midway.h
rename to xen/arch/arm/include/asm/platforms/midway.h
diff --git a/xen/include/asm-arm/platforms/omap5.h b/xen/arch/arm/include/asm/platforms/omap5.h
similarity index 100%
rename from xen/include/asm-arm/platforms/omap5.h
rename to xen/arch/arm/include/asm/platforms/omap5.h
diff --git a/xen/include/asm-arm/platforms/vexpress.h b/xen/arch/arm/include/asm/platforms/vexpress.h
similarity index 100%
rename from xen/include/asm-arm/platforms/vexpress.h
rename to xen/arch/arm/include/asm/platforms/vexpress.h
diff --git a/xen/include/asm-arm/platforms/xilinx-zynqmp-eemi.h b/xen/arch/arm/include/asm/platforms/xilinx-zynqmp-eemi.h
similarity index 100%
rename from xen/include/asm-arm/platforms/xilinx-zynqmp-eemi.h
rename to xen/arch/arm/include/asm/platforms/xilinx-zynqmp-eemi.h
diff --git a/xen/include/asm-arm/processor.h b/xen/arch/arm/include/asm/processor.h
similarity index 100%
rename from xen/include/asm-arm/processor.h
rename to xen/arch/arm/include/asm/processor.h
diff --git a/xen/include/asm-arm/procinfo.h b/xen/arch/arm/include/asm/procinfo.h
similarity index 100%
rename from xen/include/asm-arm/procinfo.h
rename to xen/arch/arm/include/asm/procinfo.h
diff --git a/xen/include/asm-arm/psci.h b/xen/arch/arm/include/asm/psci.h
similarity index 100%
rename from xen/include/asm-arm/psci.h
rename to xen/arch/arm/include/asm/psci.h
diff --git a/xen/include/asm-arm/random.h b/xen/arch/arm/include/asm/random.h
similarity index 100%
rename from xen/include/asm-arm/random.h
rename to xen/arch/arm/include/asm/random.h
diff --git a/xen/include/asm-arm/regs.h b/xen/arch/arm/include/asm/regs.h
similarity index 100%
rename from xen/include/asm-arm/regs.h
rename to xen/arch/arm/include/asm/regs.h
diff --git a/xen/include/asm-arm/scif-uart.h b/xen/arch/arm/include/asm/scif-uart.h
similarity index 100%
rename from xen/include/asm-arm/scif-uart.h
rename to xen/arch/arm/include/asm/scif-uart.h
diff --git a/xen/include/asm-arm/setup.h b/xen/arch/arm/include/asm/setup.h
similarity index 100%
rename from xen/include/asm-arm/setup.h
rename to xen/arch/arm/include/asm/setup.h
diff --git a/xen/include/asm-arm/short-desc.h b/xen/arch/arm/include/asm/short-desc.h
similarity index 100%
rename from xen/include/asm-arm/short-desc.h
rename to xen/arch/arm/include/asm/short-desc.h
diff --git a/xen/include/asm-arm/smccc.h b/xen/arch/arm/include/asm/smccc.h
similarity index 100%
rename from xen/include/asm-arm/smccc.h
rename to xen/arch/arm/include/asm/smccc.h
diff --git a/xen/include/asm-arm/smp.h b/xen/arch/arm/include/asm/smp.h
similarity index 100%
rename from xen/include/asm-arm/smp.h
rename to xen/arch/arm/include/asm/smp.h
diff --git a/xen/include/asm-arm/softirq.h b/xen/arch/arm/include/asm/softirq.h
similarity index 100%
rename from xen/include/asm-arm/softirq.h
rename to xen/arch/arm/include/asm/softirq.h
diff --git a/xen/include/asm-arm/spinlock.h b/xen/arch/arm/include/asm/spinlock.h
similarity index 100%
rename from xen/include/asm-arm/spinlock.h
rename to xen/arch/arm/include/asm/spinlock.h
diff --git a/xen/include/asm-arm/string.h b/xen/arch/arm/include/asm/string.h
similarity index 100%
rename from xen/include/asm-arm/string.h
rename to xen/arch/arm/include/asm/string.h
diff --git a/xen/include/asm-arm/sysregs.h b/xen/arch/arm/include/asm/sysregs.h
similarity index 100%
rename from xen/include/asm-arm/sysregs.h
rename to xen/arch/arm/include/asm/sysregs.h
diff --git a/xen/include/asm-arm/system.h b/xen/arch/arm/include/asm/system.h
similarity index 100%
rename from xen/include/asm-arm/system.h
rename to xen/arch/arm/include/asm/system.h
diff --git a/xen/include/asm-arm/tee/optee_msg.h b/xen/arch/arm/include/asm/tee/optee_msg.h
similarity index 100%
rename from xen/include/asm-arm/tee/optee_msg.h
rename to xen/arch/arm/include/asm/tee/optee_msg.h
diff --git a/xen/include/asm-arm/tee/optee_rpc_cmd.h b/xen/arch/arm/include/asm/tee/optee_rpc_cmd.h
similarity index 100%
rename from xen/include/asm-arm/tee/optee_rpc_cmd.h
rename to xen/arch/arm/include/asm/tee/optee_rpc_cmd.h
diff --git a/xen/include/asm-arm/tee/optee_smc.h b/xen/arch/arm/include/asm/tee/optee_smc.h
similarity index 100%
rename from xen/include/asm-arm/tee/optee_smc.h
rename to xen/arch/arm/include/asm/tee/optee_smc.h
diff --git a/xen/include/asm-arm/tee/tee.h b/xen/arch/arm/include/asm/tee/tee.h
similarity index 100%
rename from xen/include/asm-arm/tee/tee.h
rename to xen/arch/arm/include/asm/tee/tee.h
diff --git a/xen/include/asm-arm/time.h b/xen/arch/arm/include/asm/time.h
similarity index 100%
rename from xen/include/asm-arm/time.h
rename to xen/arch/arm/include/asm/time.h
diff --git a/xen/include/asm-arm/trace.h b/xen/arch/arm/include/asm/trace.h
similarity index 100%
rename from xen/include/asm-arm/trace.h
rename to xen/arch/arm/include/asm/trace.h
diff --git a/xen/include/asm-arm/traps.h b/xen/arch/arm/include/asm/traps.h
similarity index 100%
rename from xen/include/asm-arm/traps.h
rename to xen/arch/arm/include/asm/traps.h
diff --git a/xen/include/asm-arm/types.h b/xen/arch/arm/include/asm/types.h
similarity index 100%
rename from xen/include/asm-arm/types.h
rename to xen/arch/arm/include/asm/types.h
diff --git a/xen/include/asm-arm/vfp.h b/xen/arch/arm/include/asm/vfp.h
similarity index 100%
rename from xen/include/asm-arm/vfp.h
rename to xen/arch/arm/include/asm/vfp.h
diff --git a/xen/include/asm-arm/vgic-emul.h b/xen/arch/arm/include/asm/vgic-emul.h
similarity index 100%
rename from xen/include/asm-arm/vgic-emul.h
rename to xen/arch/arm/include/asm/vgic-emul.h
diff --git a/xen/include/asm-arm/vgic.h b/xen/arch/arm/include/asm/vgic.h
similarity index 100%
rename from xen/include/asm-arm/vgic.h
rename to xen/arch/arm/include/asm/vgic.h
diff --git a/xen/include/asm-arm/vm_event.h b/xen/arch/arm/include/asm/vm_event.h
similarity index 100%
rename from xen/include/asm-arm/vm_event.h
rename to xen/arch/arm/include/asm/vm_event.h
diff --git a/xen/include/asm-arm/vpl011.h b/xen/arch/arm/include/asm/vpl011.h
similarity index 100%
rename from xen/include/asm-arm/vpl011.h
rename to xen/arch/arm/include/asm/vpl011.h
diff --git a/xen/include/asm-arm/vpsci.h b/xen/arch/arm/include/asm/vpsci.h
similarity index 100%
rename from xen/include/asm-arm/vpsci.h
rename to xen/arch/arm/include/asm/vpsci.h
diff --git a/xen/include/asm-arm/vreg.h b/xen/arch/arm/include/asm/vreg.h
similarity index 100%
rename from xen/include/asm-arm/vreg.h
rename to xen/arch/arm/include/asm/vreg.h
diff --git a/xen/include/asm-arm/vtimer.h b/xen/arch/arm/include/asm/vtimer.h
similarity index 100%
rename from xen/include/asm-arm/vtimer.h
rename to xen/arch/arm/include/asm/vtimer.h
diff --git a/xen/include/asm-arm/xenoprof.h b/xen/arch/arm/include/asm/xenoprof.h
similarity index 100%
rename from xen/include/asm-arm/xenoprof.h
rename to xen/arch/arm/include/asm/xenoprof.h
diff --git a/xen/arch/arm/smpboot.c b/xen/arch/arm/smpboot.c
index a1ee3146efeb..ed7b4bd26eea 100644
--- a/xen/arch/arm/smpboot.c
+++ b/xen/arch/arm/smpboot.c
@@ -46,7 +46,7 @@ struct cpuinfo_arm cpu_data[NR_CPUS];
 /* CPU logical map: map xen cpuid to an MPIDR */
 register_t __cpu_logical_map[NR_CPUS] = { [0 ... NR_CPUS-1] = MPIDR_INVALID };
 
-/* Fake one node for now. See also include/asm-arm/numa.h */
+/* Fake one node for now. See also asm/numa.h */
 nodemask_t __read_mostly node_online_map = { { [0] = 1UL } };
 
 /* Xen stack for bringing up the first CPU. */
diff --git a/xen/arch/arm/vpsci.c b/xen/arch/arm/vpsci.c
index c1e250be5967..744d43ec2798 100644
--- a/xen/arch/arm/vpsci.c
+++ b/xen/arch/arm/vpsci.c
@@ -278,7 +278,7 @@ bool do_vpsci_0_1_call(struct cpu_user_regs *regs, uint32_t fid)
 bool do_vpsci_0_2_call(struct cpu_user_regs *regs, uint32_t fid)
 {
     /*
-     * /!\ VPSCI_NR_FUNCS (in asm-arm/vpsci.h) should be updated when
+     * /!\ VPSCI_NR_FUNCS (in asm/vpsci.h) should be updated when
      * adding/removing a function. SCCC_SMCCC_*_REVISION should be
      * updated once per release.
      */
diff --git a/xen/arch/riscv/arch.mk b/xen/arch/riscv/arch.mk
index 53dadb897591..39ae6ffea94d 100644
--- a/xen/arch/riscv/arch.mk
+++ b/xen/arch/riscv/arch.mk
@@ -12,3 +12,4 @@ riscv-march-$(CONFIG_RISCV_ISA_C)       := $(riscv-march-y)c
 
 CFLAGS += -march=$(riscv-march-y) -mstrict-align -mcmodel=medany
 CFLAGS += -I$(BASEDIR)/include
+CFLAGS += -I$(BASEDIR)/arch/$(TARGET_ARCH)/include
diff --git a/xen/include/asm-riscv/config.h b/xen/arch/riscv/include/asm/config.h
similarity index 100%
rename from xen/include/asm-riscv/config.h
rename to xen/arch/riscv/include/asm/config.h
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 929227f5a3ac..5e1d38d6cd5b 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -274,11 +274,11 @@ efi/buildid.o efi/relocs-dummy.o: $(BASEDIR)/arch/x86/efi/built_in.o
 efi/buildid.o efi/relocs-dummy.o: ;
 
 .PHONY: include
-include: $(BASEDIR)/include/asm-x86/asm-macros.h
+include: $(BASEDIR)/arch/x86/include/asm/asm-macros.h
 
 asm-macros.i: CFLAGS-y += -D__ASSEMBLY__ -P
 
-$(BASEDIR)/include/asm-x86/asm-macros.h: asm-macros.i Makefile
+$(BASEDIR)/arch/x86/include/asm/asm-macros.h: asm-macros.i Makefile
 	echo '#if 0' >$@.new
 	echo '.if 0' >>$@.new
 	echo '#endif' >>$@.new
@@ -305,7 +305,7 @@ efi/mkreloc: efi/mkreloc.c
 .PHONY: clean
 clean::
 	rm -f *.lds *.new boot/*.o boot/*~ boot/core boot/mkelf32
-	rm -f asm-macros.i $(BASEDIR)/include/asm-x86/asm-macros.*
+	rm -f asm-macros.i $(BASEDIR)/arch/x86/include/asm/asm-macros.*
 	rm -f $(BASEDIR)/.xen-syms.[0-9]* boot/.*.d $(BASEDIR)/.xen.elf32
 	rm -f $(BASEDIR)/.xen.efi.[0-9]* efi/*.efi efi/mkreloc
 	rm -f boot/cmdline.S boot/reloc.S boot/*.lnk boot/*.bin
diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
index ce0c1a0e7fb2..eea320e618b9 100644
--- a/xen/arch/x86/arch.mk
+++ b/xen/arch/x86/arch.mk
@@ -4,8 +4,9 @@
 export XEN_IMG_OFFSET := 0x200000
 
 CFLAGS += -I$(BASEDIR)/include
-CFLAGS += -I$(BASEDIR)/include/asm-x86/mach-generic
-CFLAGS += -I$(BASEDIR)/include/asm-x86/mach-default
+CFLAGS += -I$(BASEDIR)/arch/$(TARGET_ARCH)/include
+CFLAGS += -I$(BASEDIR)/arch/x86/include/asm/mach-generic
+CFLAGS += -I$(BASEDIR)/arch/x86/include/asm/mach-default
 CFLAGS += -DXEN_IMG_OFFSET=$(XEN_IMG_OFFSET)
 
 # Prevent floating-point variables from creeping into Xen.
diff --git a/xen/include/asm-x86/acpi.h b/xen/arch/x86/include/asm/acpi.h
similarity index 100%
rename from xen/include/asm-x86/acpi.h
rename to xen/arch/x86/include/asm/acpi.h
diff --git a/xen/include/asm-x86/alternative-asm.h b/xen/arch/x86/include/asm/alternative-asm.h
similarity index 100%
rename from xen/include/asm-x86/alternative-asm.h
rename to xen/arch/x86/include/asm/alternative-asm.h
diff --git a/xen/include/asm-x86/alternative.h b/xen/arch/x86/include/asm/alternative.h
similarity index 100%
rename from xen/include/asm-x86/alternative.h
rename to xen/arch/x86/include/asm/alternative.h
diff --git a/xen/include/asm-x86/altp2m.h b/xen/arch/x86/include/asm/altp2m.h
similarity index 100%
rename from xen/include/asm-x86/altp2m.h
rename to xen/arch/x86/include/asm/altp2m.h
diff --git a/xen/include/asm-x86/amd.h b/xen/arch/x86/include/asm/amd.h
similarity index 100%
rename from xen/include/asm-x86/amd.h
rename to xen/arch/x86/include/asm/amd.h
diff --git a/xen/include/asm-x86/apic.h b/xen/arch/x86/include/asm/apic.h
similarity index 100%
rename from xen/include/asm-x86/apic.h
rename to xen/arch/x86/include/asm/apic.h
diff --git a/xen/include/asm-x86/apicdef.h b/xen/arch/x86/include/asm/apicdef.h
similarity index 100%
rename from xen/include/asm-x86/apicdef.h
rename to xen/arch/x86/include/asm/apicdef.h
diff --git a/xen/include/asm-x86/asm-defns.h b/xen/arch/x86/include/asm/asm-defns.h
similarity index 100%
rename from xen/include/asm-x86/asm-defns.h
rename to xen/arch/x86/include/asm/asm-defns.h
diff --git a/xen/include/asm-x86/asm_defns.h b/xen/arch/x86/include/asm/asm_defns.h
similarity index 100%
rename from xen/include/asm-x86/asm_defns.h
rename to xen/arch/x86/include/asm/asm_defns.h
diff --git a/xen/include/asm-x86/atomic.h b/xen/arch/x86/include/asm/atomic.h
similarity index 100%
rename from xen/include/asm-x86/atomic.h
rename to xen/arch/x86/include/asm/atomic.h
diff --git a/xen/include/asm-x86/bitops.h b/xen/arch/x86/include/asm/bitops.h
similarity index 100%
rename from xen/include/asm-x86/bitops.h
rename to xen/arch/x86/include/asm/bitops.h
diff --git a/xen/include/asm-x86/bug.h b/xen/arch/x86/include/asm/bug.h
similarity index 100%
rename from xen/include/asm-x86/bug.h
rename to xen/arch/x86/include/asm/bug.h
diff --git a/xen/include/asm-x86/byteorder.h b/xen/arch/x86/include/asm/byteorder.h
similarity index 100%
rename from xen/include/asm-x86/byteorder.h
rename to xen/arch/x86/include/asm/byteorder.h
diff --git a/xen/include/asm-x86/bzimage.h b/xen/arch/x86/include/asm/bzimage.h
similarity index 100%
rename from xen/include/asm-x86/bzimage.h
rename to xen/arch/x86/include/asm/bzimage.h
diff --git a/xen/include/asm-x86/cache.h b/xen/arch/x86/include/asm/cache.h
similarity index 100%
rename from xen/include/asm-x86/cache.h
rename to xen/arch/x86/include/asm/cache.h
diff --git a/xen/include/asm-x86/compat.h b/xen/arch/x86/include/asm/compat.h
similarity index 100%
rename from xen/include/asm-x86/compat.h
rename to xen/arch/x86/include/asm/compat.h
diff --git a/xen/include/asm-x86/config.h b/xen/arch/x86/include/asm/config.h
similarity index 100%
rename from xen/include/asm-x86/config.h
rename to xen/arch/x86/include/asm/config.h
diff --git a/xen/include/asm-x86/cpufeature.h b/xen/arch/x86/include/asm/cpufeature.h
similarity index 100%
rename from xen/include/asm-x86/cpufeature.h
rename to xen/arch/x86/include/asm/cpufeature.h
diff --git a/xen/include/asm-x86/cpufeatures.h b/xen/arch/x86/include/asm/cpufeatures.h
similarity index 100%
rename from xen/include/asm-x86/cpufeatures.h
rename to xen/arch/x86/include/asm/cpufeatures.h
diff --git a/xen/include/asm-x86/cpufeatureset.h b/xen/arch/x86/include/asm/cpufeatureset.h
similarity index 100%
rename from xen/include/asm-x86/cpufeatureset.h
rename to xen/arch/x86/include/asm/cpufeatureset.h
diff --git a/xen/include/asm-x86/cpuid.h b/xen/arch/x86/include/asm/cpuid.h
similarity index 100%
rename from xen/include/asm-x86/cpuid.h
rename to xen/arch/x86/include/asm/cpuid.h
diff --git a/xen/include/asm-x86/cpuidle.h b/xen/arch/x86/include/asm/cpuidle.h
similarity index 100%
rename from xen/include/asm-x86/cpuidle.h
rename to xen/arch/x86/include/asm/cpuidle.h
diff --git a/xen/include/asm-x86/current.h b/xen/arch/x86/include/asm/current.h
similarity index 99%
rename from xen/include/asm-x86/current.h
rename to xen/arch/x86/include/asm/current.h
index a74ad4bc4c44..cfbedc31983f 100644
--- a/xen/include/asm-x86/current.h
+++ b/xen/arch/x86/include/asm/current.h
@@ -53,7 +53,7 @@ struct cpu_info {
     unsigned long xen_cr3;
     unsigned long pv_cr3;
 
-    /* See asm-x86/spec_ctrl_asm.h for usage. */
+    /* See asm/spec_ctrl_asm.h for usage. */
     unsigned int shadow_spec_ctrl;
     uint8_t      xen_spec_ctrl;
     uint8_t      spec_ctrl_flags;
diff --git a/xen/include/asm-x86/debugger.h b/xen/arch/x86/include/asm/debugger.h
similarity index 100%
rename from xen/include/asm-x86/debugger.h
rename to xen/arch/x86/include/asm/debugger.h
diff --git a/xen/include/asm-x86/debugreg.h b/xen/arch/x86/include/asm/debugreg.h
similarity index 100%
rename from xen/include/asm-x86/debugreg.h
rename to xen/arch/x86/include/asm/debugreg.h
diff --git a/xen/include/asm-x86/delay.h b/xen/arch/x86/include/asm/delay.h
similarity index 100%
rename from xen/include/asm-x86/delay.h
rename to xen/arch/x86/include/asm/delay.h
diff --git a/xen/include/asm-x86/desc.h b/xen/arch/x86/include/asm/desc.h
similarity index 100%
rename from xen/include/asm-x86/desc.h
rename to xen/arch/x86/include/asm/desc.h
diff --git a/xen/include/asm-x86/device.h b/xen/arch/x86/include/asm/device.h
similarity index 100%
rename from xen/include/asm-x86/device.h
rename to xen/arch/x86/include/asm/device.h
diff --git a/xen/include/asm-x86/div64.h b/xen/arch/x86/include/asm/div64.h
similarity index 100%
rename from xen/include/asm-x86/div64.h
rename to xen/arch/x86/include/asm/div64.h
diff --git a/xen/include/asm-x86/dom0_build.h b/xen/arch/x86/include/asm/dom0_build.h
similarity index 100%
rename from xen/include/asm-x86/dom0_build.h
rename to xen/arch/x86/include/asm/dom0_build.h
diff --git a/xen/include/asm-x86/domain.h b/xen/arch/x86/include/asm/domain.h
similarity index 99%
rename from xen/include/asm-x86/domain.h
rename to xen/arch/x86/include/asm/domain.h
index 92d54de0b9a1..e62e10959801 100644
--- a/xen/include/asm-x86/domain.h
+++ b/xen/arch/x86/include/asm/domain.h
@@ -384,7 +384,7 @@ struct arch_domain
     struct PITState vpit;
 
     /* TSC management (emulation, pv, scaling, stats) */
-    int tsc_mode;            /* see include/asm-x86/time.h */
+    int tsc_mode;            /* see asm/time.h */
     bool_t vtsc;             /* tsc is emulated (may change after migrate) */
     s_time_t vtsc_last;      /* previous TSC value (guarantee monotonicity) */
     uint64_t vtsc_offset;    /* adjustment for save/restore/migrate */
diff --git a/xen/include/asm-x86/e820.h b/xen/arch/x86/include/asm/e820.h
similarity index 100%
rename from xen/include/asm-x86/e820.h
rename to xen/arch/x86/include/asm/e820.h
diff --git a/xen/include/asm-x86/edd.h b/xen/arch/x86/include/asm/edd.h
similarity index 100%
rename from xen/include/asm-x86/edd.h
rename to xen/arch/x86/include/asm/edd.h
diff --git a/xen/include/asm-x86/efibind.h b/xen/arch/x86/include/asm/efibind.h
similarity index 100%
rename from xen/include/asm-x86/efibind.h
rename to xen/arch/x86/include/asm/efibind.h
diff --git a/xen/include/asm-x86/elf.h b/xen/arch/x86/include/asm/elf.h
similarity index 100%
rename from xen/include/asm-x86/elf.h
rename to xen/arch/x86/include/asm/elf.h
diff --git a/xen/include/asm-x86/event.h b/xen/arch/x86/include/asm/event.h
similarity index 100%
rename from xen/include/asm-x86/event.h
rename to xen/arch/x86/include/asm/event.h
diff --git a/xen/include/asm-x86/fixmap.h b/xen/arch/x86/include/asm/fixmap.h
similarity index 100%
rename from xen/include/asm-x86/fixmap.h
rename to xen/arch/x86/include/asm/fixmap.h
diff --git a/xen/include/asm-x86/flushtlb.h b/xen/arch/x86/include/asm/flushtlb.h
similarity index 100%
rename from xen/include/asm-x86/flushtlb.h
rename to xen/arch/x86/include/asm/flushtlb.h
diff --git a/xen/include/asm-x86/genapic.h b/xen/arch/x86/include/asm/genapic.h
similarity index 100%
rename from xen/include/asm-x86/genapic.h
rename to xen/arch/x86/include/asm/genapic.h
diff --git a/xen/include/asm-x86/grant_table.h b/xen/arch/x86/include/asm/grant_table.h
similarity index 100%
rename from xen/include/asm-x86/grant_table.h
rename to xen/arch/x86/include/asm/grant_table.h
diff --git a/xen/include/asm-x86/guest.h b/xen/arch/x86/include/asm/guest.h
similarity index 100%
rename from xen/include/asm-x86/guest.h
rename to xen/arch/x86/include/asm/guest.h
diff --git a/xen/include/asm-x86/guest/hyperv-hcall.h b/xen/arch/x86/include/asm/guest/hyperv-hcall.h
similarity index 100%
rename from xen/include/asm-x86/guest/hyperv-hcall.h
rename to xen/arch/x86/include/asm/guest/hyperv-hcall.h
diff --git a/xen/include/asm-x86/guest/hyperv-tlfs.h b/xen/arch/x86/include/asm/guest/hyperv-tlfs.h
similarity index 100%
rename from xen/include/asm-x86/guest/hyperv-tlfs.h
rename to xen/arch/x86/include/asm/guest/hyperv-tlfs.h
diff --git a/xen/include/asm-x86/guest/hyperv.h b/xen/arch/x86/include/asm/guest/hyperv.h
similarity index 100%
rename from xen/include/asm-x86/guest/hyperv.h
rename to xen/arch/x86/include/asm/guest/hyperv.h
diff --git a/xen/include/asm-x86/guest/hypervisor.h b/xen/arch/x86/include/asm/guest/hypervisor.h
similarity index 100%
rename from xen/include/asm-x86/guest/hypervisor.h
rename to xen/arch/x86/include/asm/guest/hypervisor.h
diff --git a/xen/include/asm-x86/guest/pvh-boot.h b/xen/arch/x86/include/asm/guest/pvh-boot.h
similarity index 100%
rename from xen/include/asm-x86/guest/pvh-boot.h
rename to xen/arch/x86/include/asm/guest/pvh-boot.h
diff --git a/xen/include/asm-x86/guest/xen-hcall.h b/xen/arch/x86/include/asm/guest/xen-hcall.h
similarity index 100%
rename from xen/include/asm-x86/guest/xen-hcall.h
rename to xen/arch/x86/include/asm/guest/xen-hcall.h
diff --git a/xen/include/asm-x86/guest/xen.h b/xen/arch/x86/include/asm/guest/xen.h
similarity index 100%
rename from xen/include/asm-x86/guest/xen.h
rename to xen/arch/x86/include/asm/guest/xen.h
diff --git a/xen/include/asm-x86/guest_access.h b/xen/arch/x86/include/asm/guest_access.h
similarity index 100%
rename from xen/include/asm-x86/guest_access.h
rename to xen/arch/x86/include/asm/guest_access.h
diff --git a/xen/include/asm-x86/guest_atomics.h b/xen/arch/x86/include/asm/guest_atomics.h
similarity index 100%
rename from xen/include/asm-x86/guest_atomics.h
rename to xen/arch/x86/include/asm/guest_atomics.h
diff --git a/xen/include/asm-x86/guest_pt.h b/xen/arch/x86/include/asm/guest_pt.h
similarity index 100%
rename from xen/include/asm-x86/guest_pt.h
rename to xen/arch/x86/include/asm/guest_pt.h
diff --git a/xen/include/asm-x86/hap.h b/xen/arch/x86/include/asm/hap.h
similarity index 100%
rename from xen/include/asm-x86/hap.h
rename to xen/arch/x86/include/asm/hap.h
diff --git a/xen/include/asm-x86/hardirq.h b/xen/arch/x86/include/asm/hardirq.h
similarity index 100%
rename from xen/include/asm-x86/hardirq.h
rename to xen/arch/x86/include/asm/hardirq.h
diff --git a/xen/include/asm-x86/hpet.h b/xen/arch/x86/include/asm/hpet.h
similarity index 100%
rename from xen/include/asm-x86/hpet.h
rename to xen/arch/x86/include/asm/hpet.h
diff --git a/xen/include/asm-x86/hvm/asid.h b/xen/arch/x86/include/asm/hvm/asid.h
similarity index 100%
rename from xen/include/asm-x86/hvm/asid.h
rename to xen/arch/x86/include/asm/hvm/asid.h
diff --git a/xen/include/asm-x86/hvm/cacheattr.h b/xen/arch/x86/include/asm/hvm/cacheattr.h
similarity index 100%
rename from xen/include/asm-x86/hvm/cacheattr.h
rename to xen/arch/x86/include/asm/hvm/cacheattr.h
diff --git a/xen/include/asm-x86/hvm/domain.h b/xen/arch/x86/include/asm/hvm/domain.h
similarity index 100%
rename from xen/include/asm-x86/hvm/domain.h
rename to xen/arch/x86/include/asm/hvm/domain.h
diff --git a/xen/include/asm-x86/hvm/emulate.h b/xen/arch/x86/include/asm/hvm/emulate.h
similarity index 100%
rename from xen/include/asm-x86/hvm/emulate.h
rename to xen/arch/x86/include/asm/hvm/emulate.h
diff --git a/xen/include/asm-x86/hvm/grant_table.h b/xen/arch/x86/include/asm/hvm/grant_table.h
similarity index 100%
rename from xen/include/asm-x86/hvm/grant_table.h
rename to xen/arch/x86/include/asm/hvm/grant_table.h
diff --git a/xen/include/asm-x86/hvm/guest_access.h b/xen/arch/x86/include/asm/hvm/guest_access.h
similarity index 100%
rename from xen/include/asm-x86/hvm/guest_access.h
rename to xen/arch/x86/include/asm/hvm/guest_access.h
diff --git a/xen/include/asm-x86/hvm/hvm.h b/xen/arch/x86/include/asm/hvm/hvm.h
similarity index 100%
rename from xen/include/asm-x86/hvm/hvm.h
rename to xen/arch/x86/include/asm/hvm/hvm.h
diff --git a/xen/include/asm-x86/hvm/io.h b/xen/arch/x86/include/asm/hvm/io.h
similarity index 100%
rename from xen/include/asm-x86/hvm/io.h
rename to xen/arch/x86/include/asm/hvm/io.h
diff --git a/xen/include/asm-x86/hvm/ioreq.h b/xen/arch/x86/include/asm/hvm/ioreq.h
similarity index 100%
rename from xen/include/asm-x86/hvm/ioreq.h
rename to xen/arch/x86/include/asm/hvm/ioreq.h
diff --git a/xen/include/asm-x86/hvm/irq.h b/xen/arch/x86/include/asm/hvm/irq.h
similarity index 100%
rename from xen/include/asm-x86/hvm/irq.h
rename to xen/arch/x86/include/asm/hvm/irq.h
diff --git a/xen/include/asm-x86/hvm/monitor.h b/xen/arch/x86/include/asm/hvm/monitor.h
similarity index 100%
rename from xen/include/asm-x86/hvm/monitor.h
rename to xen/arch/x86/include/asm/hvm/monitor.h
diff --git a/xen/include/asm-x86/hvm/nestedhvm.h b/xen/arch/x86/include/asm/hvm/nestedhvm.h
similarity index 100%
rename from xen/include/asm-x86/hvm/nestedhvm.h
rename to xen/arch/x86/include/asm/hvm/nestedhvm.h
diff --git a/xen/include/asm-x86/hvm/save.h b/xen/arch/x86/include/asm/hvm/save.h
similarity index 100%
rename from xen/include/asm-x86/hvm/save.h
rename to xen/arch/x86/include/asm/hvm/save.h
diff --git a/xen/include/asm-x86/hvm/support.h b/xen/arch/x86/include/asm/hvm/support.h
similarity index 100%
rename from xen/include/asm-x86/hvm/support.h
rename to xen/arch/x86/include/asm/hvm/support.h
diff --git a/xen/include/asm-x86/hvm/svm/asid.h b/xen/arch/x86/include/asm/hvm/svm/asid.h
similarity index 100%
rename from xen/include/asm-x86/hvm/svm/asid.h
rename to xen/arch/x86/include/asm/hvm/svm/asid.h
diff --git a/xen/include/asm-x86/hvm/svm/emulate.h b/xen/arch/x86/include/asm/hvm/svm/emulate.h
similarity index 100%
rename from xen/include/asm-x86/hvm/svm/emulate.h
rename to xen/arch/x86/include/asm/hvm/svm/emulate.h
diff --git a/xen/include/asm-x86/hvm/svm/intr.h b/xen/arch/x86/include/asm/hvm/svm/intr.h
similarity index 100%
rename from xen/include/asm-x86/hvm/svm/intr.h
rename to xen/arch/x86/include/asm/hvm/svm/intr.h
diff --git a/xen/include/asm-x86/hvm/svm/nestedsvm.h b/xen/arch/x86/include/asm/hvm/svm/nestedsvm.h
similarity index 100%
rename from xen/include/asm-x86/hvm/svm/nestedsvm.h
rename to xen/arch/x86/include/asm/hvm/svm/nestedsvm.h
diff --git a/xen/include/asm-x86/hvm/svm/svm.h b/xen/arch/x86/include/asm/hvm/svm/svm.h
similarity index 100%
rename from xen/include/asm-x86/hvm/svm/svm.h
rename to xen/arch/x86/include/asm/hvm/svm/svm.h
diff --git a/xen/include/asm-x86/hvm/svm/svmdebug.h b/xen/arch/x86/include/asm/hvm/svm/svmdebug.h
similarity index 100%
rename from xen/include/asm-x86/hvm/svm/svmdebug.h
rename to xen/arch/x86/include/asm/hvm/svm/svmdebug.h
diff --git a/xen/include/asm-x86/hvm/svm/vmcb.h b/xen/arch/x86/include/asm/hvm/svm/vmcb.h
similarity index 100%
rename from xen/include/asm-x86/hvm/svm/vmcb.h
rename to xen/arch/x86/include/asm/hvm/svm/vmcb.h
diff --git a/xen/include/asm-x86/hvm/trace.h b/xen/arch/x86/include/asm/hvm/trace.h
similarity index 100%
rename from xen/include/asm-x86/hvm/trace.h
rename to xen/arch/x86/include/asm/hvm/trace.h
diff --git a/xen/include/asm-x86/hvm/vcpu.h b/xen/arch/x86/include/asm/hvm/vcpu.h
similarity index 100%
rename from xen/include/asm-x86/hvm/vcpu.h
rename to xen/arch/x86/include/asm/hvm/vcpu.h
diff --git a/xen/include/asm-x86/hvm/vioapic.h b/xen/arch/x86/include/asm/hvm/vioapic.h
similarity index 100%
rename from xen/include/asm-x86/hvm/vioapic.h
rename to xen/arch/x86/include/asm/hvm/vioapic.h
diff --git a/xen/include/asm-x86/hvm/viridian.h b/xen/arch/x86/include/asm/hvm/viridian.h
similarity index 100%
rename from xen/include/asm-x86/hvm/viridian.h
rename to xen/arch/x86/include/asm/hvm/viridian.h
diff --git a/xen/include/asm-x86/hvm/vlapic.h b/xen/arch/x86/include/asm/hvm/vlapic.h
similarity index 100%
rename from xen/include/asm-x86/hvm/vlapic.h
rename to xen/arch/x86/include/asm/hvm/vlapic.h
diff --git a/xen/include/asm-x86/hvm/vm_event.h b/xen/arch/x86/include/asm/hvm/vm_event.h
similarity index 100%
rename from xen/include/asm-x86/hvm/vm_event.h
rename to xen/arch/x86/include/asm/hvm/vm_event.h
diff --git a/xen/include/asm-x86/hvm/vmx/vmcs.h b/xen/arch/x86/include/asm/hvm/vmx/vmcs.h
similarity index 100%
rename from xen/include/asm-x86/hvm/vmx/vmcs.h
rename to xen/arch/x86/include/asm/hvm/vmx/vmcs.h
diff --git a/xen/include/asm-x86/hvm/vmx/vmx.h b/xen/arch/x86/include/asm/hvm/vmx/vmx.h
similarity index 100%
rename from xen/include/asm-x86/hvm/vmx/vmx.h
rename to xen/arch/x86/include/asm/hvm/vmx/vmx.h
diff --git a/xen/include/asm-x86/hvm/vmx/vvmx.h b/xen/arch/x86/include/asm/hvm/vmx/vvmx.h
similarity index 100%
rename from xen/include/asm-x86/hvm/vmx/vvmx.h
rename to xen/arch/x86/include/asm/hvm/vmx/vvmx.h
diff --git a/xen/include/asm-x86/hvm/vpic.h b/xen/arch/x86/include/asm/hvm/vpic.h
similarity index 100%
rename from xen/include/asm-x86/hvm/vpic.h
rename to xen/arch/x86/include/asm/hvm/vpic.h
diff --git a/xen/include/asm-x86/hvm/vpt.h b/xen/arch/x86/include/asm/hvm/vpt.h
similarity index 100%
rename from xen/include/asm-x86/hvm/vpt.h
rename to xen/arch/x86/include/asm/hvm/vpt.h
diff --git a/xen/include/asm-x86/hypercall.h b/xen/arch/x86/include/asm/hypercall.h
similarity index 100%
rename from xen/include/asm-x86/hypercall.h
rename to xen/arch/x86/include/asm/hypercall.h
diff --git a/xen/include/asm-x86/i387.h b/xen/arch/x86/include/asm/i387.h
similarity index 100%
rename from xen/include/asm-x86/i387.h
rename to xen/arch/x86/include/asm/i387.h
diff --git a/xen/include/asm-x86/init.h b/xen/arch/x86/include/asm/init.h
similarity index 100%
rename from xen/include/asm-x86/init.h
rename to xen/arch/x86/include/asm/init.h
diff --git a/xen/include/asm-x86/invpcid.h b/xen/arch/x86/include/asm/invpcid.h
similarity index 100%
rename from xen/include/asm-x86/invpcid.h
rename to xen/arch/x86/include/asm/invpcid.h
diff --git a/xen/include/asm-x86/io.h b/xen/arch/x86/include/asm/io.h
similarity index 100%
rename from xen/include/asm-x86/io.h
rename to xen/arch/x86/include/asm/io.h
diff --git a/xen/include/asm-x86/io_apic.h b/xen/arch/x86/include/asm/io_apic.h
similarity index 100%
rename from xen/include/asm-x86/io_apic.h
rename to xen/arch/x86/include/asm/io_apic.h
diff --git a/xen/include/asm-x86/iocap.h b/xen/arch/x86/include/asm/iocap.h
similarity index 100%
rename from xen/include/asm-x86/iocap.h
rename to xen/arch/x86/include/asm/iocap.h
diff --git a/xen/include/asm-x86/iommu.h b/xen/arch/x86/include/asm/iommu.h
similarity index 100%
rename from xen/include/asm-x86/iommu.h
rename to xen/arch/x86/include/asm/iommu.h
diff --git a/xen/include/asm-x86/ioreq.h b/xen/arch/x86/include/asm/ioreq.h
similarity index 100%
rename from xen/include/asm-x86/ioreq.h
rename to xen/arch/x86/include/asm/ioreq.h
diff --git a/xen/include/asm-x86/irq.h b/xen/arch/x86/include/asm/irq.h
similarity index 100%
rename from xen/include/asm-x86/irq.h
rename to xen/arch/x86/include/asm/irq.h
diff --git a/xen/include/asm-x86/ldt.h b/xen/arch/x86/include/asm/ldt.h
similarity index 100%
rename from xen/include/asm-x86/ldt.h
rename to xen/arch/x86/include/asm/ldt.h
diff --git a/xen/include/asm-x86/livepatch.h b/xen/arch/x86/include/asm/livepatch.h
similarity index 100%
rename from xen/include/asm-x86/livepatch.h
rename to xen/arch/x86/include/asm/livepatch.h
diff --git a/xen/include/asm-x86/mach-default/bios_ebda.h b/xen/arch/x86/include/asm/mach-default/bios_ebda.h
similarity index 100%
rename from xen/include/asm-x86/mach-default/bios_ebda.h
rename to xen/arch/x86/include/asm/mach-default/bios_ebda.h
diff --git a/xen/include/asm-x86/mach-default/io_ports.h b/xen/arch/x86/include/asm/mach-default/io_ports.h
similarity index 100%
rename from xen/include/asm-x86/mach-default/io_ports.h
rename to xen/arch/x86/include/asm/mach-default/io_ports.h
diff --git a/xen/include/asm-x86/mach-default/irq_vectors.h b/xen/arch/x86/include/asm/mach-default/irq_vectors.h
similarity index 100%
rename from xen/include/asm-x86/mach-default/irq_vectors.h
rename to xen/arch/x86/include/asm/mach-default/irq_vectors.h
diff --git a/xen/include/asm-x86/mach-default/mach_mpparse.h b/xen/arch/x86/include/asm/mach-default/mach_mpparse.h
similarity index 100%
rename from xen/include/asm-x86/mach-default/mach_mpparse.h
rename to xen/arch/x86/include/asm/mach-default/mach_mpparse.h
diff --git a/xen/include/asm-x86/mach-default/mach_mpspec.h b/xen/arch/x86/include/asm/mach-default/mach_mpspec.h
similarity index 100%
rename from xen/include/asm-x86/mach-default/mach_mpspec.h
rename to xen/arch/x86/include/asm/mach-default/mach_mpspec.h
diff --git a/xen/include/asm-x86/mach-generic/mach_apic.h b/xen/arch/x86/include/asm/mach-generic/mach_apic.h
similarity index 100%
rename from xen/include/asm-x86/mach-generic/mach_apic.h
rename to xen/arch/x86/include/asm/mach-generic/mach_apic.h
diff --git a/xen/include/asm-x86/mach-generic/mach_mpparse.h b/xen/arch/x86/include/asm/mach-generic/mach_mpparse.h
similarity index 100%
rename from xen/include/asm-x86/mach-generic/mach_mpparse.h
rename to xen/arch/x86/include/asm/mach-generic/mach_mpparse.h
diff --git a/xen/include/asm-x86/machine_kexec.h b/xen/arch/x86/include/asm/machine_kexec.h
similarity index 100%
rename from xen/include/asm-x86/machine_kexec.h
rename to xen/arch/x86/include/asm/machine_kexec.h
diff --git a/xen/include/asm-x86/mc146818rtc.h b/xen/arch/x86/include/asm/mc146818rtc.h
similarity index 100%
rename from xen/include/asm-x86/mc146818rtc.h
rename to xen/arch/x86/include/asm/mc146818rtc.h
diff --git a/xen/include/asm-x86/mce.h b/xen/arch/x86/include/asm/mce.h
similarity index 100%
rename from xen/include/asm-x86/mce.h
rename to xen/arch/x86/include/asm/mce.h
diff --git a/xen/include/asm-x86/mem_access.h b/xen/arch/x86/include/asm/mem_access.h
similarity index 100%
rename from xen/include/asm-x86/mem_access.h
rename to xen/arch/x86/include/asm/mem_access.h
diff --git a/xen/include/asm-x86/mem_paging.h b/xen/arch/x86/include/asm/mem_paging.h
similarity index 100%
rename from xen/include/asm-x86/mem_paging.h
rename to xen/arch/x86/include/asm/mem_paging.h
diff --git a/xen/include/asm-x86/mem_sharing.h b/xen/arch/x86/include/asm/mem_sharing.h
similarity index 100%
rename from xen/include/asm-x86/mem_sharing.h
rename to xen/arch/x86/include/asm/mem_sharing.h
diff --git a/xen/include/asm-x86/microcode.h b/xen/arch/x86/include/asm/microcode.h
similarity index 100%
rename from xen/include/asm-x86/microcode.h
rename to xen/arch/x86/include/asm/microcode.h
diff --git a/xen/include/asm-x86/mm.h b/xen/arch/x86/include/asm/mm.h
similarity index 100%
rename from xen/include/asm-x86/mm.h
rename to xen/arch/x86/include/asm/mm.h
diff --git a/xen/include/asm-x86/monitor.h b/xen/arch/x86/include/asm/monitor.h
similarity index 100%
rename from xen/include/asm-x86/monitor.h
rename to xen/arch/x86/include/asm/monitor.h
diff --git a/xen/include/asm-x86/mpspec.h b/xen/arch/x86/include/asm/mpspec.h
similarity index 100%
rename from xen/include/asm-x86/mpspec.h
rename to xen/arch/x86/include/asm/mpspec.h
diff --git a/xen/include/asm-x86/mpspec_def.h b/xen/arch/x86/include/asm/mpspec_def.h
similarity index 100%
rename from xen/include/asm-x86/mpspec_def.h
rename to xen/arch/x86/include/asm/mpspec_def.h
diff --git a/xen/include/asm-x86/msi.h b/xen/arch/x86/include/asm/msi.h
similarity index 100%
rename from xen/include/asm-x86/msi.h
rename to xen/arch/x86/include/asm/msi.h
diff --git a/xen/include/asm-x86/msr-index.h b/xen/arch/x86/include/asm/msr-index.h
similarity index 100%
rename from xen/include/asm-x86/msr-index.h
rename to xen/arch/x86/include/asm/msr-index.h
diff --git a/xen/include/asm-x86/msr.h b/xen/arch/x86/include/asm/msr.h
similarity index 100%
rename from xen/include/asm-x86/msr.h
rename to xen/arch/x86/include/asm/msr.h
diff --git a/xen/include/asm-x86/mtrr.h b/xen/arch/x86/include/asm/mtrr.h
similarity index 100%
rename from xen/include/asm-x86/mtrr.h
rename to xen/arch/x86/include/asm/mtrr.h
diff --git a/xen/include/asm-x86/multicall.h b/xen/arch/x86/include/asm/multicall.h
similarity index 100%
rename from xen/include/asm-x86/multicall.h
rename to xen/arch/x86/include/asm/multicall.h
diff --git a/xen/include/asm-x86/mwait.h b/xen/arch/x86/include/asm/mwait.h
similarity index 100%
rename from xen/include/asm-x86/mwait.h
rename to xen/arch/x86/include/asm/mwait.h
diff --git a/xen/include/asm-x86/nmi.h b/xen/arch/x86/include/asm/nmi.h
similarity index 100%
rename from xen/include/asm-x86/nmi.h
rename to xen/arch/x86/include/asm/nmi.h
diff --git a/xen/include/asm-x86/nops.h b/xen/arch/x86/include/asm/nops.h
similarity index 100%
rename from xen/include/asm-x86/nops.h
rename to xen/arch/x86/include/asm/nops.h
diff --git a/xen/include/asm-x86/nospec.h b/xen/arch/x86/include/asm/nospec.h
similarity index 100%
rename from xen/include/asm-x86/nospec.h
rename to xen/arch/x86/include/asm/nospec.h
diff --git a/xen/include/asm-x86/numa.h b/xen/arch/x86/include/asm/numa.h
similarity index 100%
rename from xen/include/asm-x86/numa.h
rename to xen/arch/x86/include/asm/numa.h
diff --git a/xen/include/asm-x86/p2m.h b/xen/arch/x86/include/asm/p2m.h
similarity index 100%
rename from xen/include/asm-x86/p2m.h
rename to xen/arch/x86/include/asm/p2m.h
diff --git a/xen/include/asm-x86/page-bits.h b/xen/arch/x86/include/asm/page-bits.h
similarity index 100%
rename from xen/include/asm-x86/page-bits.h
rename to xen/arch/x86/include/asm/page-bits.h
diff --git a/xen/include/asm-x86/page.h b/xen/arch/x86/include/asm/page.h
similarity index 100%
rename from xen/include/asm-x86/page.h
rename to xen/arch/x86/include/asm/page.h
diff --git a/xen/include/asm-x86/paging.h b/xen/arch/x86/include/asm/paging.h
similarity index 100%
rename from xen/include/asm-x86/paging.h
rename to xen/arch/x86/include/asm/paging.h
diff --git a/xen/include/asm-x86/pci.h b/xen/arch/x86/include/asm/pci.h
similarity index 100%
rename from xen/include/asm-x86/pci.h
rename to xen/arch/x86/include/asm/pci.h
diff --git a/xen/include/asm-x86/percpu.h b/xen/arch/x86/include/asm/percpu.h
similarity index 100%
rename from xen/include/asm-x86/percpu.h
rename to xen/arch/x86/include/asm/percpu.h
diff --git a/xen/include/asm-x86/perfc.h b/xen/arch/x86/include/asm/perfc.h
similarity index 100%
rename from xen/include/asm-x86/perfc.h
rename to xen/arch/x86/include/asm/perfc.h
diff --git a/xen/include/asm-x86/perfc_defn.h b/xen/arch/x86/include/asm/perfc_defn.h
similarity index 100%
rename from xen/include/asm-x86/perfc_defn.h
rename to xen/arch/x86/include/asm/perfc_defn.h
diff --git a/xen/include/asm-x86/processor.h b/xen/arch/x86/include/asm/processor.h
similarity index 100%
rename from xen/include/asm-x86/processor.h
rename to xen/arch/x86/include/asm/processor.h
diff --git a/xen/include/asm-x86/psr.h b/xen/arch/x86/include/asm/psr.h
similarity index 100%
rename from xen/include/asm-x86/psr.h
rename to xen/arch/x86/include/asm/psr.h
diff --git a/xen/include/asm-x86/pv/domain.h b/xen/arch/x86/include/asm/pv/domain.h
similarity index 100%
rename from xen/include/asm-x86/pv/domain.h
rename to xen/arch/x86/include/asm/pv/domain.h
diff --git a/xen/include/asm-x86/pv/grant_table.h b/xen/arch/x86/include/asm/pv/grant_table.h
similarity index 100%
rename from xen/include/asm-x86/pv/grant_table.h
rename to xen/arch/x86/include/asm/pv/grant_table.h
diff --git a/xen/include/asm-x86/pv/mm.h b/xen/arch/x86/include/asm/pv/mm.h
similarity index 100%
rename from xen/include/asm-x86/pv/mm.h
rename to xen/arch/x86/include/asm/pv/mm.h
diff --git a/xen/include/asm-x86/pv/shim.h b/xen/arch/x86/include/asm/pv/shim.h
similarity index 100%
rename from xen/include/asm-x86/pv/shim.h
rename to xen/arch/x86/include/asm/pv/shim.h
diff --git a/xen/include/asm-x86/pv/traps.h b/xen/arch/x86/include/asm/pv/traps.h
similarity index 100%
rename from xen/include/asm-x86/pv/traps.h
rename to xen/arch/x86/include/asm/pv/traps.h
diff --git a/xen/include/asm-x86/random.h b/xen/arch/x86/include/asm/random.h
similarity index 100%
rename from xen/include/asm-x86/random.h
rename to xen/arch/x86/include/asm/random.h
diff --git a/xen/include/asm-x86/regs.h b/xen/arch/x86/include/asm/regs.h
similarity index 100%
rename from xen/include/asm-x86/regs.h
rename to xen/arch/x86/include/asm/regs.h
diff --git a/xen/include/asm-x86/setup.h b/xen/arch/x86/include/asm/setup.h
similarity index 100%
rename from xen/include/asm-x86/setup.h
rename to xen/arch/x86/include/asm/setup.h
diff --git a/xen/include/asm-x86/shadow.h b/xen/arch/x86/include/asm/shadow.h
similarity index 100%
rename from xen/include/asm-x86/shadow.h
rename to xen/arch/x86/include/asm/shadow.h
diff --git a/xen/include/asm-x86/shared.h b/xen/arch/x86/include/asm/shared.h
similarity index 100%
rename from xen/include/asm-x86/shared.h
rename to xen/arch/x86/include/asm/shared.h
diff --git a/xen/include/asm-x86/smp.h b/xen/arch/x86/include/asm/smp.h
similarity index 100%
rename from xen/include/asm-x86/smp.h
rename to xen/arch/x86/include/asm/smp.h
diff --git a/xen/include/asm-x86/softirq.h b/xen/arch/x86/include/asm/softirq.h
similarity index 100%
rename from xen/include/asm-x86/softirq.h
rename to xen/arch/x86/include/asm/softirq.h
diff --git a/xen/include/asm-x86/spec_ctrl.h b/xen/arch/x86/include/asm/spec_ctrl.h
similarity index 100%
rename from xen/include/asm-x86/spec_ctrl.h
rename to xen/arch/x86/include/asm/spec_ctrl.h
diff --git a/xen/include/asm-x86/spec_ctrl_asm.h b/xen/arch/x86/include/asm/spec_ctrl_asm.h
similarity index 100%
rename from xen/include/asm-x86/spec_ctrl_asm.h
rename to xen/arch/x86/include/asm/spec_ctrl_asm.h
diff --git a/xen/include/asm-x86/spinlock.h b/xen/arch/x86/include/asm/spinlock.h
similarity index 100%
rename from xen/include/asm-x86/spinlock.h
rename to xen/arch/x86/include/asm/spinlock.h
diff --git a/xen/include/asm-x86/string.h b/xen/arch/x86/include/asm/string.h
similarity index 100%
rename from xen/include/asm-x86/string.h
rename to xen/arch/x86/include/asm/string.h
diff --git a/xen/include/asm-x86/system.h b/xen/arch/x86/include/asm/system.h
similarity index 100%
rename from xen/include/asm-x86/system.h
rename to xen/arch/x86/include/asm/system.h
diff --git a/xen/include/asm-x86/tboot.h b/xen/arch/x86/include/asm/tboot.h
similarity index 100%
rename from xen/include/asm-x86/tboot.h
rename to xen/arch/x86/include/asm/tboot.h
diff --git a/xen/include/asm-x86/time.h b/xen/arch/x86/include/asm/time.h
similarity index 100%
rename from xen/include/asm-x86/time.h
rename to xen/arch/x86/include/asm/time.h
diff --git a/xen/include/asm-x86/trace.h b/xen/arch/x86/include/asm/trace.h
similarity index 100%
rename from xen/include/asm-x86/trace.h
rename to xen/arch/x86/include/asm/trace.h
diff --git a/xen/include/asm-x86/traps.h b/xen/arch/x86/include/asm/traps.h
similarity index 100%
rename from xen/include/asm-x86/traps.h
rename to xen/arch/x86/include/asm/traps.h
diff --git a/xen/include/asm-x86/types.h b/xen/arch/x86/include/asm/types.h
similarity index 100%
rename from xen/include/asm-x86/types.h
rename to xen/arch/x86/include/asm/types.h
diff --git a/xen/include/asm-x86/uaccess.h b/xen/arch/x86/include/asm/uaccess.h
similarity index 100%
rename from xen/include/asm-x86/uaccess.h
rename to xen/arch/x86/include/asm/uaccess.h
diff --git a/xen/include/asm-x86/unaligned.h b/xen/arch/x86/include/asm/unaligned.h
similarity index 100%
rename from xen/include/asm-x86/unaligned.h
rename to xen/arch/x86/include/asm/unaligned.h
diff --git a/xen/include/asm-x86/vm_event.h b/xen/arch/x86/include/asm/vm_event.h
similarity index 100%
rename from xen/include/asm-x86/vm_event.h
rename to xen/arch/x86/include/asm/vm_event.h
diff --git a/xen/include/asm-x86/vpmu.h b/xen/arch/x86/include/asm/vpmu.h
similarity index 100%
rename from xen/include/asm-x86/vpmu.h
rename to xen/arch/x86/include/asm/vpmu.h
diff --git a/xen/include/asm-x86/x86-defns.h b/xen/arch/x86/include/asm/x86-defns.h
similarity index 100%
rename from xen/include/asm-x86/x86-defns.h
rename to xen/arch/x86/include/asm/x86-defns.h
diff --git a/xen/include/asm-x86/x86-vendors.h b/xen/arch/x86/include/asm/x86-vendors.h
similarity index 100%
rename from xen/include/asm-x86/x86-vendors.h
rename to xen/arch/x86/include/asm/x86-vendors.h
diff --git a/xen/include/asm-x86/x86_64/efibind.h b/xen/arch/x86/include/asm/x86_64/efibind.h
similarity index 100%
rename from xen/include/asm-x86/x86_64/efibind.h
rename to xen/arch/x86/include/asm/x86_64/efibind.h
diff --git a/xen/include/asm-x86/x86_64/elf.h b/xen/arch/x86/include/asm/x86_64/elf.h
similarity index 100%
rename from xen/include/asm-x86/x86_64/elf.h
rename to xen/arch/x86/include/asm/x86_64/elf.h
diff --git a/xen/include/asm-x86/x86_64/page.h b/xen/arch/x86/include/asm/x86_64/page.h
similarity index 100%
rename from xen/include/asm-x86/x86_64/page.h
rename to xen/arch/x86/include/asm/x86_64/page.h
diff --git a/xen/include/asm-x86/x86_64/regs.h b/xen/arch/x86/include/asm/x86_64/regs.h
similarity index 100%
rename from xen/include/asm-x86/x86_64/regs.h
rename to xen/arch/x86/include/asm/x86_64/regs.h
diff --git a/xen/include/asm-x86/x86_64/system.h b/xen/arch/x86/include/asm/x86_64/system.h
similarity index 100%
rename from xen/include/asm-x86/x86_64/system.h
rename to xen/arch/x86/include/asm/x86_64/system.h
diff --git a/xen/include/asm-x86/x86_64/uaccess.h b/xen/arch/x86/include/asm/x86_64/uaccess.h
similarity index 100%
rename from xen/include/asm-x86/x86_64/uaccess.h
rename to xen/arch/x86/include/asm/x86_64/uaccess.h
diff --git a/xen/include/asm-x86/x86_emulate.h b/xen/arch/x86/include/asm/x86_emulate.h
similarity index 89%
rename from xen/include/asm-x86/x86_emulate.h
rename to xen/arch/x86/include/asm/x86_emulate.h
index 9125807e24fa..c184c0053c93 100644
--- a/xen/include/asm-x86/x86_emulate.h
+++ b/xen/arch/x86/include/asm/x86_emulate.h
@@ -16,6 +16,6 @@
 #include <xen/lib.h>
 #include <asm/regs.h>
 
-#include "../../arch/x86/x86_emulate/x86_emulate.h"
+#include "../../x86_emulate/x86_emulate.h"
 
 #endif /* __ASM_X86_X86_EMULATE_H__ */
diff --git a/xen/include/asm-x86/xenoprof.h b/xen/arch/x86/include/asm/xenoprof.h
similarity index 100%
rename from xen/include/asm-x86/xenoprof.h
rename to xen/arch/x86/include/asm/xenoprof.h
diff --git a/xen/include/asm-x86/xstate.h b/xen/arch/x86/include/asm/xstate.h
similarity index 100%
rename from xen/include/asm-x86/xstate.h
rename to xen/arch/x86/include/asm/xstate.h
diff --git a/xen/common/efi/runtime.c b/xen/common/efi/runtime.c
index 375b94229e13..38d6caf2a430 100644
--- a/xen/common/efi/runtime.c
+++ b/xen/common/efi/runtime.c
@@ -12,7 +12,7 @@ struct efi_rs_state {
 #ifdef CONFIG_X86
  /*
   * The way stacks get set up leads to them always being on an 8-byte
-  * boundary not evenly divisible by 16 (see asm-x86/current.h). The EFI ABI,
+  * boundary not evenly divisible by 16 (see asm/current.h). The EFI ABI,
   * just like the CPU one, however requires stacks to be 16-byte aligned
   * before every function call. Since the compiler assumes this (unless
   * passing it -mpreferred-stack-boundary=3), it wouldn't generate code to
diff --git a/xen/common/page_alloc.c b/xen/common/page_alloc.c
index 958ba0cd9256..f3eeab132e08 100644
--- a/xen/common/page_alloc.c
+++ b/xen/common/page_alloc.c
@@ -241,7 +241,7 @@ PAGE_LIST_HEAD(page_broken_list);
 
 /*
  * first_valid_mfn is exported because it is use in ARM specific NUMA
- * helpers. See comment in asm-arm/numa.h.
+ * helpers. See comment in asm/numa.h.
  */
 mfn_t first_valid_mfn = INVALID_MFN_INITIALIZER;
 
diff --git a/xen/include/xen/acpi.h b/xen/include/xen/acpi.h
index 088c238a504a..08834f140266 100644
--- a/xen/include/xen/acpi.h
+++ b/xen/include/xen/acpi.h
@@ -40,8 +40,9 @@
 #define ACPI_MADT_GET_TRIGGER(inti)	ACPI_MADT_GET_(TRIGGER, inti)
 
 /*
- * Fixmap pages to reserve for ACPI boot-time tables (see asm-x86/fixmap.h or
- * asm-arm/config.h, 64 pages(256KB) is large enough for most cases.)
+ * Fixmap pages to reserve for ACPI boot-time tables (see
+ * arch/x86/include/asm/fixmap.h or arch/arm/include/asm/config.h,
+ * 64 pages(256KB) is large enough for most cases.)
  */
 #define NUM_FIXMAP_ACPI_PAGES  64
 
diff --git a/xen/include/xen/bitmap.h b/xen/include/xen/bitmap.h
index e9175ab54a59..3caf92c76d6d 100644
--- a/xen/include/xen/bitmap.h
+++ b/xen/include/xen/bitmap.h
@@ -14,7 +14,7 @@
  *
  * Function implementations generic to all architectures are in
  * lib/bitmap.c.  Functions implementations that are architecture
- * specific are in various include/asm-<arch>/bitops.h headers
+ * specific are in various asm/bitops.h headers
  * and other arch/<arch> specific files.
  *
  * See lib/bitmap.c for more details.
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 15/51] build,riscv: tell the build system about riscv64/head.S
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (13 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 14/51] xen: move include/asm-* to arch/*/include/asm Anthony PERARD
@ 2021-08-24 10:50 ` Anthony PERARD
  2021-08-24 10:50 ` [XEN PATCH v7 16/51] build: generate "include/xen/compile.h" with if_changed Anthony PERARD
                   ` (39 subsequent siblings)
  54 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel; +Cc: Anthony PERARD, Bob Eshleman, Alistair Francis, Connor Davis

This allows to `make arch/riscv/riscv64/head.o`.

Example of rune on a fresh copy of the repository:
    make XEN_TARGET_ARCH=riscv64 CROSS_COMPILE=riscv64-linux-gnu- KBUILD_DEFCONFIG=tiny64_defconfig arch/riscv/riscv64/head.o

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Bob Eshleman <bobbyeshleman@gmail.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Acked-by: Connor Davis <connojdavis@gmail.com>
---
 xen/arch/riscv/riscv64/Makefile | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 xen/arch/riscv/riscv64/Makefile

diff --git a/xen/arch/riscv/riscv64/Makefile b/xen/arch/riscv/riscv64/Makefile
new file mode 100644
index 000000000000..15a4a65f6615
--- /dev/null
+++ b/xen/arch/riscv/riscv64/Makefile
@@ -0,0 +1 @@
+extra-y += head.o
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 16/51] build: generate "include/xen/compile.h" with if_changed
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (14 preceding siblings ...)
  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 ` Anthony PERARD
  2021-10-07 14:55   ` Jan Beulich
  2021-08-24 10:50 ` [XEN PATCH v7 17/51] build: set XEN_BUILD_EFI earlier Anthony PERARD
                   ` (38 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu

This will avoid regenerating "compile.h" if the content hasn't changed.

As it's currently the case, the file isn't regenerated during `sudo
make install` if it exist and does belong to a different user, thus we
can remove the target "delete-unfresh-files". Target "$(TARGET)" still
need a phony dependency, so add "FORCE".

Use "$(dot-target).tmp" as temporary file as this is already cover by
".*.tmp" partern in ".gitconfig".

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---

Notes:
    v7:
    - Use $(if_changed,) instead of importing a new macro from Linux
      (filechk).
    - use $(dot-target).tmp as temporary file, that way is hiden, and
      already cover by .gitignore via ".*.tmp". (filechk was doing the same)
    - update .gitignore.

 .gitignore   |  1 -
 xen/Makefile | 34 +++++++++++++++++-----------------
 2 files changed, 17 insertions(+), 18 deletions(-)

diff --git a/.gitignore b/.gitignore
index bc964663d25c..59a22d1685e2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -332,7 +332,6 @@ xen/include/compat/*
 xen/include/config/
 xen/include/generated/
 xen/include/public/public
-xen/include/xen/*.new
 xen/include/xen/acm_policy.h
 xen/include/xen/compile.h
 xen/include/xen/lib/x86/cpuid-autogen.h
diff --git a/xen/Makefile b/xen/Makefile
index da1b8ddb97ff..b408d35b4af0 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -351,7 +351,7 @@ _debug:
 	$(OBJDUMP) -D -S $(TARGET)-syms > $(TARGET).s
 
 .PHONY: _clean
-_clean: delete-unfresh-files
+_clean:
 	$(MAKE) -C tools clean
 	$(MAKE) $(clean) include
 	$(MAKE) $(clean) common
@@ -368,7 +368,7 @@ _clean: delete-unfresh-files
 		-o -name "*.gcno" -o -name ".*.cmd" -o -name "lib.a" \) -exec rm -f {} \;
 	rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map *~ core
 	rm -f asm-offsets.s arch/*/include/asm/asm-offsets.h
-	rm -f .banner
+	rm -f .banner include/xen/compile.h
 
 .PHONY: _distclean
 _distclean: clean
@@ -378,7 +378,7 @@ $(TARGET).gz: $(TARGET)
 	gzip -n -f -9 < $< > $@.new
 	mv $@.new $@
 
-$(TARGET): delete-unfresh-files
+$(TARGET): FORCE
 	$(MAKE) -C tools
 	$(MAKE) -f $(BASEDIR)/Rules.mk include/xen/compile.h
 	[ -e arch/$(TARGET_ARCH)/efi ] && for f in $$(cd common/efi; echo *.[ch]); \
@@ -391,14 +391,6 @@ $(TARGET): delete-unfresh-files
 	$(MAKE) -f $(BASEDIR)/Rules.mk arch/$(TARGET_ARCH)/include/asm/asm-offsets.h
 	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) $@
 
-# drivers/char/console.o contains static banner/compile info. Blow it away.
-# Don't refresh these files during e.g., 'sudo make install'
-.PHONY: delete-unfresh-files
-delete-unfresh-files:
-	@if [ ! -r include/xen/compile.h -o -O include/xen/compile.h ]; then \
-		rm -f include/xen/compile.h; \
-	fi
-
 quiet_cmd_banner = BANNER  $@
 define cmd_banner
     if which figlet >/dev/null 2>&1 ; then \
@@ -413,9 +405,11 @@ endef
 	$(call if_changed,banner)
 targets += .banner
 
-# compile.h contains dynamic build info. Rebuilt on every 'make' invocation.
-include/xen/compile.h: include/xen/compile.h.in .banner
-	@sed -e 's/@@date@@/$(XEN_BUILD_DATE)/g' \
+# Don't refresh this files during e.g., 'sudo make install'
+quiet_cmd_compile.h = UPD     $@
+define cmd_compile.h
+    if [ ! -r $@ -o -O $@ ]; then \
+	sed -e 's/@@date@@/$(XEN_BUILD_DATE)/g' \
 	    -e 's/@@time@@/$(XEN_BUILD_TIME)/g' \
 	    -e 's/@@whoami@@/$(XEN_WHOAMI)/g' \
 	    -e 's/@@domain@@/$(XEN_DOMAIN)/g' \
@@ -425,10 +419,16 @@ include/xen/compile.h: include/xen/compile.h.in .banner
 	    -e 's/@@subversion@@/$(XEN_SUBVERSION)/g' \
 	    -e 's/@@extraversion@@/$(XEN_EXTRAVERSION)/g' \
 	    -e 's!@@changeset@@!$(shell tools/scmversion $(XEN_ROOT) || echo "unavailable")!g' \
-	    < include/xen/compile.h.in > $@.new
+	    < $< > $(dot-target).tmp; \
+	sed -rf tools/process-banner.sed < .banner >> $(dot-target).tmp; \
+	mv -f $(dot-target).tmp $@; \
+    fi
+endef
+
+include/xen/compile.h: include/xen/compile.h.in .banner FORCE
 	@cat .banner
-	@sed -rf tools/process-banner.sed < .banner >> $@.new
-	@mv -f $@.new $@
+	$(call if_changed,compile.h)
+targets += include/xen/compile.h
 
 asm-offsets.s: arch/$(TARGET_ARCH)/$(TARGET_SUBARCH)/asm-offsets.c
 	$(CC) $(call cpp_flags,$(c_flags)) -S -g0 -o $@.new -MQ $@ $<
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 17/51] build: set XEN_BUILD_EFI earlier
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (15 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 16/51] build: generate "include/xen/compile.h" with if_changed Anthony PERARD
@ 2021-08-24 10:50 ` Anthony PERARD
  2021-10-07 16:14   ` Jan Beulich
  2021-08-24 10:50 ` [XEN PATCH v7 18/51] build: fix $(TARGET).efi creation in arch/arm Anthony PERARD
                   ` (37 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Jan Beulich, Andrew Cooper, Roger Pau Monné,
	Wei Liu

We are going to need the variable XEN_BUILD_EFI earlier.

But a side effect of calculating the value of $(XEN_BUILD_EFI) is to
also to generate "efi/check.o" which is used for further checks.
Thus the whole chain that check for EFI support is moved to
"arch.mk".

Some other changes are made to avoid too much duplication:
    - $(efi-check-o): Used to avoid repeating "efi/check.*". We don't
      set it to the path to the source as it would be wrong as soon
      as we support out-of-tree build.
    - $(LD_PE_check_cmd): As it is called twice, with an updated
      $(EFI_LDFLAGS).

$(nr-fixups) is renamed to $(efi-check-relocs) as the former might be
a bit too generic.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---

Notes:
    v7:
    - Do the whole check for EFI support in arch.mk. So efi/check.o is
      produce there and used there, and produce efi/check.efi and use it there.
      Thus avoid the need to repeat the test done for XEN_BUILD_EFI.

 xen/arch/x86/Makefile | 36 ++----------------------------------
 xen/arch/x86/arch.mk  | 42 ++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 44 insertions(+), 34 deletions(-)

diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 5e1d38d6cd5b..dfcbd01bb4ed 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -123,41 +123,7 @@ $(TARGET): $(TARGET)-syms $(efi-y) boot/mkelf32
 	mv $(TMP) $(TARGET)
 
 ifneq ($(efi-y),)
-
-# Check if the compiler supports the MS ABI.
-export XEN_BUILD_EFI := $(shell $(CC) $(XEN_CFLAGS) -c efi/check.c -o efi/check.o 2>/dev/null && echo y)
 CFLAGS-$(XEN_BUILD_EFI) += -DXEN_BUILD_EFI
-
-# Check if the linker supports PE.
-EFI_LDFLAGS = $(patsubst -m%,-mi386pep,$(XEN_LDFLAGS)) --subsystem=10
-XEN_BUILD_PE := $(if $(XEN_BUILD_EFI),$(call ld-option,$(EFI_LDFLAGS) --image-base=0x100000000 -o efi/check.efi efi/check.o))
-# If the above failed, it may be merely because of the linker not dealing well
-# with debug info. Try again with stripping it.
-ifeq ($(CONFIG_DEBUG_INFO)-$(XEN_BUILD_PE),y-n)
-EFI_LDFLAGS += --strip-debug
-XEN_BUILD_PE := $(call ld-option,$(EFI_LDFLAGS) --image-base=0x100000000 -o efi/check.efi efi/check.o)
-endif
-
-ifeq ($(XEN_BUILD_PE),y)
-
-# Check if the linker produces fixups in PE by default
-nr-fixups := $(shell $(OBJDUMP) -p efi/check.efi | grep '^[[:blank:]]*reloc[[:blank:]]*[0-9][[:blank:]].*DIR64$$' | wc -l)
-ifeq ($(nr-fixups),2)
-MKRELOC := :
-relocs-dummy :=
-else
-MKRELOC := efi/mkreloc
-relocs-dummy := efi/relocs-dummy.o
-# If the linker produced fixups but not precisely two of them, we need to
-# disable it doing so.  But if it didn't produce any fixups, it also wouldn't
-# recognize the option.
-ifneq ($(nr-fixups),0)
-EFI_LDFLAGS += --disable-reloc-section
-endif
-endif
-
-endif # $(XEN_BUILD_PE)
-
 endif # $(efi-y)
 
 ALL_OBJS := $(BASEDIR)/arch/x86/boot/built_in.o $(BASEDIR)/arch/x86/efi/built_in.o $(ALL_OBJS)
@@ -218,8 +184,10 @@ endif
 
 $(TARGET).efi: VIRT_BASE = 0x$(shell $(NM) efi/relocs-dummy.o | sed -n 's, A VIRT_START$$,,p')
 ifeq ($(MKRELOC),:)
+relocs-dummy :=
 $(TARGET).efi: ALT_BASE :=
 else
+relocs-dummy := efi/relocs-dummy.o
 $(TARGET).efi: ALT_BASE = 0x$(shell $(NM) efi/relocs-dummy.o | sed -n 's, A ALT_START$$,,p')
 endif
 
diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
index eea320e618b9..98dd41d32118 100644
--- a/xen/arch/x86/arch.mk
+++ b/xen/arch/x86/arch.mk
@@ -60,5 +60,47 @@ ifeq ($(CONFIG_UBSAN),y)
 $(call cc-option-add,CFLAGS_UBSAN,CC,-fno-sanitize=alignment)
 endif
 
+ifneq ($(CONFIG_PV_SHIM_EXCLUSIVE),y)
+
+efi-check-o = arch/x86/efi/check.o
+
+# Check if the compiler supports the MS ABI.
+XEN_BUILD_EFI := $(call if-success,$(CC) $(CFLAGS) -c $(efi-check-o:.o=.c) -o $(efi-check-o),y)
+
+# Check if the linker supports PE.
+EFI_LDFLAGS := $(patsubst -m%,-mi386pep,$(LDFLAGS)) --subsystem=10
+LD_PE_check_cmd = $(call ld-option,$(EFI_LDFLAGS) --image-base=0x100000000 -o $(efi-check-o:.o=.efi) $(efi-check-o))
+XEN_BUILD_PE := $(LD_PE_check_cmd)
+
+# If the above failed, it may be merely because of the linker not dealing well
+# with debug info. Try again with stripping it.
+ifeq ($(CONFIG_DEBUG_INFO)-$(XEN_BUILD_PE),y-n)
+EFI_LDFLAGS += --strip-debug
+XEN_BUILD_PE := $(LD_PE_check_cmd)
+endif
+
+ifeq ($(XEN_BUILD_PE),y)
+
+# Check if the linker produces fixups in PE by default
+efi-check-relocs := $(shell $(OBJDUMP) -p $(efi-check-o:.o=.efi) | grep '^[[:blank:]]*reloc[[:blank:]]*[0-9][[:blank:]].*DIR64$$' | wc -l)
+
+ifeq ($(efi-check-relocs),2)
+MKRELOC := :
+else
+MKRELOC := efi/mkreloc
+# If the linker produced fixups but not precisely two of them, we need to
+# disable it doing so.  But if it didn't produce any fixups, it also wouldn't
+# recognize the option.
+ifneq ($(efi-check-relocs),0)
+EFI_LDFLAGS += --disable-reloc-section
+endif
+endif
+
+endif # $(XEN_BUILD_PE)
+
+export XEN_BUILD_EFI XEN_BUILD_PE MKRELOC
+export EFI_LDFLAGS
+endif
+
 # Set up the assembler include path properly for older toolchains.
 CFLAGS += -Wa,-I$(BASEDIR)/include
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 18/51] build: fix $(TARGET).efi creation in arch/arm
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (16 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 17/51] build: set XEN_BUILD_EFI earlier Anthony PERARD
@ 2021-08-24 10:50 ` Anthony PERARD
  2021-10-11 10:37   ` Jan Beulich
  2021-08-24 10:50 ` [XEN PATCH v7 19/51] build: fix arch/x86/note.o rule Anthony PERARD
                   ` (36 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Stefano Stabellini, Julien Grall, Volodymyr Babchuk

There is no need to try to guess a relative path to the "xen.efi" file,
we can simply use $@. Also, there's no need to use `notdir`, make
already do that work via $(@F).

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/arch/arm/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index cc90d9796e6e..dc1d09c8b429 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -93,7 +93,7 @@ endif
 $(TARGET): $(TARGET)-syms
 	$(OBJCOPY) -O binary -S $< $@
 ifeq ($(CONFIG_ARM_64),y)
-	ln -sf $(notdir $@)  ../../$(notdir $@).efi
+	ln -sf $(@F) $@.efi
 endif
 
 ifeq ($(CONFIG_LTO),y)
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 19/51] build: fix arch/x86/note.o rule
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (17 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 18/51] build: fix $(TARGET).efi creation in arch/arm Anthony PERARD
@ 2021-08-24 10:50 ` 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
                   ` (35 subsequent siblings)
  54 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Jan Beulich, Andrew Cooper, Roger Pau Monné,
	Wei Liu

Avoid different spelling for the location of "xen-syms", and simply
use the dependency variable. This avoid the assumption about $(TARGET)
value.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
---

Notes:
    v7:
    - fix typo in title

 xen/arch/x86/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index dfcbd01bb4ed..29aa67ea371e 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -164,7 +164,7 @@ $(TARGET)-syms: prelink.o xen.lds
 	rm -f $(@D)/.$(@F).[0-9]* $(@D)/..$(@F).[0-9]*
 
 note.o: $(TARGET)-syms
-	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id  $(BASEDIR)/xen-syms $@.bin
+	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $< $@.bin
 	$(OBJCOPY) -I binary -O elf64-x86-64 -B i386:x86-64 \
 		--rename-section=.data=.note.gnu.build-id -S $@.bin $@
 	rm -f $@.bin
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 20/51] build: avoid re-executing the main Makefile by introducing build.mk
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (18 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 19/51] build: fix arch/x86/note.o rule Anthony PERARD
@ 2021-08-24 10:50 ` Anthony PERARD
  2021-10-11 10:56   ` 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
                   ` (34 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu

Currently, the xen/Makefile is re-parsed several times: once to start
the build process, and several more time with Rules.mk including it.
This makes it difficult to reason with a Makefile used for several
purpose, and it actually slow down the build process.

So this patch introduce "build.mk" which Rules.mk will use when
present instead of the "Makefile" of a directory. (Linux's Kbuild
named that file "Kbuild".)

We have a few targets to move to "build.mk" identified by them been
build via "make -f Rules.mk" without changing directory.

As for the main targets like "build", we can have them depends on
there underscore-prefix targets like "_build" without having to use
"Rules.mk" while still retaining the check for unsupported
architecture. (Those main rules are changed to be single-colon as
there should only be a single recipe for them.)

With nearly everything needed to move to "build.mk" moved, there is a
single dependency left from "Rules.mk": $(TARGET), which is moved to
the main Makefile.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---

Notes:
    v7:
    - new patch

 xen/Makefile | 69 ++++++----------------------------------------------
 xen/Rules.mk |  6 ++---
 xen/build.mk | 58 +++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 68 insertions(+), 65 deletions(-)
 create mode 100644 xen/build.mk

diff --git a/xen/Makefile b/xen/Makefile
index b408d35b4af0..7f100845cdd0 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -45,6 +45,8 @@ export KCONFIG_CONFIG ?= .config
 
 export CC CXX LD
 
+export TARGET := $(BASEDIR)/xen
+
 .PHONY: default
 default: build
 
@@ -279,11 +281,13 @@ export CFLAGS_UBSAN
 
 endif # need-config
 
-.PHONY: build install uninstall clean distclean MAP
-build install uninstall debug clean distclean MAP::
+main-targets := build install uninstall clean distclean MAP
+.PHONY: $(main-targets)
 ifneq ($(XEN_TARGET_ARCH),x86_32)
-	$(MAKE) -f Rules.mk _$@
+$(main-targets): %: _%
+	@:
 else
+$(main-targets):
 	echo "*** Xen x86/32 target no longer supported!"
 endif
 
@@ -391,65 +395,6 @@ $(TARGET): FORCE
 	$(MAKE) -f $(BASEDIR)/Rules.mk arch/$(TARGET_ARCH)/include/asm/asm-offsets.h
 	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) $@
 
-quiet_cmd_banner = BANNER  $@
-define cmd_banner
-    if which figlet >/dev/null 2>&1 ; then \
-	echo " Xen $(XEN_FULLVERSION)" | figlet -f $< > $@.tmp; \
-    else \
-	echo " Xen $(XEN_FULLVERSION)" > $@.tmp; \
-    fi; \
-    mv -f $@.tmp $@
-endef
-
-.banner: tools/xen.flf FORCE
-	$(call if_changed,banner)
-targets += .banner
-
-# Don't refresh this files during e.g., 'sudo make install'
-quiet_cmd_compile.h = UPD     $@
-define cmd_compile.h
-    if [ ! -r $@ -o -O $@ ]; then \
-	sed -e 's/@@date@@/$(XEN_BUILD_DATE)/g' \
-	    -e 's/@@time@@/$(XEN_BUILD_TIME)/g' \
-	    -e 's/@@whoami@@/$(XEN_WHOAMI)/g' \
-	    -e 's/@@domain@@/$(XEN_DOMAIN)/g' \
-	    -e 's/@@hostname@@/$(XEN_BUILD_HOST)/g' \
-	    -e 's!@@compiler@@!$(shell $(CC) $(CFLAGS) --version 2>&1 | head -1)!g' \
-	    -e 's/@@version@@/$(XEN_VERSION)/g' \
-	    -e 's/@@subversion@@/$(XEN_SUBVERSION)/g' \
-	    -e 's/@@extraversion@@/$(XEN_EXTRAVERSION)/g' \
-	    -e 's!@@changeset@@!$(shell tools/scmversion $(XEN_ROOT) || echo "unavailable")!g' \
-	    < $< > $(dot-target).tmp; \
-	sed -rf tools/process-banner.sed < .banner >> $(dot-target).tmp; \
-	mv -f $(dot-target).tmp $@; \
-    fi
-endef
-
-include/xen/compile.h: include/xen/compile.h.in .banner FORCE
-	@cat .banner
-	$(call if_changed,compile.h)
-targets += include/xen/compile.h
-
-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,$@)
-
-arch/$(TARGET_ARCH)/include/asm/asm-offsets.h: asm-offsets.s
-	@(set -e; \
-	  echo "/*"; \
-	  echo " * DO NOT MODIFY."; \
-	  echo " *"; \
-	  echo " * This file was auto-generated from $<"; \
-	  echo " *"; \
-	  echo " */"; \
-	  echo ""; \
-	  echo "#ifndef __ASM_OFFSETS_H__"; \
-	  echo "#define __ASM_OFFSETS_H__"; \
-	  echo ""; \
-	  sed -rne "/^[^#].*==>/{s:.*==>(.*)<==.*:\1:; s: [\$$#]: :; p;}"; \
-	  echo ""; \
-	  echo "#endif") <$< >$@
-
 SUBDIRS = xsm arch/$(TARGET_ARCH) common drivers lib test
 define all_sources
     ( find arch/$(TARGET_ARCH)/include -name '*.h' -print; \
diff --git a/xen/Rules.mk b/xen/Rules.mk
index f449669475bd..a49ca4ceca39 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -9,8 +9,6 @@ include $(XEN_ROOT)/Config.mk
 include $(BASEDIR)/scripts/Kbuild.include
 
 
-TARGET := $(BASEDIR)/xen
-
 # Note that link order matters!
 ALL_OBJS-y               += $(BASEDIR)/common/built_in.o
 ALL_OBJS-y               += $(BASEDIR)/drivers/built_in.o
@@ -36,7 +34,9 @@ SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
                                             rodata.cst$(a)) \
                          $(foreach r,rel rel.ro,data.$(r).local)
 
-include Makefile
+# The filename build.mk has precedence over Makefile
+mk-dir := .
+include $(if $(wildcard $(mk-dir)/build.mk),$(mk-dir)/build.mk,$(mk-dir)/Makefile)
 
 # Linking
 # ---------------------------------------------------------------------------
diff --git a/xen/build.mk b/xen/build.mk
new file mode 100644
index 000000000000..369e1fe5c698
--- /dev/null
+++ b/xen/build.mk
@@ -0,0 +1,58 @@
+quiet_cmd_banner = BANNER  $@
+define cmd_banner
+    if which figlet >/dev/null 2>&1 ; then \
+	echo " Xen $(XEN_FULLVERSION)" | figlet -f $< > $@.tmp; \
+    else \
+	echo " Xen $(XEN_FULLVERSION)" > $@.tmp; \
+    fi; \
+    mv -f $@.tmp $@
+endef
+
+.banner: tools/xen.flf FORCE
+	$(call if_changed,banner)
+targets += .banner
+
+# Don't refresh this files during e.g., 'sudo make install'
+quiet_cmd_compile.h = UPD     $@
+define cmd_compile.h
+    if [ ! -r $@ -o -O $@ ]; then \
+	sed -e 's/@@date@@/$(XEN_BUILD_DATE)/g' \
+	    -e 's/@@time@@/$(XEN_BUILD_TIME)/g' \
+	    -e 's/@@whoami@@/$(XEN_WHOAMI)/g' \
+	    -e 's/@@domain@@/$(XEN_DOMAIN)/g' \
+	    -e 's/@@hostname@@/$(XEN_BUILD_HOST)/g' \
+	    -e 's!@@compiler@@!$(shell $(CC) $(CFLAGS) --version 2>&1 | head -1)!g' \
+	    -e 's/@@version@@/$(XEN_VERSION)/g' \
+	    -e 's/@@subversion@@/$(XEN_SUBVERSION)/g' \
+	    -e 's/@@extraversion@@/$(XEN_EXTRAVERSION)/g' \
+	    -e 's!@@changeset@@!$(shell tools/scmversion $(XEN_ROOT) || echo "unavailable")!g' \
+	    < $< > $(dot-target).tmp; \
+	sed -rf tools/process-banner.sed < .banner >> $(dot-target).tmp; \
+	mv -f $(dot-target).tmp $@; \
+    fi
+endef
+
+include/xen/compile.h: include/xen/compile.h.in .banner FORCE
+	@cat .banner
+	$(call if_changed,compile.h)
+targets += include/xen/compile.h
+
+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,$@)
+
+arch/$(TARGET_ARCH)/include/asm/asm-offsets.h: asm-offsets.s
+	@(set -e; \
+	  echo "/*"; \
+	  echo " * DO NOT MODIFY."; \
+	  echo " *"; \
+	  echo " * This file was auto-generated from $<"; \
+	  echo " *"; \
+	  echo " */"; \
+	  echo ""; \
+	  echo "#ifndef __ASM_OFFSETS_H__"; \
+	  echo "#define __ASM_OFFSETS_H__"; \
+	  echo ""; \
+	  sed -rne "/^[^#].*==>/{s:.*==>(.*)<==.*:\1:; s: [\$$#]: :; p;}"; \
+	  echo ""; \
+	  echo "#endif") <$< >$@
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 21/51] build: set ALL_OBJS to main Makefile; move prelink.o to main Makefile
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (19 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 20/51] build: avoid re-executing the main Makefile by introducing build.mk Anthony PERARD
@ 2021-08-24 10:50 ` Anthony PERARD
  2021-10-11 11:31   ` Jan Beulich
  2021-08-24 10:50 ` [XEN PATCH v7 22/51] build: clean common temporary files from root makefile Anthony PERARD
                   ` (33 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu,
	Volodymyr Babchuk, Roger Pau Monné

This is to avoid arch/$arch/Makefile having to recurse into parents
directories.

This avoid duplication of the logic to build prelink.o between arches.

In order to do that, we cut the $(TARGET) target in the main Makefile in
two, there is a "prepare" phase/target runned before starting to build
"prelink.o" which will prepare "include/" among other things, the all
the $(ALL_OBJS) will be generated in order to build "prelink.o" and
finally $(TARGET) will be generated by calling into "arch/*/" to make
$(TARGET).

Now we don't need to prefix $(ALL_OBJS) with $(BASEDIR) as it is now
only used from the main Makefile. Other changes is using "$<" instead
of spelling "prelink.o" in the target "$(TARGET)" in both
arch/*/Makefile.

Beside "prelink.o" been at a different location, no other functional
change intended.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---

Notes:
    v7:
    - change, now things are in build.mk: no more prepare phase needed

 xen/Makefile          | 15 ++++++++++++++-
 xen/Rules.mk          | 14 --------------
 xen/arch/arm/Makefile | 31 ++++---------------------------
 xen/arch/arm/arch.mk  |  2 ++
 xen/arch/x86/Makefile | 29 ++++++-----------------------
 xen/arch/x86/arch.mk  |  2 ++
 xen/build.mk          | 24 ++++++++++++++++++++++++
 7 files changed, 52 insertions(+), 65 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index 7f100845cdd0..1dad20a95be6 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -271,8 +271,21 @@ CFLAGS += -flto
 LDFLAGS-$(CONFIG_CC_IS_CLANG) += -plugin LLVMgold.so
 endif
 
+# Note that link order matters!
+ALL_OBJS-y                := common/built_in.o
+ALL_OBJS-y                += drivers/built_in.o
+ALL_OBJS-y                += lib/built_in.o
+ALL_OBJS-y                += xsm/built_in.o
+ALL_OBJS-y                += arch/$(TARGET_ARCH)/built_in.o
+ALL_OBJS-$(CONFIG_CRYPTO) += crypto/built_in.o
+
+ALL_LIBS-y                := lib/lib.a
+
 include $(BASEDIR)/arch/$(TARGET_ARCH)/arch.mk
 
+export ALL_OBJS := $(ALL_OBJS-y)
+export ALL_LIBS := $(ALL_LIBS-y)
+
 # define new variables to avoid the ones defined in Config.mk
 export XEN_CFLAGS := $(CFLAGS)
 export XEN_AFLAGS := $(AFLAGS)
@@ -393,7 +406,7 @@ $(TARGET): FORCE
 	$(MAKE) -f $(BASEDIR)/Rules.mk -C include
 	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) include
 	$(MAKE) -f $(BASEDIR)/Rules.mk arch/$(TARGET_ARCH)/include/asm/asm-offsets.h
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) $@
+	$(MAKE) -f $(BASEDIR)/Rules.mk $@
 
 SUBDIRS = xsm arch/$(TARGET_ARCH) common drivers lib test
 define all_sources
diff --git a/xen/Rules.mk b/xen/Rules.mk
index a49ca4ceca39..2db13a8f9c54 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -8,26 +8,12 @@
 include $(XEN_ROOT)/Config.mk
 include $(BASEDIR)/scripts/Kbuild.include
 
-
-# Note that link order matters!
-ALL_OBJS-y               += $(BASEDIR)/common/built_in.o
-ALL_OBJS-y               += $(BASEDIR)/drivers/built_in.o
-ALL_OBJS-y               += $(BASEDIR)/lib/built_in.o
-ALL_OBJS-y               += $(BASEDIR)/xsm/built_in.o
-ALL_OBJS-y               += $(BASEDIR)/arch/$(TARGET_ARCH)/built_in.o
-ALL_OBJS-$(CONFIG_CRYPTO)   += $(BASEDIR)/crypto/built_in.o
-
-ALL_LIBS-y               := $(BASEDIR)/lib/lib.a
-
 # Initialise some variables
 lib-y :=
 targets :=
 CFLAGS-y :=
 AFLAGS-y :=
 
-ALL_OBJS := $(ALL_OBJS-y)
-ALL_LIBS := $(ALL_LIBS-y)
-
 SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
                                             $(foreach w,1 2 4, \
                                                         rodata.str$(w).$(a)) \
diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index dc1d09c8b429..067c0d9844e4 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -73,14 +73,6 @@ ifneq ($(CONFIG_DTB_FILE),"")
 obj-y += dtb.o
 endif
 
-ALL_OBJS := $(TARGET_SUBARCH)/head.o $(ALL_OBJS)
-
-# head.o is built by descending into the sub-directory, depends on the part of
-# $(ALL_OBJS) that will eventually recurse into $(TARGET_SUBARCH)/ and build
-# head.o
-$(TARGET_SUBARCH)/head.o: $(BASEDIR)/arch/arm/built_in.o
-$(TARGET_SUBARCH)/head.o: ;
-
 ifdef CONFIG_LIVEPATCH
 all_symbols = --all-symbols
 ifdef CONFIG_FAST_SYMBOL_LOOKUP
@@ -96,33 +88,18 @@ ifeq ($(CONFIG_ARM_64),y)
 	ln -sf $(@F) $@.efi
 endif
 
-ifeq ($(CONFIG_LTO),y)
-# Gather all LTO objects together
-prelink_lto.o: $(ALL_OBJS) $(ALL_LIBS)
-	$(LD_LTO) -r -o $@ $(filter-out %.a,$^) --start-group $(filter %.a,$^) --end-group
-
-# Link it with all the binary objects
-prelink.o: $(patsubst %/built_in.o,%/built_in_bin.o,$(ALL_OBJS)) prelink_lto.o
-	$(call if_changed,ld)
-else
-prelink.o: $(ALL_OBJS) $(ALL_LIBS) FORCE
-	$(call if_changed,ld)
-endif
-
-targets += prelink.o
-
-$(TARGET)-syms: prelink.o xen.lds
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N prelink.o \
+$(TARGET)-syms: $(BASEDIR)/prelink.o xen.lds
+	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< \
 	    $(BASEDIR)/common/symbols-dummy.o -o $(@D)/.$(@F).0
 	$(NM) -pa --format=sysv $(@D)/.$(@F).0 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).0.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0.o
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N prelink.o \
+	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< \
 	    $(@D)/.$(@F).0.o -o $(@D)/.$(@F).1
 	$(NM) -pa --format=sysv $(@D)/.$(@F).1 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).1.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1.o
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N prelink.o $(build_id_linker) \
+	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).1.o -o $@
 	$(NM) -pa --format=sysv $(@D)/$(@F) \
 		| $(BASEDIR)/tools/symbols --all-symbols --xensyms --sysv --sort \
diff --git a/xen/arch/arm/arch.mk b/xen/arch/arm/arch.mk
index c3ac443b3788..ba3f140e2ea7 100644
--- a/xen/arch/arm/arch.mk
+++ b/xen/arch/arm/arch.mk
@@ -26,3 +26,5 @@ ifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
         LDFLAGS += --fix-cortex-a53-843419
     endif
 endif
+
+ALL_OBJS-y := arch/arm/$(TARGET_SUBARCH)/head.o $(ALL_OBJS-y)
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 29aa67ea371e..823f8fed4144 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -126,37 +126,20 @@ ifneq ($(efi-y),)
 CFLAGS-$(XEN_BUILD_EFI) += -DXEN_BUILD_EFI
 endif # $(efi-y)
 
-ALL_OBJS := $(BASEDIR)/arch/x86/boot/built_in.o $(BASEDIR)/arch/x86/efi/built_in.o $(ALL_OBJS)
-
-ifeq ($(CONFIG_LTO),y)
-# Gather all LTO objects together
-prelink_lto.o: $(ALL_OBJS) $(ALL_LIBS)
-	$(LD_LTO) -r -o $@ $(filter-out %.a,$^) --start-group $(filter %.a,$^) --end-group
-
-# Link it with all the binary objects
-prelink.o: $(patsubst %/built_in.o,%/built_in_bin.o,$(ALL_OBJS)) prelink_lto.o FORCE
-	$(call if_changed,ld)
-else
-prelink.o: $(ALL_OBJS) $(ALL_LIBS) FORCE
-	$(call if_changed,ld)
-endif
-
-targets += prelink.o
-
-$(TARGET)-syms: prelink.o xen.lds
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N prelink.o $(build_id_linker) \
+$(TARGET)-syms: $(BASEDIR)/prelink.o xen.lds
+	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
 	    $(BASEDIR)/common/symbols-dummy.o -o $(@D)/.$(@F).0
 	$(NM) -pa --format=sysv $(@D)/.$(@F).0 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort \
 		>$(@D)/.$(@F).0.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0.o
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N prelink.o $(build_id_linker) \
+	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).0.o -o $(@D)/.$(@F).1
 	$(NM) -pa --format=sysv $(@D)/.$(@F).1 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort $(syms-warn-dup-y) \
 		>$(@D)/.$(@F).1.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1.o
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N prelink.o $(build_id_linker) \
+	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).1.o -o $@
 	$(NM) -pa --format=sysv $(@D)/$(@F) \
 		| $(BASEDIR)/tools/symbols --all-symbols --xensyms --sysv --sort \
@@ -209,7 +192,7 @@ note_file_option ?= $(note_file)
 
 ifeq ($(XEN_BUILD_PE),y)
 extra-y += efi.lds
-$(TARGET).efi: prelink.o $(note_file) efi.lds efi/relocs-dummy.o efi/mkreloc
+$(TARGET).efi: $(BASEDIR)/prelink.o $(note_file) efi.lds efi/relocs-dummy.o efi/mkreloc
 ifeq ($(CONFIG_DEBUG_INFO),y)
 	$(if $(filter --strip-debug,$(EFI_LDFLAGS)),echo,:) "Will strip debug info from $(@F)"
 endif
@@ -238,7 +221,7 @@ $(TARGET).efi: FORCE
 	echo '$(if $(filter y,$(XEN_BUILD_EFI)),xen.efi generation,EFI support) disabled'
 endif
 
-efi/buildid.o efi/relocs-dummy.o: $(BASEDIR)/arch/x86/efi/built_in.o
+# These should already have been rebuilt when building the prerequisite of "prelink.o"
 efi/buildid.o efi/relocs-dummy.o: ;
 
 .PHONY: include
diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
index 98dd41d32118..61e0222f4a08 100644
--- a/xen/arch/x86/arch.mk
+++ b/xen/arch/x86/arch.mk
@@ -104,3 +104,5 @@ endif
 
 # Set up the assembler include path properly for older toolchains.
 CFLAGS += -Wa,-I$(BASEDIR)/include
+
+ALL_OBJS-y := arch/x86/boot/built_in.o arch/x86/efi/built_in.o $(ALL_OBJS-y)
diff --git a/xen/build.mk b/xen/build.mk
index 369e1fe5c698..9093d9f493bc 100644
--- a/xen/build.mk
+++ b/xen/build.mk
@@ -56,3 +56,27 @@ arch/$(TARGET_ARCH)/include/asm/asm-offsets.h: asm-offsets.s
 	  sed -rne "/^[^#].*==>/{s:.*==>(.*)<==.*:\1:; s: [\$$#]: :; p;}"; \
 	  echo ""; \
 	  echo "#endif") <$< >$@
+
+# head.o is built by descending into arch/arm/$(TARGET_SUBARCH), depends on the
+# part of $(ALL_OBJS) that will eventually recurse into $(TARGET_SUBARCH)/ and
+# build head.o
+arch/arm/$(TARGET_SUBARCH)/head.o: arch/arm/built_in.o
+arch/arm/$(TARGET_SUBARCH)/head.o: ;
+
+ifeq ($(CONFIG_LTO),y)
+# Gather all LTO objects together
+prelink_lto.o: $(ALL_OBJS) $(ALL_LIBS)
+	$(LD_LTO) -r -o $@ $(filter-out %.a,$^) --start-group $(filter %.a,$^) --end-group
+
+# Link it with all the binary objects
+prelink.o: $(patsubst %/built_in.o,%/built_in_bin.o,$(ALL_OBJS)) prelink_lto.o FORCE
+	$(call if_changed,ld)
+else
+prelink.o: $(ALL_OBJS) $(ALL_LIBS) FORCE
+	$(call if_changed,ld)
+endif
+
+targets += prelink.o
+
+$(TARGET): prelink.o FORCE
+	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) $@
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 22/51] build: clean common temporary files from root makefile
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (20 preceding siblings ...)
  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-08-24 10:50 ` Anthony PERARD
  2021-10-11 11:41   ` Jan Beulich
  2021-08-24 10:50 ` [XEN PATCH v7 23/51] build,include: remove arch-*/*.h public header listing from headers*.chk Anthony PERARD
                   ` (32 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Makefile               | 1 +
 xen/scripts/Makefile.clean | 2 --
 2 files changed, 1 insertion(+), 2 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index 1dad20a95be6..f07c9251c030 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -382,6 +382,7 @@ _clean:
 	$(MAKE) $(clean) test
 	$(MAKE) $(kconfig) clean
 	find . \( -name "*.o" -o -name ".*.d" -o -name ".*.d2" \
+		-o -name ".*.o.tmp" -o -name "*~" -o -name "core" \
 		-o -name "*.gcno" -o -name ".*.cmd" -o -name "lib.a" \) -exec rm -f {} \;
 	rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map *~ core
 	rm -f asm-offsets.s arch/*/include/asm/asm-offsets.h
diff --git a/xen/scripts/Makefile.clean b/xen/scripts/Makefile.clean
index 027c200c0efc..b6df9e861e6e 100644
--- a/xen/scripts/Makefile.clean
+++ b/xen/scripts/Makefile.clean
@@ -14,10 +14,8 @@ include Makefile
 subdir-all := $(subdir-y) $(subdir-n) $(subdir-) \
               $(patsubst %/,%, $(filter %/, $(obj-y) $(obj-n) $(obj-)))
 
-DEPS_RM = $(DEPS) $(DEPS_INCLUDE)
 .PHONY: clean
 clean:: $(subdir-all)
-	rm -f *.o .*.o.tmp *~ core $(DEPS_RM)
 
 # Descending
 # ---------------------------------------------------------------------------
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 23/51] build,include: remove arch-*/*.h public header listing from headers*.chk
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (21 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 22/51] build: clean common temporary files from root makefile Anthony PERARD
@ 2021-08-24 10:50 ` 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
                   ` (31 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu

$(public-y) contains "public/arch-%" but when used by
$(PUBLIC_HEADERS) $(public-y) is filtered-out by the pattern
"public/arch-%". So $(public-y) content is never used.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---

Notes:
    v7:
    - new patch

 xen/include/Makefile | 5 +----
 1 file changed, 1 insertion(+), 4 deletions(-)

diff --git a/xen/include/Makefile b/xen/include/Makefile
index 95daa8a28975..65a938a66555 100644
--- a/xen/include/Makefile
+++ b/xen/include/Makefile
@@ -39,9 +39,6 @@ cppflags-$(CONFIG_X86)    += -m32
 
 endif
 
-public-$(CONFIG_X86) := $(wildcard public/arch-x86/*.h public/arch-x86/*/*.h)
-public-$(CONFIG_ARM) := $(wildcard public/arch-arm/*.h public/arch-arm/*/*.h)
-
 .PHONY: all
 all: $(headers-y)
 
@@ -81,7 +78,7 @@ ifeq ($(XEN_TARGET_ARCH),$(XEN_COMPILE_ARCH))
 
 all: headers.chk headers99.chk headers++.chk
 
-PUBLIC_HEADERS := $(filter-out public/arch-% public/dom0_ops.h, $(wildcard public/*.h public/*/*.h) $(public-y))
+PUBLIC_HEADERS := $(filter-out public/arch-% public/dom0_ops.h, $(wildcard public/*.h public/*/*.h))
 
 PUBLIC_C99_HEADERS := public/io/9pfs.h public/io/pvcalls.h
 PUBLIC_ANSI_HEADERS := $(filter-out public/%ctl.h public/xsm/% public/%hvm/save.h $(PUBLIC_C99_HEADERS), $(PUBLIC_HEADERS))
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 24/51] build: prepare to always invoke $(MAKE) from xen/, use $(obj)
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (22 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 23/51] build,include: remove arch-*/*.h public header listing from headers*.chk Anthony PERARD
@ 2021-08-24 10:50 ` Anthony PERARD
  2021-10-11 12:39   ` Jan Beulich
  2021-08-24 10:50 ` [XEN PATCH v7 25/51] build: rework test/livepatch/Makefile Anthony PERARD
                   ` (30 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu,
	Volodymyr Babchuk, Roger Pau Monné,
	Daniel De Graaf, Daniel P. Smith

In a future patch, when building a subdirectory, we will set
"obj=$subdir" rather than change directory.

Before that, we add "$(obj)" and "$(src)" in as many places as
possible where we will need to know which subdirectory is been built.
"$(obj)" is for files been generated during the build, and "$(src)" is
for files present in the source tree.

For now, we set both to "." in Rules.mk and Makefile.clean.

A few places don't tolerate the addition of "./", this is because make
remove the leading "./" in targets and dependencies in rules, so these
will be change later.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Rules.mk                            |  5 ++-
 xen/arch/arm/Makefile                   | 14 ++++----
 xen/arch/x86/Makefile                   | 48 ++++++++++++-------------
 xen/arch/x86/boot/Makefile              | 14 ++++----
 xen/arch/x86/efi/Makefile               |  6 ++--
 xen/common/Makefile                     |  8 ++---
 xen/common/libelf/Makefile              |  4 +--
 xen/common/libfdt/Makefile              |  6 ++--
 xen/include/Makefile                    | 40 ++++++++++-----------
 xen/scripts/Makefile.clean              |  5 ++-
 xen/xsm/flask/Makefile                  | 36 +++++++++----------
 xen/xsm/flask/policy/mkaccess_vector.sh |  7 ++--
 12 files changed, 101 insertions(+), 92 deletions(-)

diff --git a/xen/Rules.mk b/xen/Rules.mk
index 2db13a8f9c54..245efe705a1e 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -3,6 +3,9 @@
 # Makefile and are consumed by Rules.mk
 #
 
+obj := .
+src := $(obj)
+
 -include $(BASEDIR)/include/config/auto.conf
 
 include $(XEN_ROOT)/Config.mk
@@ -21,7 +24,7 @@ SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
                          $(foreach r,rel rel.ro,data.$(r).local)
 
 # The filename build.mk has precedence over Makefile
-mk-dir := .
+mk-dir := $(src)
 include $(if $(wildcard $(mk-dir)/build.mk),$(mk-dir)/build.mk,$(mk-dir)/Makefile)
 
 # Linking
diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index 067c0d9844e4..9f9c73aa6c5d 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -88,18 +88,18 @@ ifeq ($(CONFIG_ARM_64),y)
 	ln -sf $(@F) $@.efi
 endif
 
-$(TARGET)-syms: $(BASEDIR)/prelink.o xen.lds
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< \
+$(TARGET)-syms: $(BASEDIR)/prelink.o $(obj)/xen.lds
+	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< \
 	    $(BASEDIR)/common/symbols-dummy.o -o $(@D)/.$(@F).0
 	$(NM) -pa --format=sysv $(@D)/.$(@F).0 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).0.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0.o
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< \
+	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< \
 	    $(@D)/.$(@F).0.o -o $(@D)/.$(@F).1
 	$(NM) -pa --format=sysv $(@D)/.$(@F).1 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).1.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1.o
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
+	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).1.o -o $@
 	$(NM) -pa --format=sysv $(@D)/$(@F) \
 		| $(BASEDIR)/tools/symbols --all-symbols --xensyms --sysv --sort \
@@ -109,13 +109,13 @@ $(TARGET)-syms: $(BASEDIR)/prelink.o xen.lds
 .PHONY: include
 include:
 
-xen.lds: xen.lds.S FORCE
+$(obj)/xen.lds: $(src)/xen.lds.S FORCE
 	$(call if_changed,cpp_lds_S)
 
-dtb.o: $(patsubst "%",%,$(CONFIG_DTB_FILE))
+$(obj)/dtb.o: $(patsubst "%",%,$(CONFIG_DTB_FILE))
 
 .PHONY: clean
 clean::
-	rm -f xen.lds
+	rm -f $(obj)/xen.lds
 	rm -f $(BASEDIR)/.xen-syms.[0-9]*
 	rm -f $(TARGET).efi
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 823f8fed4144..bb2da0d013fb 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -82,7 +82,7 @@ extra-y += asm-macros.i
 extra-y += xen.lds
 
 ifneq ($(CONFIG_HVM),y)
-x86_emulate.o: CFLAGS-y += -Wno-unused-label
+$(obj)/x86_emulate.o: CFLAGS-y += -Wno-unused-label
 endif
 
 efi-y := $(shell if [ ! -r $(BASEDIR)/include/xen/compile.h -o \
@@ -113,8 +113,8 @@ syms-warn-dup-$(CONFIG_SUPPRESS_DUPLICATE_SYMBOL_WARNINGS) :=
 syms-warn-dup-$(CONFIG_ENFORCE_UNIQUE_SYMBOLS) := --error-dup
 
 $(TARGET): TMP = $(@D)/.$(@F).elf32
-$(TARGET): $(TARGET)-syms $(efi-y) boot/mkelf32
-	./boot/mkelf32 $(notes_phdrs) $(TARGET)-syms $(TMP) $(XEN_IMG_OFFSET) \
+$(TARGET): $(TARGET)-syms $(efi-y) $(obj)/boot/mkelf32
+	$(obj)/boot/mkelf32 $(notes_phdrs) $(TARGET)-syms $(TMP) $(XEN_IMG_OFFSET) \
 	               `$(NM) $(TARGET)-syms | sed -ne 's/^\([^ ]*\) . __2M_rwdata_end$$/0x\1/p'`
 	od -t x4 -N 8192 $(TMP)  | grep 1badb002 > /dev/null || \
 		{ echo "No Multiboot1 header found" >&2; false; }
@@ -126,27 +126,27 @@ ifneq ($(efi-y),)
 CFLAGS-$(XEN_BUILD_EFI) += -DXEN_BUILD_EFI
 endif # $(efi-y)
 
-$(TARGET)-syms: $(BASEDIR)/prelink.o xen.lds
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
+$(TARGET)-syms: $(BASEDIR)/prelink.o $(obj)/xen.lds
+	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
 	    $(BASEDIR)/common/symbols-dummy.o -o $(@D)/.$(@F).0
 	$(NM) -pa --format=sysv $(@D)/.$(@F).0 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort \
 		>$(@D)/.$(@F).0.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0.o
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
+	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).0.o -o $(@D)/.$(@F).1
 	$(NM) -pa --format=sysv $(@D)/.$(@F).1 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort $(syms-warn-dup-y) \
 		>$(@D)/.$(@F).1.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1.o
-	$(LD) $(XEN_LDFLAGS) -T xen.lds -N $< $(build_id_linker) \
+	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).1.o -o $@
 	$(NM) -pa --format=sysv $(@D)/$(@F) \
 		| $(BASEDIR)/tools/symbols --all-symbols --xensyms --sysv --sort \
 		>$(@D)/$(@F).map
 	rm -f $(@D)/.$(@F).[0-9]* $(@D)/..$(@F).[0-9]*
 
-note.o: $(TARGET)-syms
+$(obj)/note.o: $(TARGET)-syms
 	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $< $@.bin
 	$(OBJCOPY) -I binary -O elf64-x86-64 -B i386:x86-64 \
 		--rename-section=.data=.note.gnu.build-id -S $@.bin $@
@@ -165,25 +165,25 @@ ifdef SOURCE_DATE_EPOCH
 EFI_LDFLAGS += --no-insert-timestamp
 endif
 
-$(TARGET).efi: VIRT_BASE = 0x$(shell $(NM) efi/relocs-dummy.o | sed -n 's, A VIRT_START$$,,p')
+$(TARGET).efi: VIRT_BASE = 0x$(shell $(NM) $(obj)/efi/relocs-dummy.o | sed -n 's, A VIRT_START$$,,p')
 ifeq ($(MKRELOC),:)
 relocs-dummy :=
 $(TARGET).efi: ALT_BASE :=
 else
-relocs-dummy := efi/relocs-dummy.o
-$(TARGET).efi: ALT_BASE = 0x$(shell $(NM) efi/relocs-dummy.o | sed -n 's, A ALT_START$$,,p')
+relocs-dummy := $(obj)/efi/relocs-dummy.o
+$(TARGET).efi: ALT_BASE = 0x$(shell $(NM) $(obj)/efi/relocs-dummy.o | sed -n 's, A ALT_START$$,,p')
 endif
 
 ifneq ($(build_id_linker),)
 ifeq ($(call ld-ver-build-id,$(LD) $(filter -m%,$(EFI_LDFLAGS))),y)
 CFLAGS-y += -DBUILD_ID_EFI
 EFI_LDFLAGS += $(build_id_linker)
-note_file := efi/buildid.o
+note_file := $(obj)/efi/buildid.o
 # NB: this must be the last input in the linker call, because inputs following
 # the -b option will all be treated as being in the specified format.
 note_file_option := -b pe-x86-64 $(note_file)
 else
-note_file := note.o
+note_file := $(obj)/note.o
 endif
 else
 note_file :=
@@ -192,25 +192,25 @@ note_file_option ?= $(note_file)
 
 ifeq ($(XEN_BUILD_PE),y)
 extra-y += efi.lds
-$(TARGET).efi: $(BASEDIR)/prelink.o $(note_file) efi.lds efi/relocs-dummy.o efi/mkreloc
+$(TARGET).efi: $(BASEDIR)/prelink.o $(note_file) $(obj)/efi.lds $(obj)/efi/relocs-dummy.o $(obj)/efi/mkreloc
 ifeq ($(CONFIG_DEBUG_INFO),y)
 	$(if $(filter --strip-debug,$(EFI_LDFLAGS)),echo,:) "Will strip debug info from $(@F)"
 endif
 	$(foreach base, $(VIRT_BASE) $(ALT_BASE), \
-	          $(LD) $(call EFI_LDFLAGS,$(base)) -T efi.lds -N $< $(relocs-dummy) \
+	          $(LD) $(call EFI_LDFLAGS,$(base)) -T $(obj)/efi.lds -N $< $(relocs-dummy) \
 	                $(BASEDIR)/common/symbols-dummy.o $(note_file_option) -o $(@D)/.$(@F).$(base).0 &&) :
 	$(MKRELOC) $(foreach base,$(VIRT_BASE) $(ALT_BASE),$(@D)/.$(@F).$(base).0) >$(@D)/.$(@F).0r.S
 	$(NM) -pa --format=sysv $(@D)/.$(@F).$(VIRT_BASE).0 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).0s.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0r.o $(@D)/.$(@F).0s.o
 	$(foreach base, $(VIRT_BASE) $(ALT_BASE), \
-	          $(LD) $(call EFI_LDFLAGS,$(base)) -T efi.lds -N $< \
+	          $(LD) $(call EFI_LDFLAGS,$(base)) -T $(obj)/efi.lds -N $< \
 	                $(@D)/.$(@F).0r.o $(@D)/.$(@F).0s.o $(note_file_option) -o $(@D)/.$(@F).$(base).1 &&) :
 	$(MKRELOC) $(foreach base,$(VIRT_BASE) $(ALT_BASE),$(@D)/.$(@F).$(base).1) >$(@D)/.$(@F).1r.S
 	$(NM) -pa --format=sysv $(@D)/.$(@F).$(VIRT_BASE).1 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).1s.S
 	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1r.o $(@D)/.$(@F).1s.o
-	$(LD) $(call EFI_LDFLAGS,$(VIRT_BASE)) -T efi.lds -N $< \
+	$(LD) $(call EFI_LDFLAGS,$(VIRT_BASE)) -T $(obj)/efi.lds -N $< \
 	                $(@D)/.$(@F).1r.o $(@D)/.$(@F).1s.o $(note_file_option) -o $@
 	$(NM) -pa --format=sysv $(@D)/$(@F) \
 		| $(BASEDIR)/tools/symbols --all-symbols --xensyms --sysv --sort >$(@D)/$(@F).map
@@ -222,14 +222,14 @@ $(TARGET).efi: FORCE
 endif
 
 # These should already have been rebuilt when building the prerequisite of "prelink.o"
-efi/buildid.o efi/relocs-dummy.o: ;
+$(obj)/efi/buildid.o $(obj)/efi/relocs-dummy.o: ;
 
 .PHONY: include
 include: $(BASEDIR)/arch/x86/include/asm/asm-macros.h
 
-asm-macros.i: CFLAGS-y += -D__ASSEMBLY__ -P
+$(obj)/asm-macros.i: CFLAGS-y += -D__ASSEMBLY__ -P
 
-$(BASEDIR)/arch/x86/include/asm/asm-macros.h: asm-macros.i Makefile
+$(BASEDIR)/arch/x86/include/asm/asm-macros.h: $(obj)/asm-macros.i $(src)/Makefile
 	echo '#if 0' >$@.new
 	echo '.if 0' >>$@.new
 	echo '#endif' >>$@.new
@@ -243,14 +243,14 @@ $(BASEDIR)/arch/x86/include/asm/asm-macros.h: asm-macros.i Makefile
 	echo '#endif' >>$@.new
 	$(call move-if-changed,$@.new,$@)
 
-efi.lds: AFLAGS-y += -DEFI
-xen.lds efi.lds: xen.lds.S FORCE
+$(obj)/efi.lds: AFLAGS-y += -DEFI
+$(obj)/xen.lds $(obj)/efi.lds: $(src)/xen.lds.S FORCE
 	$(call if_changed,cpp_lds_S)
 
-boot/mkelf32: boot/mkelf32.c
+$(obj)/boot/mkelf32: $(src)/boot/mkelf32.c
 	$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
 
-efi/mkreloc: efi/mkreloc.c
+$(obj)/efi/mkreloc: $(src)/efi/mkreloc.c
 	$(HOSTCC) $(HOSTCFLAGS) -g -o $@ $<
 
 .PHONY: clean
diff --git a/xen/arch/x86/boot/Makefile b/xen/arch/x86/boot/Makefile
index 9b31bfcbfb8a..53d357489df2 100644
--- a/xen/arch/x86/boot/Makefile
+++ b/xen/arch/x86/boot/Makefile
@@ -1,8 +1,8 @@
 obj-bin-y += head.o
 
-DEFS_H_DEPS = defs.h $(BASEDIR)/include/xen/stdbool.h
+DEFS_H_DEPS = $(src)/defs.h $(BASEDIR)/include/xen/stdbool.h
 
-CMDLINE_DEPS = $(DEFS_H_DEPS) video.h
+CMDLINE_DEPS = $(DEFS_H_DEPS) $(src)/video.h
 
 RELOC_DEPS = $(DEFS_H_DEPS) \
 	     $(BASEDIR)/include/generated/autoconf.h \
@@ -11,10 +11,10 @@ RELOC_DEPS = $(DEFS_H_DEPS) \
 	     $(BASEDIR)/include/xen/multiboot2.h \
 	     $(BASEDIR)/include/public/arch-x86/hvm/start_info.h
 
-head.o: cmdline.S reloc.S
+$(obj)/head.o: $(obj)/cmdline.S $(obj)/reloc.S
 
-cmdline.S: cmdline.c $(CMDLINE_DEPS)
-	$(MAKE) -f build32.mk $@ CMDLINE_DEPS="$(CMDLINE_DEPS)"
+$(obj)/cmdline.S: $(src)/cmdline.c $(CMDLINE_DEPS)
+	$(MAKE) -f build32.mk -C $(obj) $(@F) CMDLINE_DEPS="$(CMDLINE_DEPS)"
 
-reloc.S: reloc.c $(RELOC_DEPS)
-	$(MAKE) -f build32.mk $@ RELOC_DEPS="$(RELOC_DEPS)"
+$(obj)/reloc.S: $(src)/reloc.c $(RELOC_DEPS)
+	$(MAKE) -f build32.mk -C $(obj) $(@F) RELOC_DEPS="$(RELOC_DEPS)"
diff --git a/xen/arch/x86/efi/Makefile b/xen/arch/x86/efi/Makefile
index 87b927ed865b..ac815f02cb5e 100644
--- a/xen/arch/x86/efi/Makefile
+++ b/xen/arch/x86/efi/Makefile
@@ -3,16 +3,16 @@ CFLAGS-y += -fshort-wchar
 quiet_cmd_objcopy_o_ihex = OBJCOPY $@
 cmd_objcopy_o_ihex = $(OBJCOPY) -I ihex -O binary $< $@
 
-%.o: %.ihex FORCE
+$(obj)/%.o: $(src)/%.ihex FORCE
 	$(call if_changed,objcopy_o_ihex)
 
-boot.init.o: buildid.o
+$(obj)/boot.init.o: $(obj)/buildid.o
 
 EFIOBJ-y := boot.init.o pe.init.o ebmalloc.o runtime.o
 EFIOBJ-$(CONFIG_COMPAT) += compat.o
 
 $(call cc-option-add,cflags-stack-boundary,CC,-mpreferred-stack-boundary=4)
-$(EFIOBJ-y): CFLAGS-stack-boundary := $(cflags-stack-boundary)
+$(addprefix $(obj)/,$(EFIOBJ-y)): CFLAGS-stack-boundary := $(cflags-stack-boundary)
 
 obj-y := stub.o
 obj-$(XEN_BUILD_EFI) := $(filter-out %.init.o,$(EFIOBJ-y))
diff --git a/xen/common/Makefile b/xen/common/Makefile
index 141d7d40d3dc..ca839118e4d1 100644
--- a/xen/common/Makefile
+++ b/xen/common/Makefile
@@ -75,13 +75,13 @@ obj-$(CONFIG_NEEDS_LIBELF) += libelf/
 obj-$(CONFIG_HAS_DEVICE_TREE) += libfdt/
 
 CONF_FILE := $(if $(patsubst /%,,$(KCONFIG_CONFIG)),$(BASEDIR)/)$(KCONFIG_CONFIG)
-config.gz: $(CONF_FILE)
+$(obj)/config.gz: $(CONF_FILE)
 	gzip -n -c $< >$@
 
-config_data.o: config.gz
+$(obj)/config_data.o: $(obj)/config.gz
 
-config_data.S: $(BASEDIR)/tools/binfile FORCE
-	$(call if_changed,binfile,config.gz xen_config_data)
+$(obj)/config_data.S: $(BASEDIR)/tools/binfile FORCE
+	$(call if_changed,binfile,$(obj)/config.gz xen_config_data)
 targets += config_data.S
 
 clean::
diff --git a/xen/common/libelf/Makefile b/xen/common/libelf/Makefile
index a92326c982e9..8a4522e4e141 100644
--- a/xen/common/libelf/Makefile
+++ b/xen/common/libelf/Makefile
@@ -7,10 +7,10 @@ OBJCOPYFLAGS := $(foreach s,$(SECTIONS),--rename-section .$(s)=.init.$(s))
 
 CFLAGS-y += -Wno-pointer-sign
 
-libelf.o: libelf-temp.o FORCE
+$(obj)/libelf.o: $(obj)/libelf-temp.o FORCE
 	$(call if_changed,objcopy)
 
-libelf-temp.o: $(libelf-objs) FORCE
+$(obj)/libelf-temp.o: $(addprefix $(obj)/,$(libelf-objs)) FORCE
 	$(call if_changed,ld)
 
 extra-y += libelf-temp.o $(libelf-objs)
diff --git a/xen/common/libfdt/Makefile b/xen/common/libfdt/Makefile
index 6bd207cf8ffa..6708af12e583 100644
--- a/xen/common/libfdt/Makefile
+++ b/xen/common/libfdt/Makefile
@@ -1,4 +1,4 @@
-include Makefile.libfdt
+include $(src)/Makefile.libfdt
 
 SECTIONS := text data $(SPECIAL_DATA_SECTIONS)
 OBJCOPYFLAGS := $(foreach s,$(SECTIONS),--rename-section .$(s)=.init.$(s))
@@ -8,10 +8,10 @@ nocov-y += libfdt.o
 
 CFLAGS-y += -I$(BASEDIR)/include/xen/libfdt/
 
-libfdt.o: libfdt-temp.o FORCE
+$(obj)/libfdt.o: $(obj)/libfdt-temp.o FORCE
 	$(call if_changed,objcopy)
 
-libfdt-temp.o: $(LIBFDT_OBJS) FORCE
+$(obj)/libfdt-temp.o: $(addprefix $(obj)/,$(LIBFDT_OBJS)) FORCE
 	$(call if_changed,ld)
 
 extra-y += libfdt-temp.o $(LIBFDT_OBJS)
diff --git a/xen/include/Makefile b/xen/include/Makefile
index 65a938a66555..69224e22a950 100644
--- a/xen/include/Makefile
+++ b/xen/include/Makefile
@@ -40,53 +40,53 @@ cppflags-$(CONFIG_X86)    += -m32
 endif
 
 .PHONY: all
-all: $(headers-y)
+all: $(addprefix $(obj)/,$(headers-y))
 
-compat/%.h: compat/%.i Makefile $(BASEDIR)/tools/compat-build-header.py
-	$(PYTHON) $(BASEDIR)/tools/compat-build-header.py <$< $@ >>$@.new; \
+$(obj)/compat/%.h: $(obj)/compat/%.i $(src)/Makefile $(BASEDIR)/tools/compat-build-header.py
+	$(PYTHON) $(BASEDIR)/tools/compat-build-header.py <$< $(patsubst $(obj)/%,%,$@) >>$@.new; \
 	mv -f $@.new $@
 
-compat/%.i: compat/%.c Makefile
+$(obj)/compat/%.i: $(obj)/compat/%.c $(src)/Makefile
 	$(CPP) $(filter-out -Wa$(comma)% -include %/include/xen/config.h,$(XEN_CFLAGS)) $(cppflags-y) -o $@ $<
 
-compat/%.c: public/%.h xlat.lst Makefile $(BASEDIR)/tools/compat-build-source.py
+$(obj)/compat/%.c: $(src)/public/%.h $(src)/xlat.lst $(src)/Makefile $(BASEDIR)/tools/compat-build-source.py
 	mkdir -p $(@D)
-	$(PYTHON) $(BASEDIR)/tools/compat-build-source.py xlat.lst <$< >$@.new
+	$(PYTHON) $(BASEDIR)/tools/compat-build-source.py $(src)/xlat.lst <$< >$@.new
 	mv -f $@.new $@
 
-compat/.xlat/%.h: compat/%.h compat/.xlat/%.lst $(BASEDIR)/tools/get-fields.sh Makefile
+$(obj)/compat/.xlat/%.h: $(obj)/compat/%.h $(obj)/compat/.xlat/%.lst $(BASEDIR)/tools/get-fields.sh $(src)/Makefile
 	export PYTHON=$(PYTHON); \
 	while read what name; do \
 		$(SHELL) $(BASEDIR)/tools/get-fields.sh "$$what" compat_$$name $< || exit $$?; \
 	done <$(patsubst compat/%,compat/.xlat/%,$(basename $<)).lst >$@.new
 	mv -f $@.new $@
 
-.PRECIOUS: compat/.xlat/%.lst
-compat/.xlat/%.lst: xlat.lst Makefile
+.PRECIOUS: $(obj)/compat/.xlat/%.lst
+$(obj)/compat/.xlat/%.lst: $(src)/xlat.lst $(src)/Makefile
 	mkdir -p $(@D)
 	grep -v '^[[:blank:]]*#' $< | sed -ne 's,@arch@,$(compat-arch-y),g' -re 's,[[:blank:]]+$*\.h[[:blank:]]*$$,,p' >$@.new
 	$(call move-if-changed,$@.new,$@)
 
-xlat-y := $(shell sed -ne 's,@arch@,$(compat-arch-y),g' -re 's,^[?!][[:blank:]]+[^[:blank:]]+[[:blank:]]+,,p' xlat.lst | uniq)
+xlat-y := $(shell sed -ne 's,@arch@,$(compat-arch-y),g' -re 's,^[?!][[:blank:]]+[^[:blank:]]+[[:blank:]]+,,p' $(src)/xlat.lst | uniq)
 xlat-y := $(filter $(patsubst compat/%,%,$(headers-y)),$(xlat-y))
 
-compat/xlat.h: $(addprefix compat/.xlat/,$(xlat-y)) config/auto.conf Makefile
+$(obj)/compat/xlat.h: $(addprefix $(obj)/compat/.xlat/,$(xlat-y)) $(obj)/config/auto.conf $(src)/Makefile
 	cat $(filter %.h,$^) >$@.new
 	mv -f $@.new $@
 
 ifeq ($(XEN_TARGET_ARCH),$(XEN_COMPILE_ARCH))
 
-all: headers.chk headers99.chk headers++.chk
+all: $(obj)/headers.chk $(obj)/headers99.chk $(obj)/headers++.chk
 
-PUBLIC_HEADERS := $(filter-out public/arch-% public/dom0_ops.h, $(wildcard public/*.h public/*/*.h))
+PUBLIC_HEADERS := $(filter-out $(src)/public/arch-% $(src)/public/dom0_ops.h, $(wildcard $(src)/public/*.h $(src)/public/*/*.h))
 
-PUBLIC_C99_HEADERS := public/io/9pfs.h public/io/pvcalls.h
-PUBLIC_ANSI_HEADERS := $(filter-out public/%ctl.h public/xsm/% public/%hvm/save.h $(PUBLIC_C99_HEADERS), $(PUBLIC_HEADERS))
+PUBLIC_C99_HEADERS := $(src)/public/io/9pfs.h $(src)/public/io/pvcalls.h
+PUBLIC_ANSI_HEADERS := $(filter-out $(src)/public/%ctl.h $(src)/public/xsm/% $(src)/public/%hvm/save.h $(PUBLIC_C99_HEADERS), $(PUBLIC_HEADERS))
 
 public/io/9pfs.h-prereq := string
 public/io/pvcalls.h-prereq := string
 
-headers.chk: $(PUBLIC_ANSI_HEADERS) Makefile
+$(obj)/headers.chk: $(PUBLIC_ANSI_HEADERS) $(src)/Makefile
 	for i in $(filter %.h,$^); do \
 	    $(CC) -x c -ansi -Wall -Werror -include stdint.h \
 	          -S -o /dev/null $$i || exit 1; \
@@ -94,7 +94,7 @@ headers.chk: $(PUBLIC_ANSI_HEADERS) Makefile
 	done >$@.new
 	mv $@.new $@
 
-headers99.chk: $(PUBLIC_C99_HEADERS) Makefile
+$(obj)/headers99.chk: $(PUBLIC_C99_HEADERS) $(src)/Makefile
 	rm -f $@.new
 	$(foreach i, $(filter %.h,$^),                                        \
 	    echo "#include "\"$(i)\"                                          \
@@ -104,7 +104,7 @@ headers99.chk: $(PUBLIC_C99_HEADERS) Makefile
 	    || exit $$?; echo $(i) >> $@.new;)
 	mv $@.new $@
 
-headers++.chk: $(PUBLIC_HEADERS) Makefile
+$(obj)/headers++.chk: $(PUBLIC_HEADERS) $(src)/Makefile
 	rm -f $@.new
 	if ! $(CXX) -v >/dev/null 2>&1; then                                  \
 	    touch $@.new;                                                     \
@@ -113,7 +113,7 @@ headers++.chk: $(PUBLIC_HEADERS) Makefile
 	$(foreach i, $(filter %.h,$^),                                        \
 	    echo "#include "\"$(i)\"                                          \
 	    | $(CXX) -x c++ -std=gnu++98 -Wall -Werror -D__XEN_TOOLS__        \
-	      -include stdint.h -include public/xen.h                         \
+	      -include stdint.h -include $(src)/public/xen.h                  \
 	      $(foreach j, $($(i)-prereq), -include c$(j)) -S -o /dev/null -  \
 	    || exit $$?; echo $(i) >> $@.new;)
 	mv $@.new $@
@@ -123,7 +123,7 @@ endif
 ifeq ($(XEN_TARGET_ARCH),x86_64)
 .PHONY: lib-x86-all
 lib-x86-all:
-	$(MAKE) -C xen/lib/x86 all
+	$(MAKE) -C $(obj)/xen/lib/x86 all
 
 all: lib-x86-all
 endif
diff --git a/xen/scripts/Makefile.clean b/xen/scripts/Makefile.clean
index b6df9e861e6e..36b7e7e92f93 100644
--- a/xen/scripts/Makefile.clean
+++ b/xen/scripts/Makefile.clean
@@ -3,11 +3,14 @@
 # Cleaning up
 # ==========================================================================
 
+obj := .
+src := $(obj)
+
 clean::
 
 include $(BASEDIR)/scripts/Kbuild.include
 
-include Makefile
+include $(src)/Makefile
 
 # Figure out what we need to clean from the various variables
 # ==========================================================================
diff --git a/xen/xsm/flask/Makefile b/xen/xsm/flask/Makefile
index f4d4038c01bd..ab26b8682e46 100644
--- a/xen/xsm/flask/Makefile
+++ b/xen/xsm/flask/Makefile
@@ -4,46 +4,46 @@ obj-y += flask_op.o
 
 obj-y += ss/
 
-CFLAGS-y += -I./include
+CFLAGS-y += -I$(obj)/include
 
 AWK = awk
 
-FLASK_H_DEPEND = policy/security_classes policy/initial_sids
-AV_H_DEPEND = policy/access_vectors
+FLASK_H_DEPEND := $(addprefix $(src)/policy/,security_classes initial_sids)
+AV_H_DEPEND = $(src)/policy/access_vectors
 
-FLASK_H_FILES = include/flask.h include/class_to_string.h include/initial_sid_to_string.h
-AV_H_FILES = include/av_perm_to_string.h include/av_permissions.h
-ALL_H_FILES = $(FLASK_H_FILES) $(AV_H_FILES)
+FLASK_H_FILES := flask.h class_to_string.h initial_sid_to_string.h
+AV_H_FILES := av_perm_to_string.h av_permissions.h
+ALL_H_FILES := $(addprefix include/,$(FLASK_H_FILES) $(AV_H_FILES))
 
-$(obj-y) ss/built_in.o: $(ALL_H_FILES)
+$(addprefix $(obj)/,$(obj-y)) $(obj)/ss/built_in.o: $(addprefix $(obj)/,$(ALL_H_FILES))
 extra-y += $(ALL_H_FILES)
 
-mkflask := policy/mkflask.sh
+mkflask := $(src)/policy/mkflask.sh
 quiet_cmd_mkflask = MKFLASK $@
-cmd_mkflask = $(SHELL) $(mkflask) $(AWK) include $(FLASK_H_DEPEND)
+cmd_mkflask = $(SHELL) $(mkflask) $(AWK) $(obj)/include $(FLASK_H_DEPEND)
 
-$(subst include/,%/,$(FLASK_H_FILES)): $(FLASK_H_DEPEND) $(mkflask) FORCE
+$(addprefix $(obj)/%/,$(FLASK_H_FILES)): $(FLASK_H_DEPEND) $(mkflask) FORCE
 	$(call if_changed,mkflask)
 
-mkaccess := policy/mkaccess_vector.sh
+mkaccess := $(src)/policy/mkaccess_vector.sh
 quiet_cmd_mkaccess = MKACCESS VECTOR $@
-cmd_mkaccess = $(SHELL) $(mkaccess) $(AWK) $(AV_H_DEPEND)
+cmd_mkaccess = $(SHELL) $(mkaccess) $(AWK) $(obj)/include $(AV_H_DEPEND)
 
-$(subst include/,%/,$(AV_H_FILES)): $(AV_H_DEPEND) $(mkaccess) FORCE
+$(addprefix $(obj)/%/,$(AV_H_FILES)): $(AV_H_DEPEND) $(mkaccess) FORCE
 	$(call if_changed,mkaccess)
 
 obj-bin-$(CONFIG_XSM_FLASK_POLICY) += flask-policy.o
-flask-policy.o: policy.bin
+$(obj)/flask-policy.o: $(obj)/policy.bin
 
-flask-policy.S: BINFILE_FLAGS := -i
-flask-policy.S: $(BASEDIR)/tools/binfile FORCE
-	$(call if_changed,binfile,policy.bin xsm_flask_init_policy)
+$(obj)/flask-policy.S: BINFILE_FLAGS := -i
+$(obj)/flask-policy.S: $(BASEDIR)/tools/binfile FORCE
+	$(call if_changed,binfile,$(obj)/policy.bin xsm_flask_init_policy)
 targets += flask-policy.S
 
 FLASK_BUILD_DIR := $(CURDIR)
 POLICY_SRC := $(FLASK_BUILD_DIR)/xenpolicy-$(XEN_FULLVERSION)
 
-policy.bin: FORCE
+$(obj)/policy.bin: FORCE
 	$(MAKE) -f $(XEN_ROOT)/tools/flask/policy/Makefile.common -C $(XEN_ROOT)/tools/flask/policy FLASK_BUILD_DIR=$(FLASK_BUILD_DIR)
 	cmp -s $(POLICY_SRC) $@ || cp $(POLICY_SRC) $@
 
diff --git a/xen/xsm/flask/policy/mkaccess_vector.sh b/xen/xsm/flask/policy/mkaccess_vector.sh
index 942ede4713f1..ad9772193bff 100755
--- a/xen/xsm/flask/policy/mkaccess_vector.sh
+++ b/xen/xsm/flask/policy/mkaccess_vector.sh
@@ -8,9 +8,12 @@ set -e
 awk=$1
 shift
 
+output_dir=$1
+shift
+
 # output files
-av_permissions="include/av_permissions.h"
-av_perm_to_string="include/av_perm_to_string.h"
+av_permissions="$output_dir/av_permissions.h"
+av_perm_to_string="$output_dir/av_perm_to_string.h"
 
 cat $* | $awk "
 BEGIN	{
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 25/51] build: rework test/livepatch/Makefile
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (23 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 24/51] build: prepare to always invoke $(MAKE) from xen/, use $(obj) Anthony PERARD
@ 2021-08-24 10:50 ` 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
                   ` (29 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu,
	Konrad Rzeszutek Wilk, Ross Lagerwall

This rework the livepatch/Makefile to make it less repetitive and make
use of the facilities. All the targets to be built are now listed in
$(extra-y) which will allow Rules.mk to build them without the need of
a local target in a future patch.

There are some changes/fixes in this patch:
- when "xen-syms" is used for a target, it is added to the dependency
  list of the target, which allow to rebuild the target when xen-syms
  changes. But if "xen-syms" is missing, make simply fails.
- modinfo.o wasn't removing it's $@.bin file like the other targets,
  this is now done.
- The command to build *.livepatch targets as been fixed to use
  $(XEN_LDFLAGS) rather than just $(LDFLAGS) which is a fallout from
  2740d96efdd3 ("xen/build: have the root Makefile generates the
  CFLAGS")

make will findout the dependencies of the *.livepatch files and thus
what to built by "looking" at the objects listed in the *-objs
variables. The actual dependencies is generated by the new
"multi_depend" macro.

"$(targets)" needs to be updated with the objects listed in the
different *-objs variables to allow make to load the .*.cmd dependency
files.

This patch copies the macro "multi_depend" from Linux 5.12.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/scripts/Kbuild.include  |   9 ++
 xen/test/livepatch/Makefile | 213 ++++++++++++++----------------------
 2 files changed, 91 insertions(+), 131 deletions(-)

diff --git a/xen/scripts/Kbuild.include b/xen/scripts/Kbuild.include
index 83c7e1457baa..563b323f0501 100644
--- a/xen/scripts/Kbuild.include
+++ b/xen/scripts/Kbuild.include
@@ -151,3 +151,12 @@ why =                                                                        \
 
 echo-why = $(call escsq, $(strip $(why)))
 endif
+
+# Useful for describing the dependency of composite objects
+# Usage:
+#   $(call multi_depend, multi_used_targets, suffix_to_remove, suffix_to_add)
+define multi_depend
+$(foreach m, $(notdir $1), \
+	$(eval $(obj)/$m: \
+	$(addprefix $(obj)/, $(foreach s, $3, $($(m:%$(strip $2)=%$(s)))))))
+endef
diff --git a/xen/test/livepatch/Makefile b/xen/test/livepatch/Makefile
index 148dddb90473..e59245323e92 100644
--- a/xen/test/livepatch/Makefile
+++ b/xen/test/livepatch/Makefile
@@ -12,81 +12,29 @@ CODE_ADDR=$(shell nm --defined $(1) | grep $(2) | awk '{print "0x"$$1}')
 CODE_SZ=$(shell nm --defined -S $(1) | grep $(2) | awk '{ print "0x"$$2}')
 
 .PHONY: default
-
-LIVEPATCH := xen_hello_world.livepatch
-LIVEPATCH_BYE := xen_bye_world.livepatch
-LIVEPATCH_REPLACE := xen_replace_world.livepatch
-LIVEPATCH_NOP := xen_nop.livepatch
-LIVEPATCH_NO_XEN_BUILDID := xen_no_xen_buildid.livepatch
-LIVEPATCH_PREPOST_HOOKS := xen_prepost_hooks.livepatch
-LIVEPATCH_PREPOST_HOOKS_FAIL := xen_prepost_hooks_fail.livepatch
-LIVEPATCH_ACTION_HOOKS := xen_action_hooks.livepatch
-LIVEPATCH_ACTION_HOOKS_NOFUNC := xen_action_hooks_nofunc.livepatch
-LIVEPATCH_ACTION_HOOKS_MARKER:= xen_action_hooks_marker.livepatch
-LIVEPATCH_ACTION_HOOKS_NOAPPLY:= xen_action_hooks_noapply.livepatch
-LIVEPATCH_ACTION_HOOKS_NOREVERT:= xen_action_hooks_norevert.livepatch
-LIVEPATCH_EXPECTATIONS:= xen_expectations.livepatch
-LIVEPATCH_EXPECTATIONS_FAIL:= xen_expectations_fail.livepatch
-
-LIVEPATCHES += $(LIVEPATCH)
-LIVEPATCHES += $(LIVEPATCH_BYE)
-LIVEPATCHES += $(LIVEPATCH_REPLACE)
-LIVEPATCHES += $(LIVEPATCH_NOP)
-LIVEPATCHES += $(LIVEPATCH_NO_XEN_BUILDID)
-LIVEPATCHES += $(LIVEPATCH_PREPOST_HOOKS)
-LIVEPATCHES += $(LIVEPATCH_PREPOST_HOOKS_FAIL)
-LIVEPATCHES += $(LIVEPATCH_ACTION_HOOKS)
-LIVEPATCHES += $(LIVEPATCH_ACTION_HOOKS_NOFUNC)
-LIVEPATCHES += $(LIVEPATCH_ACTION_HOOKS_MARKER)
-LIVEPATCHES += $(LIVEPATCH_ACTION_HOOKS_NOAPPLY)
-LIVEPATCHES += $(LIVEPATCH_ACTION_HOOKS_NOREVERT)
-LIVEPATCHES += $(LIVEPATCH_EXPECTATIONS)
-LIVEPATCHES += $(LIVEPATCH_EXPECTATIONS_FAIL)
-
-LIVEPATCH_DEBUG_DIR ?= $(DEBUG_DIR)/xen-livepatch
-
 build default: livepatch
 
-install: livepatch
-	$(INSTALL_DIR) $(DESTDIR)$(LIVEPATCH_DEBUG_DIR)
-	$(INSTALL_DATA) $(LIVEPATCHES) $(DESTDIR)$(LIVEPATCH_DEBUG_DIR)
-
-uninstall:
-	cd $(DESTDIR)$(LIVEPATCH_DEBUG_DIR) && rm -f $(LIVEPATCHES)
-
-.PHONY: clean
-clean::
-	rm -f *.o .*.o.d *.livepatch config.h expect_config.h
+extra-y += xen_hello_world.livepatch
+xen_hello_world-objs := xen_hello_world_func.o xen_hello_world.o note.o xen_note.o modinfo.o
+$(obj)/xen_hello_world.o: $(obj)/config.h
 
 #
 # To compute these values we need the binary files: xen-syms
 # and xen_hello_world_func.o to be already compiled.
 #
-.PHONY: config.h
-config.h: OLD_CODE_SZ=$(call CODE_SZ,$(BASEDIR)/xen-syms,xen_extra_version)
-config.h: NEW_CODE_SZ=$(call CODE_SZ,$<,xen_hello_world)
-config.h: MINOR_VERSION_SZ=$(call CODE_SZ,$(BASEDIR)/xen-syms,xen_minor_version)
-config.h: MINOR_VERSION_ADDR=$(call CODE_ADDR,$(BASEDIR)/xen-syms,xen_minor_version)
-config.h: xen_hello_world_func.o
+$(obj)/config.h: $(obj)/xen_hello_world_func.o
 	(set -e; \
-	 echo "#define NEW_CODE_SZ $(NEW_CODE_SZ)"; \
-	 echo "#define MINOR_VERSION_SZ $(MINOR_VERSION_SZ)"; \
-	 echo "#define MINOR_VERSION_ADDR $(MINOR_VERSION_ADDR)"; \
-	 echo "#define OLD_CODE_SZ $(OLD_CODE_SZ)") > $@
+	 echo "#define NEW_CODE_SZ $(call CODE_SZ,$<,xen_hello_world)"; \
+	 echo "#define MINOR_VERSION_SZ $(call CODE_SZ,$(BASEDIR)/xen-syms,xen_minor_version)"; \
+	 echo "#define MINOR_VERSION_ADDR $(call CODE_ADDR,$(BASEDIR)/xen-syms,xen_minor_version)"; \
+	 echo "#define OLD_CODE_SZ $(call CODE_SZ,$(BASEDIR)/xen-syms,xen_extra_version)") > $@
 
-xen_hello_world.o: config.h
-
-.PHONY: $(LIVEPATCH)
-$(LIVEPATCH): xen_hello_world_func.o xen_hello_world.o note.o xen_note.o modinfo.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH) $^
-
-.PHONY: modinfo.o
-modinfo.o:
+$(obj)/modinfo.o:
 	(set -e; \
 	 printf "LIVEPATCH_RULEZ\0") > $@.bin
 	$(OBJCOPY) $(OBJCOPY_MAGIC) \
 		   --rename-section=.data=.modinfo,alloc,load,readonly,data,contents -S $@.bin $@
-	#rm -f $@.bin
+	rm -f $@.bin
 
 #
 # This target is only accessible if CONFIG_LIVEPATCH is defined, which
@@ -97,9 +45,8 @@ modinfo.o:
 # not be built (it is for EFI builds), and that we do not have
 # the note.o.bin to muck with (as it gets deleted)
 #
-.PHONY: note.o
-note.o:
-	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $(BASEDIR)/xen-syms $@.bin
+$(obj)/note.o: $(BASEDIR)/xen-syms
+	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $< $@.bin
 	$(OBJCOPY) $(OBJCOPY_MAGIC) \
 		   --rename-section=.data=.livepatch.depends,alloc,load,readonly,data,contents -S $@.bin $@
 	rm -f $@.bin
@@ -108,9 +55,8 @@ note.o:
 # Append .livepatch.xen_depends section
 # with Xen build-id derived from xen-syms.
 #
-.PHONY: xen_note.o
-xen_note.o:
-	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $(BASEDIR)/xen-syms $@.bin
+$(obj)/xen_note.o: $(BASEDIR)/xen-syms
+	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $< $@.bin
 	$(OBJCOPY) $(OBJCOPY_MAGIC) \
 		   --rename-section=.data=.livepatch.xen_depends,alloc,load,readonly,data,contents -S $@.bin $@
 	rm -f $@.bin
@@ -119,102 +65,107 @@ xen_note.o:
 # Extract the build-id of the xen_hello_world.livepatch
 # (which xen_bye_world will depend on).
 #
-.PHONY: hello_world_note.o
-hello_world_note.o: $(LIVEPATCH)
-	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $(LIVEPATCH) $@.bin
+$(obj)/hello_world_note.o: $(obj)/xen_hello_world.livepatch
+	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $< $@.bin
 	$(OBJCOPY) $(OBJCOPY_MAGIC) \
 		   --rename-section=.data=.livepatch.depends,alloc,load,readonly,data,contents -S $@.bin $@
 	rm -f $@.bin
 
-xen_bye_world.o: config.h
 
-.PHONY: $(LIVEPATCH_BYE)
-$(LIVEPATCH_BYE): xen_bye_world_func.o xen_bye_world.o hello_world_note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_BYE) $^
+extra-y += xen_bye_world.livepatch
+xen_bye_world-objs := xen_bye_world_func.o xen_bye_world.o hello_world_note.o xen_note.o
+$(obj)/xen_bye_world.o: $(obj)/config.h
 
-xen_replace_world.o: config.h
 
-.PHONY: $(LIVEPATCH_REPLACE)
-$(LIVEPATCH_REPLACE): xen_replace_world_func.o xen_replace_world.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_REPLACE) $^
+extra-y += xen_replace_world.livepatch
+xen_replace_world-objs := xen_replace_world_func.o xen_replace_world.o note.o xen_note.o
+$(obj)/xen_replace_world.o: $(obj)/config.h
 
-xen_nop.o: config.h
 
-.PHONY: $(LIVEPATCH_NOP)
-$(LIVEPATCH_NOP): xen_nop.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_NOP) $^
+extra-y += xen_nop.livepatch
+xen_nop-objs := xen_nop.o note.o xen_note.o
+$(obj)/xen_nop.o: $(obj)/config.h
 
 # This one always fails upon upload, because it deliberately
 # does not have a .livepatch.xen_depends (xen_note.o) section.
-xen_no_xen_buildid.o: config.h
-
-.PHONY: $(LIVEPATCH_NO_XEN_BUILDID)
-$(LIVEPATCH_NO_XEN_BUILDID): xen_nop.o note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_NO_XEN_BUILDID) $^
+extra-y += xen_no_xen_buildid.livepatch
+xen_no_xen_buildid-objs := xen_nop.o note.o
 
-xen_prepost_hooks.o: config.h
+$(obj)/xen_prepost_hooks.o: $(obj)/config.h
 
-.PHONY: $(LIVEPATCH_PREPOST_HOOKS)
-$(LIVEPATCH_PREPOST_HOOKS): xen_prepost_hooks.o xen_hello_world_func.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_PREPOST_HOOKS) $^
+extra-y += xen_prepost_hooks.livepatch
+xen_prepost_hooks-objs := xen_prepost_hooks.o xen_hello_world_func.o note.o xen_note.o
 
-xen_prepost_hooks_fail.o: config.h
+$(obj)/xen_prepost_hooks_fail.o: $(obj)/config.h
 
-.PHONY: $(LIVEPATCH_PREPOST_HOOKS_FAIL)
-$(LIVEPATCH_PREPOST_HOOKS_FAIL): xen_prepost_hooks_fail.o xen_hello_world_func.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_PREPOST_HOOKS_FAIL) $^
+extra-y += xen_prepost_hooks_fail.livepatch
+xen_prepost_hooks_fail-objs := xen_prepost_hooks_fail.o xen_hello_world_func.o note.o xen_note.o
 
-xen_action_hooks.o: config.h
+$(obj)/xen_action_hooks.o: $(obj)/config.h
 
-.PHONY: $(LIVEPATCH_ACTION_HOOKS)
-$(LIVEPATCH_ACTION_HOOKS): xen_action_hooks.o xen_hello_world_func.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_ACTION_HOOKS) $^
+extra-y += xen_action_hooks.livepatch
+xen_action_hooks-objs := xen_action_hooks.o xen_hello_world_func.o note.o xen_note.o
 
-xen_action_hooks_nofunc.o: config.h
+$(obj)/xen_action_hooks_nofunc.o: $(obj)/config.h
 
-.PHONY: $(LIVEPATCH_ACTION_HOOKS_NOFUNC)
-$(LIVEPATCH_ACTION_HOOKS_NOFUNC): xen_action_hooks_nofunc.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_ACTION_HOOKS_NOFUNC) $^
+extra-y += xen_action_hooks_nofunc.livepatch
+xen_action_hooks_nofunc-objs := xen_action_hooks_nofunc.o note.o xen_note.o
 
-xen_action_hooks_marker.o: config.h
+$(obj)/xen_action_hooks_marker.o: $(obj)/config.h
 
-.PHONY: $(LIVEPATCH_ACTION_HOOKS_MARKER)
-$(LIVEPATCH_ACTION_HOOKS_MARKER): xen_action_hooks_marker.o xen_hello_world_func.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_ACTION_HOOKS_MARKER) $^
+extra-y += xen_action_hooks_marker.livepatch
+xen_action_hooks_marker-objs := xen_action_hooks_marker.o xen_hello_world_func.o note.o xen_note.o
 
-xen_action_hooks_noapply.o: config.h
+$(obj)/xen_action_hooks_noapply.o: $(obj)/config.h
 
-.PHONY: $(LIVEPATCH_ACTION_HOOKS_NOAPPLY)
-$(LIVEPATCH_ACTION_HOOKS_NOAPPLY): xen_action_hooks_marker.o xen_hello_world_func.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_ACTION_HOOKS_NOAPPLY) $^
+extra-y += xen_action_hooks_noapply.livepatch
+xen_action_hooks_noapply-objs := xen_action_hooks_marker.o xen_hello_world_func.o note.o xen_note.o
 
-xen_action_hooks_norevert.o: config.h
+$(obj)/xen_action_hooks_norevert.o: $(obj)/config.h
 
-.PHONY: $(LIVEPATCH_ACTION_HOOKS_NOREVERT)
-$(LIVEPATCH_ACTION_HOOKS_NOREVERT): xen_action_hooks_marker.o xen_hello_world_func.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_ACTION_HOOKS_NOREVERT) $^
+extra-y += xen_action_hooks_norevert.livepatch
+xen_action_hooks_norevert-objs := xen_action_hooks_marker.o xen_hello_world_func.o note.o xen_note.o
 
 EXPECT_BYTES_COUNT := 8
 CODE_GET_EXPECT=$(shell $(OBJDUMP) -d --insn-width=1 $(1) | sed -n -e '/<'$(2)'>:$$/,/^$$/ p' | tail -n +2 | head -n $(EXPECT_BYTES_COUNT) | awk '{$$0=$$2; printf "%s", substr($$0,length-1)}' | sed 's/.\{2\}/0x&,/g' | sed 's/^/{/;s/,$$/}/g')
-.PHONY: expect_config.h
-expect_config.h: EXPECT_BYTES=$(call CODE_GET_EXPECT,$(BASEDIR)/xen-syms,xen_extra_version)
-expect_config.h:
+$(obj)/expect_config.h: $(BASEDIR)/xen-syms
 	(set -e; \
-	 echo "#define EXPECT_BYTES $(EXPECT_BYTES)"; \
+	 echo "#define EXPECT_BYTES $(call CODE_GET_EXPECT,$<,xen_extra_version)"; \
          echo "#define EXPECT_BYTES_COUNT $(EXPECT_BYTES_COUNT)") > $@
 
-xen_expectations.o: expect_config.h
+$(obj)/xen_expectations.o: $(obj)/expect_config.h
 
-.PHONY: $(LIVEPATCH_EXPECTATIONS)
-$(LIVEPATCH_EXPECTATIONS): xen_expectations.o xen_hello_world_func.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_EXPECTATIONS) $^
+extra-y += xen_expectations.livepatch
+xen_expectations-objs := xen_expectations.o xen_hello_world_func.o note.o xen_note.o
 
-.PHONY: $(LIVEPATCH_EXPECTATIONS_FAIL)
-$(LIVEPATCH_EXPECTATIONS_FAIL): xen_expectations_fail.o xen_hello_world_func.o note.o xen_note.o
-	$(LD) $(LDFLAGS) $(build_id_linker) -r -o $(LIVEPATCH_EXPECTATIONS_FAIL) $^
+extra-y += xen_expectations_fail.livepatch
+xen_expectations_fail-objs := xen_expectations_fail.o xen_hello_world_func.o note.o xen_note.o
+
+
+quiet_cmd_livepatch = LD      $@
+cmd_livepatch = $(LD) $(XEN_LDFLAGS) $(build_id_linker) -r -o $@ $(real-prereqs)
+
+$(obj)/%.livepatch: FORCE
+	$(call if_changed,livepatch)
+
+$(call multi_depend, $(filter %.livepatch,$(extra-y)), .livepatch, -objs)
+targets += $(sort $(foreach m,$(basename $(notdir $(filter %.livepatch,$(extra-y)))), \
+    $($(m)-objs)))
+
+LIVEPATCHES := $(filter %.livepatch,$(extra-y))
+
+LIVEPATCH_DEBUG_DIR ?= $(DEBUG_DIR)/xen-livepatch
 
 .PHONY: livepatch
-livepatch: $(LIVEPATCH) $(LIVEPATCH_BYE) $(LIVEPATCH_REPLACE) $(LIVEPATCH_NOP) $(LIVEPATCH_NO_XEN_BUILDID) \
-           $(LIVEPATCH_PREPOST_HOOKS) $(LIVEPATCH_PREPOST_HOOKS_FAIL) $(LIVEPATCH_ACTION_HOOKS) \
-           $(LIVEPATCH_ACTION_HOOKS_NOFUNC) $(LIVEPATCH_ACTION_HOOKS_MARKER) $(LIVEPATCH_ACTION_HOOKS_NOAPPLY) \
-           $(LIVEPATCH_ACTION_HOOKS_NOREVERT) $(LIVEPATCH_EXPECTATIONS) $(LIVEPATCH_EXPECTATIONS_FAIL)
+livepatch: $(LIVEPATCHES)
+
+install: $(addprefix $(obj)/,$(LIVEPATCHES))
+	$(INSTALL_DIR) $(DESTDIR)$(LIVEPATCH_DEBUG_DIR)
+	$(INSTALL_DATA) $(addprefix $(obj)/,$(LIVEPATCHES)) $(DESTDIR)$(LIVEPATCH_DEBUG_DIR)
+
+uninstall:
+	cd $(DESTDIR)$(LIVEPATCH_DEBUG_DIR) && rm -f $(LIVEPATCHES)
+
+.PHONY: clean
+clean::
+	rm -f *.o .*.o.d *.livepatch config.h expect_config.h
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 26/51] build: build everything from the root dir, use obj=$subdir
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (24 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 25/51] build: rework test/livepatch/Makefile Anthony PERARD
@ 2021-08-24 10:50 ` Anthony PERARD
  2021-10-11 14:02   ` Jan Beulich
  2021-08-24 10:50 ` [XEN PATCH v7 27/51] build: introduce if_changed_deps Anthony PERARD
                   ` (28 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Bob Eshleman, Andrew Cooper, George Dunlap,
	Ian Jackson, Jan Beulich, Julien Grall, Stefano Stabellini,
	Wei Liu, Volodymyr Babchuk, Alistair Francis, Connor Davis,
	Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith

A subdirectory is now built by setting "$(obj)" instead of changing
directory. "$(obj)" should always be set when using "Rules.mk" and
thus a shortcut "$(build)" is introduced and should be used.

A new variable "$(need-builtin)" is introduce. It is to be used
whenever a "built_in.o" is wanted from a subdirectory. "built_in.o"
isn't the main target anymore, and thus only needs to depends on the
objects that should be part of "built_in.o".

Introduce $(srctree) and $(objtree) to replace $(BASEDIR) in cases a
relative path is better.

DEPS is updated as the existing macro to deal with it doesn't know
about $(obj).

There's some changes in "Rules.mk" which in addition to deal with
"$(obj)" also make it's looks more like "Makefile.build" from Linux
v5.12.

test/Makefile doesn't need special handling in order to build
everything under test/, Rules.mk will visit test/livepatch via
$(subdir-y), thus "tests" "all" and "build" target are removed.
"subtree-force-update" target isn't useful so it is removed as well.

test/livepatch/Makefile doesn't need default target anymore, Rules.mk
will build everything in $(extra-y) and thus all *.livepatch.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Acked-by: Bob Eshleman <bobbyeshleman@gmail.com>
---

Notes:
    v7:
    - Spell "Makefile.build" as "Rules.mk" in the warning in Rules.mk about
      undefined $(obj).
    - use $(srctree) for include/xen/config.h
    - handle $(nocov-y) and $(noubsan-y), needed to add $(obj)/

 xen/Makefile                |  28 ++++----
 xen/Rules.mk                | 134 ++++++++++++++++++++++++------------
 xen/arch/arm/Makefile       |   4 +-
 xen/arch/arm/arch.mk        |   4 +-
 xen/arch/riscv/arch.mk      |   4 +-
 xen/arch/x86/Makefile       |  11 +--
 xen/arch/x86/Rules.mk       |   4 +-
 xen/arch/x86/arch.mk        |  12 ++--
 xen/arch/x86/boot/Makefile  |   8 +--
 xen/build.mk                |  16 +++--
 xen/include/Makefile        |   6 +-
 xen/scripts/Kbuild.include  |   6 ++
 xen/test/Makefile           |   7 +-
 xen/test/livepatch/Makefile |   6 --
 xen/xsm/flask/Makefile      |   2 +-
 xen/xsm/flask/ss/Makefile   |   2 +-
 16 files changed, 153 insertions(+), 101 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index f07c9251c030..eb9ea70aaa29 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -20,6 +20,10 @@ export PYTHON		?= $(PYTHON_INTERPRETER)
 export BASEDIR := $(CURDIR)
 export XEN_ROOT := $(BASEDIR)/..
 
+srctree := .
+objtree := .
+export srctree objtree
+
 # Do not use make's built-in rules and variables
 MAKEFLAGS += -rR
 
@@ -45,7 +49,7 @@ export KCONFIG_CONFIG ?= .config
 
 export CC CXX LD
 
-export TARGET := $(BASEDIR)/xen
+export TARGET := xen
 
 .PHONY: default
 default: build
@@ -236,7 +240,7 @@ endif
 CFLAGS += -nostdinc -fno-builtin -fno-common
 CFLAGS += -Werror -Wredundant-decls -Wno-pointer-arith
 $(call cc-option-add,CFLAGS,CC,-Wvla)
-CFLAGS += -pipe -D__XEN__ -include $(BASEDIR)/include/xen/config.h
+CFLAGS += -pipe -D__XEN__ -include $(srctree)/include/xen/config.h
 CFLAGS-$(CONFIG_DEBUG_INFO) += -g
 
 ifneq ($(CONFIG_CC_IS_CLANG),y)
@@ -339,10 +343,10 @@ _install: $(TARGET)$(CONFIG_XEN_INSTALL_SUFFIX)
 
 .PHONY: tests
 tests:
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C test tests
+	$(MAKE) $(build)=test
 .PHONY: install-tests
 install-tests:
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C test install
+	$(MAKE) $(build)=test install
 
 .PHONY: _uninstall
 _uninstall: D=$(DESTDIR)
@@ -398,16 +402,16 @@ $(TARGET).gz: $(TARGET)
 
 $(TARGET): FORCE
 	$(MAKE) -C tools
-	$(MAKE) -f $(BASEDIR)/Rules.mk include/xen/compile.h
+	$(MAKE) $(build)=. include/xen/compile.h
 	[ -e arch/$(TARGET_ARCH)/efi ] && for f in $$(cd common/efi; echo *.[ch]); \
 		do test -r arch/$(TARGET_ARCH)/efi/$$f || \
 		   ln -nsf ../../../common/efi/$$f arch/$(TARGET_ARCH)/efi/; \
 		done; \
 		true
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C include
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) include
-	$(MAKE) -f $(BASEDIR)/Rules.mk arch/$(TARGET_ARCH)/include/asm/asm-offsets.h
-	$(MAKE) -f $(BASEDIR)/Rules.mk $@
+	$(MAKE) $(build)=include all
+	$(MAKE) $(build)=arch/$(TARGET_ARCH) include
+	$(MAKE) $(build)=. arch/$(TARGET_ARCH)/include/asm/asm-offsets.h
+	$(MAKE) $(build)=. $@
 
 SUBDIRS = xsm arch/$(TARGET_ARCH) common drivers lib test
 define all_sources
@@ -454,13 +458,13 @@ _MAP:
 	$(NM) -n $(TARGET)-syms | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' > System.map
 
 %.o %.i %.s: %.c FORCE
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C $(*D) $(@F)
+	$(MAKE) $(build)=$(*D) $(*D)/$(@F)
 
 %.o %.s: %.S FORCE
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C $(*D) $(@F)
+	$(MAKE) $(build)=$(*D) $(*D)/$(@F)
 
 %/: FORCE
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C $* built_in.o built_in_bin.o
+	$(MAKE) $(build)=$* need-builtin=1
 
 .PHONY: cloc
 cloc:
diff --git a/xen/Rules.mk b/xen/Rules.mk
index 245efe705a1e..2e1435ff4ada 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -3,19 +3,29 @@
 # Makefile and are consumed by Rules.mk
 #
 
-obj := .
 src := $(obj)
 
+PHONY := __build
+__build:
+
 -include $(BASEDIR)/include/config/auto.conf
 
 include $(XEN_ROOT)/Config.mk
 include $(BASEDIR)/scripts/Kbuild.include
 
+ifndef obj
+$(warning kbuild: Rules.mk is included improperly)
+endif
+
 # Initialise some variables
+obj-y :=
 lib-y :=
 targets :=
+subdir-y :=
 CFLAGS-y :=
 AFLAGS-y :=
+nocov-y :=
+noubsan-y :=
 
 SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
                                             $(foreach w,1 2 4, \
@@ -51,27 +61,54 @@ cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $< $@
 quiet_cmd_binfile = BINFILE $@
 cmd_binfile = $(SHELL) $(BASEDIR)/tools/binfile $(BINFILE_FLAGS) $@ $(2)
 
-define gendep
-    ifneq ($(1),$(subst /,:,$(1)))
-        DEPS += $(dir $(1)).$(notdir $(1)).d
-    endif
-endef
-$(foreach o,$(filter-out %/,$(obj-y) $(obj-bin-y) $(extra-y)),$(eval $(call gendep,$(o))))
+# Figure out what we need to build from the various variables
+# ===========================================================================
+
+# Libraries are always collected in one lib file.
+# Filter out objects already built-in
+lib-y := $(filter-out $(obj-y), $(sort $(lib-y)))
+
+# Subdirectories we need to descend into
+subdir-y := $(subdir-y) $(patsubst %/,%,$(filter %/, $(obj-y)))
 
 # Handle objects in subdirs
-# ---------------------------------------------------------------------------
-# o if we encounter foo/ in $(obj-y), replace it by foo/built_in.o
-#   and add the directory to the list of dirs to descend into: $(subdir-y)
-subdir-y := $(subdir-y) $(filter %/, $(obj-y))
+# - if we encounter foo/ in $(obj-y), replace it by foo/built_in.o
+ifdef need-builtin
 obj-y    := $(patsubst %/, %/built_in.o, $(obj-y))
+else
+obj-y    := $(filter-out %/, $(obj-y))
+endif
 
-# $(subdir-obj-y) is the list of objects in $(obj-y) which uses dir/ to
-# tell kbuild to descend
-subdir-obj-y := $(filter %/built_in.o, $(obj-y))
+# Add subdir path
 
-# Libraries are always collected in one lib file.
-# Filter out objects already built-in
-lib-y := $(filter-out $(obj-y), $(sort $(lib-y)))
+extra-y         := $(addprefix $(obj)/,$(extra-y))
+targets         := $(addprefix $(obj)/,$(targets))
+lib-y           := $(addprefix $(obj)/,$(lib-y))
+obj-y           := $(addprefix $(obj)/,$(obj-y))
+obj-bin-y       := $(addprefix $(obj)/,$(obj-bin-y))
+subdir-y        := $(addprefix $(obj)/,$(subdir-y))
+nocov-y         := $(addprefix $(obj)/,$(nocov-y))
+noubsan-y       := $(addprefix $(obj)/,$(noubsan-y))
+
+# subdir-builtin may contain duplications. Use $(sort ...)
+subdir-builtin := $(sort $(filter %/built_in.o, $(obj-y)))
+
+targets-for-builtin := $(extra-y)
+
+ifneq ($(strip $(lib-y)),)
+    targets-for-builtin += $(obj)/lib.a
+endif
+
+ifdef need-builtin
+    targets-for-builtin += $(obj)/built_in.o
+    ifneq ($(strip $(obj-bin-y)),)
+        ifeq ($(CONFIG_LTO),y)
+            targets-for-builtin += $(obj)/built_in_bin.o
+        endif
+    endif
+endif
+
+targets += $(targets-for-builtin)
 
 $(filter %.init.o,$(obj-y) $(obj-bin-y) $(extra-y)): CFLAGS-y += -DINIT_SECTIONS_ONLY
 
@@ -123,29 +160,28 @@ quiet_cmd_cc_builtin = CC      $@
 cmd_cc_builtin = \
     $(CC) $(XEN_CFLAGS) -c -x c /dev/null -o $@
 
+# To build objects in subdirs, we need to descend into the directories
+$(subdir-builtin): $(obj)/%/built_in.o: $(obj)/% ;
+
 quiet_cmd_ld_builtin = LD      $@
 ifeq ($(CONFIG_LTO),y)
 cmd_ld_builtin = \
-    $(LD_LTO) -r -o $@ $(filter $(obj-y),$(real-prereqs))
+    $(LD_LTO) -r -o $@ $(real-prereqs)
 else
 cmd_ld_builtin = \
-    $(LD) $(XEN_LDFLAGS) -r -o $@ $(filter $(obj-y),$(real-prereqs))
+    $(LD) $(XEN_LDFLAGS) -r -o $@ $(real-prereqs)
 endif
 
-built_in.o: $(obj-y) $(if $(strip $(lib-y)),lib.a) $(extra-y) FORCE
+$(obj)/built_in.o: $(obj-y) FORCE
 	$(call if_changed,$(if $(strip $(obj-y)),ld_builtin,cc_builtin))
 
-lib.a: $(lib-y) FORCE
+$(obj)/lib.a: $(lib-y) FORCE
 	$(call if_changed,ar)
 
-targets += built_in.o
-ifneq ($(strip $(lib-y)),)
-targets += lib.a
-endif
-targets += $(filter-out $(subdir-obj-y), $(obj-y) $(lib-y)) $(extra-y)
-targets += $(MAKECMDGOALS)
+targets += $(filter-out $(subdir-builtin), $(obj-y))
+targets += $(lib-y) $(MAKECMDGOALS)
 
-built_in_bin.o: $(obj-bin-y) $(extra-y)
+$(obj)/built_in_bin.o: $(obj-bin-y)
 ifeq ($(strip $(obj-bin-y)),)
 	$(CC) $(a_flags) -c -x assembler /dev/null -o $@
 else
@@ -156,21 +192,13 @@ endif
 PHONY += FORCE
 FORCE:
 
-%/built_in.o %/lib.a: FORCE
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C $* built_in.o
-
-%/built_in_bin.o: FORCE
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C $* built_in_bin.o
-
-SRCPATH := $(patsubst $(BASEDIR)/%,%,$(CURDIR))
-
 quiet_cmd_cc_o_c = CC      $@
 ifeq ($(CONFIG_ENFORCE_UNIQUE_SYMBOLS),y)
     cmd_cc_o_c = $(CC) $(c_flags) -c $< -o $(dot-target).tmp -MQ $@
     ifeq ($(CONFIG_CC_IS_CLANG),y)
-        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $<=$(SRCPATH)/$< $(dot-target).tmp $@
+        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $(<F)=$< $(dot-target).tmp $@
     else
-        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $(<F)=$(SRCPATH)/$< $(dot-target).tmp $@
+        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $(<F)=$< $(dot-target).tmp $@
     endif
     cmd_objcopy_fix_sym += && rm -f $(dot-target).tmp
 else
@@ -182,13 +210,13 @@ define rule_cc_o_c
     $(call cmd,objcopy_fix_sym)
 endef
 
-%.o: %.c FORCE
+$(obj)/%.o: $(src)/%.c FORCE
 	$(call if_changed_rule,cc_o_c)
 
 quiet_cmd_cc_o_S = CC      $@
 cmd_cc_o_S = $(CC) $(a_flags) -c $< -o $@
 
-%.o: %.S FORCE
+$(obj)/%.o: $(src)/%.S FORCE
 	$(call if_changed,cc_o_S)
 
 
@@ -206,7 +234,7 @@ define cmd_obj_init_o
     $(OBJCOPY) $(foreach s,$(SPECIAL_DATA_SECTIONS),--rename-section .$(s)=.init.$(s)) $< $@
 endef
 
-$(filter %.init.o,$(obj-y) $(obj-bin-y) $(extra-y)): %.init.o: %.o FORCE
+$(filter %.init.o,$(obj-y) $(obj-bin-y) $(extra-y)): $(obj)/%.init.o: $(obj)/%.o FORCE
 	$(call if_changed,obj_init_o)
 
 quiet_cmd_cpp_i_c = CPP     $@
@@ -218,19 +246,21 @@ cmd_cc_s_c = $(CC) $(filter-out -Wa$(comma)%,$(c_flags)) -S $< -o $@
 quiet_cmd_cpp_s_S = CPP     $@
 cmd_cpp_s_S = $(CPP) $(call cpp_flags,$(a_flags)) -MQ $@ -o $@ $<
 
-%.i: %.c FORCE
+$(obj)/%.i: $(src)/%.c FORCE
 	$(call if_changed,cpp_i_c)
 
-%.s: %.c FORCE
+$(obj)/%.s: $(src)/%.c FORCE
 	$(call if_changed,cc_s_c)
 
-%.s: %.S FORCE
+$(obj)/%.s: $(src)/%.S FORCE
 	$(call if_changed,cpp_s_S)
 
 # Linker scripts, .lds.S -> .lds
 quiet_cmd_cpp_lds_S = LDS     $@
 cmd_cpp_lds_S = $(CPP) -P $(call cpp_flags,$(a_flags)) -D__LINKER__ -MQ $@ -o $@ $<
 
+targets := $(filter-out $(PHONY), $(targets))
+
 # Add intermediate targets:
 # When building objects with specific suffix patterns, add intermediate
 # targets that the final targets are derived from.
@@ -240,7 +270,18 @@ intermediate_targets = $(foreach sfx, $(2), \
 # %.init.o <- %.o
 targets += $(call intermediate_targets, .init.o, .o)
 
--include $(DEPS_INCLUDE)
+# Build
+# ---------------------------------------------------------------------------
+
+__build: $(targets-for-builtin) $(subdir-y)
+	@:
+
+# Descending
+# ---------------------------------------------------------------------------
+
+PHONY += $(subdir-y)
+$(subdir-y):
+	$(Q)$(MAKE) $(build)=$@ need-builtin=$(if $(filter $@/built_in.o, $(subdir-builtin)),1)
 
 # Read all saved command lines and dependencies for the $(targets) we
 # may be building above, using $(if_changed{,_dep}). As an
@@ -251,6 +292,9 @@ 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/arm/Makefile b/xen/arch/arm/Makefile
index 9f9c73aa6c5d..a3204d22d17b 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -93,12 +93,12 @@ $(TARGET)-syms: $(BASEDIR)/prelink.o $(obj)/xen.lds
 	    $(BASEDIR)/common/symbols-dummy.o -o $(@D)/.$(@F).0
 	$(NM) -pa --format=sysv $(@D)/.$(@F).0 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).0.S
-	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0.o
+	$(MAKE) $(build)=$(@D) $(@D)/.$(@F).0.o
 	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< \
 	    $(@D)/.$(@F).0.o -o $(@D)/.$(@F).1
 	$(NM) -pa --format=sysv $(@D)/.$(@F).1 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).1.S
-	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1.o
+	$(MAKE) $(build)=$(@D) $(@D)/.$(@F).1.o
 	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).1.o -o $@
 	$(NM) -pa --format=sysv $(@D)/$(@F) \
diff --git a/xen/arch/arm/arch.mk b/xen/arch/arm/arch.mk
index ba3f140e2ea7..4e3f7014305e 100644
--- a/xen/arch/arm/arch.mk
+++ b/xen/arch/arm/arch.mk
@@ -1,8 +1,8 @@
 ########################################
 # arm-specific definitions
 
-CFLAGS += -I$(BASEDIR)/include
-CFLAGS += -I$(BASEDIR)/arch/$(TARGET_ARCH)/include
+CFLAGS += -I$(srctree)/include
+CFLAGS += -I$(srctree)/arch/$(TARGET_ARCH)/include
 
 $(call cc-options-add,CFLAGS,CC,$(EMBEDDED_EXTRA_CFLAGS))
 $(call cc-option-add,CFLAGS,CC,-Wnested-externs)
diff --git a/xen/arch/riscv/arch.mk b/xen/arch/riscv/arch.mk
index 39ae6ffea94d..694ba053ceab 100644
--- a/xen/arch/riscv/arch.mk
+++ b/xen/arch/riscv/arch.mk
@@ -11,5 +11,5 @@ riscv-march-$(CONFIG_RISCV_ISA_C)       := $(riscv-march-y)c
 # -mcmodel=medlow would force Xen into the lower half.
 
 CFLAGS += -march=$(riscv-march-y) -mstrict-align -mcmodel=medany
-CFLAGS += -I$(BASEDIR)/include
-CFLAGS += -I$(BASEDIR)/arch/$(TARGET_ARCH)/include
+CFLAGS += -I$(srctree)/include
+CFLAGS += -I$(srctree)/arch/$(TARGET_ARCH)/include
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index bb2da0d013fb..f60084eb73e7 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -81,6 +81,9 @@ endif
 extra-y += asm-macros.i
 extra-y += xen.lds
 
+# Allows usercopy.c to includes itself
+$(obj)/usercopy.o: CFLAGS-y += -I.
+
 ifneq ($(CONFIG_HVM),y)
 $(obj)/x86_emulate.o: CFLAGS-y += -Wno-unused-label
 endif
@@ -132,13 +135,13 @@ $(TARGET)-syms: $(BASEDIR)/prelink.o $(obj)/xen.lds
 	$(NM) -pa --format=sysv $(@D)/.$(@F).0 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort \
 		>$(@D)/.$(@F).0.S
-	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0.o
+	$(MAKE) $(build)=$(@D) $(@D)/.$(@F).0.o
 	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).0.o -o $(@D)/.$(@F).1
 	$(NM) -pa --format=sysv $(@D)/.$(@F).1 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort $(syms-warn-dup-y) \
 		>$(@D)/.$(@F).1.S
-	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1.o
+	$(MAKE) $(build)=$(@D) $(@D)/.$(@F).1.o
 	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).1.o -o $@
 	$(NM) -pa --format=sysv $(@D)/$(@F) \
@@ -202,14 +205,14 @@ endif
 	$(MKRELOC) $(foreach base,$(VIRT_BASE) $(ALT_BASE),$(@D)/.$(@F).$(base).0) >$(@D)/.$(@F).0r.S
 	$(NM) -pa --format=sysv $(@D)/.$(@F).$(VIRT_BASE).0 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).0s.S
-	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).0r.o $(@D)/.$(@F).0s.o
+	$(MAKE) $(build)=$(@D) .$(@F).0r.o .$(@F).0s.o
 	$(foreach base, $(VIRT_BASE) $(ALT_BASE), \
 	          $(LD) $(call EFI_LDFLAGS,$(base)) -T $(obj)/efi.lds -N $< \
 	                $(@D)/.$(@F).0r.o $(@D)/.$(@F).0s.o $(note_file_option) -o $(@D)/.$(@F).$(base).1 &&) :
 	$(MKRELOC) $(foreach base,$(VIRT_BASE) $(ALT_BASE),$(@D)/.$(@F).$(base).1) >$(@D)/.$(@F).1r.S
 	$(NM) -pa --format=sysv $(@D)/.$(@F).$(VIRT_BASE).1 \
 		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).1s.S
-	$(MAKE) -f $(BASEDIR)/Rules.mk $(@D)/.$(@F).1r.o $(@D)/.$(@F).1s.o
+	$(MAKE) $(build)=$(@D) .$(@F).1r.o .$(@F).1s.o
 	$(LD) $(call EFI_LDFLAGS,$(VIRT_BASE)) -T $(obj)/efi.lds -N $< \
 	                $(@D)/.$(@F).1r.o $(@D)/.$(@F).1s.o $(note_file_option) -o $@
 	$(NM) -pa --format=sysv $(@D)/$(@F) \
diff --git a/xen/arch/x86/Rules.mk b/xen/arch/x86/Rules.mk
index 56fe22c979ea..2d12c2dca208 100644
--- a/xen/arch/x86/Rules.mk
+++ b/xen/arch/x86/Rules.mk
@@ -2,9 +2,9 @@
 # x86-specific definitions
 
 ifneq ($(filter -DHAVE_AS_QUOTED_SYM,$(XEN_CFLAGS)),)
-object_label_flags = '-D__OBJECT_LABEL__=$(subst $(BASEDIR)/,,$(CURDIR))/$@'
+object_label_flags = '-D__OBJECT_LABEL__=$@'
 else
-object_label_flags = '-D__OBJECT_LABEL__=$(subst /,$$,$(subst -,_,$(subst $(BASEDIR)/,,$(CURDIR))/$@))'
+object_label_flags = '-D__OBJECT_LABEL__=$(subst /,$$,$(subst -,_,$@))'
 endif
 c_flags += $(object_label_flags) $(CFLAGS-stack-boundary)
 a_flags += $(object_label_flags) $(CFLAGS-stack-boundary)
diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
index 61e0222f4a08..8bbf3e18e410 100644
--- a/xen/arch/x86/arch.mk
+++ b/xen/arch/x86/arch.mk
@@ -3,10 +3,10 @@
 
 export XEN_IMG_OFFSET := 0x200000
 
-CFLAGS += -I$(BASEDIR)/include
-CFLAGS += -I$(BASEDIR)/arch/$(TARGET_ARCH)/include
-CFLAGS += -I$(BASEDIR)/arch/x86/include/asm/mach-generic
-CFLAGS += -I$(BASEDIR)/arch/x86/include/asm/mach-default
+CFLAGS += -I$(srctree)/include
+CFLAGS += -I$(srctree)/arch/$(TARGET_ARCH)/include
+CFLAGS += -I$(srctree)/arch/x86/include/asm/mach-generic
+CFLAGS += -I$(srctree)/arch/x86/include/asm/mach-default
 CFLAGS += -DXEN_IMG_OFFSET=$(XEN_IMG_OFFSET)
 
 # Prevent floating-point variables from creeping into Xen.
@@ -87,7 +87,7 @@ efi-check-relocs := $(shell $(OBJDUMP) -p $(efi-check-o:.o=.efi) | grep '^[[:bla
 ifeq ($(efi-check-relocs),2)
 MKRELOC := :
 else
-MKRELOC := efi/mkreloc
+MKRELOC := arch/x86/efi/mkreloc
 # If the linker produced fixups but not precisely two of them, we need to
 # disable it doing so.  But if it didn't produce any fixups, it also wouldn't
 # recognize the option.
@@ -103,6 +103,6 @@ export EFI_LDFLAGS
 endif
 
 # Set up the assembler include path properly for older toolchains.
-CFLAGS += -Wa,-I$(BASEDIR)/include
+CFLAGS += -Wa,-I$(srctree)/include
 
 ALL_OBJS-y := arch/x86/boot/built_in.o arch/x86/efi/built_in.o $(ALL_OBJS-y)
diff --git a/xen/arch/x86/boot/Makefile b/xen/arch/x86/boot/Makefile
index 53d357489df2..2469ca7c4530 100644
--- a/xen/arch/x86/boot/Makefile
+++ b/xen/arch/x86/boot/Makefile
@@ -1,8 +1,8 @@
 obj-bin-y += head.o
 
-DEFS_H_DEPS = $(src)/defs.h $(BASEDIR)/include/xen/stdbool.h
+DEFS_H_DEPS = $(BASEDIR)/$(src)/defs.h $(BASEDIR)/include/xen/stdbool.h
 
-CMDLINE_DEPS = $(DEFS_H_DEPS) $(src)/video.h
+CMDLINE_DEPS = $(DEFS_H_DEPS) $(BASEDIR)/$(src)/video.h
 
 RELOC_DEPS = $(DEFS_H_DEPS) \
 	     $(BASEDIR)/include/generated/autoconf.h \
@@ -14,7 +14,7 @@ RELOC_DEPS = $(DEFS_H_DEPS) \
 $(obj)/head.o: $(obj)/cmdline.S $(obj)/reloc.S
 
 $(obj)/cmdline.S: $(src)/cmdline.c $(CMDLINE_DEPS)
-	$(MAKE) -f build32.mk -C $(obj) $(@F) CMDLINE_DEPS="$(CMDLINE_DEPS)"
+	$(MAKE) -f $(BASEDIR)/$(src)/build32.mk -C $(obj) $(@F) CMDLINE_DEPS="$(CMDLINE_DEPS)"
 
 $(obj)/reloc.S: $(src)/reloc.c $(RELOC_DEPS)
-	$(MAKE) -f build32.mk -C $(obj) $(@F) RELOC_DEPS="$(RELOC_DEPS)"
+	$(MAKE) -f $(BASEDIR)/$(src)/build32.mk -C $(obj) $(@F) RELOC_DEPS="$(RELOC_DEPS)"
diff --git a/xen/build.mk b/xen/build.mk
index 9093d9f493bc..c6c06d9f17f5 100644
--- a/xen/build.mk
+++ b/xen/build.mk
@@ -57,11 +57,15 @@ arch/$(TARGET_ARCH)/include/asm/asm-offsets.h: asm-offsets.s
 	  echo ""; \
 	  echo "#endif") <$< >$@
 
-# head.o is built by descending into arch/arm/$(TARGET_SUBARCH), depends on the
-# part of $(ALL_OBJS) that will eventually recurse into $(TARGET_SUBARCH)/ and
-# build head.o
-arch/arm/$(TARGET_SUBARCH)/head.o: arch/arm/built_in.o
-arch/arm/$(TARGET_SUBARCH)/head.o: ;
+build-dirs := $(patsubst %/built_in.o,%,$(filter %/built_in.o,$(ALL_OBJS) $(ALL_LIBS)))
+
+# The actual objects are generated when descending,
+# make sure no implicit rule kicks in
+$(sort $(ALL_OBJS) $(ALL_LIBS)): $(build-dirs) ;
+
+PHONY += $(build-dirs)
+$(build-dirs): FORCE
+	$(Q)$(MAKE) $(build)=$@ need-builtin=1
 
 ifeq ($(CONFIG_LTO),y)
 # Gather all LTO objects together
@@ -79,4 +83,4 @@ endif
 targets += prelink.o
 
 $(TARGET): prelink.o FORCE
-	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) $@
+	$(Q)$(MAKE) $(build)=arch/$(TARGET_ARCH) $@
diff --git a/xen/include/Makefile b/xen/include/Makefile
index 69224e22a950..341196306abd 100644
--- a/xen/include/Makefile
+++ b/xen/include/Makefile
@@ -58,7 +58,7 @@ $(obj)/compat/.xlat/%.h: $(obj)/compat/%.h $(obj)/compat/.xlat/%.lst $(BASEDIR)/
 	export PYTHON=$(PYTHON); \
 	while read what name; do \
 		$(SHELL) $(BASEDIR)/tools/get-fields.sh "$$what" compat_$$name $< || exit $$?; \
-	done <$(patsubst compat/%,compat/.xlat/%,$(basename $<)).lst >$@.new
+	done <$(patsubst $(obj)/compat/%,$(obj)/compat/.xlat/%,$(basename $<)).lst >$@.new
 	mv -f $@.new $@
 
 .PRECIOUS: $(obj)/compat/.xlat/%.lst
@@ -83,8 +83,8 @@ PUBLIC_HEADERS := $(filter-out $(src)/public/arch-% $(src)/public/dom0_ops.h, $(
 PUBLIC_C99_HEADERS := $(src)/public/io/9pfs.h $(src)/public/io/pvcalls.h
 PUBLIC_ANSI_HEADERS := $(filter-out $(src)/public/%ctl.h $(src)/public/xsm/% $(src)/public/%hvm/save.h $(PUBLIC_C99_HEADERS), $(PUBLIC_HEADERS))
 
-public/io/9pfs.h-prereq := string
-public/io/pvcalls.h-prereq := string
+$(src)/public/io/9pfs.h-prereq := string
+$(src)/public/io/pvcalls.h-prereq := string
 
 $(obj)/headers.chk: $(PUBLIC_ANSI_HEADERS) $(src)/Makefile
 	for i in $(filter %.h,$^); do \
diff --git a/xen/scripts/Kbuild.include b/xen/scripts/Kbuild.include
index 563b323f0501..62c7caeba1d1 100644
--- a/xen/scripts/Kbuild.include
+++ b/xen/scripts/Kbuild.include
@@ -59,6 +59,12 @@ ld-option = $(call success,$(LD) -v $(1))
 # Usage:  EXTRA_CFLAGS += $(call cc-ifversion, -lt, 0402, -O1)
 cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || echo $(4))
 
+###
+# Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=
+# Usage:
+# $(Q)$(MAKE) $(build)=dir
+build := -f $(BASEDIR)/Rules.mk obj
+
 # Shorthand for $(MAKE) clean
 # Usage:
 # $(MAKE) $(clean) dir
diff --git a/xen/test/Makefile b/xen/test/Makefile
index 41e4d7bdb78b..080763c80766 100644
--- a/xen/test/Makefile
+++ b/xen/test/Makefile
@@ -1,13 +1,10 @@
 
-tests all: build
-
-
 ifneq ($(XEN_TARGET_ARCH),x86_32)
 # Xen 32-bit x86 hypervisor no longer supported, so has no test livepatches
 subdir-y += livepatch
 endif
 
-install build subtree-force-update uninstall: %:
+install uninstall: %:
 	set -e; for s in $(subdir-y); do \
-		$(MAKE) -f $(BASEDIR)/Rules.mk -C $$s $*; \
+		$(MAKE) $(build)=$$s $*; \
 	done
diff --git a/xen/test/livepatch/Makefile b/xen/test/livepatch/Makefile
index e59245323e92..52ee58a08c5f 100644
--- a/xen/test/livepatch/Makefile
+++ b/xen/test/livepatch/Makefile
@@ -11,9 +11,6 @@ endif
 CODE_ADDR=$(shell nm --defined $(1) | grep $(2) | awk '{print "0x"$$1}')
 CODE_SZ=$(shell nm --defined -S $(1) | grep $(2) | awk '{ print "0x"$$2}')
 
-.PHONY: default
-build default: livepatch
-
 extra-y += xen_hello_world.livepatch
 xen_hello_world-objs := xen_hello_world_func.o xen_hello_world.o note.o xen_note.o modinfo.o
 $(obj)/xen_hello_world.o: $(obj)/config.h
@@ -156,9 +153,6 @@ LIVEPATCHES := $(filter %.livepatch,$(extra-y))
 
 LIVEPATCH_DEBUG_DIR ?= $(DEBUG_DIR)/xen-livepatch
 
-.PHONY: livepatch
-livepatch: $(LIVEPATCHES)
-
 install: $(addprefix $(obj)/,$(LIVEPATCHES))
 	$(INSTALL_DIR) $(DESTDIR)$(LIVEPATCH_DEBUG_DIR)
 	$(INSTALL_DATA) $(addprefix $(obj)/,$(LIVEPATCHES)) $(DESTDIR)$(LIVEPATCH_DEBUG_DIR)
diff --git a/xen/xsm/flask/Makefile b/xen/xsm/flask/Makefile
index ab26b8682e46..57190ff6c8ad 100644
--- a/xen/xsm/flask/Makefile
+++ b/xen/xsm/flask/Makefile
@@ -40,7 +40,7 @@ $(obj)/flask-policy.S: $(BASEDIR)/tools/binfile FORCE
 	$(call if_changed,binfile,$(obj)/policy.bin xsm_flask_init_policy)
 targets += flask-policy.S
 
-FLASK_BUILD_DIR := $(CURDIR)
+FLASK_BUILD_DIR := $(BASEDIR)/$(obj)
 POLICY_SRC := $(FLASK_BUILD_DIR)/xenpolicy-$(XEN_FULLVERSION)
 
 $(obj)/policy.bin: FORCE
diff --git a/xen/xsm/flask/ss/Makefile b/xen/xsm/flask/ss/Makefile
index d32b9e07138e..aba1339f3808 100644
--- a/xen/xsm/flask/ss/Makefile
+++ b/xen/xsm/flask/ss/Makefile
@@ -8,4 +8,4 @@ obj-y += services.o
 obj-y += conditional.o
 obj-y += mls.o
 
-CFLAGS-y += -I../include
+CFLAGS-y += -I$(srctree)/xsm/flask/include
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 27/51] build: introduce if_changed_deps
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (25 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 26/51] build: build everything from the root dir, use obj=$subdir Anthony PERARD
@ 2021-08-24 10:50 ` Anthony PERARD
  2021-10-11 14:20   ` Jan Beulich
  2021-08-24 10:50 ` [XEN PATCH v7 28/51] build: rename __LINKER__ to LINKER_SCRIPT Anthony PERARD
                   ` (27 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu,
	Roger Pau Monné

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



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 28/51] build: rename __LINKER__ to LINKER_SCRIPT
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (26 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 27/51] build: introduce if_changed_deps Anthony PERARD
@ 2021-08-24 10:50 ` 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
                   ` (26 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu,
	Volodymyr Babchuk

For two reasons: this macro is used to generate a "linker script" and
is not by the linker, and name starting with an underscore '_' are
supposed to be reserved, so better avoid them when not needed.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Rules.mk                      | 2 +-
 xen/arch/arm/include/asm/config.h | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/xen/Rules.mk b/xen/Rules.mk
index 9b8415160649..a62c761be8d1 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -257,7 +257,7 @@ $(obj)/%.s: $(src)/%.S FORCE
 
 # Linker scripts, .lds.S -> .lds
 quiet_cmd_cpp_lds_S = LDS     $@
-cmd_cpp_lds_S = $(CPP) -P $(call cpp_flags,$(a_flags)) -D__LINKER__ -MQ $@ -o $@ $<
+cmd_cpp_lds_S = $(CPP) -P $(call cpp_flags,$(a_flags)) -DLINKER_SCRIPT -MQ $@ -o $@ $<
 
 targets := $(filter-out $(PHONY), $(targets))
 
diff --git a/xen/arch/arm/include/asm/config.h b/xen/arch/arm/include/asm/config.h
index c7b77912013e..2aced0bc3b8b 100644
--- a/xen/arch/arm/include/asm/config.h
+++ b/xen/arch/arm/include/asm/config.h
@@ -191,7 +191,7 @@ extern unsigned long frametable_virt_end;
 #define watchdog_disable() ((void)0)
 #define watchdog_enable()  ((void)0)
 
-#if defined(__ASSEMBLY__) && !defined(__LINKER__)
+#if defined(__ASSEMBLY__) && !defined(LINKER_SCRIPT)
 #include <asm/asm_defns.h>
 #include <asm/macros.h>
 #endif
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 29/51] build: add an other explicite rules to not build $(XEN_ROOT)/.config
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (27 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 28/51] build: rename __LINKER__ to LINKER_SCRIPT Anthony PERARD
@ 2021-08-24 10:50 ` 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
                   ` (25 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu

GNU Make will try to rebuild every Makefile included with the
"include" directive, so everytime Config.mk is used, make will try to
build ".config". This would normally not be an issue, unless we happen
to have a rules which match. This is the case with Kconfig in xen/.

While we had a workaround in "xen/Makefile", this ".config" files
becomes an issue again in "xen/tools/kconfig/Makefile". It has a
target "%.config".

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Rules.mk | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/xen/Rules.mk b/xen/Rules.mk
index a62c761be8d1..f1043a78a332 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -11,6 +11,10 @@ __build:
 -include $(BASEDIR)/include/config/auto.conf
 
 include $(XEN_ROOT)/Config.mk
+
+# Don't try to remake this file included by Config.mk.
+$(XEN_ROOT)/.config: ;
+
 include $(BASEDIR)/scripts/Kbuild.include
 
 ifndef obj
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 30/51] build: hook kconfig into xen build system
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (28 preceding siblings ...)
  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-08-24 10:50 ` Anthony PERARD
  2021-10-11 15:38   ` Jan Beulich
  2021-08-24 10:50 ` [XEN PATCH v7 31/51] xen/tools/kconfig: fix build with -Wdeclaration-after-statement Anthony PERARD
                   ` (24 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu,
	Doug Goldstein

Now that xen's build system is very close to Linux's ones, we can hook
"Makefile.host" into Xen's build system, and we can build Kconfig with
that.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Makefile                                 |  34 ++++--
 xen/Rules.mk                                 |  13 ++-
 xen/scripts/Kbuild.include                   |  31 ++++++
 xen/scripts/Makefile.clean                   |   9 ++
 xen/{tools/kconfig => scripts}/Makefile.host |   3 +
 xen/tools/kconfig/Makefile.kconfig           | 106 -------------------
 6 files changed, 78 insertions(+), 118 deletions(-)
 rename xen/{tools/kconfig => scripts}/Makefile.host (98%)
 delete mode 100644 xen/tools/kconfig/Makefile.kconfig

diff --git a/xen/Makefile b/xen/Makefile
index 1b5517b02a8c..0da08bc39930 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -33,6 +33,7 @@ ARCH=$(XEN_TARGET_ARCH)
 SRCARCH=$(shell echo $(ARCH) | \
           sed -e 's/x86.*/x86/' -e s'/arm\(32\|64\)/arm/g' \
               -e s'/riscv.*/riscv/g')
+export ARCH SRCARCH
 
 # Don't break if the build process wasn't called from the top level
 # we need XEN_TARGET_ARCH to generate the proper config
@@ -156,6 +157,13 @@ ifneq ($(filter %config,$(MAKECMDGOALS)),)
     config-build := y
 endif
 
+export CONFIG_SHELL := $(SHELL)
+export YACC = $(if $(BISON),$(BISON),bison)
+export LEX = $(if $(FLEX),$(FLEX),flex)
+
+# Default file for 'make defconfig'.
+export KBUILD_DEFCONFIG := $(ARCH)_defconfig
+
 # CLANG_FLAGS needs to be calculated before calling Kconfig
 ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
 CLANG_FLAGS :=
@@ -194,22 +202,19 @@ 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)"
-
 ifeq ($(config-build),y)
 # ===========================================================================
 # *config targets only - make sure prerequisites are updated, and descend
 # in tools/kconfig to make the *config target
 
-config: FORCE
-	$(MAKE) $(kconfig) $@
+config: tools_fixdep FORCE
+	$(Q)$(MAKE) $(build)=tools/kconfig $@
 
 # Config.mk tries to include .config file, don't try to remake it
 %/.config: ;
 
-%config: FORCE
-	$(MAKE) $(kconfig) $@
+%config: tools_fixdep FORCE
+	$(Q)$(MAKE) $(build)=tools/kconfig $@
 
 else # !config-build
 
@@ -219,9 +224,15 @@ ifeq ($(need-config),y)
 # changes are detected.
 -include include/config/auto.conf.cmd
 
+# This allows make to build fixdep before invoking defconfig. We can't use
+# "tools_fixdep" which is a .PHONY target and would force make to call
+# "defconfig" again to update $(KCONFIG_CONFIG).
+tools/fixdep:
+	$(MAKE) -C tools fixdep
+
 # Allow people to just run `make` as before and not force them to configure
-$(KCONFIG_CONFIG):
-	$(MAKE) $(kconfig) defconfig
+$(KCONFIG_CONFIG): tools/fixdep
+	$(Q)$(MAKE) $(build)=tools/kconfig defconfig
 
 # The actual configuration files used during the build are stored in
 # include/generated/ and include/config/. Update them if .config is newer than
@@ -230,7 +241,7 @@ $(KCONFIG_CONFIG):
 # This exploits the 'multi-target pattern rule' trick.
 # The syncconfig should be executed only once to make all the targets.
 include/config/%.conf include/config/%.conf.cmd: $(KCONFIG_CONFIG)
-	$(MAKE) $(kconfig) syncconfig
+	$(Q)$(MAKE) $(build)=tools/kconfig syncconfig
 
 ifeq ($(CONFIG_DEBUG),y)
 CFLAGS += -O1
@@ -391,9 +402,10 @@ _clean:
 	$(MAKE) $(clean) arch/riscv
 	$(MAKE) $(clean) arch/x86
 	$(MAKE) $(clean) test
-	$(MAKE) $(kconfig) clean
+	$(MAKE) $(clean) tools/kconfig
 	find . \( -name "*.o" -o -name ".*.d" -o -name ".*.d2" \
 		-o -name ".*.o.tmp" -o -name "*~" -o -name "core" \
+		-o -name '*.lex.c' -o -name '*.tab.[ch]' \
 		-o -name "*.gcno" -o -name ".*.cmd" -o -name "lib.a" \) -exec rm -f {} \;
 	rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map *~ core
 	rm -f asm-offsets.s arch/*/include/asm/asm-offsets.h
diff --git a/xen/Rules.mk b/xen/Rules.mk
index f1043a78a332..760ccff0e8f1 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -94,6 +94,13 @@ subdir-y        := $(addprefix $(obj)/,$(subdir-y))
 nocov-y         := $(addprefix $(obj)/,$(nocov-y))
 noubsan-y       := $(addprefix $(obj)/,$(noubsan-y))
 
+# Do not include hostprogs rules unless needed.
+# $(sort ...) is used here to remove duplicated words and excessive spaces.
+hostprogs-y := $(sort $(hostprogs-y))
+ifneq ($(hostprogs-y),)
+include scripts/Makefile.host
+endif
+
 # subdir-builtin may contain duplications. Use $(sort ...)
 subdir-builtin := $(sort $(filter %/built_in.o, $(obj-y)))
 
@@ -272,7 +279,11 @@ intermediate_targets = $(foreach sfx, $(2), \
 				$(patsubst %$(strip $(1)),%$(sfx), \
 					$(filter %$(strip $(1)), $(targets))))
 # %.init.o <- %.o
-targets += $(call intermediate_targets, .init.o, .o)
+# %.lex.o <- %.lex.c <- %.l
+# %.tab.o <- %.tab.[ch] <- %.y
+targets += $(call intermediate_targets, .init.o, .o) \
+	   $(call intermediate_targets, .lex.o, .lex.c) \
+	   $(call intermediate_targets, .tab.o, .tab.c .tab.h)
 
 # Build
 # ---------------------------------------------------------------------------
diff --git a/xen/scripts/Kbuild.include b/xen/scripts/Kbuild.include
index aa3a8a1bd9e7..3e436639da1c 100644
--- a/xen/scripts/Kbuild.include
+++ b/xen/scripts/Kbuild.include
@@ -25,6 +25,37 @@ real-prereqs = $(filter-out $(PHONY), $^)
 # Escape single quote for use in echo statements
 escsq = $(subst $(squote),'\$(squote)',$1)
 
+###
+# Easy method for doing a status message
+       kecho := :
+ quiet_kecho := echo
+silent_kecho := :
+kecho := $($(quiet)kecho)
+
+###
+# filechk is used to check if the content of a generated file is updated.
+# Sample usage:
+#
+# filechk_sample = echo $(KERNELRELEASE)
+# version.h: FORCE
+#	$(call filechk,sample)
+#
+# The rule defined shall write to stdout the content of the new file.
+# The existing file will be compared with the new one.
+# - If no file exist it is created
+# - If the content differ the new file is used
+# - If they are equal no change, and no timestamp update
+define filechk
+	$(Q)set -e;						\
+	mkdir -p $(dir $@);					\
+	trap "rm -f $(dot-target).tmp" EXIT;			\
+	{ $(filechk_$(1)); } > $(dot-target).tmp;		\
+	if [ ! -r $@ ] || ! cmp -s $@ $(dot-target).tmp; then	\
+		$(kecho) '  UPD     $@';			\
+		mv -f $(dot-target).tmp $@;			\
+	fi
+endef
+
 # as-insn: Check whether assembler supports an instruction.
 # Usage: cflags-y += $(call as-insn,CC FLAGS,"insn",option-yes,option-no)
 as-insn = $(if $(shell echo 'void _(void) { asm volatile ( $(2) ); }' \
diff --git a/xen/scripts/Makefile.clean b/xen/scripts/Makefile.clean
index 36b7e7e92f93..156d6307cf83 100644
--- a/xen/scripts/Makefile.clean
+++ b/xen/scripts/Makefile.clean
@@ -17,8 +17,17 @@ include $(src)/Makefile
 subdir-all := $(subdir-y) $(subdir-n) $(subdir-) \
               $(patsubst %/,%, $(filter %/, $(obj-y) $(obj-n) $(obj-)))
 
+__clean-files := \
+    $(clean-files) $(hostprogs-y) $(hostprogs-)
+
+__clean-files := $(wildcard $(__clean-files))
+
 .PHONY: clean
 clean:: $(subdir-all)
+ifneq ($(strip $(__clean-files)),)
+	rm -rf $(__clean-files)
+endif
+	@:
 
 # Descending
 # ---------------------------------------------------------------------------
diff --git a/xen/tools/kconfig/Makefile.host b/xen/scripts/Makefile.host
similarity index 98%
rename from xen/tools/kconfig/Makefile.host
rename to xen/scripts/Makefile.host
index 4c51c95d40f4..61c7bff7a9bb 100644
--- a/xen/tools/kconfig/Makefile.host
+++ b/xen/scripts/Makefile.host
@@ -1,5 +1,8 @@
 # SPDX-License-Identifier: GPL-2.0
 
+# target with $(obj)/ and its suffix stripped
+target-stem = $(basename $(patsubst $(obj)/%,%,$@))
+
 # LEX
 # ---------------------------------------------------------------------------
 quiet_cmd_flex = LEX     $@
diff --git a/xen/tools/kconfig/Makefile.kconfig b/xen/tools/kconfig/Makefile.kconfig
deleted file mode 100644
index 799321ec4d07..000000000000
--- a/xen/tools/kconfig/Makefile.kconfig
+++ /dev/null
@@ -1,106 +0,0 @@
-# xen/tools/kconfig
-
-# default rule to do nothing
-all:
-
-# Xen doesn't have a silent build flag
-quiet :=
-Q :=
-kecho := :
-
-# eventually you'll want to do out of tree builds
-srctree := $(BASEDIR)
-objtree := $(srctree)
-src := tools/kconfig
-obj := $(src)
-
-# handle functions (most of these lifted from different Linux makefiles
-dot-target = $(dir $@).$(notdir $@)
-depfile = $(subst $(comma),,$(dot-target).d)
-basetarget = $(basename $(notdir $@))
-# target with $(obj)/ and its suffix stripped
-target-stem = $(basename $(patsubst $(obj)/%,%,$@))
-cmd = $(cmd_$(1))
-if_changed = $(cmd_$(1))
-if_changed_dep = $(cmd_$(1))
-
-###
-# filechk is used to check if the content of a generated file is updated.
-# Sample usage:
-#
-# filechk_sample = echo $(KERNELRELEASE)
-# version.h: FORCE
-#	$(call filechk,sample)
-#
-# The rule defined shall write to stdout the content of the new file.
-# The existing file will be compared with the new one.
-# - If no file exist it is created
-# - If the content differ the new file is used
-# - If they are equal no change, and no timestamp update
-# - stdin is piped in from the first prerequisite ($<) so one has
-#   to specify a valid file as first prerequisite (often the kbuild file)
-define filechk
-	$(Q)set -e;				\
-	mkdir -p $(dir $@);			\
-	{ $(filechk_$(1)); } > $@.tmp;		\
-	if [ -r $@ ] && cmp -s $@ $@.tmp; then	\
-		rm -f $@.tmp;			\
-	else					\
-		$(kecho) '  UPD     $@';	\
-		mv -f $@.tmp $@;		\
-	fi
-endef
-
-define multi_depend
-$(foreach m, $(notdir $1), \
-	$(eval $(obj)/$m: \
-	$(addprefix $(obj)/, $(foreach s, $3, $($(m:%$(strip $2)=%$(s)))))))
-endef
-
-# Set our default defconfig file
-KBUILD_DEFCONFIG := $(ARCH)_defconfig
-
-# provide our shell
-CONFIG_SHELL := $(SHELL)
-
-# provide the host compiler
-HOSTCC ?= gcc
-HOSTCXX ?= g++
-YACC = $(if $(BISON),$(BISON),bison)
-LEX = $(if $(FLEX),$(FLEX),flex)
-
-# force target
-PHONY += FORCE
-
-FORCE:
-
-# include the original Makefile and Makefile.host from Linux
-include $(src)/Makefile
-include $(src)/Makefile.host
-
-# Add intermediate targets:
-# When building objects with specific suffix patterns, add intermediate
-# targets that the final targets are derived from.
-intermediate_targets = $(foreach sfx, $(2), \
-				$(patsubst %$(strip $(1)),%$(sfx), \
-					$(filter %$(strip $(1)), $(targets))))
-
-# %.lex.o <- %.lex.c <- %.l
-# %.tab.o <- %.tab.[ch] <- %.y
-targets += $(call intermediate_targets, .lex.o, .lex.c) \
-	   $(call intermediate_targets, .tab.o, .tab.c .tab.h)
-
-# clean up rule
-clean-deps = $(foreach f,$(host-cobjs) $(host-cxxobjs),$(dir $f).$(notdir $f).d)
-clean-shipped = $(patsubst %_shipped,%,$(wildcard $(obj)/*_shipped))
-
-clean:
-	rm -rf $(clean-files)
-	rm -rf $(clean-deps)
-	rm -rf $(host-csingle) $(host-cmulti) $(host-cxxmulti) $(host-cobjs) $(host-cxxobjs)
-	rm -rf $(clean-shipped)
-
-$(obj)/zconf%: $(src)/zconf%_shipped
-	cp -f $< $@
-
-.PHONY: $(PHONY)
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 31/51] xen/tools/kconfig: fix build with -Wdeclaration-after-statement
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (29 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 30/51] build: hook kconfig into xen build system Anthony PERARD
@ 2021-08-24 10:50 ` Anthony PERARD
  2021-08-24 10:50 ` [XEN PATCH v7 32/51] build: Remove KBUILD_ specific from Makefile.host Anthony PERARD
                   ` (23 subsequent siblings)
  54 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel; +Cc: Anthony PERARD, Doug Goldstein

We are going to start building kconfig with HOSTCFLAGS from Config.mk,
it has the flag "-Wdeclaration-after-statement".

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/tools/kconfig/confdata.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/xen/tools/kconfig/confdata.c b/xen/tools/kconfig/confdata.c
index 3569d2dec37c..a69250c91355 100644
--- a/xen/tools/kconfig/confdata.c
+++ b/xen/tools/kconfig/confdata.c
@@ -1237,6 +1237,7 @@ void set_all_choice_values(struct symbol *csym)
 
 bool conf_set_all_new_symbols(enum conf_def_mode mode)
 {
+	bool has_changed = false;
 	struct symbol *sym, *csym;
 	int i, cnt, pby, pty, ptm;	/* pby: probability of bool     = y
 					 * pty: probability of tristate = y
@@ -1283,7 +1284,6 @@ bool conf_set_all_new_symbols(enum conf_def_mode mode)
 			exit( 1 );
 		}
 	}
-	bool has_changed = false;
 
 	for_all_symbols(i, sym) {
 		if (sym_has_value(sym) || (sym->flags & SYMBOL_VALID))
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 32/51] build: Remove KBUILD_ specific from Makefile.host
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (30 preceding siblings ...)
  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 ` Anthony PERARD
  2021-10-11 15:47   ` Jan Beulich
  2021-08-24 10:50 ` [XEN PATCH v7 33/51] build: handle always-y and hostprogs-always-y Anthony PERARD
                   ` (22 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu

This will allow $(HOSTCFLAGS) to actually be used when building
programmes for the build-host.

The other variable don't exist in our build system.

Also remove $(KBUILD_EXTMOD) since it should always be empty.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/scripts/Makefile.host | 26 ++++++++++++--------------
 1 file changed, 12 insertions(+), 14 deletions(-)

diff --git a/xen/scripts/Makefile.host b/xen/scripts/Makefile.host
index 61c7bff7a9bb..9d3730d28950 100644
--- a/xen/scripts/Makefile.host
+++ b/xen/scripts/Makefile.host
@@ -82,18 +82,16 @@ host-cxxshobjs	:= $(addprefix $(obj)/,$(host-cxxshobjs))
 #####
 # Handle options to gcc. Support building with separate output directory
 
-_hostc_flags   = $(KBUILD_HOSTCFLAGS)   $(HOST_EXTRACFLAGS)   \
+_hostc_flags   = $(HOSTCFLAGS)   $(HOST_EXTRACFLAGS)   \
                  $(HOSTCFLAGS_$(target-stem).o)
-_hostcxx_flags = $(KBUILD_HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS) \
+_hostcxx_flags = $(HOSTCXXFLAGS) $(HOST_EXTRACXXFLAGS) \
                  $(HOSTCXXFLAGS_$(target-stem).o)
 
 # $(objtree)/$(obj) for including generated headers from checkin source files
-ifeq ($(KBUILD_EXTMOD),)
 ifdef building_out_of_srctree
 _hostc_flags   += -I $(objtree)/$(obj)
 _hostcxx_flags += -I $(objtree)/$(obj)
 endif
-endif
 
 hostc_flags    = -Wp,-MD,$(depfile) $(_hostc_flags)
 hostcxx_flags  = -Wp,-MD,$(depfile) $(_hostcxx_flags)
@@ -104,17 +102,17 @@ hostcxx_flags  = -Wp,-MD,$(depfile) $(_hostcxx_flags)
 # Create executable from a single .c file
 # host-csingle -> Executable
 quiet_cmd_host-csingle 	= HOSTCC  $@
-      cmd_host-csingle	= $(HOSTCC) $(hostc_flags) $(KBUILD_HOSTLDFLAGS) -o $@ $< \
-		$(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem))
+      cmd_host-csingle	= $(HOSTCC) $(hostc_flags) $(HOSTLDFLAGS) -o $@ $< \
+		$(HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem))
 $(host-csingle): $(obj)/%: $(src)/%.c FORCE
 	$(call if_changed_dep,host-csingle)
 
 # Link an executable based on list of .o files, all plain c
 # host-cmulti -> executable
 quiet_cmd_host-cmulti	= HOSTLD  $@
-      cmd_host-cmulti	= $(HOSTCC) $(KBUILD_HOSTLDFLAGS) -o $@ \
+      cmd_host-cmulti	= $(HOSTCC) $(HOSTLDFLAGS) -o $@ \
 			  $(addprefix $(obj)/, $($(target-stem)-objs)) \
-			  $(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem))
+			  $(HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem))
 $(host-cmulti): FORCE
 	$(call if_changed,host-cmulti)
 $(call multi_depend, $(host-cmulti), , -objs)
@@ -129,10 +127,10 @@ $(host-cobjs): $(obj)/%.o: $(src)/%.c FORCE
 # Link an executable based on list of .o files, a mixture of .c and .cc
 # host-cxxmulti -> executable
 quiet_cmd_host-cxxmulti	= HOSTLD  $@
-      cmd_host-cxxmulti	= $(HOSTCXX) $(KBUILD_HOSTLDFLAGS) -o $@ \
+      cmd_host-cxxmulti	= $(HOSTCXX) $(HOSTLDFLAGS) -o $@ \
 			  $(foreach o,objs cxxobjs,\
 			  $(addprefix $(obj)/, $($(target-stem)-$(o)))) \
-			  $(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem))
+			  $(HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem))
 $(host-cxxmulti): FORCE
 	$(call if_changed,host-cxxmulti)
 $(call multi_depend, $(host-cxxmulti), , -objs -cxxobjs)
@@ -163,9 +161,9 @@ $(host-cxxshobjs): $(obj)/%.o: $(src)/%.c FORCE
 # Link a shared library, based on position independent .o files
 # *.o -> .so shared library (host-cshlib)
 quiet_cmd_host-cshlib	= HOSTLLD -shared $@
-      cmd_host-cshlib	= $(HOSTCC) $(KBUILD_HOSTLDFLAGS) -shared -o $@ \
+      cmd_host-cshlib	= $(HOSTCC) $(HOSTLDFLAGS) -shared -o $@ \
 			  $(addprefix $(obj)/, $($(target-stem)-objs)) \
-			  $(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem).so)
+			  $(HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem).so)
 $(host-cshlib): FORCE
 	$(call if_changed,host-cshlib)
 $(call multi_depend, $(host-cshlib), .so, -objs)
@@ -173,9 +171,9 @@ $(call multi_depend, $(host-cshlib), .so, -objs)
 # Link a shared library, based on position independent .o files
 # *.o -> .so shared library (host-cxxshlib)
 quiet_cmd_host-cxxshlib	= HOSTLLD -shared $@
-      cmd_host-cxxshlib	= $(HOSTCXX) $(KBUILD_HOSTLDFLAGS) -shared -o $@ \
+      cmd_host-cxxshlib	= $(HOSTCXX) $(HOSTLDFLAGS) -shared -o $@ \
 			  $(addprefix $(obj)/, $($(target-stem)-objs)) \
-			  $(KBUILD_HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem).so)
+			  $(HOSTLDLIBS) $(HOSTLDLIBS_$(target-stem).so)
 $(host-cxxshlib): FORCE
 	$(call if_changed,host-cxxshlib)
 $(call multi_depend, $(host-cxxshlib), .so, -objs)
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 33/51] build: handle always-y and hostprogs-always-y
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (31 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 32/51] build: Remove KBUILD_ specific from Makefile.host Anthony PERARD
@ 2021-08-24 10:50 ` 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
                   ` (21 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu

This will be used for xen/tools/.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Rules.mk               | 10 +++++++++-
 xen/scripts/Makefile.clean |  3 ++-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/xen/Rules.mk b/xen/Rules.mk
index 760ccff0e8f1..1e1839c4b629 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -83,9 +83,17 @@ else
 obj-y    := $(filter-out %/, $(obj-y))
 endif
 
+# hostprogs-always-y += foo
+# ... is a shorthand for
+# hostprogs-y += foo
+# always-y  += foo
+hostprogs-y += $(hostprogs-always-y)
+always-y += $(hostprogs-always-y)
+
 # Add subdir path
 
 extra-y         := $(addprefix $(obj)/,$(extra-y))
+always-y        := $(addprefix $(obj)/,$(always-y))
 targets         := $(addprefix $(obj)/,$(targets))
 lib-y           := $(addprefix $(obj)/,$(lib-y))
 obj-y           := $(addprefix $(obj)/,$(obj-y))
@@ -288,7 +296,7 @@ targets += $(call intermediate_targets, .init.o, .o) \
 # Build
 # ---------------------------------------------------------------------------
 
-__build: $(targets-for-builtin) $(subdir-y)
+__build: $(targets-for-builtin) $(subdir-y) $(always-y)
 	@:
 
 # Descending
diff --git a/xen/scripts/Makefile.clean b/xen/scripts/Makefile.clean
index 156d6307cf83..c2689d4af5fa 100644
--- a/xen/scripts/Makefile.clean
+++ b/xen/scripts/Makefile.clean
@@ -18,7 +18,8 @@ subdir-all := $(subdir-y) $(subdir-n) $(subdir-) \
               $(patsubst %/,%, $(filter %/, $(obj-y) $(obj-n) $(obj-)))
 
 __clean-files := \
-    $(clean-files) $(hostprogs-y) $(hostprogs-)
+    $(clean-files) $(hostprogs-y) $(hostprogs-) \
+    $(hostprogs-always-y) $(hostprogs-always-)
 
 __clean-files := $(wildcard $(__clean-files))
 
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 34/51] build: start building the tools with the main makefiles
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (32 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 33/51] build: handle always-y and hostprogs-always-y Anthony PERARD
@ 2021-08-24 10:50 ` 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
                   ` (20 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu

This will make out-of-tree build easier.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Makefile       |  8 ++++----
 xen/tools/Makefile | 17 ++---------------
 2 files changed, 6 insertions(+), 19 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index 0da08bc39930..8381ffd5d168 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -200,7 +200,7 @@ endif # root-make-done
 
 PHONY += tools_fixdep
 tools_fixdep:
-	$(MAKE) -C tools fixdep
+	$(MAKE) $(build)=tools tools/fixdep
 
 ifeq ($(config-build),y)
 # ===========================================================================
@@ -228,7 +228,7 @@ ifeq ($(need-config),y)
 # "tools_fixdep" which is a .PHONY target and would force make to call
 # "defconfig" again to update $(KCONFIG_CONFIG).
 tools/fixdep:
-	$(MAKE) -C tools fixdep
+	$(MAKE) $(build)=tools tools/fixdep
 
 # Allow people to just run `make` as before and not force them to configure
 $(KCONFIG_CONFIG): tools/fixdep
@@ -391,7 +391,7 @@ _debug:
 
 .PHONY: _clean
 _clean:
-	$(MAKE) -C tools clean
+	$(MAKE) $(clean) tools
 	$(MAKE) $(clean) include
 	$(MAKE) $(clean) common
 	$(MAKE) $(clean) drivers
@@ -420,7 +420,7 @@ $(TARGET).gz: $(TARGET)
 	mv $@.new $@
 
 $(TARGET): tools_fixdep FORCE
-	$(MAKE) -C tools
+	$(MAKE) $(build)=tools
 	$(MAKE) $(build)=. include/xen/compile.h
 	[ -e arch/$(TARGET_ARCH)/efi ] && for f in $$(cd common/efi; echo *.[ch]); \
 		do test -r arch/$(TARGET_ARCH)/efi/$$f || \
diff --git a/xen/tools/Makefile b/xen/tools/Makefile
index 722f3664549d..a5078b7cb8de 100644
--- a/xen/tools/Makefile
+++ b/xen/tools/Makefile
@@ -1,15 +1,2 @@
-
-include $(XEN_ROOT)/Config.mk
-
-.PHONY: default
-default: symbols fixdep
-
-.PHONY: clean
-clean:
-	rm -f *.o symbols fixdep
-
-symbols: symbols.c
-	$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
-
-fixdep: fixdep.c
-	$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
+hostprogs-always-y += symbols
+hostprogs-always-y += fixdep
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 35/51] build: Add headers path to CFLAGS once for all archs
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (33 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 34/51] build: start building the tools with the main makefiles Anthony PERARD
@ 2021-08-24 10:50 ` 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
                   ` (19 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu,
	Volodymyr Babchuk, Bob Eshleman, Alistair Francis, Connor Davis,
	Roger Pau Monné

This just remove duplication.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Makefile           | 3 +++
 xen/arch/arm/arch.mk   | 3 ---
 xen/arch/riscv/arch.mk | 2 --
 xen/arch/x86/arch.mk   | 2 --
 4 files changed, 3 insertions(+), 7 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index 8381ffd5d168..28854d6cb29f 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -293,6 +293,9 @@ CFLAGS += -flto
 LDFLAGS-$(CONFIG_CC_IS_CLANG) += -plugin LLVMgold.so
 endif
 
+CFLAGS += -I$(srctree)/include
+CFLAGS += -I$(srctree)/arch/$(TARGET_ARCH)/include
+
 # Note that link order matters!
 ALL_OBJS-y                := common/built_in.o
 ALL_OBJS-y                += drivers/built_in.o
diff --git a/xen/arch/arm/arch.mk b/xen/arch/arm/arch.mk
index 4e3f7014305e..094b67072304 100644
--- a/xen/arch/arm/arch.mk
+++ b/xen/arch/arm/arch.mk
@@ -1,9 +1,6 @@
 ########################################
 # arm-specific definitions
 
-CFLAGS += -I$(srctree)/include
-CFLAGS += -I$(srctree)/arch/$(TARGET_ARCH)/include
-
 $(call cc-options-add,CFLAGS,CC,$(EMBEDDED_EXTRA_CFLAGS))
 $(call cc-option-add,CFLAGS,CC,-Wnested-externs)
 
diff --git a/xen/arch/riscv/arch.mk b/xen/arch/riscv/arch.mk
index 694ba053ceab..ae8fe9dec730 100644
--- a/xen/arch/riscv/arch.mk
+++ b/xen/arch/riscv/arch.mk
@@ -11,5 +11,3 @@ riscv-march-$(CONFIG_RISCV_ISA_C)       := $(riscv-march-y)c
 # -mcmodel=medlow would force Xen into the lower half.
 
 CFLAGS += -march=$(riscv-march-y) -mstrict-align -mcmodel=medany
-CFLAGS += -I$(srctree)/include
-CFLAGS += -I$(srctree)/arch/$(TARGET_ARCH)/include
diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
index 8bbf3e18e410..53b48ded28de 100644
--- a/xen/arch/x86/arch.mk
+++ b/xen/arch/x86/arch.mk
@@ -3,8 +3,6 @@
 
 export XEN_IMG_OFFSET := 0x200000
 
-CFLAGS += -I$(srctree)/include
-CFLAGS += -I$(srctree)/arch/$(TARGET_ARCH)/include
 CFLAGS += -I$(srctree)/arch/x86/include/asm/mach-generic
 CFLAGS += -I$(srctree)/arch/x86/include/asm/mach-default
 CFLAGS += -DXEN_IMG_OFFSET=$(XEN_IMG_OFFSET)
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 36/51] build: generate x86's asm-macros.h with filechk
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (34 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 35/51] build: Add headers path to CFLAGS once for all archs Anthony PERARD
@ 2021-08-24 10:50 ` 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
                   ` (18 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Jan Beulich, Andrew Cooper, Roger Pau Monné,
	Wei Liu

When we will build out-of-tree, make is going to try to generate
"asm-macros.h" before the directories "arch/x86/include/asm" exist,
thus we would need to call `mkdir` explicitly. We will use "filechk"
for that as it does everything that the current recipe does and does
call `mkdir`.

Also, they are no more "*.new" files generated in this directory.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/arch/x86/Makefile | 29 ++++++++++++++++-------------
 1 file changed, 16 insertions(+), 13 deletions(-)

diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 05f1d12065a0..1ef2536ece26 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -233,18 +233,21 @@ include: $(BASEDIR)/arch/x86/include/asm/asm-macros.h
 $(obj)/asm-macros.i: CFLAGS-y += -D__ASSEMBLY__ -P
 
 $(BASEDIR)/arch/x86/include/asm/asm-macros.h: $(obj)/asm-macros.i $(src)/Makefile
-	echo '#if 0' >$@.new
-	echo '.if 0' >>$@.new
-	echo '#endif' >>$@.new
-	echo '#ifndef __ASM_MACROS_H__' >>$@.new
-	echo '#define __ASM_MACROS_H__' >>$@.new
-	echo 'asm ( ".include \"$@\"" );' >>$@.new
-	echo '#endif /* __ASM_MACROS_H__ */' >>$@.new
-	echo '#if 0' >>$@.new
-	echo '.endif' >>$@.new
-	cat $< >>$@.new
-	echo '#endif' >>$@.new
-	$(call move-if-changed,$@.new,$@)
+	$(call filechk,asm-macros.h)
+
+define filechk_asm-macros.h
+    echo '#if 0'; \
+    echo '.if 0'; \
+    echo '#endif'; \
+    echo '#ifndef __ASM_MACROS_H__'; \
+    echo '#define __ASM_MACROS_H__'; \
+    echo 'asm ( ".include \"$@\"" );'; \
+    echo '#endif /* __ASM_MACROS_H__ */'; \
+    echo '#if 0'; \
+    echo '.endif'; \
+    cat $<; \
+    echo '#endif'
+endef
 
 $(obj)/efi.lds: AFLAGS-y += -DEFI
 $(obj)/xen.lds $(obj)/efi.lds: $(src)/xen.lds.S FORCE
@@ -258,7 +261,7 @@ $(obj)/efi/mkreloc: $(src)/efi/mkreloc.c
 
 .PHONY: clean
 clean::
-	rm -f *.lds *.new boot/*.o boot/*~ boot/core boot/mkelf32
+	rm -f *.lds boot/*.o boot/*~ boot/core boot/mkelf32
 	rm -f asm-macros.i $(BASEDIR)/arch/x86/include/asm/asm-macros.*
 	rm -f $(BASEDIR)/.xen-syms.[0-9]* boot/.*.d $(BASEDIR)/.xen.elf32
 	rm -f $(BASEDIR)/.xen.efi.[0-9]* efi/*.efi efi/mkreloc
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 37/51] build: clean-up "clean" rules of duplication
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (35 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 36/51] build: generate x86's asm-macros.h with filechk Anthony PERARD
@ 2021-08-24 10:50 ` 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
                   ` (17 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu,
	Volodymyr Babchuk, Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith

All those files to be removed are already done in the main Makefile,
either by the "find" command or directly (for $(TARGET).efi).

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Makefile                | 2 +-
 xen/arch/arm/Makefile       | 1 -
 xen/arch/x86/Makefile       | 5 ++---
 xen/test/livepatch/Makefile | 2 +-
 xen/xsm/flask/Makefile      | 2 +-
 5 files changed, 5 insertions(+), 7 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index 28854d6cb29f..950bee10ba38 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -410,7 +410,7 @@ _clean:
 		-o -name ".*.o.tmp" -o -name "*~" -o -name "core" \
 		-o -name '*.lex.c' -o -name '*.tab.[ch]' \
 		-o -name "*.gcno" -o -name ".*.cmd" -o -name "lib.a" \) -exec rm -f {} \;
-	rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map *~ core
+	rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map
 	rm -f asm-offsets.s arch/*/include/asm/asm-offsets.h
 	rm -f .banner include/xen/compile.h
 
diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index a3204d22d17b..e6eff291c5e5 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -118,4 +118,3 @@ $(obj)/dtb.o: $(patsubst "%",%,$(CONFIG_DTB_FILE))
 clean::
 	rm -f $(obj)/xen.lds
 	rm -f $(BASEDIR)/.xen-syms.[0-9]*
-	rm -f $(TARGET).efi
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 1ef2536ece26..8d789d25a3ff 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -261,9 +261,8 @@ $(obj)/efi/mkreloc: $(src)/efi/mkreloc.c
 
 .PHONY: clean
 clean::
-	rm -f *.lds boot/*.o boot/*~ boot/core boot/mkelf32
+	rm -f *.lds boot/mkelf32
 	rm -f asm-macros.i $(BASEDIR)/arch/x86/include/asm/asm-macros.*
-	rm -f $(BASEDIR)/.xen-syms.[0-9]* boot/.*.d $(BASEDIR)/.xen.elf32
+	rm -f $(BASEDIR)/.xen-syms.[0-9]* $(BASEDIR)/.xen.elf32
 	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
diff --git a/xen/test/livepatch/Makefile b/xen/test/livepatch/Makefile
index 52ee58a08c5f..dee5fd78c188 100644
--- a/xen/test/livepatch/Makefile
+++ b/xen/test/livepatch/Makefile
@@ -162,4 +162,4 @@ uninstall:
 
 .PHONY: clean
 clean::
-	rm -f *.o .*.o.d *.livepatch config.h expect_config.h
+	rm -f *.livepatch config.h expect_config.h
diff --git a/xen/xsm/flask/Makefile b/xen/xsm/flask/Makefile
index 57190ff6c8ad..8d18c7d4ae6f 100644
--- a/xen/xsm/flask/Makefile
+++ b/xen/xsm/flask/Makefile
@@ -49,4 +49,4 @@ $(obj)/policy.bin: FORCE
 
 .PHONY: clean
 clean::
-	rm -f $(ALL_H_FILES) *.o $(DEPS_RM) policy.* $(POLICY_SRC) flask-policy.S
+	rm -f $(ALL_H_FILES) policy.* $(POLICY_SRC) flask-policy.S
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 38/51] build: use main rune to build host binary x86's mkelf32 and mkreloc
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (36 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 37/51] build: clean-up "clean" rules of duplication Anthony PERARD
@ 2021-08-24 10:50 ` Anthony PERARD
  2021-10-11 15:56   ` Jan Beulich
  2021-08-24 10:50 ` [XEN PATCH v7 39/51] build: rework coverage and ubsan CFLAGS handling Anthony PERARD
                   ` (16 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Jan Beulich, Andrew Cooper, Roger Pau Monné,
	Wei Liu

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/arch/x86/Makefile | 14 ++++++--------
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 8d789d25a3ff..4ea8ade7202c 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -81,6 +81,10 @@ endif
 extra-y += asm-macros.i
 extra-y += xen.lds
 
+hostprogs-y += boot/mkelf32
+HOSTCFLAGS_efi/mkreloc.o := -g
+hostprogs-y += efi/mkreloc
+
 # Allows usercopy.c to includes itself
 $(obj)/usercopy.o: CFLAGS-y += -I.
 
@@ -253,16 +257,10 @@ $(obj)/efi.lds: AFLAGS-y += -DEFI
 $(obj)/xen.lds $(obj)/efi.lds: $(src)/xen.lds.S FORCE
 	$(call if_changed_dep,cpp_lds_S)
 
-$(obj)/boot/mkelf32: $(src)/boot/mkelf32.c
-	$(HOSTCC) $(HOSTCFLAGS) -o $@ $<
-
-$(obj)/efi/mkreloc: $(src)/efi/mkreloc.c
-	$(HOSTCC) $(HOSTCFLAGS) -g -o $@ $<
-
 .PHONY: clean
 clean::
-	rm -f *.lds boot/mkelf32
+	rm -f *.lds
 	rm -f asm-macros.i $(BASEDIR)/arch/x86/include/asm/asm-macros.*
 	rm -f $(BASEDIR)/.xen-syms.[0-9]* $(BASEDIR)/.xen.elf32
-	rm -f $(BASEDIR)/.xen.efi.[0-9]* efi/*.efi efi/mkreloc
+	rm -f $(BASEDIR)/.xen.efi.[0-9]* efi/*.efi
 	rm -f boot/cmdline.S boot/reloc.S boot/*.lnk boot/*.bin
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 39/51] build: rework coverage and ubsan CFLAGS handling
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (37 preceding siblings ...)
  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-08-24 10:50 ` 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
                   ` (15 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu

When assigning a value a target-specific variable, that also affect
prerequisite of the target. This is mostly fine, but there is one case
where we will not want the COV_FLAGS added to the CFLAGS.

In arch/x86/boot, we have "head.o" with "cmdline.S" as prerequisite
and ultimately "cmdline.o", we don't want COV_FLAGS to that last one.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Rules.mk | 21 ++++++++++++++++++---
 1 file changed, 18 insertions(+), 3 deletions(-)

diff --git a/xen/Rules.mk b/xen/Rules.mk
index 1e1839c4b629..6877fcc2d6d8 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -131,19 +131,31 @@ targets += $(targets-for-builtin)
 
 $(filter %.init.o,$(obj-y) $(obj-bin-y) $(extra-y)): CFLAGS-y += -DINIT_SECTIONS_ONLY
 
+non-init-objects = $(filter-out %.init.o, $(obj-y) $(obj-bin-y) $(extra-y))
+
 ifeq ($(CONFIG_COVERAGE),y)
 ifeq ($(CONFIG_CC_IS_CLANG),y)
     COV_FLAGS := -fprofile-instr-generate -fcoverage-mapping
 else
     COV_FLAGS := -fprofile-arcs -ftest-coverage
 endif
-$(filter-out %.init.o $(nocov-y),$(obj-y) $(obj-bin-y) $(extra-y)): CFLAGS-y += $(COV_FLAGS)
+
+$(non-init-objects): _c_flags += $(COV_FLAGS)
+
+# Reset COV_FLAGS in cases where an objects as another one as prerequisite
+$(nocov-y) $(filter %.init.o, $(obj-y) $(obj-bin-y) $(extra-y)): \
+    COV_FLAGS :=
 endif
 
 ifeq ($(CONFIG_UBSAN),y)
 # Any -fno-sanitize= options need to come after any -fsanitize= options
-$(filter-out %.init.o $(noubsan-y),$(obj-y) $(obj-bin-y) $(extra-y)): \
-CFLAGS-y += $(filter-out -fno-%,$(CFLAGS_UBSAN)) $(filter -fno-%,$(CFLAGS_UBSAN))
+UBSAN_FLAGS := $(filter-out -fno-%,$(CFLAGS_UBSAN)) $(filter -fno-%,$(CFLAGS_UBSAN))
+
+$(non-init-objects): _c_flags += $(UBSAN_FLAGS)
+
+# Reset UBSAN_FLAGS in cases where an objects as another one as prerequisite
+$(noubsan-y) $(filter %.init.o, $(obj-y) $(obj-bin-y) $(extra-y)): \
+    UBSAN_FLAGS :=
 endif
 
 ifeq ($(CONFIG_LTO),y)
@@ -172,6 +184,9 @@ a_flags = -MMD -MP -MF $(depfile) $(XEN_AFLAGS)
 
 include $(BASEDIR)/arch/$(TARGET_ARCH)/Rules.mk
 
+c_flags += $(_c_flags)
+a_flags += $(_c_flags)
+
 c_flags += $(CFLAGS-y)
 a_flags += $(CFLAGS-y) $(AFLAGS-y)
 
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 40/51] build: fix dependencies in arch/x86/boot
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (38 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 39/51] build: rework coverage and ubsan CFLAGS handling Anthony PERARD
@ 2021-08-24 10:50 ` 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
                   ` (14 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Jan Beulich, Andrew Cooper, Roger Pau Monné,
	Wei Liu

Temporary fix the list of headers that cmdline.c and reloc.c depends
on, until the next time the list is out of sync again.

Also, add the linker script to the list.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/arch/x86/boot/Makefile   | 9 ++++++---
 xen/arch/x86/boot/build32.mk | 2 +-
 2 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/xen/arch/x86/boot/Makefile b/xen/arch/x86/boot/Makefile
index 2469ca7c4530..73a3b1514965 100644
--- a/xen/arch/x86/boot/Makefile
+++ b/xen/arch/x86/boot/Makefile
@@ -2,19 +2,22 @@ obj-bin-y += head.o
 
 DEFS_H_DEPS = $(BASEDIR)/$(src)/defs.h $(BASEDIR)/include/xen/stdbool.h
 
-CMDLINE_DEPS = $(DEFS_H_DEPS) $(BASEDIR)/$(src)/video.h
+CMDLINE_DEPS = $(DEFS_H_DEPS) $(BASEDIR)/$(src)/video.h \
+	       $(BASEDIR)/include/xen/kconfig.h \
+	       $(BASEDIR)/include/generated/autoconf.h
 
 RELOC_DEPS = $(DEFS_H_DEPS) \
 	     $(BASEDIR)/include/generated/autoconf.h \
 	     $(BASEDIR)/include/xen/kconfig.h \
 	     $(BASEDIR)/include/xen/multiboot.h \
 	     $(BASEDIR)/include/xen/multiboot2.h \
+	     $(BASEDIR)/include/xen/const.h \
 	     $(BASEDIR)/include/public/arch-x86/hvm/start_info.h
 
 $(obj)/head.o: $(obj)/cmdline.S $(obj)/reloc.S
 
-$(obj)/cmdline.S: $(src)/cmdline.c $(CMDLINE_DEPS)
+$(obj)/cmdline.S: $(src)/cmdline.c $(CMDLINE_DEPS) $(src)/build32.lds
 	$(MAKE) -f $(BASEDIR)/$(src)/build32.mk -C $(obj) $(@F) CMDLINE_DEPS="$(CMDLINE_DEPS)"
 
-$(obj)/reloc.S: $(src)/reloc.c $(RELOC_DEPS)
+$(obj)/reloc.S: $(src)/reloc.c $(RELOC_DEPS) $(src)/build32.lds
 	$(MAKE) -f $(BASEDIR)/$(src)/build32.mk -C $(obj) $(@F) RELOC_DEPS="$(RELOC_DEPS)"
diff --git a/xen/arch/x86/boot/build32.mk b/xen/arch/x86/boot/build32.mk
index 8cd5403926a3..e90680cd9f52 100644
--- a/xen/arch/x86/boot/build32.mk
+++ b/xen/arch/x86/boot/build32.mk
@@ -27,7 +27,7 @@ CFLAGS := $(filter-out -flto,$(CFLAGS))
 		done
 	$(OBJCOPY) -O binary -R .got.plt $< $@
 
-%.lnk: %.o
+%.lnk: %.o build32.lds
 	$(LD) $(LDFLAGS_DIRECT) -N -T build32.lds -o $@ $<
 
 %.o: %.c
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 41/51] build,x86: remove the need for build32.mk
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (39 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 40/51] build: fix dependencies in arch/x86/boot Anthony PERARD
@ 2021-08-24 10:50 ` Anthony PERARD
  2021-10-14  8:32   ` Jan Beulich
  2021-08-24 10:50 ` [XEN PATCH v7 42/51] build: grab common EFI source files in arch specific dir Anthony PERARD
                   ` (13 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Jan Beulich, Andrew Cooper, Roger Pau Monné,
	Wei Liu

Rework "arch/x86/boot/Makefile" to allow it to build both file
"cmdline.S" and "reloc.S" without "build32.mk".

These will now use the main rules for "%.o: %.c", and thus generate a
dependency file. (We will not need to track the dependency manually
anymore.)

But for that, we need to override the main CFLAGS to do a 32bit build.
Thus we copy all the necessary flags from "Config.mk", and apply them
only to "cmdline.o" and "reloc.o".

Specificaly apply the rule "%.S: %.bin" to both cmdline.S and reloc.S
to avoid make trying to regenerate other %.S files with it.

There is no change expected to the resulting "cmdline.S" and
"reloc.S", only the *.o file changes as their symbole for FILE goes
from "cmdline.c" to "arch/x86//cmdline.c". (No idea why "boot" is
missing from the string.) (I've only check with gcc, not clang.)

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/arch/x86/boot/Makefile   | 60 ++++++++++++++++++++++++++----------
 xen/arch/x86/boot/build32.mk | 40 ------------------------
 2 files changed, 44 insertions(+), 56 deletions(-)
 delete mode 100644 xen/arch/x86/boot/build32.mk

diff --git a/xen/arch/x86/boot/Makefile b/xen/arch/x86/boot/Makefile
index 73a3b1514965..3580a9b656e8 100644
--- a/xen/arch/x86/boot/Makefile
+++ b/xen/arch/x86/boot/Makefile
@@ -1,23 +1,51 @@
 obj-bin-y += head.o
+head-objs := cmdline.S reloc.S
 
-DEFS_H_DEPS = $(BASEDIR)/$(src)/defs.h $(BASEDIR)/include/xen/stdbool.h
+nocov-y += $(head-objs:.S=.o)
+noubsan-y += $(head-objs:.S=.o)
+targets += $(head-objs:.S=.o)
 
-CMDLINE_DEPS = $(DEFS_H_DEPS) $(BASEDIR)/$(src)/video.h \
-	       $(BASEDIR)/include/xen/kconfig.h \
-	       $(BASEDIR)/include/generated/autoconf.h
+head-objs := $(addprefix $(obj)/, $(head-objs))
 
-RELOC_DEPS = $(DEFS_H_DEPS) \
-	     $(BASEDIR)/include/generated/autoconf.h \
-	     $(BASEDIR)/include/xen/kconfig.h \
-	     $(BASEDIR)/include/xen/multiboot.h \
-	     $(BASEDIR)/include/xen/multiboot2.h \
-	     $(BASEDIR)/include/xen/const.h \
-	     $(BASEDIR)/include/public/arch-x86/hvm/start_info.h
+$(obj)/head.o: $(head-objs)
 
-$(obj)/head.o: $(obj)/cmdline.S $(obj)/reloc.S
+LDFLAGS_DIRECT_OpenBSD = _obsd
+LDFLAGS_DIRECT_FreeBSD = _fbsd
+$(head-objs:.S=.lnk): LDFLAGS_DIRECT := -melf_i386$(LDFLAGS_DIRECT_$(XEN_OS))
 
-$(obj)/cmdline.S: $(src)/cmdline.c $(CMDLINE_DEPS) $(src)/build32.lds
-	$(MAKE) -f $(BASEDIR)/$(src)/build32.mk -C $(obj) $(@F) CMDLINE_DEPS="$(CMDLINE_DEPS)"
+CFLAGS_x86_32 := -m32 -march=i686
+CFLAGS_x86_32 += -fno-strict-aliasing
+CFLAGS_x86_32 += -std=gnu99
+CFLAGS_x86_32 += -Wall -Wstrict-prototypes
+$(call cc-option-add,CFLAGS_x86_32,CC,-Wdeclaration-after-statement)
+$(call cc-option-add,CFLAGS_x86_32,CC,-Wno-unused-but-set-variable)
+$(call cc-option-add,CFLAGS_x86_32,CC,-Wno-unused-local-typedefs)
+$(call cc-options-add,CFLAGS_x86_32,CC,$(EMBEDDED_EXTRA_CFLAGS))
+CFLAGS_x86_32 += -Werror -fno-builtin -g0 -msoft-float
+CFLAGS_x86_32 += -I$(srctree)/include
 
-$(obj)/reloc.S: $(src)/reloc.c $(RELOC_DEPS) $(src)/build32.lds
-	$(MAKE) -f $(BASEDIR)/$(src)/build32.mk -C $(obj) $(@F) RELOC_DEPS="$(RELOC_DEPS)"
+# override for 32bit binaries
+$(head-objs:.S=.o): CFLAGS-stack-boundary :=
+$(head-objs:.S=.o): XEN_CFLAGS := $(CFLAGS_x86_32) -fpic
+
+$(head-objs): %.S: %.bin
+	(od -v -t x $< | tr -s ' ' | awk 'NR > 1 {print s} {s=$$0}' | \
+	sed 's/ /,0x/g' | sed 's/,0x$$//' | sed 's/^[0-9]*,/ .long /') >$@
+
+# Drop .got.plt during conversion to plain binary format.
+# Please check build32.lds for more details.
+%.bin: %.lnk
+	$(OBJDUMP) -h $< | sed -n '/[0-9]/{s,00*,0,g;p;}' | \
+		while read idx name sz rest; do \
+			case "$$name" in \
+			.got.plt) \
+				test $$sz != 0c || continue; \
+				echo "Error: non-empty $$name: 0x$$sz" >&2; \
+				exit $$(expr $$idx + 1);; \
+			esac; \
+		done
+	$(OBJCOPY) -O binary -R .got.plt $< $@
+
+
+%.lnk: %.o $(src)/build32.lds
+	$(LD) $(LDFLAGS_DIRECT) -N -T $(filter %.lds,$^) -o $@ $<
diff --git a/xen/arch/x86/boot/build32.mk b/xen/arch/x86/boot/build32.mk
deleted file mode 100644
index e90680cd9f52..000000000000
--- a/xen/arch/x86/boot/build32.mk
+++ /dev/null
@@ -1,40 +0,0 @@
-override XEN_TARGET_ARCH=x86_32
-CFLAGS =
-include $(XEN_ROOT)/Config.mk
-
-$(call cc-options-add,CFLAGS,CC,$(EMBEDDED_EXTRA_CFLAGS))
-
-CFLAGS += -Werror -fno-builtin -g0 -msoft-float
-CFLAGS += -I$(BASEDIR)/include
-CFLAGS := $(filter-out -flto,$(CFLAGS)) 
-
-# NB. awk invocation is a portable alternative to 'head -n -1'
-%.S: %.bin
-	(od -v -t x $< | tr -s ' ' | awk 'NR > 1 {print s} {s=$$0}' | \
-	sed 's/ /,0x/g' | sed 's/,0x$$//' | sed 's/^[0-9]*,/ .long /') >$@
-
-# Drop .got.plt during conversion to plain binary format.
-# Please check build32.lds for more details.
-%.bin: %.lnk
-	$(OBJDUMP) -h $< | sed -n '/[0-9]/{s,00*,0,g;p;}' | \
-		while read idx name sz rest; do \
-			case "$$name" in \
-			.got.plt) \
-				test $$sz != 0c || continue; \
-				echo "Error: non-empty $$name: 0x$$sz" >&2; \
-				exit $$(expr $$idx + 1);; \
-			esac; \
-		done
-	$(OBJCOPY) -O binary -R .got.plt $< $@
-
-%.lnk: %.o build32.lds
-	$(LD) $(LDFLAGS_DIRECT) -N -T build32.lds -o $@ $<
-
-%.o: %.c
-	$(CC) $(CFLAGS) -c -fpic $< -o $@
-
-cmdline.o: cmdline.c $(CMDLINE_DEPS)
-
-reloc.o: reloc.c $(RELOC_DEPS)
-
-.PRECIOUS: %.bin %.lnk
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 42/51] build: grab common EFI source files in arch specific dir
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (40 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 41/51] build,x86: remove the need for build32.mk Anthony PERARD
@ 2021-08-24 10:50 ` Anthony PERARD
  2021-10-14  8:51   ` Jan Beulich
  2021-08-24 10:50 ` [XEN PATCH v7 43/51] build: replace $(BASEDIR) by $(objtree) Anthony PERARD
                   ` (12 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu,
	Volodymyr Babchuk, Roger Pau Monné

Rather than preparing the efi source file, we will copy them as needed
from the build location.

Avoid the links as they seems fragile in out-of-tree builds. Also by
making a copy, we don't need to figure out the relative path or we
don't need to use absolute path.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Makefile              | 5 -----
 xen/arch/arm/efi/Makefile | 6 ++++++
 xen/arch/x86/efi/Makefile | 6 ++++++
 3 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index 950bee10ba38..4c1dd9ce2ea1 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -425,11 +425,6 @@ $(TARGET).gz: $(TARGET)
 $(TARGET): tools_fixdep FORCE
 	$(MAKE) $(build)=tools
 	$(MAKE) $(build)=. include/xen/compile.h
-	[ -e arch/$(TARGET_ARCH)/efi ] && for f in $$(cd common/efi; echo *.[ch]); \
-		do test -r arch/$(TARGET_ARCH)/efi/$$f || \
-		   ln -nsf ../../../common/efi/$$f arch/$(TARGET_ARCH)/efi/; \
-		done; \
-		true
 	$(MAKE) $(build)=include all
 	$(MAKE) $(build)=arch/$(TARGET_ARCH) include
 	$(MAKE) $(build)=. arch/$(TARGET_ARCH)/include/asm/asm-offsets.h
diff --git a/xen/arch/arm/efi/Makefile b/xen/arch/arm/efi/Makefile
index 1b1ed06feddc..36e15ac280cd 100644
--- a/xen/arch/arm/efi/Makefile
+++ b/xen/arch/arm/efi/Makefile
@@ -1,4 +1,10 @@
 CFLAGS-y += -fshort-wchar
+CFLAGS-y += -I$(srctree)/common/efi
 
 obj-y += boot.init.o pe.init.o ebmalloc.o runtime.o
 obj-$(CONFIG_ACPI) +=  efi-dom0.init.o
+
+$(obj)/%.c: common/efi/%.c
+	$(Q)cp -f $< $@
+
+.PRECIOUS: $(obj)/%.c
diff --git a/xen/arch/x86/efi/Makefile b/xen/arch/x86/efi/Makefile
index ac815f02cb5e..da05935a9348 100644
--- a/xen/arch/x86/efi/Makefile
+++ b/xen/arch/x86/efi/Makefile
@@ -1,4 +1,5 @@
 CFLAGS-y += -fshort-wchar
+CFLAGS-y += -I$(srctree)/common/efi
 
 quiet_cmd_objcopy_o_ihex = OBJCOPY $@
 cmd_objcopy_o_ihex = $(OBJCOPY) -I ihex -O binary $< $@
@@ -19,3 +20,8 @@ obj-$(XEN_BUILD_EFI) := $(filter-out %.init.o,$(EFIOBJ-y))
 obj-bin-$(XEN_BUILD_EFI) := $(filter %.init.o,$(EFIOBJ-y))
 extra-$(XEN_BUILD_EFI) += buildid.o relocs-dummy.o
 nocov-$(XEN_BUILD_EFI) += stub.o
+
+$(obj)/%.c: common/efi/%.c
+	$(Q)cp -f $< $@
+
+.PRECIOUS: $(obj)/%.c
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 43/51] build: replace $(BASEDIR) by $(objtree)
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (41 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 42/51] build: grab common EFI source files in arch specific dir Anthony PERARD
@ 2021-08-24 10:50 ` 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
                   ` (11 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu,
	Volodymyr Babchuk, Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith

We need to differentiate between source files and generated/built
files. We will be replacing $(BASEDIR) by $(objtree) for files that
are generated, and $(abs_objtree) in cases where an absolute path is
necessary.

The "clean" target is still changing to the subdir been cleaned, to
remove file in the root we need to use $(abs_objtree).

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Makefile                |  5 +++++
 xen/Rules.mk                |  2 +-
 xen/arch/arm/Makefile       | 12 ++++++------
 xen/arch/x86/Makefile       | 34 +++++++++++++++++-----------------
 xen/common/Makefile         |  2 +-
 xen/test/livepatch/Makefile | 12 ++++++------
 xen/xsm/flask/Makefile      |  2 +-
 7 files changed, 37 insertions(+), 32 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index 4c1dd9ce2ea1..36a64118007b 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -135,6 +135,11 @@ endif
 
 export quiet Q KBUILD_VERBOSE
 
+abs_objtree := $(CURDIR)
+abs_srctree := $(CURDIR)
+
+export abs_srctree abs_objtree
+
 # To make sure we do not include .config for any of the *config targets
 # catch them early, and hand them over to tools/kconfig/Makefile
 
diff --git a/xen/Rules.mk b/xen/Rules.mk
index 6877fcc2d6d8..fae6b8918019 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -8,7 +8,7 @@ src := $(obj)
 PHONY := __build
 __build:
 
--include $(BASEDIR)/include/config/auto.conf
+-include $(objtree)/include/config/auto.conf
 
 include $(XEN_ROOT)/Config.mk
 
diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index e6eff291c5e5..774648d6296e 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -88,21 +88,21 @@ ifeq ($(CONFIG_ARM_64),y)
 	ln -sf $(@F) $@.efi
 endif
 
-$(TARGET)-syms: $(BASEDIR)/prelink.o $(obj)/xen.lds
+$(TARGET)-syms: $(objtree)/prelink.o $(obj)/xen.lds
 	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< \
-	    $(BASEDIR)/common/symbols-dummy.o -o $(@D)/.$(@F).0
+	    $(objtree)/common/symbols-dummy.o -o $(@D)/.$(@F).0
 	$(NM) -pa --format=sysv $(@D)/.$(@F).0 \
-		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).0.S
+		| $(objtree)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).0.S
 	$(MAKE) $(build)=$(@D) $(@D)/.$(@F).0.o
 	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< \
 	    $(@D)/.$(@F).0.o -o $(@D)/.$(@F).1
 	$(NM) -pa --format=sysv $(@D)/.$(@F).1 \
-		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).1.S
+		| $(objtree)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).1.S
 	$(MAKE) $(build)=$(@D) $(@D)/.$(@F).1.o
 	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).1.o -o $@
 	$(NM) -pa --format=sysv $(@D)/$(@F) \
-		| $(BASEDIR)/tools/symbols --all-symbols --xensyms --sysv --sort \
+		| $(objtree)/tools/symbols --all-symbols --xensyms --sysv --sort \
 		>$(@D)/$(@F).map
 	rm -f $(@D)/.$(@F).[0-9]*
 
@@ -117,4 +117,4 @@ $(obj)/dtb.o: $(patsubst "%",%,$(CONFIG_DTB_FILE))
 .PHONY: clean
 clean::
 	rm -f $(obj)/xen.lds
-	rm -f $(BASEDIR)/.xen-syms.[0-9]*
+	rm -f $(abs_objtree)/.xen-syms.[0-9]*
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 4ea8ade7202c..85c44c69ff5a 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -92,8 +92,8 @@ ifneq ($(CONFIG_HVM),y)
 $(obj)/x86_emulate.o: CFLAGS-y += -Wno-unused-label
 endif
 
-efi-y := $(shell if [ ! -r $(BASEDIR)/include/xen/compile.h -o \
-                      -O $(BASEDIR)/include/xen/compile.h ]; then \
+efi-y := $(shell if [ ! -r $(objtree)/include/xen/compile.h -o \
+                      -O $(objtree)/include/xen/compile.h ]; then \
                          echo '$(TARGET).efi'; fi) \
          $(space)
 efi-$(CONFIG_PV_SHIM_EXCLUSIVE) :=
@@ -133,23 +133,23 @@ ifneq ($(efi-y),)
 CFLAGS-$(XEN_BUILD_EFI) += -DXEN_BUILD_EFI
 endif # $(efi-y)
 
-$(TARGET)-syms: $(BASEDIR)/prelink.o $(obj)/xen.lds
+$(TARGET)-syms: $(objtree)/prelink.o $(obj)/xen.lds
 	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
-	    $(BASEDIR)/common/symbols-dummy.o -o $(@D)/.$(@F).0
+	    $(objtree)/common/symbols-dummy.o -o $(@D)/.$(@F).0
 	$(NM) -pa --format=sysv $(@D)/.$(@F).0 \
-		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort \
+		| $(objtree)/tools/symbols $(all_symbols) --sysv --sort \
 		>$(@D)/.$(@F).0.S
 	$(MAKE) $(build)=$(@D) $(@D)/.$(@F).0.o
 	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).0.o -o $(@D)/.$(@F).1
 	$(NM) -pa --format=sysv $(@D)/.$(@F).1 \
-		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort $(syms-warn-dup-y) \
+		| $(objtree)/tools/symbols $(all_symbols) --sysv --sort $(syms-warn-dup-y) \
 		>$(@D)/.$(@F).1.S
 	$(MAKE) $(build)=$(@D) $(@D)/.$(@F).1.o
 	$(LD) $(XEN_LDFLAGS) -T $(obj)/xen.lds -N $< $(build_id_linker) \
 	    $(@D)/.$(@F).1.o -o $@
 	$(NM) -pa --format=sysv $(@D)/$(@F) \
-		| $(BASEDIR)/tools/symbols --all-symbols --xensyms --sysv --sort \
+		| $(objtree)/tools/symbols --all-symbols --xensyms --sysv --sort \
 		>$(@D)/$(@F).map
 	rm -f $(@D)/.$(@F).[0-9]* $(@D)/..$(@F).[0-9]*
 
@@ -199,28 +199,28 @@ note_file_option ?= $(note_file)
 
 ifeq ($(XEN_BUILD_PE),y)
 extra-y += efi.lds
-$(TARGET).efi: $(BASEDIR)/prelink.o $(note_file) $(obj)/efi.lds $(obj)/efi/relocs-dummy.o $(obj)/efi/mkreloc
+$(TARGET).efi: $(objtree)/prelink.o $(note_file) $(obj)/efi.lds $(obj)/efi/relocs-dummy.o $(obj)/efi/mkreloc
 ifeq ($(CONFIG_DEBUG_INFO),y)
 	$(if $(filter --strip-debug,$(EFI_LDFLAGS)),echo,:) "Will strip debug info from $(@F)"
 endif
 	$(foreach base, $(VIRT_BASE) $(ALT_BASE), \
 	          $(LD) $(call EFI_LDFLAGS,$(base)) -T $(obj)/efi.lds -N $< $(relocs-dummy) \
-	                $(BASEDIR)/common/symbols-dummy.o $(note_file_option) -o $(@D)/.$(@F).$(base).0 &&) :
+	                $(objtree)/common/symbols-dummy.o $(note_file_option) -o $(@D)/.$(@F).$(base).0 &&) :
 	$(MKRELOC) $(foreach base,$(VIRT_BASE) $(ALT_BASE),$(@D)/.$(@F).$(base).0) >$(@D)/.$(@F).0r.S
 	$(NM) -pa --format=sysv $(@D)/.$(@F).$(VIRT_BASE).0 \
-		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).0s.S
+		| $(objtree)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).0s.S
 	$(MAKE) $(build)=$(@D) .$(@F).0r.o .$(@F).0s.o
 	$(foreach base, $(VIRT_BASE) $(ALT_BASE), \
 	          $(LD) $(call EFI_LDFLAGS,$(base)) -T $(obj)/efi.lds -N $< \
 	                $(@D)/.$(@F).0r.o $(@D)/.$(@F).0s.o $(note_file_option) -o $(@D)/.$(@F).$(base).1 &&) :
 	$(MKRELOC) $(foreach base,$(VIRT_BASE) $(ALT_BASE),$(@D)/.$(@F).$(base).1) >$(@D)/.$(@F).1r.S
 	$(NM) -pa --format=sysv $(@D)/.$(@F).$(VIRT_BASE).1 \
-		| $(BASEDIR)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).1s.S
+		| $(objtree)/tools/symbols $(all_symbols) --sysv --sort >$(@D)/.$(@F).1s.S
 	$(MAKE) $(build)=$(@D) .$(@F).1r.o .$(@F).1s.o
 	$(LD) $(call EFI_LDFLAGS,$(VIRT_BASE)) -T $(obj)/efi.lds -N $< \
 	                $(@D)/.$(@F).1r.o $(@D)/.$(@F).1s.o $(note_file_option) -o $@
 	$(NM) -pa --format=sysv $(@D)/$(@F) \
-		| $(BASEDIR)/tools/symbols --all-symbols --xensyms --sysv --sort >$(@D)/$(@F).map
+		| $(objtree)/tools/symbols --all-symbols --xensyms --sysv --sort >$(@D)/$(@F).map
 	rm -f $(@D)/.$(@F).[0-9]* $(@D)/..$(@F).[0-9]*
 else
 $(TARGET).efi: FORCE
@@ -232,11 +232,11 @@ endif
 $(obj)/efi/buildid.o $(obj)/efi/relocs-dummy.o: ;
 
 .PHONY: include
-include: $(BASEDIR)/arch/x86/include/asm/asm-macros.h
+include: $(objtree)/arch/x86/include/asm/asm-macros.h
 
 $(obj)/asm-macros.i: CFLAGS-y += -D__ASSEMBLY__ -P
 
-$(BASEDIR)/arch/x86/include/asm/asm-macros.h: $(obj)/asm-macros.i $(src)/Makefile
+$(objtree)/arch/x86/include/asm/asm-macros.h: $(obj)/asm-macros.i $(src)/Makefile
 	$(call filechk,asm-macros.h)
 
 define filechk_asm-macros.h
@@ -260,7 +260,7 @@ $(obj)/xen.lds $(obj)/efi.lds: $(src)/xen.lds.S FORCE
 .PHONY: clean
 clean::
 	rm -f *.lds
-	rm -f asm-macros.i $(BASEDIR)/arch/x86/include/asm/asm-macros.*
-	rm -f $(BASEDIR)/.xen-syms.[0-9]* $(BASEDIR)/.xen.elf32
-	rm -f $(BASEDIR)/.xen.efi.[0-9]* efi/*.efi
+	rm -f asm-macros.i $(abs_objtree)/arch/x86/include/asm/asm-macros.*
+	rm -f $(abs_objtree)/.xen-syms.[0-9]* $(abs_objtree)/.xen.elf32
+	rm -f $(abs_objtree)/.xen.efi.[0-9]* efi/*.efi
 	rm -f boot/cmdline.S boot/reloc.S boot/*.lnk boot/*.bin
diff --git a/xen/common/Makefile b/xen/common/Makefile
index ca839118e4d1..8771c2775efb 100644
--- a/xen/common/Makefile
+++ b/xen/common/Makefile
@@ -74,7 +74,7 @@ obj-$(CONFIG_UBSAN) += ubsan/
 obj-$(CONFIG_NEEDS_LIBELF) += libelf/
 obj-$(CONFIG_HAS_DEVICE_TREE) += libfdt/
 
-CONF_FILE := $(if $(patsubst /%,,$(KCONFIG_CONFIG)),$(BASEDIR)/)$(KCONFIG_CONFIG)
+CONF_FILE := $(if $(patsubst /%,,$(KCONFIG_CONFIG)),$(objtree)/)$(KCONFIG_CONFIG)
 $(obj)/config.gz: $(CONF_FILE)
 	gzip -n -c $< >$@
 
diff --git a/xen/test/livepatch/Makefile b/xen/test/livepatch/Makefile
index dee5fd78c188..008e89fc9a47 100644
--- a/xen/test/livepatch/Makefile
+++ b/xen/test/livepatch/Makefile
@@ -22,9 +22,9 @@ $(obj)/xen_hello_world.o: $(obj)/config.h
 $(obj)/config.h: $(obj)/xen_hello_world_func.o
 	(set -e; \
 	 echo "#define NEW_CODE_SZ $(call CODE_SZ,$<,xen_hello_world)"; \
-	 echo "#define MINOR_VERSION_SZ $(call CODE_SZ,$(BASEDIR)/xen-syms,xen_minor_version)"; \
-	 echo "#define MINOR_VERSION_ADDR $(call CODE_ADDR,$(BASEDIR)/xen-syms,xen_minor_version)"; \
-	 echo "#define OLD_CODE_SZ $(call CODE_SZ,$(BASEDIR)/xen-syms,xen_extra_version)") > $@
+	 echo "#define MINOR_VERSION_SZ $(call CODE_SZ,$(objtree)/xen-syms,xen_minor_version)"; \
+	 echo "#define MINOR_VERSION_ADDR $(call CODE_ADDR,$(objtree)/xen-syms,xen_minor_version)"; \
+	 echo "#define OLD_CODE_SZ $(call CODE_SZ,$(objtree)/xen-syms,xen_extra_version)") > $@
 
 $(obj)/modinfo.o:
 	(set -e; \
@@ -42,7 +42,7 @@ $(obj)/modinfo.o:
 # not be built (it is for EFI builds), and that we do not have
 # the note.o.bin to muck with (as it gets deleted)
 #
-$(obj)/note.o: $(BASEDIR)/xen-syms
+$(obj)/note.o: $(objtree)/xen-syms
 	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $< $@.bin
 	$(OBJCOPY) $(OBJCOPY_MAGIC) \
 		   --rename-section=.data=.livepatch.depends,alloc,load,readonly,data,contents -S $@.bin $@
@@ -52,7 +52,7 @@ $(obj)/note.o: $(BASEDIR)/xen-syms
 # Append .livepatch.xen_depends section
 # with Xen build-id derived from xen-syms.
 #
-$(obj)/xen_note.o: $(BASEDIR)/xen-syms
+$(obj)/xen_note.o: $(objtree)/xen-syms
 	$(OBJCOPY) -O binary --only-section=.note.gnu.build-id $< $@.bin
 	$(OBJCOPY) $(OBJCOPY_MAGIC) \
 		   --rename-section=.data=.livepatch.xen_depends,alloc,load,readonly,data,contents -S $@.bin $@
@@ -125,7 +125,7 @@ xen_action_hooks_norevert-objs := xen_action_hooks_marker.o xen_hello_world_func
 
 EXPECT_BYTES_COUNT := 8
 CODE_GET_EXPECT=$(shell $(OBJDUMP) -d --insn-width=1 $(1) | sed -n -e '/<'$(2)'>:$$/,/^$$/ p' | tail -n +2 | head -n $(EXPECT_BYTES_COUNT) | awk '{$$0=$$2; printf "%s", substr($$0,length-1)}' | sed 's/.\{2\}/0x&,/g' | sed 's/^/{/;s/,$$/}/g')
-$(obj)/expect_config.h: $(BASEDIR)/xen-syms
+$(obj)/expect_config.h: $(objtree)/xen-syms
 	(set -e; \
 	 echo "#define EXPECT_BYTES $(call CODE_GET_EXPECT,$<,xen_extra_version)"; \
          echo "#define EXPECT_BYTES_COUNT $(EXPECT_BYTES_COUNT)") > $@
diff --git a/xen/xsm/flask/Makefile b/xen/xsm/flask/Makefile
index 8d18c7d4ae6f..bff36aa97918 100644
--- a/xen/xsm/flask/Makefile
+++ b/xen/xsm/flask/Makefile
@@ -40,7 +40,7 @@ $(obj)/flask-policy.S: $(BASEDIR)/tools/binfile FORCE
 	$(call if_changed,binfile,$(obj)/policy.bin xsm_flask_init_policy)
 targets += flask-policy.S
 
-FLASK_BUILD_DIR := $(BASEDIR)/$(obj)
+FLASK_BUILD_DIR := $(abs_objtree)/$(obj)
 POLICY_SRC := $(FLASK_BUILD_DIR)/xenpolicy-$(XEN_FULLVERSION)
 
 $(obj)/policy.bin: FORCE
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 44/51] build: add $(srctree) in few key places
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (42 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 43/51] build: replace $(BASEDIR) by $(objtree) Anthony PERARD
@ 2021-08-24 10:50 ` 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
                   ` (10 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Jan Beulich, Andrew Cooper, Roger Pau Monné,
	Wei Liu, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Daniel De Graaf, Daniel P. Smith

This adds $(srctree) to a few path where make's VPATH=$(srctree) won't
apply.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/arch/x86/arch.mk   | 2 +-
 xen/build.mk           | 4 ++--
 xen/include/Makefile   | 4 ++--
 xen/xsm/flask/Makefile | 8 ++++----
 4 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
index 53b48ded28de..f0dc6820f85c 100644
--- a/xen/arch/x86/arch.mk
+++ b/xen/arch/x86/arch.mk
@@ -63,7 +63,7 @@ ifneq ($(CONFIG_PV_SHIM_EXCLUSIVE),y)
 efi-check-o = arch/x86/efi/check.o
 
 # Check if the compiler supports the MS ABI.
-XEN_BUILD_EFI := $(call if-success,$(CC) $(CFLAGS) -c $(efi-check-o:.o=.c) -o $(efi-check-o),y)
+XEN_BUILD_EFI := $(call if-success,$(CC) $(CFLAGS) -c $(srctree)/$(efi-check-o:.o=.c) -o $(efi-check-o),y)
 
 # Check if the linker supports PE.
 EFI_LDFLAGS := $(patsubst -m%,-mi386pep,$(LDFLAGS)) --subsystem=10
diff --git a/xen/build.mk b/xen/build.mk
index 537c32f42d25..0f9d718709b7 100644
--- a/xen/build.mk
+++ b/xen/build.mk
@@ -25,9 +25,9 @@ define cmd_compile.h
 	    -e 's/@@version@@/$(XEN_VERSION)/g' \
 	    -e 's/@@subversion@@/$(XEN_SUBVERSION)/g' \
 	    -e 's/@@extraversion@@/$(XEN_EXTRAVERSION)/g' \
-	    -e 's!@@changeset@@!$(shell tools/scmversion $(XEN_ROOT) || echo "unavailable")!g' \
+	    -e 's!@@changeset@@!$(shell $(srctree)/tools/scmversion $(XEN_ROOT) || echo "unavailable")!g' \
 	    < $< > $(dot-target).tmp; \
-	sed -rf tools/process-banner.sed < .banner >> $(dot-target).tmp; \
+	sed -rf $(srctree)/tools/process-banner.sed < .banner >> $(dot-target).tmp; \
 	mv -f $(dot-target).tmp $@; \
     fi
 endef
diff --git a/xen/include/Makefile b/xen/include/Makefile
index 341196306abd..0b72c129da69 100644
--- a/xen/include/Makefile
+++ b/xen/include/Makefile
@@ -51,7 +51,7 @@ $(obj)/compat/%.i: $(obj)/compat/%.c $(src)/Makefile
 
 $(obj)/compat/%.c: $(src)/public/%.h $(src)/xlat.lst $(src)/Makefile $(BASEDIR)/tools/compat-build-source.py
 	mkdir -p $(@D)
-	$(PYTHON) $(BASEDIR)/tools/compat-build-source.py $(src)/xlat.lst <$< >$@.new
+	$(PYTHON) $(BASEDIR)/tools/compat-build-source.py $(srctree)/$(src)/xlat.lst <$< >$@.new
 	mv -f $@.new $@
 
 $(obj)/compat/.xlat/%.h: $(obj)/compat/%.h $(obj)/compat/.xlat/%.lst $(BASEDIR)/tools/get-fields.sh $(src)/Makefile
@@ -67,7 +67,7 @@ $(obj)/compat/.xlat/%.lst: $(src)/xlat.lst $(src)/Makefile
 	grep -v '^[[:blank:]]*#' $< | sed -ne 's,@arch@,$(compat-arch-y),g' -re 's,[[:blank:]]+$*\.h[[:blank:]]*$$,,p' >$@.new
 	$(call move-if-changed,$@.new,$@)
 
-xlat-y := $(shell sed -ne 's,@arch@,$(compat-arch-y),g' -re 's,^[?!][[:blank:]]+[^[:blank:]]+[[:blank:]]+,,p' $(src)/xlat.lst | uniq)
+xlat-y := $(shell sed -ne 's,@arch@,$(compat-arch-y),g' -re 's,^[?!][[:blank:]]+[^[:blank:]]+[[:blank:]]+,,p' $(srctree)/$(src)/xlat.lst | uniq)
 xlat-y := $(filter $(patsubst compat/%,%,$(headers-y)),$(xlat-y))
 
 $(obj)/compat/xlat.h: $(addprefix $(obj)/compat/.xlat/,$(xlat-y)) $(obj)/config/auto.conf $(src)/Makefile
diff --git a/xen/xsm/flask/Makefile b/xen/xsm/flask/Makefile
index bff36aa97918..56aed07e27fe 100644
--- a/xen/xsm/flask/Makefile
+++ b/xen/xsm/flask/Makefile
@@ -8,8 +8,8 @@ CFLAGS-y += -I$(obj)/include
 
 AWK = awk
 
-FLASK_H_DEPEND := $(addprefix $(src)/policy/,security_classes initial_sids)
-AV_H_DEPEND = $(src)/policy/access_vectors
+FLASK_H_DEPEND := $(addprefix $(srctree)/$(src)/policy/,security_classes initial_sids)
+AV_H_DEPEND = $(srctree)/$(src)/policy/access_vectors
 
 FLASK_H_FILES := flask.h class_to_string.h initial_sid_to_string.h
 AV_H_FILES := av_perm_to_string.h av_permissions.h
@@ -18,14 +18,14 @@ ALL_H_FILES := $(addprefix include/,$(FLASK_H_FILES) $(AV_H_FILES))
 $(addprefix $(obj)/,$(obj-y)) $(obj)/ss/built_in.o: $(addprefix $(obj)/,$(ALL_H_FILES))
 extra-y += $(ALL_H_FILES)
 
-mkflask := $(src)/policy/mkflask.sh
+mkflask := $(srctree)/$(src)/policy/mkflask.sh
 quiet_cmd_mkflask = MKFLASK $@
 cmd_mkflask = $(SHELL) $(mkflask) $(AWK) $(obj)/include $(FLASK_H_DEPEND)
 
 $(addprefix $(obj)/%/,$(FLASK_H_FILES)): $(FLASK_H_DEPEND) $(mkflask) FORCE
 	$(call if_changed,mkflask)
 
-mkaccess := $(src)/policy/mkaccess_vector.sh
+mkaccess := $(srctree)/$(src)/policy/mkaccess_vector.sh
 quiet_cmd_mkaccess = MKACCESS VECTOR $@
 cmd_mkaccess = $(SHELL) $(mkaccess) $(AWK) $(obj)/include $(AV_H_DEPEND)
 
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 45/51] build: rework cloc recipe
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (43 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 44/51] build: add $(srctree) in few key places Anthony PERARD
@ 2021-08-24 10:50 ` Anthony PERARD
  2021-10-14  9:33   ` Jan Beulich
  2021-08-24 10:50 ` [XEN PATCH v7 46/51] build: replace $(BASEDIR) by $(srctree) Anthony PERARD
                   ` (9 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu

After folowing patches, the recipe doesn't work anymore.
    - build: build everything from the root dir, use obj=$subdir
    - build: introduce if_changed_deps

First patch mean that $(names) already have $(path), and the second
one, the .*.d files are replaced by .*.cmd files which are much
simpler to parse here.

Also replace the makefile programming by a much simpler shell command.

This doesn't check anymore if the source file exist, but that can be
fixed by running `make clean`, and probably doesn't impact the
calculation. `cloc` just complain that some files don't exist.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Makefile | 9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index 36a64118007b..b09584e33f9c 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -490,14 +490,7 @@ _MAP:
 
 .PHONY: cloc
 cloc:
-	$(eval tmpfile := $(shell mktemp))
-	$(foreach f, $(shell find $(BASEDIR) -name *.o.d), \
-		$(eval path := $(dir $(f))) \
-		$(eval names := $(shell grep -o "[a-zA-Z0-9_/-]*\.[cS]" $(f))) \
-		$(foreach sf, $(names), \
-			$(shell if test -f $(path)/$(sf) ; then echo $(path)/$(sf) >> $(tmpfile); fi;)))
-	cloc --list-file=$(tmpfile)
-	rm $(tmpfile)
+	find . -name '*.o.cmd' -exec awk '/^source_/{print $$3;}' {} + | cloc --list-file=-
 
 endif #config-build
 
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 46/51] build: replace $(BASEDIR) by $(srctree)
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (44 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 45/51] build: rework cloc recipe Anthony PERARD
@ 2021-08-24 10:50 ` 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
                   ` (8 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu,
	Daniel De Graaf, Daniel P. Smith

$(srctree) is a better description for the source directory than
$(BASEDIR) that has been used for both source and build directory
(which where the same).

"clean" is still changing directory, so we need to use absolute path
for it.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Kconfig                 |  4 ++--
 xen/Makefile                |  7 +++----
 xen/Rules.mk                |  6 +++---
 xen/common/Makefile         |  2 +-
 xen/common/libfdt/Makefile  |  2 +-
 xen/include/Makefile        | 12 ++++++------
 xen/scripts/Kbuild.include  |  4 ++--
 xen/scripts/Kconfig.include |  2 +-
 xen/scripts/Makefile.clean  |  2 +-
 xen/xsm/flask/Makefile      |  2 +-
 10 files changed, 21 insertions(+), 22 deletions(-)

diff --git a/xen/Kconfig b/xen/Kconfig
index bcbd2758e5d3..ac9a638d372e 100644
--- a/xen/Kconfig
+++ b/xen/Kconfig
@@ -14,14 +14,14 @@ config CC_IS_GCC
 
 config GCC_VERSION
 	int
-	default $(shell,$(BASEDIR)/scripts/gcc-version.sh $(CC))
+	default $(shell,$(srctree)/scripts/gcc-version.sh $(CC))
 
 config CC_IS_CLANG
 	def_bool $(success,$(CC) --version | head -n 1 | grep -q clang)
 
 config CLANG_VERSION
 	int
-	default $(shell,$(BASEDIR)/scripts/clang-version.sh $(CC))
+	default $(shell,$(srctree)/scripts/clang-version.sh $(CC))
 
 # -fvisibility=hidden reduces -fpic cost, if it's available
 config CC_HAS_VISIBILITY_ATTRIBUTE
diff --git a/xen/Makefile b/xen/Makefile
index b09584e33f9c..1a288b87980a 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -17,8 +17,7 @@ export XEN_BUILD_HOST	?= $(shell hostname)
 PYTHON_INTERPRETER	:= $(word 1,$(shell which python3 python python2 2>/dev/null) python)
 export PYTHON		?= $(PYTHON_INTERPRETER)
 
-export BASEDIR := $(CURDIR)
-export XEN_ROOT := $(BASEDIR)/..
+export XEN_ROOT := $(CURDIR)/..
 
 srctree := .
 objtree := .
@@ -183,7 +182,7 @@ ifeq ($(TARGET_ARCH),x86)
 t1 = $(call as-insn,$(CC),".L0: .L1: .skip (.L1 - .L0)",,-no-integrated-as)
 
 # Check whether clang asm()-s support .include.
-t2 = $(call as-insn,$(CC) -I$(BASEDIR)/arch/x86/include,".include \"asm/asm-defns.h\"",,-no-integrated-as)
+t2 = $(call as-insn,$(CC) -I$(srctree)/arch/x86/include,".include \"asm/asm-defns.h\"",,-no-integrated-as)
 
 # Check whether clang keeps .macro-s between asm()-s:
 # https://bugs.llvm.org/show_bug.cgi?id=36110
@@ -311,7 +310,7 @@ ALL_OBJS-$(CONFIG_CRYPTO) += crypto/built_in.o
 
 ALL_LIBS-y                := lib/lib.a
 
-include $(BASEDIR)/arch/$(TARGET_ARCH)/arch.mk
+include $(srctree)/arch/$(TARGET_ARCH)/arch.mk
 
 export ALL_OBJS := $(ALL_OBJS-y)
 export ALL_LIBS := $(ALL_LIBS-y)
diff --git a/xen/Rules.mk b/xen/Rules.mk
index fae6b8918019..cb8b35ceb596 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -15,7 +15,7 @@ include $(XEN_ROOT)/Config.mk
 # Don't try to remake this file included by Config.mk.
 $(XEN_ROOT)/.config: ;
 
-include $(BASEDIR)/scripts/Kbuild.include
+include $(srctree)/scripts/Kbuild.include
 
 ifndef obj
 $(warning kbuild: Rules.mk is included improperly)
@@ -63,7 +63,7 @@ cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $< $@
 # binfile
 # use e.g. $(call if_changed,binfile,binary-file varname)
 quiet_cmd_binfile = BINFILE $@
-cmd_binfile = $(SHELL) $(BASEDIR)/tools/binfile $(BINFILE_FLAGS) $@ $(2)
+cmd_binfile = $(SHELL) $(srctree)/tools/binfile $(BINFILE_FLAGS) $@ $(2)
 
 # Figure out what we need to build from the various variables
 # ===========================================================================
@@ -182,7 +182,7 @@ cpp_flags = $(filter-out -Wa$(comma)% -flto,$(1))
 c_flags = -MMD -MP -MF $(depfile) $(XEN_CFLAGS)
 a_flags = -MMD -MP -MF $(depfile) $(XEN_AFLAGS)
 
-include $(BASEDIR)/arch/$(TARGET_ARCH)/Rules.mk
+include $(srctree)/arch/$(TARGET_ARCH)/Rules.mk
 
 c_flags += $(_c_flags)
 a_flags += $(_c_flags)
diff --git a/xen/common/Makefile b/xen/common/Makefile
index 8771c2775efb..db78b06f4a50 100644
--- a/xen/common/Makefile
+++ b/xen/common/Makefile
@@ -80,7 +80,7 @@ $(obj)/config.gz: $(CONF_FILE)
 
 $(obj)/config_data.o: $(obj)/config.gz
 
-$(obj)/config_data.S: $(BASEDIR)/tools/binfile FORCE
+$(obj)/config_data.S: $(srctree)/tools/binfile FORCE
 	$(call if_changed,binfile,$(obj)/config.gz xen_config_data)
 targets += config_data.S
 
diff --git a/xen/common/libfdt/Makefile b/xen/common/libfdt/Makefile
index 6708af12e583..75aaefa2e37f 100644
--- a/xen/common/libfdt/Makefile
+++ b/xen/common/libfdt/Makefile
@@ -6,7 +6,7 @@ OBJCOPYFLAGS := $(foreach s,$(SECTIONS),--rename-section .$(s)=.init.$(s))
 obj-y += libfdt.o
 nocov-y += libfdt.o
 
-CFLAGS-y += -I$(BASEDIR)/include/xen/libfdt/
+CFLAGS-y += -I$(srctree)/include/xen/libfdt/
 
 $(obj)/libfdt.o: $(obj)/libfdt-temp.o FORCE
 	$(call if_changed,objcopy)
diff --git a/xen/include/Makefile b/xen/include/Makefile
index 0b72c129da69..f5241b70e7fa 100644
--- a/xen/include/Makefile
+++ b/xen/include/Makefile
@@ -42,22 +42,22 @@ endif
 .PHONY: all
 all: $(addprefix $(obj)/,$(headers-y))
 
-$(obj)/compat/%.h: $(obj)/compat/%.i $(src)/Makefile $(BASEDIR)/tools/compat-build-header.py
-	$(PYTHON) $(BASEDIR)/tools/compat-build-header.py <$< $(patsubst $(obj)/%,%,$@) >>$@.new; \
+$(obj)/compat/%.h: $(obj)/compat/%.i $(src)/Makefile $(srctree)/tools/compat-build-header.py
+	$(PYTHON) $(srctree)/tools/compat-build-header.py <$< $(patsubst $(obj)/%,%,$@) >>$@.new; \
 	mv -f $@.new $@
 
 $(obj)/compat/%.i: $(obj)/compat/%.c $(src)/Makefile
 	$(CPP) $(filter-out -Wa$(comma)% -include %/include/xen/config.h,$(XEN_CFLAGS)) $(cppflags-y) -o $@ $<
 
-$(obj)/compat/%.c: $(src)/public/%.h $(src)/xlat.lst $(src)/Makefile $(BASEDIR)/tools/compat-build-source.py
+$(obj)/compat/%.c: $(src)/public/%.h $(src)/xlat.lst $(src)/Makefile $(srctree)/tools/compat-build-source.py
 	mkdir -p $(@D)
-	$(PYTHON) $(BASEDIR)/tools/compat-build-source.py $(srctree)/$(src)/xlat.lst <$< >$@.new
+	$(PYTHON) $(srctree)/tools/compat-build-source.py $(srctree)/$(src)/xlat.lst <$< >$@.new
 	mv -f $@.new $@
 
-$(obj)/compat/.xlat/%.h: $(obj)/compat/%.h $(obj)/compat/.xlat/%.lst $(BASEDIR)/tools/get-fields.sh $(src)/Makefile
+$(obj)/compat/.xlat/%.h: $(obj)/compat/%.h $(obj)/compat/.xlat/%.lst $(srctree)/tools/get-fields.sh $(src)/Makefile
 	export PYTHON=$(PYTHON); \
 	while read what name; do \
-		$(SHELL) $(BASEDIR)/tools/get-fields.sh "$$what" compat_$$name $< || exit $$?; \
+		$(SHELL) $(srctree)/tools/get-fields.sh "$$what" compat_$$name $< || exit $$?; \
 	done <$(patsubst $(obj)/compat/%,$(obj)/compat/.xlat/%,$(basename $<)).lst >$@.new
 	mv -f $@.new $@
 
diff --git a/xen/scripts/Kbuild.include b/xen/scripts/Kbuild.include
index 3e436639da1c..81abe4b4aa55 100644
--- a/xen/scripts/Kbuild.include
+++ b/xen/scripts/Kbuild.include
@@ -93,12 +93,12 @@ cc-ifversion = $(shell [ $(CONFIG_GCC_VERSION)0 $(1) $(2)000 ] && echo $(3) || e
 # Shorthand for $(Q)$(MAKE) -f scripts/Makefile.build obj=
 # Usage:
 # $(Q)$(MAKE) $(build)=dir
-build := -f $(BASEDIR)/Rules.mk obj
+build := -f $(srctree)/Rules.mk obj
 
 # Shorthand for $(MAKE) clean
 # Usage:
 # $(MAKE) $(clean) dir
-clean := -f $(BASEDIR)/scripts/Makefile.clean clean -C
+clean := -f $(abs_srctree)/scripts/Makefile.clean clean -C
 
 # echo command.
 # Short version is used, if $(quiet) equals `quiet_', otherwise full one.
diff --git a/xen/scripts/Kconfig.include b/xen/scripts/Kconfig.include
index e1f13e17207e..389a690a127a 100644
--- a/xen/scripts/Kconfig.include
+++ b/xen/scripts/Kconfig.include
@@ -40,4 +40,4 @@ $(error-if,$(failure,command -v $(CC)),compiler '$(CC)' not found)
 $(error-if,$(failure,command -v $(LD)),linker '$(LD)' not found)
 
 # gcc version including patch level
-gcc-version := $(shell,$(BASEDIR)/scripts/gcc-version.sh $(CC))
+gcc-version := $(shell,$(srctree)/scripts/gcc-version.sh $(CC))
diff --git a/xen/scripts/Makefile.clean b/xen/scripts/Makefile.clean
index c2689d4af5fa..db1d1f918d42 100644
--- a/xen/scripts/Makefile.clean
+++ b/xen/scripts/Makefile.clean
@@ -8,7 +8,7 @@ src := $(obj)
 
 clean::
 
-include $(BASEDIR)/scripts/Kbuild.include
+include $(abs_srctree)/scripts/Kbuild.include
 
 include $(src)/Makefile
 
diff --git a/xen/xsm/flask/Makefile b/xen/xsm/flask/Makefile
index 56aed07e27fe..1da6de2867ae 100644
--- a/xen/xsm/flask/Makefile
+++ b/xen/xsm/flask/Makefile
@@ -36,7 +36,7 @@ obj-bin-$(CONFIG_XSM_FLASK_POLICY) += flask-policy.o
 $(obj)/flask-policy.o: $(obj)/policy.bin
 
 $(obj)/flask-policy.S: BINFILE_FLAGS := -i
-$(obj)/flask-policy.S: $(BASEDIR)/tools/binfile FORCE
+$(obj)/flask-policy.S: $(srctree)/tools/binfile FORCE
 	$(call if_changed,binfile,$(obj)/policy.bin xsm_flask_init_policy)
 targets += flask-policy.S
 
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 47/51] build: Rework "clean" to clean from the root dir
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (45 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 46/51] build: replace $(BASEDIR) by $(srctree) Anthony PERARD
@ 2021-08-24 10:50 ` Anthony PERARD
  2021-10-14  9:44   ` Jan Beulich
  2021-08-24 10:50 ` [XEN PATCH v7 48/51] build: Rework "headers*.chk" prerequisite in include/ Anthony PERARD
                   ` (7 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu,
	Volodymyr Babchuk, Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith

This will allow "clean" to work from an out-of-tree build when
it will be available.

Some of the file been removed in current "clean" target aren't added
to $(clean-files) because they are already listed in $(extra-) or
$(extra-y).

Also clean files in "arch/x86/boot" from that directory by allowing
"clean" to descend into the subdir by adding "boot" into $(subdir-).

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Makefile                | 24 ++++++++++++------------
 xen/arch/arm/Makefile       |  5 +----
 xen/arch/x86/Makefile       | 18 ++++++++++--------
 xen/arch/x86/boot/Makefile  |  2 ++
 xen/common/Makefile         |  3 +--
 xen/include/Makefile        |  4 +---
 xen/scripts/Kbuild.include  |  2 +-
 xen/scripts/Makefile.clean  | 14 +++++++++++---
 xen/test/livepatch/Makefile |  4 +---
 xen/xsm/flask/Makefile      |  4 +---
 10 files changed, 41 insertions(+), 39 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index 1a288b87980a..67ced3e92689 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -398,18 +398,18 @@ _debug:
 
 .PHONY: _clean
 _clean:
-	$(MAKE) $(clean) tools
-	$(MAKE) $(clean) include
-	$(MAKE) $(clean) common
-	$(MAKE) $(clean) drivers
-	$(MAKE) $(clean) lib
-	$(MAKE) $(clean) xsm
-	$(MAKE) $(clean) crypto
-	$(MAKE) $(clean) arch/arm
-	$(MAKE) $(clean) arch/riscv
-	$(MAKE) $(clean) arch/x86
-	$(MAKE) $(clean) test
-	$(MAKE) $(clean) tools/kconfig
+	$(Q)$(MAKE) $(clean)=tools
+	$(Q)$(MAKE) $(clean)=include
+	$(Q)$(MAKE) $(clean)=common
+	$(Q)$(MAKE) $(clean)=drivers
+	$(Q)$(MAKE) $(clean)=lib
+	$(Q)$(MAKE) $(clean)=xsm
+	$(Q)$(MAKE) $(clean)=crypto
+	$(Q)$(MAKE) $(clean)=arch/arm
+	$(Q)$(MAKE) $(clean)=arch/riscv
+	$(Q)$(MAKE) $(clean)=arch/x86
+	$(Q)$(MAKE) $(clean)=test
+	$(Q)$(MAKE) $(clean)=tools/kconfig
 	find . \( -name "*.o" -o -name ".*.d" -o -name ".*.d2" \
 		-o -name ".*.o.tmp" -o -name "*~" -o -name "core" \
 		-o -name '*.lex.c' -o -name '*.tab.[ch]' \
diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
index 774648d6296e..3a69b5ef6cc3 100644
--- a/xen/arch/arm/Makefile
+++ b/xen/arch/arm/Makefile
@@ -114,7 +114,4 @@ $(obj)/xen.lds: $(src)/xen.lds.S FORCE
 
 $(obj)/dtb.o: $(patsubst "%",%,$(CONFIG_DTB_FILE))
 
-.PHONY: clean
-clean::
-	rm -f $(obj)/xen.lds
-	rm -f $(abs_objtree)/.xen-syms.[0-9]*
+clean-files := $(objtree)/.xen-syms.[0-9]*
diff --git a/xen/arch/x86/Makefile b/xen/arch/x86/Makefile
index 85c44c69ff5a..25bf3cc2ac9a 100644
--- a/xen/arch/x86/Makefile
+++ b/xen/arch/x86/Makefile
@@ -78,6 +78,9 @@ obj-$(CONFIG_COMPAT) += x86_64/platform_hypercall.o
 obj-y += sysctl.o
 endif
 
+# Allows "clean" to descend into boot/
+subdir- += boot
+
 extra-y += asm-macros.i
 extra-y += xen.lds
 
@@ -197,8 +200,8 @@ note_file :=
 endif
 note_file_option ?= $(note_file)
 
+extra-$(XEN_BUILD_PE) += efi.lds
 ifeq ($(XEN_BUILD_PE),y)
-extra-y += efi.lds
 $(TARGET).efi: $(objtree)/prelink.o $(note_file) $(obj)/efi.lds $(obj)/efi/relocs-dummy.o $(obj)/efi/mkreloc
 ifeq ($(CONFIG_DEBUG_INFO),y)
 	$(if $(filter --strip-debug,$(EFI_LDFLAGS)),echo,:) "Will strip debug info from $(@F)"
@@ -257,10 +260,9 @@ $(obj)/efi.lds: AFLAGS-y += -DEFI
 $(obj)/xen.lds $(obj)/efi.lds: $(src)/xen.lds.S FORCE
 	$(call if_changed_dep,cpp_lds_S)
 
-.PHONY: clean
-clean::
-	rm -f *.lds
-	rm -f asm-macros.i $(abs_objtree)/arch/x86/include/asm/asm-macros.*
-	rm -f $(abs_objtree)/.xen-syms.[0-9]* $(abs_objtree)/.xen.elf32
-	rm -f $(abs_objtree)/.xen.efi.[0-9]* efi/*.efi
-	rm -f boot/cmdline.S boot/reloc.S boot/*.lnk boot/*.bin
+clean-files := \
+    include/asm/asm-macros.* \
+    $(objtree)/.xen-syms.[0-9]* \
+    $(objtree)/.xen.elf32 \
+    $(objtree)/.xen.efi.[0-9]* \
+    efi/*.efi
diff --git a/xen/arch/x86/boot/Makefile b/xen/arch/x86/boot/Makefile
index 3580a9b656e8..c2385e69332d 100644
--- a/xen/arch/x86/boot/Makefile
+++ b/xen/arch/x86/boot/Makefile
@@ -49,3 +49,5 @@ $(head-objs): %.S: %.bin
 
 %.lnk: %.o $(src)/build32.lds
 	$(LD) $(LDFLAGS_DIRECT) -N -T $(filter %.lds,$^) -o $@ $<
+
+clean-files := cmdline.S reloc.S *.lnk *.bin
diff --git a/xen/common/Makefile b/xen/common/Makefile
index db78b06f4a50..9208d233642a 100644
--- a/xen/common/Makefile
+++ b/xen/common/Makefile
@@ -84,5 +84,4 @@ $(obj)/config_data.S: $(srctree)/tools/binfile FORCE
 	$(call if_changed,binfile,$(obj)/config.gz xen_config_data)
 targets += config_data.S
 
-clean::
-	rm -f config_data.S config.gz 2>/dev/null
+clean-files := config_data.S config.gz
diff --git a/xen/include/Makefile b/xen/include/Makefile
index f5241b70e7fa..c3172f6636be 100644
--- a/xen/include/Makefile
+++ b/xen/include/Makefile
@@ -128,6 +128,4 @@ lib-x86-all:
 all: lib-x86-all
 endif
 
-clean::
-	rm -rf compat config generated headers*.chk
-	rm -f $(BASEDIR)/include/xen/lib/x86/cpuid-autogen.h
+clean-files := compat config generated headers*.chk xen/lib/x86/cpuid-autogen.h
diff --git a/xen/scripts/Kbuild.include b/xen/scripts/Kbuild.include
index 81abe4b4aa55..862b2a49c5ac 100644
--- a/xen/scripts/Kbuild.include
+++ b/xen/scripts/Kbuild.include
@@ -98,7 +98,7 @@ build := -f $(srctree)/Rules.mk obj
 # Shorthand for $(MAKE) clean
 # Usage:
 # $(MAKE) $(clean) dir
-clean := -f $(abs_srctree)/scripts/Makefile.clean clean -C
+clean := -f $(srctree)/scripts/Makefile.clean obj
 
 # echo command.
 # Short version is used, if $(quiet) equals `quiet_', otherwise full one.
diff --git a/xen/scripts/Makefile.clean b/xen/scripts/Makefile.clean
index db1d1f918d42..fa3fee758348 100644
--- a/xen/scripts/Makefile.clean
+++ b/xen/scripts/Makefile.clean
@@ -3,7 +3,6 @@
 # Cleaning up
 # ==========================================================================
 
-obj := .
 src := $(obj)
 
 clean::
@@ -17,11 +16,20 @@ include $(src)/Makefile
 subdir-all := $(subdir-y) $(subdir-n) $(subdir-) \
               $(patsubst %/,%, $(filter %/, $(obj-y) $(obj-n) $(obj-)))
 
+subdir-all := $(addprefix $(obj)/,$(subdir-all))
+
 __clean-files := \
     $(clean-files) $(hostprogs-y) $(hostprogs-) \
+    $(extra-y) $(extra-) \
     $(hostprogs-always-y) $(hostprogs-always-)
 
-__clean-files := $(wildcard $(__clean-files))
+# clean-files is given relative to the current directory, unless it
+# starts with $(objtree)/ (which means "./", so do not add "./" unless
+# you want to delete a file from the toplevel object directory).
+
+__clean-files := $(wildcard \
+		   $(addprefix $(obj)/, $(filter-out /% $(objtree)/%, $(__clean-files))) \
+		   $(filter /% $(objtree)/%, $(__clean-files)))
 
 .PHONY: clean
 clean:: $(subdir-all)
@@ -35,6 +43,6 @@ endif
 
 PHONY += $(subdir-all)
 $(subdir-all):
-	$(MAKE) $(clean) $@
+	$(Q)$(MAKE) $(clean)=$@
 
 .PHONY: $(PHONY)
diff --git a/xen/test/livepatch/Makefile b/xen/test/livepatch/Makefile
index 008e89fc9a47..5807a559b42a 100644
--- a/xen/test/livepatch/Makefile
+++ b/xen/test/livepatch/Makefile
@@ -160,6 +160,4 @@ install: $(addprefix $(obj)/,$(LIVEPATCHES))
 uninstall:
 	cd $(DESTDIR)$(LIVEPATCH_DEBUG_DIR) && rm -f $(LIVEPATCHES)
 
-.PHONY: clean
-clean::
-	rm -f *.livepatch config.h expect_config.h
+clean-files := config.h expect_config.h
diff --git a/xen/xsm/flask/Makefile b/xen/xsm/flask/Makefile
index 1da6de2867ae..d655cf8d1974 100644
--- a/xen/xsm/flask/Makefile
+++ b/xen/xsm/flask/Makefile
@@ -47,6 +47,4 @@ $(obj)/policy.bin: FORCE
 	$(MAKE) -f $(XEN_ROOT)/tools/flask/policy/Makefile.common -C $(XEN_ROOT)/tools/flask/policy FLASK_BUILD_DIR=$(FLASK_BUILD_DIR)
 	cmp -s $(POLICY_SRC) $@ || cp $(POLICY_SRC) $@
 
-.PHONY: clean
-clean::
-	rm -f $(ALL_H_FILES) policy.* $(POLICY_SRC) flask-policy.S
+clean-files := policy.* $(POLICY_SRC) flask-policy.S
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 48/51] build: Rework "headers*.chk" prerequisite in include/
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (46 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 47/51] build: Rework "clean" to clean from the root dir Anthony PERARD
@ 2021-08-24 10:50 ` 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
                   ` (6 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu

Listing public headers when out-of-tree build are involved becomes
more annoying where every path to every headers needs to start with
"$(srctree)/$(src)", or $(wildcard ) will not work. This means more
repetition.

This patch attempt to reduce the amount of duplication and make better
use of make's meta programming capability. The filters are now listed
in a variable and don't have to repeat the path to the headers files
as this is added later as needed.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/include/Makefile | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/xen/include/Makefile b/xen/include/Makefile
index c3172f6636be..4e64a31ecab3 100644
--- a/xen/include/Makefile
+++ b/xen/include/Makefile
@@ -78,10 +78,21 @@ ifeq ($(XEN_TARGET_ARCH),$(XEN_COMPILE_ARCH))
 
 all: $(obj)/headers.chk $(obj)/headers99.chk $(obj)/headers++.chk
 
-PUBLIC_HEADERS := $(filter-out $(src)/public/arch-% $(src)/public/dom0_ops.h, $(wildcard $(src)/public/*.h $(src)/public/*/*.h))
+hdrs-path := $(srctree)/$(src)/public
 
-PUBLIC_C99_HEADERS := $(src)/public/io/9pfs.h $(src)/public/io/pvcalls.h
-PUBLIC_ANSI_HEADERS := $(filter-out $(src)/public/%ctl.h $(src)/public/xsm/% $(src)/public/%hvm/save.h $(PUBLIC_C99_HEADERS), $(PUBLIC_HEADERS))
+list-headers = $(wildcard $1/*.h $1/*/*.h)
+filter-headers = $(filter-out $(addprefix $(hdrs-path)/,$($1-filter)), $($1))
+
+c99-headers := io/9pfs.h io/pvcalls.h
+public-headers := $(call list-headers,$(hdrs-path))
+ansi-headers := $(public-headers)
+
+public-headers-filter := dom0_ops.h arch-%
+ansi-headers-filter := %ctl.h xsm/% %hvm/save.h $(public-headers-filter) $(c99-headers)
+
+PUBLIC_HEADERS := $(call filter-headers,public-headers)
+PUBLIC_ANSI_HEADERS := $(call filter-headers,ansi-headers)
+PUBLIC_C99_HEADERS := $(addprefix $(hdrs-path)/, $(c99-headers))
 
 $(src)/public/io/9pfs.h-prereq := string
 $(src)/public/io/pvcalls.h-prereq := string
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 49/51] build: adding out-of-tree support to the xen build
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (47 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 48/51] build: Rework "headers*.chk" prerequisite in include/ Anthony PERARD
@ 2021-08-24 10:50 ` Anthony PERARD
  2021-10-14 10:14   ` Jan Beulich
  2021-08-24 10:50 ` [XEN PATCH v7 50/51] build: specify source tree in include/ for prerequisite Anthony PERARD
                   ` (5 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu,
	Volodymyr Babchuk, Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith

This implement out-of-tree support, there's two ways to create an
out-of-tree build tree (after that, `make` in that new directory
works):
    make O=build
    mkdir build; cd build; make -f ../Makefile
also works with an absolute path for both.

This implementation only works if the source tree is clean, as we use
VPATH.

This patch copies most new code with handling out-of-tree build from
Linux v5.12.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Makefile                | 173 +++++++++++++++++++++++++++++-------
 xen/Rules.mk                |  11 ++-
 xen/arch/arm/efi/Makefile   |   3 +
 xen/arch/x86/arch.mk        |   3 +
 xen/arch/x86/boot/Makefile  |   5 +-
 xen/arch/x86/efi/Makefile   |   3 +
 xen/include/Makefile        |   9 +-
 xen/scripts/mkmakefile      |  17 ++++
 xen/test/livepatch/Makefile |   2 +
 xen/xsm/flask/Makefile      |   3 +
 xen/xsm/flask/ss/Makefile   |   3 +
 11 files changed, 194 insertions(+), 38 deletions(-)
 create mode 100755 xen/scripts/mkmakefile

diff --git a/xen/Makefile b/xen/Makefile
index 67ced3e92689..d27c213c3aa9 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -1,3 +1,7 @@
+# $(lastword,) for GNU Make older than 0.81
+lastword = $(word $(words $(1)),$(1))
+this-makefile := $(call lastword,$(MAKEFILE_LIST))
+
 # This is the correct place to edit the build version.
 # All other places this is stored (eg. compile.h) should be autogenerated.
 export XEN_VERSION       = 4
@@ -17,33 +21,18 @@ export XEN_BUILD_HOST	?= $(shell hostname)
 PYTHON_INTERPRETER	:= $(word 1,$(shell which python3 python python2 2>/dev/null) python)
 export PYTHON		?= $(PYTHON_INTERPRETER)
 
-export XEN_ROOT := $(CURDIR)/..
+$(if $(filter __%, $(MAKECMDGOALS)), \
+	$(error targets prefixed with '__' are only for internal use))
 
-srctree := .
-objtree := .
-export srctree objtree
+# That's our default target when none is given on the command line
+PHONY := __all
+__all:
 
 # Do not use make's built-in rules and variables
 MAKEFLAGS += -rR
 
 EFI_MOUNTPOINT ?= $(BOOT_DIR)/efi
 
-ARCH=$(XEN_TARGET_ARCH)
-SRCARCH=$(shell echo $(ARCH) | \
-          sed -e 's/x86.*/x86/' -e s'/arm\(32\|64\)/arm/g' \
-              -e s'/riscv.*/riscv/g')
-export ARCH SRCARCH
-
-# Don't break if the build process wasn't called from the top level
-# we need XEN_TARGET_ARCH to generate the proper config
-include $(XEN_ROOT)/Config.mk
-
-# Set ARCH/SUBARCH appropriately.
-export TARGET_SUBARCH  := $(XEN_TARGET_ARCH)
-export TARGET_ARCH     := $(shell echo $(XEN_TARGET_ARCH) | \
-                            sed -e 's/x86.*/x86/' -e s'/arm\(32\|64\)/arm/g' \
-                                -e s'/riscv.*/riscv/g')
-
 # Allow someone to change their config file
 export KCONFIG_CONFIG ?= .config
 
@@ -51,14 +40,9 @@ export CC CXX LD
 
 export TARGET := xen
 
-.PHONY: default
-default: build
-
 .PHONY: dist
 dist: install
 
-include scripts/Kbuild.include
-
 ifneq ($(root-make-done),y)
 # section to run before calling Rules.mk, but only once.
 
@@ -130,14 +114,93 @@ endif
 
 ifneq ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),)
     quiet := silent_
+    KBUILD_VERBOSE = 0
 endif
 
 export quiet Q KBUILD_VERBOSE
 
+# $(realpath,) for GNU Make older than 0.81
+realpath = $(wildcard $(foreach file,$(1),$(shell cd -P $(dir $(file)) && echo "$$PWD/$(notdir $(file))")))
+
+ifeq ("$(origin O)", "command line")
+  KBUILD_OUTPUT := $(O)
+endif
+
+ifneq ($(KBUILD_OUTPUT),)
+# Make's built-in functions such as $(abspath ...), $(realpath ...) cannot
+# expand a shell special character '~'. We use a somewhat tedious way here.
+abs_objtree := $(shell mkdir -p $(KBUILD_OUTPUT) && cd $(KBUILD_OUTPUT) && pwd)
+$(if $(abs_objtree),, \
+     $(error failed to create output directory "$(KBUILD_OUTPUT)"))
+
+# $(realpath ...) resolves symlinks
+abs_objtree := $(call realpath,$(abs_objtree))
+else
 abs_objtree := $(CURDIR)
-abs_srctree := $(CURDIR)
+endif
+
+ifeq ($(abs_objtree),$(CURDIR))
+# Suppress "Entering directory ..." unless we are changing the work directory.
+MAKEFLAGS += --no-print-directory
+else
+need-sub-make := 1
+endif
+
+abs_srctree := $(call realpath,$(dir $(this-makefile)))
+
+ifneq ($(words $(subst :, ,$(abs_srctree))), 1)
+$(error source directory cannot contain spaces or colons)
+endif
+
+ifneq ($(abs_srctree),$(abs_objtree))
+# Look for make include files relative to root of kernel src
+#
+# This does not become effective immediately because MAKEFLAGS is re-parsed
+# once after the Makefile is read. We need to invoke sub-make.
+MAKEFLAGS += --include-dir=$(abs_srctree)
+need-sub-make := 1
+endif
 
 export abs_srctree abs_objtree
+export root-make-done := y
+
+ifeq ($(need-sub-make),1)
+
+PHONY += $(MAKECMDGOALS) __sub-make
+
+$(filter-out $(this-makefile), $(MAKECMDGOALS)) __all: __sub-make
+	@:
+
+# Invoke a second make in the output directory, passing relevant variables
+__sub-make:
+	$(Q)$(MAKE) -C $(abs_objtree) -f $(abs_srctree)/Makefile $(MAKECMDGOALS)
+
+endif # need-sub-make
+endif # root-make-done
+
+# We process the rest of the Makefile if this is the final invocation of make
+ifeq ($(need-sub-make),)
+
+ifeq ($(abs_srctree),$(abs_objtree))
+        # building in the source tree
+        srctree := .
+	building_out_of_srctree :=
+else
+        ifeq ($(abs_srctree)/,$(dir $(abs_objtree)))
+                # building in a subdirectory of the source tree
+                srctree := ..
+        else
+                srctree := $(abs_srctree)
+        endif
+	building_out_of_srctree := 1
+endif
+
+objtree		:= .
+VPATH		:= $(srctree)
+
+export building_out_of_srctree srctree objtree VPATH
+
+export XEN_ROOT := $(abs_srctree)/..
 
 # To make sure we do not include .config for any of the *config targets
 # catch them early, and hand them over to tools/kconfig/Makefile
@@ -161,6 +224,24 @@ ifneq ($(filter %config,$(MAKECMDGOALS)),)
     config-build := y
 endif
 
+include scripts/Kbuild.include
+
+ARCH=$(XEN_TARGET_ARCH)
+SRCARCH=$(shell echo $(ARCH) | \
+          sed -e 's/x86.*/x86/' -e s'/arm\(32\|64\)/arm/g' \
+              -e s'/riscv.*/riscv/g')
+export ARCH SRCARCH
+
+# Don't break if the build process wasn't called from the top level
+# we need XEN_TARGET_ARCH to generate the proper config
+include $(XEN_ROOT)/Config.mk
+
+# Set ARCH/SUBARCH appropriately.
+export TARGET_SUBARCH  := $(XEN_TARGET_ARCH)
+export TARGET_ARCH     := $(shell echo $(XEN_TARGET_ARCH) | \
+                            sed -e 's/x86.*/x86/' -e s'/arm\(32\|64\)/arm/g' \
+                                -e s'/riscv.*/riscv/g')
+
 export CONFIG_SHELL := $(SHELL)
 export YACC = $(if $(BISON),$(BISON),bison)
 export LEX = $(if $(FLEX),$(FLEX),flex)
@@ -196,9 +277,6 @@ CFLAGS += $(CLANG_FLAGS)
 export CLANG_FLAGS
 endif
 
-export root-make-done := y
-endif # root-make-done
-
 # ===========================================================================
 # Rules shared between *config targets and build targets
 
@@ -206,18 +284,42 @@ PHONY += tools_fixdep
 tools_fixdep:
 	$(MAKE) $(build)=tools tools/fixdep
 
+PHONY += outputmakefile
+# Before starting out-of-tree build, make sure the source tree is clean.
+# outputmakefile generates a Makefile in the output directory, if using a
+# separate output directory. This allows convenient use of make in the
+# output directory.
+# At the same time when output Makefile generated, generate .gitignore to
+# ignore whole output directory
+outputmakefile:
+ifdef building_out_of_srctree
+	$(Q)if [ -f $(srctree)/.config -o \
+		 -d $(srctree)/include/config -o \
+		 -d $(srctree)/include/generated ]; then \
+		echo >&2 "***"; \
+		echo >&2 "*** The source tree is not clean, please run 'make$(if $(findstring command line, $(origin XEN_TARGET_ARCH)), XEN_TARGET_ARCH=$(XEN_TARGET_ARCH)) distclean'"; \
+		echo >&2 "*** in $(abs_srctree)";\
+		echo >&2 "***"; \
+		false; \
+	fi
+	$(Q)ln -fsn $(srctree) source
+	$(Q)$(SHELL) $(srctree)/scripts/mkmakefile $(srctree)
+	$(Q)test -e .gitignore || \
+	{ echo "# this is build directory, ignore it"; echo "*"; } > .gitignore
+endif
+
 ifeq ($(config-build),y)
 # ===========================================================================
 # *config targets only - make sure prerequisites are updated, and descend
 # in tools/kconfig to make the *config target
 
-config: tools_fixdep FORCE
+config: tools_fixdep outputmakefile FORCE
 	$(Q)$(MAKE) $(build)=tools/kconfig $@
 
 # Config.mk tries to include .config file, don't try to remake it
 %/.config: ;
 
-%config: tools_fixdep FORCE
+%config: tools_fixdep outputmakefile FORCE
 	$(Q)$(MAKE) $(build)=tools/kconfig $@
 
 else # !config-build
@@ -299,6 +401,10 @@ endif
 
 CFLAGS += -I$(srctree)/include
 CFLAGS += -I$(srctree)/arch/$(TARGET_ARCH)/include
+ifdef building_out_of_srctree
+    CFLAGS += -I$(objtree)/include
+    CFLAGS += -I$(objtree)/arch/$(TARGET_ARCH)/include
+endif
 
 # Note that link order matters!
 ALL_OBJS-y                := common/built_in.o
@@ -323,6 +429,8 @@ export CFLAGS_UBSAN
 
 endif # need-config
 
+__all: build
+
 main-targets := build install uninstall clean distclean MAP
 .PHONY: $(main-targets)
 ifneq ($(XEN_TARGET_ARCH),x86_32)
@@ -426,7 +534,7 @@ $(TARGET).gz: $(TARGET)
 	gzip -n -f -9 < $< > $@.new
 	mv $@.new $@
 
-$(TARGET): tools_fixdep FORCE
+$(TARGET): tools_fixdep outputmakefile FORCE
 	$(MAKE) $(build)=tools
 	$(MAKE) $(build)=. include/xen/compile.h
 	$(MAKE) $(build)=include all
@@ -492,6 +600,7 @@ cloc:
 	find . -name '*.o.cmd' -exec awk '/^source_/{print $$3;}' {} + | cloc --list-file=-
 
 endif #config-build
+endif # need-sub-make
 
 PHONY += FORCE
 FORCE:
diff --git a/xen/Rules.mk b/xen/Rules.mk
index cb8b35ceb596..6c97f539330a 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -38,7 +38,7 @@ SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
                          $(foreach r,rel rel.ro,data.$(r).local)
 
 # The filename build.mk has precedence over Makefile
-mk-dir := $(src)
+mk-dir := $(srctree)/$(src)
 include $(if $(wildcard $(mk-dir)/build.mk),$(mk-dir)/build.mk,$(mk-dir)/Makefile)
 
 # Linking
@@ -330,6 +330,15 @@ existing-targets := $(wildcard $(sort $(targets)))
 
 -include $(foreach f,$(existing-targets),$(dir $(f)).$(notdir $(f)).cmd)
 
+# Create directories for object files if they do not exist
+obj-dirs := $(sort $(patsubst %/,%, $(dir $(targets))))
+# If targets exist, their directories apparently exist. Skip mkdir.
+existing-dirs := $(sort $(patsubst %/,%, $(dir $(existing-targets))))
+obj-dirs := $(strip $(filter-out $(existing-dirs), $(obj-dirs)))
+ifneq ($(obj-dirs),)
+$(shell mkdir -p $(obj-dirs))
+endif
+
 # 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/efi/Makefile b/xen/arch/arm/efi/Makefile
index 36e15ac280cd..b985043f8c80 100644
--- a/xen/arch/arm/efi/Makefile
+++ b/xen/arch/arm/efi/Makefile
@@ -1,5 +1,8 @@
 CFLAGS-y += -fshort-wchar
 CFLAGS-y += -I$(srctree)/common/efi
+ifdef building_out_of_srctree
+CFLAGS-y += -I$(srctree)/$(src)
+endif
 
 obj-y += boot.init.o pe.init.o ebmalloc.o runtime.o
 obj-$(CONFIG_ACPI) +=  efi-dom0.init.o
diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk
index f0dc6820f85c..963926b37d9d 100644
--- a/xen/arch/x86/arch.mk
+++ b/xen/arch/x86/arch.mk
@@ -62,6 +62,9 @@ ifneq ($(CONFIG_PV_SHIM_EXCLUSIVE),y)
 
 efi-check-o = arch/x86/efi/check.o
 
+# Create the directory for out-of-tree build
+$(shell mkdir -p $(dir $(efi-check-o)))
+
 # Check if the compiler supports the MS ABI.
 XEN_BUILD_EFI := $(call if-success,$(CC) $(CFLAGS) -c $(srctree)/$(efi-check-o:.o=.c) -o $(efi-check-o),y)
 
diff --git a/xen/arch/x86/boot/Makefile b/xen/arch/x86/boot/Makefile
index c2385e69332d..3909db51b1fd 100644
--- a/xen/arch/x86/boot/Makefile
+++ b/xen/arch/x86/boot/Makefile
@@ -7,6 +7,9 @@ targets += $(head-objs:.S=.o)
 
 head-objs := $(addprefix $(obj)/, $(head-objs))
 
+ifdef building_out_of_srctree
+$(obj)/head.o: CFLAGS-y += -I$(obj)
+endif
 $(obj)/head.o: $(head-objs)
 
 LDFLAGS_DIRECT_OpenBSD = _obsd
@@ -22,7 +25,7 @@ $(call cc-option-add,CFLAGS_x86_32,CC,-Wno-unused-but-set-variable)
 $(call cc-option-add,CFLAGS_x86_32,CC,-Wno-unused-local-typedefs)
 $(call cc-options-add,CFLAGS_x86_32,CC,$(EMBEDDED_EXTRA_CFLAGS))
 CFLAGS_x86_32 += -Werror -fno-builtin -g0 -msoft-float
-CFLAGS_x86_32 += -I$(srctree)/include
+CFLAGS_x86_32 += -I$(srctree)/include $(if $(building_out_of_srctree), -I$(objtree)/include)
 
 # override for 32bit binaries
 $(head-objs:.S=.o): CFLAGS-stack-boundary :=
diff --git a/xen/arch/x86/efi/Makefile b/xen/arch/x86/efi/Makefile
index da05935a9348..a716f3fac9cf 100644
--- a/xen/arch/x86/efi/Makefile
+++ b/xen/arch/x86/efi/Makefile
@@ -1,5 +1,8 @@
 CFLAGS-y += -fshort-wchar
 CFLAGS-y += -I$(srctree)/common/efi
+ifdef building_out_of_srctree
+CFLAGS-y += -I$(srctree)/$(src)
+endif
 
 quiet_cmd_objcopy_o_ihex = OBJCOPY $@
 cmd_objcopy_o_ihex = $(OBJCOPY) -I ihex -O binary $< $@
diff --git a/xen/include/Makefile b/xen/include/Makefile
index 4e64a31ecab3..2cd779a4108c 100644
--- a/xen/include/Makefile
+++ b/xen/include/Makefile
@@ -110,7 +110,7 @@ $(obj)/headers99.chk: $(PUBLIC_C99_HEADERS) $(src)/Makefile
 	$(foreach i, $(filter %.h,$^),                                        \
 	    echo "#include "\"$(i)\"                                          \
 	    | $(CC) -x c -std=c99 -Wall -Werror                               \
-	      -include stdint.h $(foreach j, $($(i)-prereq), -include $(j).h) \
+	      -include stdint.h $(foreach j, $($(patsubst $(srctree)/%,%,$i)-prereq), -include $(j).h) \
 	      -S -o /dev/null -                                               \
 	    || exit $$?; echo $(i) >> $@.new;)
 	mv $@.new $@
@@ -124,8 +124,8 @@ $(obj)/headers++.chk: $(PUBLIC_HEADERS) $(src)/Makefile
 	$(foreach i, $(filter %.h,$^),                                        \
 	    echo "#include "\"$(i)\"                                          \
 	    | $(CXX) -x c++ -std=gnu++98 -Wall -Werror -D__XEN_TOOLS__        \
-	      -include stdint.h -include $(src)/public/xen.h                  \
-	      $(foreach j, $($(i)-prereq), -include c$(j)) -S -o /dev/null -  \
+	      -include stdint.h -include $(srctree)/$(src)/public/xen.h       \
+	      $(foreach j, $($(patsubst $(srctree)/%,%,$i)-prereq), -include c$(j)) -S -o /dev/null -  \
 	    || exit $$?; echo $(i) >> $@.new;)
 	mv $@.new $@
 
@@ -134,7 +134,8 @@ endif
 ifeq ($(XEN_TARGET_ARCH),x86_64)
 .PHONY: lib-x86-all
 lib-x86-all:
-	$(MAKE) -C $(obj)/xen/lib/x86 all
+	@mkdir -p $(obj)/xen/lib/x86
+	$(MAKE) -C $(obj)/xen/lib/x86 -f $(abs_srctree)/$(src)/xen/lib/x86/Makefile VPATH=$(srctree) all
 
 all: lib-x86-all
 endif
diff --git a/xen/scripts/mkmakefile b/xen/scripts/mkmakefile
new file mode 100755
index 000000000000..1cb174751429
--- /dev/null
+++ b/xen/scripts/mkmakefile
@@ -0,0 +1,17 @@
+#!/bin/sh
+# SPDX-License-Identifier: GPL-2.0
+# Generates a small Makefile used in the root of the output
+# directory, to allow make to be started from there.
+# The Makefile also allow for more convinient build of external modules
+
+# Usage
+# $1 - Kernel src directory
+
+if [ "${quiet}" != "silent_" ]; then
+	echo "  GEN     Makefile"
+fi
+
+cat << EOF > Makefile
+# Automatically generated by $0: don't edit
+include $1/Makefile
+EOF
diff --git a/xen/test/livepatch/Makefile b/xen/test/livepatch/Makefile
index 5807a559b42a..51f93f6ba61f 100644
--- a/xen/test/livepatch/Makefile
+++ b/xen/test/livepatch/Makefile
@@ -11,6 +11,8 @@ endif
 CODE_ADDR=$(shell nm --defined $(1) | grep $(2) | awk '{print "0x"$$1}')
 CODE_SZ=$(shell nm --defined -S $(1) | grep $(2) | awk '{ print "0x"$$2}')
 
+CFLAGS-y += -I$(obj)
+
 extra-y += xen_hello_world.livepatch
 xen_hello_world-objs := xen_hello_world_func.o xen_hello_world.o note.o xen_note.o modinfo.o
 $(obj)/xen_hello_world.o: $(obj)/config.h
diff --git a/xen/xsm/flask/Makefile b/xen/xsm/flask/Makefile
index d655cf8d1974..2c6febc54bf6 100644
--- a/xen/xsm/flask/Makefile
+++ b/xen/xsm/flask/Makefile
@@ -5,6 +5,9 @@ obj-y += flask_op.o
 obj-y += ss/
 
 CFLAGS-y += -I$(obj)/include
+ifdef building_out_of_srctree
+    CFLAGS-y += -I$(srctree)/$(src)/include
+endif
 
 AWK = awk
 
diff --git a/xen/xsm/flask/ss/Makefile b/xen/xsm/flask/ss/Makefile
index aba1339f3808..c50d67320ed3 100644
--- a/xen/xsm/flask/ss/Makefile
+++ b/xen/xsm/flask/ss/Makefile
@@ -9,3 +9,6 @@ obj-y += conditional.o
 obj-y += mls.o
 
 CFLAGS-y += -I$(srctree)/xsm/flask/include
+ifdef building_out_of_srctree
+    CFLAGS-y += -I$(objtree)/xsm/flask/include
+endif
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 50/51] build: specify source tree in include/ for prerequisite
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (48 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 49/51] build: adding out-of-tree support to the xen build Anthony PERARD
@ 2021-08-24 10:50 ` Anthony PERARD
  2021-10-14 10:19   ` Jan Beulich
  2021-08-24 10:50 ` [XEN PATCH v7 51/51] build: add %.E targets Anthony PERARD
                   ` (4 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu

When doing an out-of-tree build, and thus setting VPATH,
GNU Make 0.81 on Ubuntu Trusty complains about Circular dependency of
include/Makefile and include/xlat.lst and drop them. The build fails
later due to headers malformed.

Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/include/Makefile | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/xen/include/Makefile b/xen/include/Makefile
index 2cd779a4108c..b94cfea74660 100644
--- a/xen/include/Makefile
+++ b/xen/include/Makefile
@@ -42,19 +42,19 @@ endif
 .PHONY: all
 all: $(addprefix $(obj)/,$(headers-y))
 
-$(obj)/compat/%.h: $(obj)/compat/%.i $(src)/Makefile $(srctree)/tools/compat-build-header.py
+$(obj)/compat/%.h: $(obj)/compat/%.i $(srctree)/$(src)/Makefile $(srctree)/tools/compat-build-header.py
 	$(PYTHON) $(srctree)/tools/compat-build-header.py <$< $(patsubst $(obj)/%,%,$@) >>$@.new; \
 	mv -f $@.new $@
 
-$(obj)/compat/%.i: $(obj)/compat/%.c $(src)/Makefile
+$(obj)/compat/%.i: $(obj)/compat/%.c $(srctree)/$(src)/Makefile
 	$(CPP) $(filter-out -Wa$(comma)% -include %/include/xen/config.h,$(XEN_CFLAGS)) $(cppflags-y) -o $@ $<
 
-$(obj)/compat/%.c: $(src)/public/%.h $(src)/xlat.lst $(src)/Makefile $(srctree)/tools/compat-build-source.py
+$(obj)/compat/%.c: $(src)/public/%.h $(srctree)/$(src)/xlat.lst $(srctree)/$(src)/Makefile $(srctree)/tools/compat-build-source.py
 	mkdir -p $(@D)
 	$(PYTHON) $(srctree)/tools/compat-build-source.py $(srctree)/$(src)/xlat.lst <$< >$@.new
 	mv -f $@.new $@
 
-$(obj)/compat/.xlat/%.h: $(obj)/compat/%.h $(obj)/compat/.xlat/%.lst $(srctree)/tools/get-fields.sh $(src)/Makefile
+$(obj)/compat/.xlat/%.h: $(obj)/compat/%.h $(obj)/compat/.xlat/%.lst $(srctree)/tools/get-fields.sh $(srctree)/$(src)/Makefile
 	export PYTHON=$(PYTHON); \
 	while read what name; do \
 		$(SHELL) $(srctree)/tools/get-fields.sh "$$what" compat_$$name $< || exit $$?; \
@@ -62,7 +62,7 @@ $(obj)/compat/.xlat/%.h: $(obj)/compat/%.h $(obj)/compat/.xlat/%.lst $(srctree)/
 	mv -f $@.new $@
 
 .PRECIOUS: $(obj)/compat/.xlat/%.lst
-$(obj)/compat/.xlat/%.lst: $(src)/xlat.lst $(src)/Makefile
+$(obj)/compat/.xlat/%.lst: $(srctree)/$(src)/xlat.lst $(srctree)/$(src)/Makefile
 	mkdir -p $(@D)
 	grep -v '^[[:blank:]]*#' $< | sed -ne 's,@arch@,$(compat-arch-y),g' -re 's,[[:blank:]]+$*\.h[[:blank:]]*$$,,p' >$@.new
 	$(call move-if-changed,$@.new,$@)
@@ -70,7 +70,7 @@ $(obj)/compat/.xlat/%.lst: $(src)/xlat.lst $(src)/Makefile
 xlat-y := $(shell sed -ne 's,@arch@,$(compat-arch-y),g' -re 's,^[?!][[:blank:]]+[^[:blank:]]+[[:blank:]]+,,p' $(srctree)/$(src)/xlat.lst | uniq)
 xlat-y := $(filter $(patsubst compat/%,%,$(headers-y)),$(xlat-y))
 
-$(obj)/compat/xlat.h: $(addprefix $(obj)/compat/.xlat/,$(xlat-y)) $(obj)/config/auto.conf $(src)/Makefile
+$(obj)/compat/xlat.h: $(addprefix $(obj)/compat/.xlat/,$(xlat-y)) $(obj)/config/auto.conf $(srctree)/$(src)/Makefile
 	cat $(filter %.h,$^) >$@.new
 	mv -f $@.new $@
 
@@ -97,7 +97,7 @@ PUBLIC_C99_HEADERS := $(addprefix $(hdrs-path)/, $(c99-headers))
 $(src)/public/io/9pfs.h-prereq := string
 $(src)/public/io/pvcalls.h-prereq := string
 
-$(obj)/headers.chk: $(PUBLIC_ANSI_HEADERS) $(src)/Makefile
+$(obj)/headers.chk: $(PUBLIC_ANSI_HEADERS) $(srctree)/$(src)/Makefile
 	for i in $(filter %.h,$^); do \
 	    $(CC) -x c -ansi -Wall -Werror -include stdint.h \
 	          -S -o /dev/null $$i || exit 1; \
@@ -105,7 +105,7 @@ $(obj)/headers.chk: $(PUBLIC_ANSI_HEADERS) $(src)/Makefile
 	done >$@.new
 	mv $@.new $@
 
-$(obj)/headers99.chk: $(PUBLIC_C99_HEADERS) $(src)/Makefile
+$(obj)/headers99.chk: $(PUBLIC_C99_HEADERS) $(srctree)/$(src)/Makefile
 	rm -f $@.new
 	$(foreach i, $(filter %.h,$^),                                        \
 	    echo "#include "\"$(i)\"                                          \
@@ -115,7 +115,7 @@ $(obj)/headers99.chk: $(PUBLIC_C99_HEADERS) $(src)/Makefile
 	    || exit $$?; echo $(i) >> $@.new;)
 	mv $@.new $@
 
-$(obj)/headers++.chk: $(PUBLIC_HEADERS) $(src)/Makefile
+$(obj)/headers++.chk: $(PUBLIC_HEADERS) $(srctree)/$(src)/Makefile
 	rm -f $@.new
 	if ! $(CXX) -v >/dev/null 2>&1; then                                  \
 	    touch $@.new;                                                     \
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* [XEN PATCH v7 51/51] build: add %.E targets
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (49 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 50/51] build: specify source tree in include/ for prerequisite Anthony PERARD
@ 2021-08-24 10:50 ` Anthony PERARD
  2021-10-13 15:48   ` Jan Beulich
  2021-09-02 10:22 ` [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Jan Beulich
                   ` (3 subsequent siblings)
  54 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 10:50 UTC (permalink / raw)
  To: xen-devel
  Cc: Anthony PERARD, Andrew Cooper, George Dunlap, Ian Jackson,
	Jan Beulich, Julien Grall, Stefano Stabellini, Wei Liu

I guess it's easier to remember that %.E does "$(CC) -E" or "$(CPP)".

Suggested-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
---
 xen/Makefile | 4 ++--
 xen/Rules.mk | 5 +++++
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/xen/Makefile b/xen/Makefile
index d27c213c3aa9..91b34d549970 100644
--- a/xen/Makefile
+++ b/xen/Makefile
@@ -586,10 +586,10 @@ cscope:
 _MAP:
 	$(NM) -n $(TARGET)-syms | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' > System.map
 
-%.o %.i %.s: %.c tools_fixdep FORCE
+%.o %.i %.s %.E: %.c tools_fixdep FORCE
 	$(MAKE) $(build)=$(*D) $(*D)/$(@F)
 
-%.o %.s: %.S tools_fixdep FORCE
+%.o %.s %.E: %.S tools_fixdep FORCE
 	$(MAKE) $(build)=$(*D) $(*D)/$(@F)
 
 %/: tools_fixdep FORCE
diff --git a/xen/Rules.mk b/xen/Rules.mk
index 6c97f539330a..7d6112a3cdec 100644
--- a/xen/Rules.mk
+++ b/xen/Rules.mk
@@ -289,6 +289,11 @@ $(obj)/%.s: $(src)/%.c FORCE
 $(obj)/%.s: $(src)/%.S FORCE
 	$(call if_changed_dep,cpp_s_S)
 
+$(obj)/%.E: $(src)/%.c FORCE
+	$(call if_changed_dep,cpp_i_c)
+$(obj)/%.E: $(src)/%.S FORCE
+	$(call if_changed_dep,cpp_s_S)
+
 # Linker scripts, .lds.S -> .lds
 quiet_cmd_cpp_lds_S = LDS     $@
 cmd_cpp_lds_S = $(CPP) -P $(call cpp_flags,$(a_flags)) -DLINKER_SCRIPT -MQ $@ -o $@ $<
-- 
Anthony PERARD



^ permalink raw reply related	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 10/51] build,arm: move LDFLAGS change to arch.mk
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Julien Grall @ 2021-08-24 12:50 UTC (permalink / raw)
  To: Anthony PERARD, xen-devel; +Cc: Stefano Stabellini, Volodymyr Babchuk

Hi Anthony,

Can you explain why this is moved?

Cheers,

On 24/08/2021 11:49, Anthony PERARD wrote:
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> ---
>   xen/arch/arm/Makefile | 8 --------
>   xen/arch/arm/arch.mk  | 8 ++++++++
>   2 files changed, 8 insertions(+), 8 deletions(-)
> 
> diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
> index 0edd9dee6f49..3d0af8ebc93c 100644
> --- a/xen/arch/arm/Makefile
> +++ b/xen/arch/arm/Makefile
> @@ -104,14 +104,6 @@ prelink.o: $(ALL_OBJS) $(ALL_LIBS) FORCE
>   	$(call if_changed,ld)
>   endif
>   
> -ifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
> -    ifeq ($(call ld-option, --fix-cortex-a53-843419),n)
> -        $(warning ld does not support --fix-cortex-a53-843419; xen may be susceptible to erratum)
> -    else
> -        XEN_LDFLAGS += --fix-cortex-a53-843419
> -    endif
> -endif
> -
>   targets += prelink.o
>   
>   $(TARGET)-syms: prelink.o xen.lds
> diff --git a/xen/arch/arm/arch.mk b/xen/arch/arm/arch.mk
> index 11caec86ba14..6a2982059486 100644
> --- a/xen/arch/arm/arch.mk
> +++ b/xen/arch/arm/arch.mk
> @@ -17,3 +17,11 @@ $(call cc-option-add,CFLAGS-$(CONFIG_ARM_64),CC,-mno-outline-atomics)
>   ifneq ($(filter command line environment,$(origin CONFIG_EARLY_PRINTK)),)
>       $(error You must use 'make menuconfig' to enable/disable early printk now)
>   endif
> +
> +ifeq ($(CONFIG_ARM64_ERRATUM_843419),y)
> +    ifeq ($(call ld-option, --fix-cortex-a53-843419),n)
> +        $(warning ld does not support --fix-cortex-a53-843419; xen may be susceptible to erratum)
> +    else
> +        LDFLAGS += --fix-cortex-a53-843419
> +    endif
> +endif
> 

-- 
Julien Grall


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 12/51] build: avoid building arm/arm/*/head.o twice
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Julien Grall @ 2021-08-24 12:53 UTC (permalink / raw)
  To: Anthony PERARD, xen-devel; +Cc: Stefano Stabellini, Volodymyr Babchuk

Hi Anthony,

On 24/08/2021 11:49, Anthony PERARD wrote:
> head.o is been built twice, once because it is in $(ALL_OBJS) and a
> second time because it is in $(extra-y) and thus it is rebuilt when
> building "arch/arm/built_in.o".
> 
> Fix this by adding a dependency of "head.o" on the directory
> "arch/arm/".
> 
> Also, we should avoid building object that are in subdirectories, so
> move the declaration in there. This doesn't change anything as
> "arch/arm/built_in.o" depends on "arch/arm/$subarch/built_in.o" which
> depends on $(extra-y), so we still need to depend on
> "arch/arm/built_in.o".

head.o as to be right at the beginning of the binary. Will this still be 
guaranteed with this change?

Cheers,

> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> ---
>   xen/arch/arm/Makefile       | 7 ++++++-
>   xen/arch/arm/arm32/Makefile | 1 +
>   xen/arch/arm/arm64/Makefile | 2 ++
>   3 files changed, 9 insertions(+), 1 deletion(-)
> 
> diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
> index 3d0af8ebc93c..cc90d9796e6e 100644
> --- a/xen/arch/arm/Makefile
> +++ b/xen/arch/arm/Makefile
> @@ -64,7 +64,6 @@ obj-$(CONFIG_SBSA_VUART_CONSOLE) += vpl011.o
>   obj-y += vsmc.o
>   obj-y += vpsci.o
>   obj-y += vuart.o
> -extra-y += $(TARGET_SUBARCH)/head.o
>   
>   extra-y += xen.lds
>   
> @@ -76,6 +75,12 @@ endif
>   
>   ALL_OBJS := $(TARGET_SUBARCH)/head.o $(ALL_OBJS)
>   
> +# head.o is built by descending into the sub-directory, depends on the part of
> +# $(ALL_OBJS) that will eventually recurse into $(TARGET_SUBARCH)/ and build
> +# head.o
> +$(TARGET_SUBARCH)/head.o: $(BASEDIR)/arch/arm/built_in.o
> +$(TARGET_SUBARCH)/head.o: ;
> +
>   ifdef CONFIG_LIVEPATCH
>   all_symbols = --all-symbols
>   ifdef CONFIG_FAST_SYMBOL_LOOKUP
> diff --git a/xen/arch/arm/arm32/Makefile b/xen/arch/arm/arm32/Makefile
> index 96105d238307..3040eabce3ad 100644
> --- a/xen/arch/arm/arm32/Makefile
> +++ b/xen/arch/arm/arm32/Makefile
> @@ -11,3 +11,4 @@ obj-y += smpboot.o
>   obj-y += traps.o
>   obj-y += vfp.o
>   
> +extra-y += head.o
> diff --git a/xen/arch/arm/arm64/Makefile b/xen/arch/arm/arm64/Makefile
> index 40642ff57494..0bb284dedab2 100644
> --- a/xen/arch/arm/arm64/Makefile
> +++ b/xen/arch/arm/arm64/Makefile
> @@ -13,3 +13,5 @@ obj-y += smpboot.o
>   obj-y += traps.o
>   obj-y += vfp.o
>   obj-y += vsysreg.o
> +
> +extra-y += head.o
> 

-- 
Julien Grall


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 10/51] build,arm: move LDFLAGS change to arch.mk
  2021-08-24 12:50   ` Julien Grall
@ 2021-08-24 15:00     ` Anthony PERARD
  2021-08-24 15:23       ` Julien Grall
  0 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 15:00 UTC (permalink / raw)
  To: Julien Grall; +Cc: xen-devel, Stefano Stabellini, Volodymyr Babchuk

On Tue, Aug 24, 2021 at 01:50:33PM +0100, Julien Grall wrote:
> Hi Anthony,
> 
> Can you explain why this is moved?

Well, it was in the wrong place, it is best to avoid making changes to
XEN_CFLAGS or XEN_LDFLAGS in Makefile in subdirectories as those are
exported variable and may not work as expected. They may or may not
change *flags in subdirectories, or in the case of arch/*/Makefile, they
might changes *flags in the other directories or not depending on
whether one try to build "xen" or just "common/".

But more importantly, with patch
    build: set ALL_OBJS to main Makefile; move prelink.o to main Makefile
make isn't going to load arch/*/Makefile before building the rest of
xen, and thus changes to XEN_LDFLAGS will only apply to arch/*/Makefile
rather than for all objects. (XEN_LDFLAGS is used with all built_in.o
and few other places like for libfdt-temp.o)

If you want an explanation in the commit message, maybe this one will
do:
    Changes to XEN_LDFLAGS may or may not apply to targets in for
    example "common/" depending on whether one runs `make` or `make
    common/`.

    But arch.mk is loaded before doing any build, so changes to LDFLAGS
    there mean that the value of XEN_LDFLAGS won't depends on the
    initial target.

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 12/51] build: avoid building arm/arm/*/head.o twice
  2021-08-24 12:53   ` Julien Grall
@ 2021-08-24 15:12     ` Anthony PERARD
  2021-08-24 15:20       ` Julien Grall
  0 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 15:12 UTC (permalink / raw)
  To: Julien Grall; +Cc: xen-devel, Stefano Stabellini, Volodymyr Babchuk

On Tue, Aug 24, 2021 at 01:53:11PM +0100, Julien Grall wrote:
> Hi Anthony,
> 
> On 24/08/2021 11:49, Anthony PERARD wrote:
> > head.o is been built twice, once because it is in $(ALL_OBJS) and a
> > second time because it is in $(extra-y) and thus it is rebuilt when
> > building "arch/arm/built_in.o".
> > 
> > Fix this by adding a dependency of "head.o" on the directory
> > "arch/arm/".
> > 
> > Also, we should avoid building object that are in subdirectories, so
> > move the declaration in there. This doesn't change anything as
> > "arch/arm/built_in.o" depends on "arch/arm/$subarch/built_in.o" which
> > depends on $(extra-y), so we still need to depend on
> > "arch/arm/built_in.o".
> 
> head.o as to be right at the beginning of the binary. Will this still be
> guaranteed with this change?

I guess what you want to know is: no change to the final binary.

The layout of the final binary is defined by $(ALL_OBJS), which this
patch doesn't change.

This patch only ask make that when it want to build "head.o", it need
first to build "arm/built_in.o", then "head.o" exist so we ask make to
not do anything in this Makefile.

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 12/51] build: avoid building arm/arm/*/head.o twice
  2021-08-24 15:12     ` Anthony PERARD
@ 2021-08-24 15:20       ` Julien Grall
  0 siblings, 0 replies; 161+ messages in thread
From: Julien Grall @ 2021-08-24 15:20 UTC (permalink / raw)
  To: Anthony PERARD; +Cc: xen-devel, Stefano Stabellini, Volodymyr Babchuk

Hi Anthony,

On 24/08/2021 16:12, Anthony PERARD wrote:
> On Tue, Aug 24, 2021 at 01:53:11PM +0100, Julien Grall wrote:
>> Hi Anthony,
>>
>> On 24/08/2021 11:49, Anthony PERARD wrote:
>>> head.o is been built twice, once because it is in $(ALL_OBJS) and a
>>> second time because it is in $(extra-y) and thus it is rebuilt when
>>> building "arch/arm/built_in.o".
>>>
>>> Fix this by adding a dependency of "head.o" on the directory
>>> "arch/arm/".
>>>
>>> Also, we should avoid building object that are in subdirectories, so
>>> move the declaration in there. This doesn't change anything as
>>> "arch/arm/built_in.o" depends on "arch/arm/$subarch/built_in.o" which
>>> depends on $(extra-y), so we still need to depend on
>>> "arch/arm/built_in.o".
>>
>> head.o as to be right at the beginning of the binary. Will this still be
>> guaranteed with this change?
> 
> I guess what you want to know is: no change to the final binary.
> 
> The layout of the final binary is defined by $(ALL_OBJS), which this
> patch doesn't change.
> 
> This patch only ask make that when it want to build "head.o", it need
> first to build "arm/built_in.o", then "head.o" exist so we ask make to
> not do anything in this Makefile.

Cool. Thanks for the confirmation! You can add:

Acked-by: Julien Grall <jgrall@amazon.com>

Cheers,

-- 
Julien Grall


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 10/51] build,arm: move LDFLAGS change to arch.mk
  2021-08-24 15:00     ` Anthony PERARD
@ 2021-08-24 15:23       ` Julien Grall
  2021-08-24 16:14         ` Anthony PERARD
  0 siblings, 1 reply; 161+ messages in thread
From: Julien Grall @ 2021-08-24 15:23 UTC (permalink / raw)
  To: Anthony PERARD; +Cc: xen-devel, Stefano Stabellini, Volodymyr Babchuk

Hi Anthony,

On 24/08/2021 16:00, Anthony PERARD wrote:
> On Tue, Aug 24, 2021 at 01:50:33PM +0100, Julien Grall wrote:
>> Hi Anthony,
>>
>> Can you explain why this is moved?
> 
> Well, it was in the wrong place, it is best to avoid making changes to
> XEN_CFLAGS or XEN_LDFLAGS in Makefile in subdirectories as those are
> exported variable and may not work as expected. They may or may not
> change *flags in subdirectories, or in the case of arch/*/Makefile, they
> might changes *flags in the other directories or not depending on
> whether one try to build "xen" or just "common/".
> 
> But more importantly, with patch
>      build: set ALL_OBJS to main Makefile; move prelink.o to main Makefile
> make isn't going to load arch/*/Makefile before building the rest of
> xen, and thus changes to XEN_LDFLAGS will only apply to arch/*/Makefile
> rather than for all objects. (XEN_LDFLAGS is used with all built_in.o
> and few other places like for libfdt-temp.o)

Thanks for the explanation. That makes sense.

> 
> If you want an explanation in the commit message, maybe this one will
> do:
>      Changes to XEN_LDFLAGS may or may not apply to targets in for
>      example "common/" depending on whether one runs `make` or `make
>      common/`.
> 
>      But arch.mk is loaded before doing any build, so changes to LDFLAGS
>      there mean that the value of XEN_LDFLAGS won't depends on the
>      initial target.

An explanation in the commit message would be useful. This one you 
provided looks good. So:

Acked-by: Julien Grall <jgrall@amazon.com>

Can it be merged before the previous patch? If so, I can update the 
commit message and commit it.

Cheers,

-- 
Julien Grall


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 10/51] build,arm: move LDFLAGS change to arch.mk
  2021-08-24 15:23       ` Julien Grall
@ 2021-08-24 16:14         ` Anthony PERARD
  0 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-08-24 16:14 UTC (permalink / raw)
  To: Julien Grall; +Cc: xen-devel, Stefano Stabellini, Volodymyr Babchuk

On Tue, Aug 24, 2021 at 04:23:22PM +0100, Julien Grall wrote:
> Hi Anthony,
> 
> On 24/08/2021 16:00, Anthony PERARD wrote:
> >      Changes to XEN_LDFLAGS may or may not apply to targets in for
> >      example "common/" depending on whether one runs `make` or `make
> >      common/`.
> > 
> >      But arch.mk is loaded before doing any build, so changes to LDFLAGS
> >      there mean that the value of XEN_LDFLAGS won't depends on the
> >      initial target.
> 
> An explanation in the commit message would be useful. This one you provided
> looks good. So:
> 
> Acked-by: Julien Grall <jgrall@amazon.com>
> 
> Can it be merged before the previous patch? If so, I can update the commit
> message and commit it.

Yes, that should be fine, thanks!

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 01/51] build: introduce cpp_flags macro
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-09-02 10:08 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Roger Pau Monné,
	Tim Deegan, xen-devel

On 24.08.2021 12:49, Anthony PERARD wrote:
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>
albeit with a remark:

> --- a/xen/Rules.mk
> +++ b/xen/Rules.mk
> @@ -133,6 +133,9 @@ endif
>  # Always build obj-bin files as binary even if they come from C source. 
>  $(obj-bin-y): XEN_CFLAGS := $(filter-out -flto,$(XEN_CFLAGS))
>  
> +# To be use with $(a_flags) or $(c_flags) to produce CPP flags
> +cpp_flags = $(filter-out -Wa$(comma)% -flto,$(1))

Afaics this has nothing to do with Linux'es cpp_flags, so what we do here
is entirely up to us. If this is strictly intended to be used the another
macro, wouldn't it make sense to have

cpp_flags = $(filter-out -Wa$(comma)% -flto,$($(1)))

here and then e.g. ...

> @@ -222,13 +225,13 @@ $(filter %.init.o,$(obj-y) $(obj-bin-y) $(extra-y)): %.init.o: %.o FORCE
>  	$(call if_changed,obj_init_o)
>  
>  quiet_cmd_cpp_i_c = CPP     $@
> -cmd_cpp_i_c = $(CPP) $(filter-out -Wa$(comma)%,$(c_flags)) -MQ $@ -o $@ $<
> +cmd_cpp_i_c = $(CPP) $(call cpp_flags,$(c_flags)) -MQ $@ -o $@ $<

... the slightly simpler / easier to read

cmd_cpp_i_c = $(CPP) $(call cpp_flags,c_flags) -MQ $@ -o $@ $<

here?

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 09/51] build: use subdir-y in test/Makefile
  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
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-09-02 10:17 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On 24.08.2021 12:49, Anthony PERARD wrote:
> This allows Makefile.clean to recurse into livepatch without help.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build!
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (50 preceding siblings ...)
  2021-08-24 10:50 ` [XEN PATCH v7 51/51] build: add %.E targets Anthony PERARD
@ 2021-09-02 10:22 ` Jan Beulich
  2021-09-06 16:13 ` Anthony PERARD
                   ` (2 subsequent siblings)
  54 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-09-02 10:22 UTC (permalink / raw)
  To: Anthony PERARD; +Cc: xen-devel

(trimming Cc list)

On 24.08.2021 12:49, Anthony PERARD wrote:
> Anthony PERARD (51):
>   build: introduce cpp_flags macro
>   build: use if_changed on built_in.o
>   build: use if_changed_rules with %.o:%.c targets
>   build: factorise generation of the linker scripts
>   x86/mm: avoid building multiple .o from a single .c file
>   build,include: rework compat-build-source.py
>   build,include: rework compat-build-header.py
>   build: fix clean targets when subdir-y is used
>   build: use subdir-y in test/Makefile
>   build,arm: move LDFLAGS change to arch.mk

Having gone through to here while skipping patch 5 for the moment, I
wonder in how far there are dependencies among the above (and, looking
forward, also for others further down on earlier ones). I don't think
it can reasonably be expected for the entire series to go in all at
the same time, so I'd consider it useful to put in whatever is ready
and independent of earlier changes perhaps still under discussion.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 01/51] build: introduce cpp_flags macro
  2021-09-02 10:08   ` Jan Beulich
@ 2021-09-06 10:06     ` Anthony PERARD
  2021-09-06 10:30       ` Jan Beulich
  0 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-09-06 10:06 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Roger Pau Monné,
	Tim Deegan, xen-devel

On Thu, Sep 02, 2021 at 12:08:58PM +0200, Jan Beulich wrote:
> On 24.08.2021 12:49, Anthony PERARD wrote:
> > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> 
> Reviewed-by: Jan Beulich <jbeulich@suse.com>
> albeit with a remark:
> 
> > --- a/xen/Rules.mk
> > +++ b/xen/Rules.mk
> > @@ -133,6 +133,9 @@ endif
> >  # Always build obj-bin files as binary even if they come from C source. 
> >  $(obj-bin-y): XEN_CFLAGS := $(filter-out -flto,$(XEN_CFLAGS))
> >  
> > +# To be use with $(a_flags) or $(c_flags) to produce CPP flags
> > +cpp_flags = $(filter-out -Wa$(comma)% -flto,$(1))
> 
> Afaics this has nothing to do with Linux'es cpp_flags, so what we do here
> is entirely up to us. If this is strictly intended to be used the another
> macro, wouldn't it make sense to have
> 
> cpp_flags = $(filter-out -Wa$(comma)% -flto,$($(1)))
> 
> here and then e.g. ...
> 
> > @@ -222,13 +225,13 @@ $(filter %.init.o,$(obj-y) $(obj-bin-y) $(extra-y)): %.init.o: %.o FORCE
> >  	$(call if_changed,obj_init_o)
> >  
> >  quiet_cmd_cpp_i_c = CPP     $@
> > -cmd_cpp_i_c = $(CPP) $(filter-out -Wa$(comma)%,$(c_flags)) -MQ $@ -o $@ $<
> > +cmd_cpp_i_c = $(CPP) $(call cpp_flags,$(c_flags)) -MQ $@ -o $@ $<
> 
> ... the slightly simpler / easier to read
> 
> cmd_cpp_i_c = $(CPP) $(call cpp_flags,c_flags) -MQ $@ -o $@ $<
> 
> here?

I don't think this is better or simpler. "cpp_flags" don't need to know
the name of the variable to be useful. I think it is better to know that
"cpp_flags" act on the value of the variable rather than the variable
itself, when reading "$(call cpp_flags, $(a_flags))".

But thanks for the suggestion, and for the review,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 01/51] build: introduce cpp_flags macro
  2021-09-06 10:06     ` Anthony PERARD
@ 2021-09-06 10:30       ` Jan Beulich
  2021-09-06 11:21         ` Anthony PERARD
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-09-06 10:30 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Roger Pau Monné,
	Tim Deegan, xen-devel

On 06.09.2021 12:06, Anthony PERARD wrote:
> On Thu, Sep 02, 2021 at 12:08:58PM +0200, Jan Beulich wrote:
>> On 24.08.2021 12:49, Anthony PERARD wrote:
>>> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
>>
>> Reviewed-by: Jan Beulich <jbeulich@suse.com>
>> albeit with a remark:
>>
>>> --- a/xen/Rules.mk
>>> +++ b/xen/Rules.mk
>>> @@ -133,6 +133,9 @@ endif
>>>  # Always build obj-bin files as binary even if they come from C source. 
>>>  $(obj-bin-y): XEN_CFLAGS := $(filter-out -flto,$(XEN_CFLAGS))
>>>  
>>> +# To be use with $(a_flags) or $(c_flags) to produce CPP flags
>>> +cpp_flags = $(filter-out -Wa$(comma)% -flto,$(1))
>>
>> Afaics this has nothing to do with Linux'es cpp_flags, so what we do here
>> is entirely up to us. If this is strictly intended to be used the another
>> macro, wouldn't it make sense to have
>>
>> cpp_flags = $(filter-out -Wa$(comma)% -flto,$($(1)))
>>
>> here and then e.g. ...
>>
>>> @@ -222,13 +225,13 @@ $(filter %.init.o,$(obj-y) $(obj-bin-y) $(extra-y)): %.init.o: %.o FORCE
>>>  	$(call if_changed,obj_init_o)
>>>  
>>>  quiet_cmd_cpp_i_c = CPP     $@
>>> -cmd_cpp_i_c = $(CPP) $(filter-out -Wa$(comma)%,$(c_flags)) -MQ $@ -o $@ $<
>>> +cmd_cpp_i_c = $(CPP) $(call cpp_flags,$(c_flags)) -MQ $@ -o $@ $<
>>
>> ... the slightly simpler / easier to read
>>
>> cmd_cpp_i_c = $(CPP) $(call cpp_flags,c_flags) -MQ $@ -o $@ $<
>>
>> here?
> 
> I don't think this is better or simpler. "cpp_flags" don't need to know
> the name of the variable to be useful. I think it is better to know that
> "cpp_flags" act on the value of the variable rather than the variable
> itself, when reading "$(call cpp_flags, $(a_flags))".

Well, yes. This way one could also pass more than just the expansion of
either of these two variables. The thing that made me think of the
alternative is the comment: Would you mind if I inserted "e.g." in there,
to make clear this isn't limited to these two variables?

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 01/51] build: introduce cpp_flags macro
  2021-09-06 10:30       ` Jan Beulich
@ 2021-09-06 11:21         ` Anthony PERARD
  0 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-09-06 11:21 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Roger Pau Monné,
	Tim Deegan, xen-devel

On Mon, Sep 06, 2021 at 12:30:07PM +0200, Jan Beulich wrote:
> On 06.09.2021 12:06, Anthony PERARD wrote:
> > On Thu, Sep 02, 2021 at 12:08:58PM +0200, Jan Beulich wrote:
> >> On 24.08.2021 12:49, Anthony PERARD wrote:
> >>> +# To be use with $(a_flags) or $(c_flags) to produce CPP flags
> >>> +cpp_flags = $(filter-out -Wa$(comma)% -flto,$(1))
[..]
> Well, yes. This way one could also pass more than just the expansion of
> either of these two variables. The thing that made me think of the
> alternative is the comment: Would you mind if I inserted "e.g." in there,
> to make clear this isn't limited to these two variables?

Adding "e.g." is fine. Thanks.

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build!
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (51 preceding siblings ...)
  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
  54 siblings, 2 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-09-06 16:13 UTC (permalink / raw)
  To: Jan Beulich; +Cc: xen-devel

I hope this is useful:

On Tue, Aug 24, 2021 at 11:49:47AM +0100, Anthony PERARD wrote:
> Anthony PERARD (51):
>   build: introduce cpp_flags macro
>   build: use if_changed on built_in.o
>   build: use if_changed_rules with %.o:%.c targets

all 3 ready to commit

>   build: factorise generation of the linker scripts

may need a ack from arm maintainers, does it? Otherwise, ready.

>   x86/mm: avoid building multiple .o from a single .c file
>   build,include: rework compat-build-source.py
>   build,include: rework compat-build-header.py
>   build: fix clean targets when subdir-y is used
>   build: use subdir-y in test/Makefile

all 5 ready to commit

>   build,arm: move LDFLAGS change to arch.mk
need edit commit description, but otherwise ready
    not needed before [PATCH 21/51] build: set ALL_OBJS to main Makefile; move prelink.o to main Makefile

>   build: move make option changes check earlier
>   build: avoid building arm/arm/*/head.o twice
both ready

So up to here (12/51) all patch seems to be ready to commit.

>   build: convert binfile use to if_changed
>   xen: move include/asm-* to arch/*/include/asm
both need a ack

>   build,riscv: tell the build system about riscv64/head.S
patch ready
but depends on "[PATCH 14/51] xen: move include/asm-* to arch/*/include/asm"
    for the rune written in the commit message to work.


>   build: generate "include/xen/compile.h" with if_changed
>   build: set XEN_BUILD_EFI earlier
>   build: fix $(TARGET).efi creation in arch/arm
patches needs review

>   build: fix arch/x86/note.o rule
ready, standalone


The rest of the series needs review.

Cheers,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 05/51] x86/mm: avoid building multiple .o from a single .c file
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-09-07  6:14 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Roger Pau Monné,
	Tim Deegan, xen-devel

On 24.08.2021 12:49, Anthony PERARD wrote:
> This replace the use of a single .c file use for multiple .o file by
> creating multiple .c file including the first one.
> 
> There's quite a few issues with trying to build more than one object
> file from a single source file: there's is a duplication of the make
> rules to generate those targets; there is an additional ".file" symbol
> added in order to differentiate between the object files; and the
> tools/symbols have an heuristic to try to pick up the right ".file".
> 
> This patch adds new .c source file which avoid the need to add a
> second ".file" symbol and thus avoid the need to deal with those
> issues.
> 
> Also remove __OBJECT_FILE__ from $(CC) command line as it isn't used
> anywhere anymore. And remove the macro "build-intermediate" since the
> generic rules for single targets can be used.
> 
> And rename the objects in mm/hap/ to remove the extra "level".
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> Reviewed-by: Jan Beulich <jbeulich@suse.com>

Hmm, when replying to 00/51 I didn't recall I gave an R-b for this one
already. I'd like to restrict it some: It should be taken to stand for
the technical correctness of the change. Nevertheless I'm not really
happy with the introduction of the various tiny source files. I've
meanwhile been wondering: Can't these be generated (in the build tree,
as soon as that's possible to be separate) rather than getting put in
the repo?

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build!
  2021-09-06 16:13 ` Anthony PERARD
@ 2021-09-07  6:20   ` Jan Beulich
  2021-09-07  7:46   ` Jan Beulich
  1 sibling, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-09-07  6:20 UTC (permalink / raw)
  To: Anthony PERARD; +Cc: xen-devel

On 06.09.2021 18:13, Anthony PERARD wrote:
> I hope this is useful:
> 
> On Tue, Aug 24, 2021 at 11:49:47AM +0100, Anthony PERARD wrote:
>> Anthony PERARD (51):
>>   build: introduce cpp_flags macro
>>   build: use if_changed on built_in.o
>>   build: use if_changed_rules with %.o:%.c targets
> 
> all 3 ready to commit
> 
>>   build: factorise generation of the linker scripts
> 
> may need a ack from arm maintainers, does it? Otherwise, ready.

Ah yes. Will need to wait. Which is the first place pointing out that
you answer my question only partly: Does "ready to commit" include
"independent of earlier patches in this series"? Same e.g. ...

>>   x86/mm: avoid building multiple .o from a single .c file
>>   build,include: rework compat-build-source.py
>>   build,include: rework compat-build-header.py
>>   build: fix clean targets when subdir-y is used
>>   build: use subdir-y in test/Makefile
> 
> all 5 ready to commit

... here: In my reply to this cover letter I did specifically that
I've skipped patch 5. As said in a reply just sent there, when writing
that I didn't realize I had already given R-b for it.

I intend to put in some of this series in a couple of minutes; I'll
try to judge what is okay to commit independent of earlier skipped
patches.

Thanks for the summary nevertheless,
Jan

>>   build,arm: move LDFLAGS change to arch.mk
> need edit commit description, but otherwise ready
>     not needed before [PATCH 21/51] build: set ALL_OBJS to main Makefile; move prelink.o to main Makefile
> 
>>   build: move make option changes check earlier
>>   build: avoid building arm/arm/*/head.o twice
> both ready
> 
> So up to here (12/51) all patch seems to be ready to commit.
> 
>>   build: convert binfile use to if_changed
>>   xen: move include/asm-* to arch/*/include/asm
> both need a ack
> 
>>   build,riscv: tell the build system about riscv64/head.S
> patch ready
> but depends on "[PATCH 14/51] xen: move include/asm-* to arch/*/include/asm"
>     for the rune written in the commit message to work.
> 
> 
>>   build: generate "include/xen/compile.h" with if_changed
>>   build: set XEN_BUILD_EFI earlier
>>   build: fix $(TARGET).efi creation in arch/arm
> patches needs review
> 
>>   build: fix arch/x86/note.o rule
> ready, standalone
> 
> 
> The rest of the series needs review.
> 
> Cheers,
> 



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build!
  2021-09-06 16:13 ` Anthony PERARD
  2021-09-07  6:20   ` Jan Beulich
@ 2021-09-07  7:46   ` Jan Beulich
  1 sibling, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-09-07  7:46 UTC (permalink / raw)
  To: Anthony PERARD; +Cc: xen-devel

On 06.09.2021 18:13, Anthony PERARD wrote:
> On Tue, Aug 24, 2021 at 11:49:47AM +0100, Anthony PERARD wrote:
>>   build,arm: move LDFLAGS change to arch.mk
> need edit commit description, but otherwise ready
>     not needed before [PATCH 21/51] build: set ALL_OBJS to main Makefile; move prelink.o to main Makefile

While you did indicate you'd be fine with Julien's suggested edit,
he did indicate he would take care of this Arm specific change, so
I've left it out.

>>   build: move make option changes check earlier
>>   build: avoid building arm/arm/*/head.o twice
> both ready

The latter didn't apply cleanly for me; I didn't go look specifically
why that might have been.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 04/51] build: factorise generation of the linker scripts
  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
  0 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-09-07 14:22 UTC (permalink / raw)
  To: xen-devel, Julien Grall; +Cc: Jan Beulich, Stefano Stabellini

(dropping most CC)

On Tue, Aug 24, 2021 at 11:49:51AM +0100, Anthony PERARD wrote:
> In Arm and X86 makefile, generating the linker script is the same, so
> we can simply have both call the same macro.
> 
> We need to add *.lds files into extra-y so that Rules.mk can find the
> .*.cmd dependency file and load it.
> 
> Change made to the command line:
> - Use cpp_flags macro which simply filter -Wa,% options from $(a_flags).
> - Added -D__LINKER__ even it is only used by Arm's lds.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> Reviewed-by: Jan Beulich <jbeulich@suse.com>

Hi Julian,

Could you give a Ack to this patch? I think it only misses an ack from
Arm maintainers.

And if you don't mind, could you commit it with the two other arm patch
that are ready?

  - build,arm: move LDFLAGS change to arch.mk
    ( you proposed to edit the commit message before committing )
  - build: avoid building arm/arm/*/head.o twice

Cheers,

> ---
>  xen/Rules.mk          | 4 ++++
>  xen/arch/arm/Makefile | 6 ++++--
>  xen/arch/x86/Makefile | 6 ++++--
>  3 files changed, 12 insertions(+), 4 deletions(-)
> 
> diff --git a/xen/Rules.mk b/xen/Rules.mk
> index eaf770414305..3f61682ceab7 100644
> --- a/xen/Rules.mk
> +++ b/xen/Rules.mk
> @@ -255,6 +255,10 @@ cmd_cpp_s_S = $(CPP) $(call cpp_flags,$(a_flags)) -MQ $@ -o $@ $<
>  %.s: %.S FORCE
>  	$(call if_changed,cpp_s_S)
>  
> +# Linker scripts, .lds.S -> .lds
> +quiet_cmd_cpp_lds_S = LDS     $@
> +cmd_cpp_lds_S = $(CPP) -P $(call cpp_flags,$(a_flags)) -D__LINKER__ -MQ $@ -o $@ $<
> +
>  # Add intermediate targets:
>  # When building objects with specific suffix patterns, add intermediate
>  # targets that the final targets are derived from.
> diff --git a/xen/arch/arm/Makefile b/xen/arch/arm/Makefile
> index 3d3b97b5b440..0edd9dee6f49 100644
> --- a/xen/arch/arm/Makefile
> +++ b/xen/arch/arm/Makefile
> @@ -66,6 +66,8 @@ obj-y += vpsci.o
>  obj-y += vuart.o
>  extra-y += $(TARGET_SUBARCH)/head.o
>  
> +extra-y += xen.lds
> +
>  #obj-bin-y += ....o
>  
>  ifneq ($(CONFIG_DTB_FILE),"")
> @@ -133,8 +135,8 @@ $(TARGET)-syms: prelink.o xen.lds
>  .PHONY: include
>  include:
>  
> -xen.lds: xen.lds.S
> -	$(CPP) -P $(a_flags) -D__LINKER__ -MQ $@ -o $@ $<
> +xen.lds: xen.lds.S FORCE
> +	$(call if_changed,cpp_lds_S)
>  
>  dtb.o: $(patsubst "%",%,$(CONFIG_DTB_FILE))
>  

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 05/51] x86/mm: avoid building multiple .o from a single .c file
  2021-09-07  6:14   ` Jan Beulich
@ 2021-09-08 11:14     ` Anthony PERARD
  2021-09-08 11:44       ` Ian Jackson
  2021-09-08 12:01       ` Jan Beulich
  0 siblings, 2 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-09-08 11:14 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Roger Pau Monné,
	Tim Deegan, xen-devel

On Tue, Sep 07, 2021 at 08:14:14AM +0200, Jan Beulich wrote:
> On 24.08.2021 12:49, Anthony PERARD wrote:
> > This replace the use of a single .c file use for multiple .o file by
> > creating multiple .c file including the first one.
> > 
> > There's quite a few issues with trying to build more than one object
> > file from a single source file: there's is a duplication of the make
> > rules to generate those targets; there is an additional ".file" symbol
> > added in order to differentiate between the object files; and the
> > tools/symbols have an heuristic to try to pick up the right ".file".
> > 
> > This patch adds new .c source file which avoid the need to add a
> > second ".file" symbol and thus avoid the need to deal with those
> > issues.
> > 
> > Also remove __OBJECT_FILE__ from $(CC) command line as it isn't used
> > anywhere anymore. And remove the macro "build-intermediate" since the
> > generic rules for single targets can be used.
> > 
> > And rename the objects in mm/hap/ to remove the extra "level".
> > 
> > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> > Reviewed-by: Jan Beulich <jbeulich@suse.com>
> 
> Hmm, when replying to 00/51 I didn't recall I gave an R-b for this one
> already. I'd like to restrict it some: It should be taken to stand for
> the technical correctness of the change. Nevertheless I'm not really
> happy with the introduction of the various tiny source files. I've
> meanwhile been wondering: Can't these be generated (in the build tree,
> as soon as that's possible to be separate) rather than getting put in
> the repo?

Do we really need to generated those never to be change tiny source
file? Do we really need to make the build system a lot more complicated?

With those tiny source file in a different directory to the main source
file, we need to add "-I" to CFLAGS. (source tree vs build tree.)

I don't like preparation phase, I'd rather do just-in-time generation of
those tiny file (if we really have too...) as to let make organize
itself on when to do things. That mean, extra targets on how to generate
the files, and telling make that those would be intermediate target
shouldn't be deleted to avoid the final object from been regenerated
over and over again (I'm not sure why the rebuild of tiny source file
happen when they are intermediate, maybe because FORCE prerequisite on
%.o).

Can't we commit this patch as is? What kind of issue is there with those
tiny source files? Should we add a warning in those tiny source files,
something like "No modification of this file allowed, it's part of the
build system." ?

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 05/51] x86/mm: avoid building multiple .o from a single .c file
  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
  1 sibling, 1 reply; 161+ messages in thread
From: Ian Jackson @ 2021-09-08 11:44 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Jan Beulich, Andrew Cooper, George Dunlap, Julien Grall,
	Stefano Stabellini, Wei Liu, Roger Pau Monné,
	Tim  Deegan, xen-devel

Anthony PERARD writes ("Re: [XEN PATCH v7 05/51] x86/mm: avoid building multiple .o from a single .c file"):
> On Tue, Sep 07, 2021 at 08:14:14AM +0200, Jan Beulich wrote:
> > Hmm, when replying to 00/51 I didn't recall I gave an R-b for this one
> > already. I'd like to restrict it some: It should be taken to stand for
> > the technical correctness of the change. Nevertheless I'm not really
> > happy with the introduction of the various tiny source files. I've
> > meanwhile been wondering: Can't these be generated (in the build tree,
> > as soon as that's possible to be separate) rather than getting put in
> > the repo?
> 
> Do we really need to generated those never to be change tiny source
> file? Do we really need to make the build system a lot more complicated?

I'm not an x86 maintainer, but my 2p anyway:

I think the handful of tiny source files is probably better than some
contraption in the build system.  Much less risk of something funny
and confusing going on.

We could reduce the number of copies of the same text by making the
copies of guest_walk*.c in hap/ be symlinks to ../guest_walk*.c.

> Can't we commit this patch as is? What kind of issue is there with those
> tiny source files? Should we add a warning in those tiny source files,
> something like "No modification of this file allowed, it's part of the
> build system." ?

I don't think we need any such warning.  No-one is going to take that
tiny file and try to edit it to put functionality in it, and if they
do it will be spotted on review.

Thanks,
Ian.


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 05/51] x86/mm: avoid building multiple .o from a single .c file
  2021-09-08 11:14     ` Anthony PERARD
  2021-09-08 11:44       ` Ian Jackson
@ 2021-09-08 12:01       ` Jan Beulich
  2021-09-09 10:03         ` Anthony PERARD
  1 sibling, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-09-08 12:01 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Roger Pau Monné,
	Tim Deegan, xen-devel

On 08.09.2021 13:14, Anthony PERARD wrote:
> On Tue, Sep 07, 2021 at 08:14:14AM +0200, Jan Beulich wrote:
>> On 24.08.2021 12:49, Anthony PERARD wrote:
>>> This replace the use of a single .c file use for multiple .o file by
>>> creating multiple .c file including the first one.
>>>
>>> There's quite a few issues with trying to build more than one object
>>> file from a single source file: there's is a duplication of the make
>>> rules to generate those targets; there is an additional ".file" symbol
>>> added in order to differentiate between the object files; and the
>>> tools/symbols have an heuristic to try to pick up the right ".file".
>>>
>>> This patch adds new .c source file which avoid the need to add a
>>> second ".file" symbol and thus avoid the need to deal with those
>>> issues.
>>>
>>> Also remove __OBJECT_FILE__ from $(CC) command line as it isn't used
>>> anywhere anymore. And remove the macro "build-intermediate" since the
>>> generic rules for single targets can be used.
>>>
>>> And rename the objects in mm/hap/ to remove the extra "level".
>>>
>>> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
>>> Reviewed-by: Jan Beulich <jbeulich@suse.com>
>>
>> Hmm, when replying to 00/51 I didn't recall I gave an R-b for this one
>> already. I'd like to restrict it some: It should be taken to stand for
>> the technical correctness of the change. Nevertheless I'm not really
>> happy with the introduction of the various tiny source files. I've
>> meanwhile been wondering: Can't these be generated (in the build tree,
>> as soon as that's possible to be separate) rather than getting put in
>> the repo?
> 
> Do we really need to generated those never to be change tiny source
> file? Do we really need to make the build system a lot more complicated?
> 
> With those tiny source file in a different directory to the main source
> file, we need to add "-I" to CFLAGS. (source tree vs build tree.)
> 
> I don't like preparation phase, I'd rather do just-in-time generation of
> those tiny file (if we really have too...) as to let make organize
> itself on when to do things. That mean, extra targets on how to generate
> the files, and telling make that those would be intermediate target
> shouldn't be deleted to avoid the final object from been regenerated
> over and over again (I'm not sure why the rebuild of tiny source file
> happen when they are intermediate, maybe because FORCE prerequisite on
> %.o).
> 
> Can't we commit this patch as is?

I'll consider another time.

> What kind of issue is there with those tiny source files?

To me they're ugly and their presence is at least mildly confusing.
And apparently I'm not the only one thinking that way, or else such
tiny stubs would have been put there right when introducing these
multiply built sources.

> Should we add a warning in those tiny source files,
> something like "No modification of this file allowed, it's part of the
> build system." ?

Not sure this would make much of a difference. Them getting touched
later on is not a primary concern of mine. In fact once they're
there, I don't see why they couldn't be extended. At least in shadow
code there might be functions which could live there, reducing
#ifdef-ary.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 05/51] x86/mm: avoid building multiple .o from a single .c file
  2021-09-08 12:01       ` Jan Beulich
@ 2021-09-09 10:03         ` Anthony PERARD
  0 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-09-09 10:03 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Roger Pau Monné,
	Tim Deegan, xen-devel

On Wed, Sep 08, 2021 at 02:01:43PM +0200, Jan Beulich wrote:
> On 08.09.2021 13:14, Anthony PERARD wrote:
> > What kind of issue is there with those tiny source files?
> 
> To me they're ugly and their presence is at least mildly confusing.
> And apparently I'm not the only one thinking that way, or else such
> tiny stubs would have been put there right when introducing these
> multiply built sources.

Well, at the time when this was introduced, tools/symbols didn't exist,
so avoiding the stubs might have been ok by then, but it meant to
duplicated %.o:%.c rules in the Makefile...

Now, we have tools/symbols, a hack put into the source file to add a
".file instruction", a heuristic in tools/symbols to pick up the ".file"
we want, and a workaround to change in behavior of binutils.

This is a lot of complexity to avoid introducing those extra source
files... complexity that were needed to by added _after_ the initial
introduction of multiply built sources, due to changes in the build
system.

My patches have attempted to remove all the complexity, and having ugly
small source files is the price to pay. And you want to add back some
complexity in the build system just to avoid those tiny files? I mean
hypervisor and build system are complex software to write, do we really
need to add complexity at every opportunity?

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build!
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (52 preceding siblings ...)
  2021-09-06 16:13 ` Anthony PERARD
@ 2021-09-15  9:53 ` Michal Orzel
  2021-11-04 15:49 ` Alex Bennée
  54 siblings, 0 replies; 161+ messages in thread
From: Michal Orzel @ 2021-09-15  9:53 UTC (permalink / raw)
  To: Anthony PERARD; +Cc: xen-devel

Hi Anthony,

On 24.08.2021 12:49, Anthony PERARD wrote:
> Patch series available in this git branch:
> https://xenbits.xen.org/git-http/people/aperard/xen-unstable.git br.build-system-xen-v7
> 
> v7:
>     Out-of-tree build!
> 
>     This mean many more patches. Everything after patch 27 is new.
> 
>     There's a few new patch before that, but otherwise are rework of v6.
> 
> v6:
>     This new version of the series get's us very close to be able to do
>     out-of-tree build, but I've stop at been able to use Linux's `fixdep` and
>     getting rid of those annoying *.d2 files generation.
> 
>     There a few patch left from the previous round within the first 8 patches
>     (mixed with new or replaced patches). All the rest is new.
> 
>     The main patch is probably "build: build everything from the root dir, use
>     obj=$subdir" which has still quite a few changes left. I might be still be
>     able to break it down even more if needed to help with review (and might
>     allow me to better explain some changes in it).
> 
> v5:
> https://lore.kernel.org/xen-devel/20200421161208.2429539-1-anthony.perard@citrix.com/
> - few changes detailed in patch notes.
> - 1 new patch
> 
> Hi,
> 
> I have work toward building Xen (the hypervisor) with Linux's build system,
> Kbuild.
> 
> The main reason for that is to be able to have out-of-tree build. It's annoying
> when a build fail because of the pvshim. Other benefit is a much faster
> rebuild, and `make clean` doesn't take ages, and better dependencies to figure
> out what needs to be rebuild.
> 
I wanted to let you know that I tested out-of-tree build using v7 series on arm64/arm32 and it works.
Also I tested it with Yocto building Xen(to check if it does not break the builds) and
it also works. Rebuilding/cleaning is really much quicker. Great work.

> This new version of the series get's us very close to be able to do out-of-tree
> build, but I've stop at been able to use Linux's `fixdep` and getting rid of
> those annoying *.d2 files.
> 
> Cheers,
> 
Cheers,
Michal

> Anthony PERARD (51):
>   build: introduce cpp_flags macro
>   build: use if_changed on built_in.o
>   build: use if_changed_rules with %.o:%.c targets
>   build: factorise generation of the linker scripts
>   x86/mm: avoid building multiple .o from a single .c file
>   build,include: rework compat-build-source.py
>   build,include: rework compat-build-header.py
>   build: fix clean targets when subdir-y is used
>   build: use subdir-y in test/Makefile
>   build,arm: move LDFLAGS change to arch.mk
>   build: move make option changes check earlier
>   build: avoid building arm/arm/*/head.o twice
>   build: convert binfile use to if_changed
>   xen: move include/asm-* to arch/*/include/asm
>   build,riscv: tell the build system about riscv64/head.S
>   build: generate "include/xen/compile.h" with if_changed
>   build: set XEN_BUILD_EFI earlier
>   build: fix $(TARGET).efi creation in arch/arm
>   build: fix arch/x86/note.o rule
>   build: avoid re-executing the main Makefile by introducing build.mk
>   build: set ALL_OBJS to main Makefile; move prelink.o to main Makefile
>   build: clean common temporary files from root makefile
>   build,include: remove arch-*/*.h public header listing from
>     headers*.chk
>   build: prepare to always invoke $(MAKE) from xen/, use $(obj)
>   build: rework test/livepatch/Makefile
>   build: build everything from the root dir, use obj=$subdir
>   build: introduce if_changed_deps
>   build: rename __LINKER__ to LINKER_SCRIPT
>   build: add an other explicite rules to not build $(XEN_ROOT)/.config
>   build: hook kconfig into xen build system
>   xen/tools/kconfig: fix build with -Wdeclaration-after-statement
>   build: Remove KBUILD_ specific from Makefile.host
>   build: handle always-y and hostprogs-always-y
>   build: start building the tools with the main makefiles
>   build: Add headers path to CFLAGS once for all archs
>   build: generate x86's asm-macros.h with filechk
>   build: clean-up "clean" rules of duplication
>   build: use main rune to build host binary x86's mkelf32 and mkreloc
>   build: rework coverage and ubsan CFLAGS handling
>   build: fix dependencies in arch/x86/boot
>   build,x86: remove the need for build32.mk
>   build: grab common EFI source files in arch specific dir
>   build: replace $(BASEDIR) by $(objtree)
>   build: add $(srctree) in few key places
>   build: rework cloc recipe
>   build: replace $(BASEDIR) by $(srctree)
>   build: Rework "clean" to clean from the root dir
>   build: Rework "headers*.chk" prerequisite in include/
>   build: adding out-of-tree support to the xen build
>   build: specify source tree in include/ for prerequisite
>   build: add %.E targets
> 
>  .gitignore                                    |   7 +-
>  MAINTAINERS                                   |  37 +-
>  tools/include/Makefile                        |   2 +-
>  tools/misc/xen-access.c                       |   4 +-
>  tools/tests/vhpet/Makefile                    |   2 +-
>  xen/Kconfig                                   |   4 +-
>  xen/Makefile                                  | 408 +++++++++++-------
>  xen/Rules.mk                                  | 293 ++++++++-----
>  xen/arch/arm/Makefile                         |  62 +--
>  xen/arch/arm/README.LinuxPrimitives           |  10 +-
>  xen/arch/arm/arch.mk                          |  12 +-
>  xen/arch/arm/arm32/Makefile                   |   1 +
>  xen/arch/arm/arm32/head.S                     |   2 +-
>  xen/arch/arm/arm64/Makefile                   |   2 +
>  xen/arch/arm/arm64/head.S                     |   2 +-
>  xen/arch/arm/efi/Makefile                     |   9 +
>  .../asm-arm => arch/arm/include/asm}/acpi.h   |   0
>  .../arm/include/asm}/alternative.h            |   0
>  .../asm-arm => arch/arm/include/asm}/altp2m.h |   0
>  .../arm/include/asm}/arm32/atomic.h           |   0
>  .../arm/include/asm}/arm32/bitops.h           |   0
>  .../arm/include/asm}/arm32/bug.h              |   0
>  .../arm/include/asm}/arm32/cmpxchg.h          |   0
>  .../arm/include/asm}/arm32/flushtlb.h         |   0
>  .../arm/include/asm}/arm32/insn.h             |   0
>  .../arm/include/asm}/arm32/io.h               |   0
>  .../arm/include/asm}/arm32/macros.h           |   0
>  .../arm/include/asm}/arm32/mm.h               |   0
>  .../arm/include/asm}/arm32/page.h             |   0
>  .../arm/include/asm}/arm32/processor.h        |   0
>  .../arm/include/asm}/arm32/sysregs.h          |   0
>  .../arm/include/asm}/arm32/system.h           |   0
>  .../arm/include/asm}/arm32/traps.h            |   0
>  .../arm/include/asm}/arm32/vfp.h              |   0
>  .../arm/include/asm}/arm64/atomic.h           |   0
>  .../arm/include/asm}/arm64/bitops.h           |   0
>  .../arm/include/asm}/arm64/brk.h              |   0
>  .../arm/include/asm}/arm64/bug.h              |   0
>  .../arm/include/asm}/arm64/cmpxchg.h          |   0
>  .../arm/include/asm}/arm64/efibind.h          |   0
>  .../arm/include/asm}/arm64/flushtlb.h         |   0
>  .../arm/include/asm}/arm64/hsr.h              |   0
>  .../arm/include/asm}/arm64/insn.h             |   0
>  .../arm/include/asm}/arm64/io.h               |   0
>  .../arm/include/asm}/arm64/macros.h           |   0
>  .../arm/include/asm}/arm64/mm.h               |   0
>  .../arm/include/asm}/arm64/page.h             |   0
>  .../arm/include/asm}/arm64/processor.h        |   0
>  .../arm/include/asm}/arm64/sysregs.h          |   0
>  .../arm/include/asm}/arm64/system.h           |   0
>  .../arm/include/asm}/arm64/traps.h            |   0
>  .../arm/include/asm}/arm64/vfp.h              |   0
>  .../arm/include/asm}/asm_defns.h              |   0
>  .../asm-arm => arch/arm/include/asm}/atomic.h |   0
>  .../asm-arm => arch/arm/include/asm}/bitops.h |   0
>  .../asm-arm => arch/arm/include/asm}/bug.h    |   0
>  .../arm/include/asm}/byteorder.h              |   0
>  .../asm-arm => arch/arm/include/asm}/cache.h  |   0
>  .../arm/include/asm}/cadence-uart.h           |   0
>  .../asm-arm => arch/arm/include/asm}/config.h |   2 +-
>  .../asm-arm => arch/arm/include/asm}/cpregs.h |   0
>  .../arm/include/asm}/cpuerrata.h              |   0
>  .../arm/include/asm}/cpufeature.h             |   0
>  .../arm/include/asm}/current.h                |   0
>  .../arm/include/asm}/debugger.h               |   0
>  .../asm-arm => arch/arm/include/asm}/delay.h  |   0
>  .../asm-arm => arch/arm/include/asm}/desc.h   |   0
>  .../asm-arm => arch/arm/include/asm}/device.h |   0
>  .../asm-arm => arch/arm/include/asm}/div64.h  |   0
>  .../asm-arm => arch/arm/include/asm}/domain.h |   0
>  .../arm/include/asm}/domain_build.h           |   0
>  .../arm/include/asm}/early_printk.h           |   0
>  .../arm/include/asm}/efibind.h                |   0
>  .../asm-arm => arch/arm/include/asm}/elf.h    |   0
>  .../asm-arm => arch/arm/include/asm}/event.h  |   0
>  .../arm/include/asm}/exynos4210-uart.h        |   0
>  .../arm/include/asm}/flushtlb.h               |   0
>  .../asm-arm => arch/arm/include/asm}/gic.h    |   0
>  .../arm/include/asm}/gic_v3_defs.h            |   0
>  .../arm/include/asm}/gic_v3_its.h             |   0
>  .../arm/include/asm}/grant_table.h            |   0
>  .../arm/include/asm}/guest_access.h           |   0
>  .../arm/include/asm}/guest_atomics.h          |   0
>  .../arm/include/asm}/guest_walk.h             |   0
>  .../arm/include/asm}/hardirq.h                |   0
>  .../asm-arm => arch/arm/include/asm}/hsr.h    |   0
>  .../arm/include/asm}/hypercall.h              |   0
>  .../asm-arm => arch/arm/include/asm}/init.h   |   0
>  .../asm-arm => arch/arm/include/asm}/insn.h   |   0
>  .../asm-arm => arch/arm/include/asm}/io.h     |   0
>  .../asm-arm => arch/arm/include/asm}/iocap.h  |   0
>  .../asm-arm => arch/arm/include/asm}/iommu.h  |   0
>  .../arm/include/asm}/iommu_fwspec.h           |   0
>  .../asm-arm => arch/arm/include/asm}/ioreq.h  |   0
>  .../asm-arm => arch/arm/include/asm}/irq.h    |   0
>  .../asm-arm => arch/arm/include/asm}/kernel.h |   0
>  .../arm/include/asm}/livepatch.h              |   0
>  .../asm-arm => arch/arm/include/asm}/lpae.h   |   0
>  .../asm-arm => arch/arm/include/asm}/macros.h |   0
>  .../arm/include/asm}/mem_access.h             |   0
>  .../asm-arm => arch/arm/include/asm}/mm.h     |   0
>  .../asm-arm => arch/arm/include/asm}/mmio.h   |   0
>  .../arm/include/asm}/monitor.h                |   0
>  .../arm/include/asm}/new_vgic.h               |   0
>  .../asm-arm => arch/arm/include/asm}/nospec.h |   0
>  .../asm-arm => arch/arm/include/asm}/numa.h   |   0
>  .../asm-arm => arch/arm/include/asm}/p2m.h    |   0
>  .../arm/include/asm}/page-bits.h              |   0
>  .../asm-arm => arch/arm/include/asm}/page.h   |   0
>  .../asm-arm => arch/arm/include/asm}/paging.h |   0
>  .../asm-arm => arch/arm/include/asm}/pci.h    |   0
>  .../asm-arm => arch/arm/include/asm}/percpu.h |   0
>  .../asm-arm => arch/arm/include/asm}/perfc.h  |   0
>  .../arm/include/asm}/perfc_defn.h             |   0
>  .../arm/include/asm}/pl011-uart.h             |   0
>  .../arm/include/asm}/platform.h               |   0
>  .../arm/include/asm}/platforms/exynos5.h      |   0
>  .../arm/include/asm}/platforms/midway.h       |   0
>  .../arm/include/asm}/platforms/omap5.h        |   0
>  .../arm/include/asm}/platforms/vexpress.h     |   0
>  .../asm}/platforms/xilinx-zynqmp-eemi.h       |   0
>  .../arm/include/asm}/processor.h              |   0
>  .../arm/include/asm}/procinfo.h               |   0
>  .../asm-arm => arch/arm/include/asm}/psci.h   |   0
>  .../asm-arm => arch/arm/include/asm}/random.h |   0
>  .../asm-arm => arch/arm/include/asm}/regs.h   |   0
>  .../arm/include/asm}/scif-uart.h              |   0
>  .../asm-arm => arch/arm/include/asm}/setup.h  |   0
>  .../arm/include/asm}/short-desc.h             |   0
>  .../asm-arm => arch/arm/include/asm}/smccc.h  |   0
>  .../asm-arm => arch/arm/include/asm}/smp.h    |   0
>  .../arm/include/asm}/softirq.h                |   0
>  .../arm/include/asm}/spinlock.h               |   0
>  .../asm-arm => arch/arm/include/asm}/string.h |   0
>  .../arm/include/asm}/sysregs.h                |   0
>  .../asm-arm => arch/arm/include/asm}/system.h |   0
>  .../arm/include/asm}/tee/optee_msg.h          |   0
>  .../arm/include/asm}/tee/optee_rpc_cmd.h      |   0
>  .../arm/include/asm}/tee/optee_smc.h          |   0
>  .../arm/include/asm}/tee/tee.h                |   0
>  .../asm-arm => arch/arm/include/asm}/time.h   |   0
>  .../asm-arm => arch/arm/include/asm}/trace.h  |   0
>  .../asm-arm => arch/arm/include/asm}/traps.h  |   0
>  .../asm-arm => arch/arm/include/asm}/types.h  |   0
>  .../asm-arm => arch/arm/include/asm}/vfp.h    |   0
>  .../arm/include/asm}/vgic-emul.h              |   0
>  .../asm-arm => arch/arm/include/asm}/vgic.h   |   0
>  .../arm/include/asm}/vm_event.h               |   0
>  .../asm-arm => arch/arm/include/asm}/vpl011.h |   0
>  .../asm-arm => arch/arm/include/asm}/vpsci.h  |   0
>  .../asm-arm => arch/arm/include/asm}/vreg.h   |   0
>  .../asm-arm => arch/arm/include/asm}/vtimer.h |   0
>  .../arm/include/asm}/xenoprof.h               |   0
>  xen/arch/arm/smpboot.c                        |   2 +-
>  xen/arch/arm/vpsci.c                          |   2 +-
>  xen/arch/riscv/arch.mk                        |   1 -
>  .../riscv/include/asm}/config.h               |   0
>  xen/arch/riscv/riscv64/Makefile               |   1 +
>  xen/arch/x86/Makefile                         | 204 ++++-----
>  xen/arch/x86/Rules.mk                         |   4 +-
>  xen/arch/x86/arch.mk                          |  54 ++-
>  xen/arch/x86/boot/Makefile                    |  62 ++-
>  xen/arch/x86/boot/build32.mk                  |  40 --
>  xen/arch/x86/efi/Makefile                     |  15 +-
>  .../asm-x86 => arch/x86/include/asm}/acpi.h   |   0
>  .../x86/include/asm}/alternative-asm.h        |   0
>  .../x86/include/asm}/alternative.h            |   0
>  .../asm-x86 => arch/x86/include/asm}/altp2m.h |   0
>  .../asm-x86 => arch/x86/include/asm}/amd.h    |   0
>  .../asm-x86 => arch/x86/include/asm}/apic.h   |   0
>  .../x86/include/asm}/apicdef.h                |   0
>  .../x86/include/asm}/asm-defns.h              |   0
>  .../x86/include/asm}/asm_defns.h              |   0
>  .../asm-x86 => arch/x86/include/asm}/atomic.h |   0
>  .../asm-x86 => arch/x86/include/asm}/bitops.h |   0
>  .../asm-x86 => arch/x86/include/asm}/bug.h    |   0
>  .../x86/include/asm}/byteorder.h              |   0
>  .../x86/include/asm}/bzimage.h                |   0
>  .../asm-x86 => arch/x86/include/asm}/cache.h  |   0
>  .../asm-x86 => arch/x86/include/asm}/compat.h |   0
>  .../asm-x86 => arch/x86/include/asm}/config.h |   0
>  .../x86/include/asm}/cpufeature.h             |   0
>  .../x86/include/asm}/cpufeatures.h            |   0
>  .../x86/include/asm}/cpufeatureset.h          |   0
>  .../asm-x86 => arch/x86/include/asm}/cpuid.h  |   0
>  .../x86/include/asm}/cpuidle.h                |   0
>  .../x86/include/asm}/current.h                |   2 +-
>  .../x86/include/asm}/debugger.h               |   0
>  .../x86/include/asm}/debugreg.h               |   0
>  .../asm-x86 => arch/x86/include/asm}/delay.h  |   0
>  .../asm-x86 => arch/x86/include/asm}/desc.h   |   0
>  .../asm-x86 => arch/x86/include/asm}/device.h |   0
>  .../asm-x86 => arch/x86/include/asm}/div64.h  |   0
>  .../x86/include/asm}/dom0_build.h             |   0
>  .../asm-x86 => arch/x86/include/asm}/domain.h |   2 +-
>  .../asm-x86 => arch/x86/include/asm}/e820.h   |   0
>  .../asm-x86 => arch/x86/include/asm}/edd.h    |   0
>  .../x86/include/asm}/efibind.h                |   0
>  .../asm-x86 => arch/x86/include/asm}/elf.h    |   0
>  .../asm-x86 => arch/x86/include/asm}/event.h  |   0
>  .../asm-x86 => arch/x86/include/asm}/fixmap.h |   0
>  .../x86/include/asm}/flushtlb.h               |   0
>  .../x86/include/asm}/genapic.h                |   0
>  .../x86/include/asm}/grant_table.h            |   0
>  .../asm-x86 => arch/x86/include/asm}/guest.h  |   0
>  .../x86/include/asm}/guest/hyperv-hcall.h     |   0
>  .../x86/include/asm}/guest/hyperv-tlfs.h      |   0
>  .../x86/include/asm}/guest/hyperv.h           |   0
>  .../x86/include/asm}/guest/hypervisor.h       |   0
>  .../x86/include/asm}/guest/pvh-boot.h         |   0
>  .../x86/include/asm}/guest/xen-hcall.h        |   0
>  .../x86/include/asm}/guest/xen.h              |   0
>  .../x86/include/asm}/guest_access.h           |   0
>  .../x86/include/asm}/guest_atomics.h          |   0
>  .../x86/include/asm}/guest_pt.h               |   0
>  .../asm-x86 => arch/x86/include/asm}/hap.h    |   0
>  .../x86/include/asm}/hardirq.h                |   0
>  .../asm-x86 => arch/x86/include/asm}/hpet.h   |   0
>  .../x86/include/asm}/hvm/asid.h               |   0
>  .../x86/include/asm}/hvm/cacheattr.h          |   0
>  .../x86/include/asm}/hvm/domain.h             |   0
>  .../x86/include/asm}/hvm/emulate.h            |   0
>  .../x86/include/asm}/hvm/grant_table.h        |   0
>  .../x86/include/asm}/hvm/guest_access.h       |   0
>  .../x86/include/asm}/hvm/hvm.h                |   0
>  .../asm-x86 => arch/x86/include/asm}/hvm/io.h |   0
>  .../x86/include/asm}/hvm/ioreq.h              |   0
>  .../x86/include/asm}/hvm/irq.h                |   0
>  .../x86/include/asm}/hvm/monitor.h            |   0
>  .../x86/include/asm}/hvm/nestedhvm.h          |   0
>  .../x86/include/asm}/hvm/save.h               |   0
>  .../x86/include/asm}/hvm/support.h            |   0
>  .../x86/include/asm}/hvm/svm/asid.h           |   0
>  .../x86/include/asm}/hvm/svm/emulate.h        |   0
>  .../x86/include/asm}/hvm/svm/intr.h           |   0
>  .../x86/include/asm}/hvm/svm/nestedsvm.h      |   0
>  .../x86/include/asm}/hvm/svm/svm.h            |   0
>  .../x86/include/asm}/hvm/svm/svmdebug.h       |   0
>  .../x86/include/asm}/hvm/svm/vmcb.h           |   0
>  .../x86/include/asm}/hvm/trace.h              |   0
>  .../x86/include/asm}/hvm/vcpu.h               |   0
>  .../x86/include/asm}/hvm/vioapic.h            |   0
>  .../x86/include/asm}/hvm/viridian.h           |   0
>  .../x86/include/asm}/hvm/vlapic.h             |   0
>  .../x86/include/asm}/hvm/vm_event.h           |   0
>  .../x86/include/asm}/hvm/vmx/vmcs.h           |   0
>  .../x86/include/asm}/hvm/vmx/vmx.h            |   0
>  .../x86/include/asm}/hvm/vmx/vvmx.h           |   0
>  .../x86/include/asm}/hvm/vpic.h               |   0
>  .../x86/include/asm}/hvm/vpt.h                |   0
>  .../x86/include/asm}/hypercall.h              |   0
>  .../asm-x86 => arch/x86/include/asm}/i387.h   |   0
>  .../asm-x86 => arch/x86/include/asm}/init.h   |   0
>  .../x86/include/asm}/invpcid.h                |   0
>  .../asm-x86 => arch/x86/include/asm}/io.h     |   0
>  .../x86/include/asm}/io_apic.h                |   0
>  .../asm-x86 => arch/x86/include/asm}/iocap.h  |   0
>  .../asm-x86 => arch/x86/include/asm}/iommu.h  |   0
>  .../asm-x86 => arch/x86/include/asm}/ioreq.h  |   0
>  .../asm-x86 => arch/x86/include/asm}/irq.h    |   0
>  .../asm-x86 => arch/x86/include/asm}/ldt.h    |   0
>  .../x86/include/asm}/livepatch.h              |   0
>  .../x86/include/asm}/mach-default/bios_ebda.h |   0
>  .../x86/include/asm}/mach-default/io_ports.h  |   0
>  .../include/asm}/mach-default/irq_vectors.h   |   0
>  .../include/asm}/mach-default/mach_mpparse.h  |   0
>  .../include/asm}/mach-default/mach_mpspec.h   |   0
>  .../x86/include/asm}/mach-generic/mach_apic.h |   0
>  .../include/asm}/mach-generic/mach_mpparse.h  |   0
>  .../x86/include/asm}/machine_kexec.h          |   0
>  .../x86/include/asm}/mc146818rtc.h            |   0
>  .../asm-x86 => arch/x86/include/asm}/mce.h    |   0
>  .../x86/include/asm}/mem_access.h             |   0
>  .../x86/include/asm}/mem_paging.h             |   0
>  .../x86/include/asm}/mem_sharing.h            |   0
>  .../x86/include/asm}/microcode.h              |   0
>  .../asm-x86 => arch/x86/include/asm}/mm.h     |   0
>  .../x86/include/asm}/monitor.h                |   0
>  .../asm-x86 => arch/x86/include/asm}/mpspec.h |   0
>  .../x86/include/asm}/mpspec_def.h             |   0
>  .../asm-x86 => arch/x86/include/asm}/msi.h    |   0
>  .../x86/include/asm}/msr-index.h              |   0
>  .../asm-x86 => arch/x86/include/asm}/msr.h    |   0
>  .../asm-x86 => arch/x86/include/asm}/mtrr.h   |   0
>  .../x86/include/asm}/multicall.h              |   0
>  .../asm-x86 => arch/x86/include/asm}/mwait.h  |   0
>  .../asm-x86 => arch/x86/include/asm}/nmi.h    |   0
>  .../asm-x86 => arch/x86/include/asm}/nops.h   |   0
>  .../asm-x86 => arch/x86/include/asm}/nospec.h |   0
>  .../asm-x86 => arch/x86/include/asm}/numa.h   |   0
>  .../asm-x86 => arch/x86/include/asm}/p2m.h    |   0
>  .../x86/include/asm}/page-bits.h              |   0
>  .../asm-x86 => arch/x86/include/asm}/page.h   |   0
>  .../asm-x86 => arch/x86/include/asm}/paging.h |   0
>  .../asm-x86 => arch/x86/include/asm}/pci.h    |   0
>  .../asm-x86 => arch/x86/include/asm}/percpu.h |   0
>  .../asm-x86 => arch/x86/include/asm}/perfc.h  |   0
>  .../x86/include/asm}/perfc_defn.h             |   0
>  .../x86/include/asm}/processor.h              |   0
>  .../asm-x86 => arch/x86/include/asm}/psr.h    |   0
>  .../x86/include/asm}/pv/domain.h              |   0
>  .../x86/include/asm}/pv/grant_table.h         |   0
>  .../asm-x86 => arch/x86/include/asm}/pv/mm.h  |   0
>  .../x86/include/asm}/pv/shim.h                |   0
>  .../x86/include/asm}/pv/traps.h               |   0
>  .../asm-x86 => arch/x86/include/asm}/random.h |   0
>  .../asm-x86 => arch/x86/include/asm}/regs.h   |   0
>  .../asm-x86 => arch/x86/include/asm}/setup.h  |   0
>  .../asm-x86 => arch/x86/include/asm}/shadow.h |   0
>  .../asm-x86 => arch/x86/include/asm}/shared.h |   0
>  .../asm-x86 => arch/x86/include/asm}/smp.h    |   0
>  .../x86/include/asm}/softirq.h                |   0
>  .../x86/include/asm}/spec_ctrl.h              |   0
>  .../x86/include/asm}/spec_ctrl_asm.h          |   0
>  .../x86/include/asm}/spinlock.h               |   0
>  .../asm-x86 => arch/x86/include/asm}/string.h |   0
>  .../asm-x86 => arch/x86/include/asm}/system.h |   0
>  .../asm-x86 => arch/x86/include/asm}/tboot.h  |   0
>  .../asm-x86 => arch/x86/include/asm}/time.h   |   0
>  .../asm-x86 => arch/x86/include/asm}/trace.h  |   0
>  .../asm-x86 => arch/x86/include/asm}/traps.h  |   0
>  .../asm-x86 => arch/x86/include/asm}/types.h  |   0
>  .../x86/include/asm}/uaccess.h                |   0
>  .../x86/include/asm}/unaligned.h              |   0
>  .../x86/include/asm}/vm_event.h               |   0
>  .../asm-x86 => arch/x86/include/asm}/vpmu.h   |   0
>  .../x86/include/asm}/x86-defns.h              |   0
>  .../x86/include/asm}/x86-vendors.h            |   0
>  .../x86/include/asm}/x86_64/efibind.h         |   0
>  .../x86/include/asm}/x86_64/elf.h             |   0
>  .../x86/include/asm}/x86_64/page.h            |   0
>  .../x86/include/asm}/x86_64/regs.h            |   0
>  .../x86/include/asm}/x86_64/system.h          |   0
>  .../x86/include/asm}/x86_64/uaccess.h         |   0
>  .../x86/include/asm}/x86_emulate.h            |   2 +-
>  .../x86/include/asm}/xenoprof.h               |   0
>  .../asm-x86 => arch/x86/include/asm}/xstate.h |   0
>  xen/arch/x86/mm/Makefile                      |   9 -
>  xen/arch/x86/mm/guest_walk.c                  |   3 -
>  xen/arch/x86/mm/guest_walk_2.c                |   2 +
>  xen/arch/x86/mm/guest_walk_3.c                |   2 +
>  xen/arch/x86/mm/guest_walk_4.c                |   2 +
>  xen/arch/x86/mm/hap/Makefile                  |  15 +-
>  xen/arch/x86/mm/hap/guest_walk.c              |   3 -
>  xen/arch/x86/mm/hap/guest_walk_2.c            |   2 +
>  xen/arch/x86/mm/hap/guest_walk_3.c            |   2 +
>  xen/arch/x86/mm/hap/guest_walk_4.c            |   2 +
>  xen/arch/x86/mm/shadow/Makefile               |   9 -
>  xen/arch/x86/mm/shadow/guest_2.c              |   2 +
>  xen/arch/x86/mm/shadow/guest_3.c              |   2 +
>  xen/arch/x86/mm/shadow/guest_4.c              |   2 +
>  xen/arch/x86/mm/shadow/multi.c                |   3 -
>  xen/build.mk                                  |  87 ++++
>  xen/common/Makefile                           |  14 +-
>  xen/common/efi/runtime.c                      |   2 +-
>  xen/common/libelf/Makefile                    |   4 +-
>  xen/common/libfdt/Makefile                    |   8 +-
>  xen/common/page_alloc.c                       |   2 +-
>  xen/include/Makefile                          |  81 ++--
>  xen/include/xen/acpi.h                        |   5 +-
>  xen/include/xen/bitmap.h                      |   2 +-
>  xen/scripts/Kbuild.include                    |  65 ++-
>  xen/scripts/Kconfig.include                   |   2 +-
>  xen/scripts/Makefile.clean                    |  40 +-
>  xen/{tools/kconfig => scripts}/Makefile.host  |  29 +-
>  xen/scripts/mkmakefile                        |  17 +
>  xen/test/Makefile                             |  16 +-
>  xen/test/livepatch/Makefile                   | 213 ++++-----
>  xen/tools/Makefile                            |  14 +-
>  xen/tools/compat-build-header.py              |  44 +-
>  xen/tools/compat-build-source.py              |   8 +-
>  xen/tools/fixdep.c                            | 404 +++++++++++++++++
>  xen/tools/kconfig/Makefile.kconfig            | 106 -----
>  xen/tools/kconfig/confdata.c                  |   2 +-
>  xen/tools/symbols.c                           |  18 +-
>  xen/xsm/flask/Makefile                        |  45 +-
>  xen/xsm/flask/policy/mkaccess_vector.sh       |   7 +-
>  xen/xsm/flask/ss/Makefile                     |   5 +-
>  378 files changed, 1572 insertions(+), 978 deletions(-)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/acpi.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/alternative.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/altp2m.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/atomic.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/bitops.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/bug.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/cmpxchg.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/flushtlb.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/insn.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/io.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/macros.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/mm.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/page.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/processor.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/sysregs.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/system.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/traps.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm32/vfp.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/atomic.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/bitops.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/brk.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/bug.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/cmpxchg.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/efibind.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/flushtlb.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/hsr.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/insn.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/io.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/macros.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/mm.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/page.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/processor.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/sysregs.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/system.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/traps.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/arm64/vfp.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/asm_defns.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/atomic.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/bitops.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/bug.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/byteorder.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/cache.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/cadence-uart.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/config.h (99%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/cpregs.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/cpuerrata.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/cpufeature.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/current.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/debugger.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/delay.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/desc.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/device.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/div64.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/domain.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/domain_build.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/early_printk.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/efibind.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/elf.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/event.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/exynos4210-uart.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/flushtlb.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/gic.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/gic_v3_defs.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/gic_v3_its.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/grant_table.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/guest_access.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/guest_atomics.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/guest_walk.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/hardirq.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/hsr.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/hypercall.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/init.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/insn.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/io.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/iocap.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/iommu.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/iommu_fwspec.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/ioreq.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/irq.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/kernel.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/livepatch.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/lpae.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/macros.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/mem_access.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/mm.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/mmio.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/monitor.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/new_vgic.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/nospec.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/numa.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/p2m.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/page-bits.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/page.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/paging.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/pci.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/percpu.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/perfc.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/perfc_defn.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/pl011-uart.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/platform.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/platforms/exynos5.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/platforms/midway.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/platforms/omap5.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/platforms/vexpress.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/platforms/xilinx-zynqmp-eemi.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/processor.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/procinfo.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/psci.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/random.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/regs.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/scif-uart.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/setup.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/short-desc.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/smccc.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/smp.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/softirq.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/spinlock.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/string.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/sysregs.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/system.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/tee/optee_msg.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/tee/optee_rpc_cmd.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/tee/optee_smc.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/tee/tee.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/time.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/trace.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/traps.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/types.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/vfp.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/vgic-emul.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/vgic.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/vm_event.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/vpl011.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/vpsci.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/vreg.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/vtimer.h (100%)
>  rename xen/{include/asm-arm => arch/arm/include/asm}/xenoprof.h (100%)
>  rename xen/{include/asm-riscv => arch/riscv/include/asm}/config.h (100%)
>  create mode 100644 xen/arch/riscv/riscv64/Makefile
>  delete mode 100644 xen/arch/x86/boot/build32.mk
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/acpi.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/alternative-asm.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/alternative.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/altp2m.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/amd.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/apic.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/apicdef.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/asm-defns.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/asm_defns.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/atomic.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/bitops.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/bug.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/byteorder.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/bzimage.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/cache.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/compat.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/config.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/cpufeature.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/cpufeatures.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/cpufeatureset.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/cpuid.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/cpuidle.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/current.h (99%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/debugger.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/debugreg.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/delay.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/desc.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/device.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/div64.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/dom0_build.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/domain.h (99%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/e820.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/edd.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/efibind.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/elf.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/event.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/fixmap.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/flushtlb.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/genapic.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/grant_table.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/guest.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/hyperv-hcall.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/hyperv-tlfs.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/hyperv.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/hypervisor.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/pvh-boot.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/xen-hcall.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/guest/xen.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/guest_access.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/guest_atomics.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/guest_pt.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hap.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hardirq.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hpet.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/asid.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/cacheattr.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/domain.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/emulate.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/grant_table.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/guest_access.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/hvm.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/io.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/ioreq.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/irq.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/monitor.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/nestedhvm.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/save.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/support.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/asid.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/emulate.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/intr.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/nestedsvm.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/svm.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/svmdebug.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/svm/vmcb.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/trace.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vcpu.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vioapic.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/viridian.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vlapic.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vm_event.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vmx/vmcs.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vmx/vmx.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vmx/vvmx.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vpic.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hvm/vpt.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/hypercall.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/i387.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/init.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/invpcid.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/io.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/io_apic.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/iocap.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/iommu.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/ioreq.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/irq.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/ldt.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/livepatch.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-default/bios_ebda.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-default/io_ports.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-default/irq_vectors.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-default/mach_mpparse.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-default/mach_mpspec.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-generic/mach_apic.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/mach-generic/mach_mpparse.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/machine_kexec.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/mc146818rtc.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/mce.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/mem_access.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/mem_paging.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/mem_sharing.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/microcode.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/mm.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/monitor.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/mpspec.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/mpspec_def.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/msi.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/msr-index.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/msr.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/mtrr.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/multicall.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/mwait.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/nmi.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/nops.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/nospec.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/numa.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/p2m.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/page-bits.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/page.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/paging.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/pci.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/percpu.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/perfc.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/perfc_defn.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/processor.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/psr.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/pv/domain.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/pv/grant_table.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/pv/mm.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/pv/shim.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/pv/traps.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/random.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/regs.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/setup.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/shadow.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/shared.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/smp.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/softirq.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/spec_ctrl.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/spec_ctrl_asm.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/spinlock.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/string.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/system.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/tboot.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/time.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/trace.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/traps.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/types.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/uaccess.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/unaligned.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/vm_event.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/vpmu.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/x86-defns.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/x86-vendors.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_64/efibind.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_64/elf.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_64/page.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_64/regs.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_64/system.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_64/uaccess.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/x86_emulate.h (89%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/xenoprof.h (100%)
>  rename xen/{include/asm-x86 => arch/x86/include/asm}/xstate.h (100%)
>  create mode 100644 xen/arch/x86/mm/guest_walk_2.c
>  create mode 100644 xen/arch/x86/mm/guest_walk_3.c
>  create mode 100644 xen/arch/x86/mm/guest_walk_4.c
>  create mode 100644 xen/arch/x86/mm/hap/guest_walk_2.c
>  create mode 100644 xen/arch/x86/mm/hap/guest_walk_3.c
>  create mode 100644 xen/arch/x86/mm/hap/guest_walk_4.c
>  create mode 100644 xen/arch/x86/mm/shadow/guest_2.c
>  create mode 100644 xen/arch/x86/mm/shadow/guest_3.c
>  create mode 100644 xen/arch/x86/mm/shadow/guest_4.c
>  create mode 100644 xen/build.mk
>  rename xen/{tools/kconfig => scripts}/Makefile.host (88%)
>  create mode 100755 xen/scripts/mkmakefile
>  create mode 100644 xen/tools/fixdep.c
>  delete mode 100644 xen/tools/kconfig/Makefile.kconfig
> 


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 13/51] build: convert binfile use to if_changed
  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
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-07 13:55 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Daniel De Graaf, Daniel P. Smith,
	xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> This will allow to detect command line changes and allow to regenerate
> the file in that case.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 14/51] xen: move include/asm-* to arch/*/include/asm
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-07 14:17 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Paul Durrant, Andrew Cooper, George Dunlap, Ian Jackson,
	Julien Grall, Stefano Stabellini, Wei Liu, Tamas K Lengyel,
	Alexandru Isaila, Petre Pircalabu, Volodymyr Babchuk,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Bob Eshleman,
	Alistair Francis, Connor Davis, Roger Pau Monné,
	Jun Nakajima, Kevin Tian, Lukasz Hawrylko, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> This avoid the need to create the symbolic link "include/asm".
> 
> Whenever a comment refer to an "asm" headers, this patch avoid
> spelling the arch when not needed to avoid some code churn.
> 
> One unrelated change is to sort entries in MAINTAINERS for "INTEL(R)
> VT FOR X86 (VT-X)"

Actually that misplaced entry isn't really that much VT-x related and
hence would imo better be dropped from there. But I can see that such
dropping would be less suitable of a change here.

> --- a/tools/include/Makefile
> +++ b/tools/include/Makefile
> @@ -30,7 +30,7 @@ xen-dir:
>  	ln -s $(XEN_ROOT)/xen/include/acpi/platform acpi/
>  	ln -s $(XEN_ROOT)/xen/include/acpi/ac*.h acpi/
>  ifeq ($(CONFIG_X86),y)
> -	ln -s $(XEN_ROOT)/xen/include/asm-x86 xen/asm
> +	ln -s $(XEN_ROOT)/xen/arch/x86/include/asm xen/asm

I think this would now better be

	ln -s $(XEN_ROOT)/xen/arch/x86/include/asm xen/

matching what is visible in context.

> --- a/xen/arch/riscv/arch.mk
> +++ b/xen/arch/riscv/arch.mk
> @@ -12,3 +12,4 @@ riscv-march-$(CONFIG_RISCV_ISA_C)       := $(riscv-march-y)c
>  
>  CFLAGS += -march=$(riscv-march-y) -mstrict-align -mcmodel=medany
>  CFLAGS += -I$(BASEDIR)/include
> +CFLAGS += -I$(BASEDIR)/arch/$(TARGET_ARCH)/include

I find it odd that this needed repeating in every arch.mk. Can't
this be done once for all arches?

> --- a/xen/common/page_alloc.c
> +++ b/xen/common/page_alloc.c
> @@ -241,7 +241,7 @@ PAGE_LIST_HEAD(page_broken_list);
>  
>  /*
>   * first_valid_mfn is exported because it is use in ARM specific NUMA
> - * helpers. See comment in asm-arm/numa.h.
> + * helpers. See comment in asm/numa.h.
>   */
>  mfn_t first_valid_mfn = INVALID_MFN_INITIALIZER;

I'm afraid that in this case it is relevant that it's Arm's header,
like ...

> --- a/xen/include/xen/acpi.h
> +++ b/xen/include/xen/acpi.h
> @@ -40,8 +40,9 @@
>  #define ACPI_MADT_GET_TRIGGER(inti)	ACPI_MADT_GET_(TRIGGER, inti)
>  
>  /*
> - * Fixmap pages to reserve for ACPI boot-time tables (see asm-x86/fixmap.h or
> - * asm-arm/config.h, 64 pages(256KB) is large enough for most cases.)
> + * Fixmap pages to reserve for ACPI boot-time tables (see
> + * arch/x86/include/asm/fixmap.h or arch/arm/include/asm/config.h,
> + * 64 pages(256KB) is large enough for most cases.)

... you arrange for here.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 16/51] build: generate "include/xen/compile.h" with if_changed
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-07 14:55 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> --- a/.gitignore
> +++ b/.gitignore
> @@ -332,7 +332,6 @@ xen/include/compat/*
>  xen/include/config/
>  xen/include/generated/
>  xen/include/public/public
> -xen/include/xen/*.new

While this indeed looks to only have been here for compile.h, I'm
not convinced it is a good idea to delete the entry here. Does it
cause any harm if left in place?

> --- a/xen/Makefile
> +++ b/xen/Makefile
> @@ -351,7 +351,7 @@ _debug:
>  	$(OBJDUMP) -D -S $(TARGET)-syms > $(TARGET).s
>  
>  .PHONY: _clean
> -_clean: delete-unfresh-files
> +_clean:
>  	$(MAKE) -C tools clean
>  	$(MAKE) $(clean) include
>  	$(MAKE) $(clean) common
> @@ -368,7 +368,7 @@ _clean: delete-unfresh-files
>  		-o -name "*.gcno" -o -name ".*.cmd" -o -name "lib.a" \) -exec rm -f {} \;
>  	rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map *~ core
>  	rm -f asm-offsets.s arch/*/include/asm/asm-offsets.h
> -	rm -f .banner
> +	rm -f .banner include/xen/compile.h

Isn't this redundant with ...

> @@ -425,10 +419,16 @@ include/xen/compile.h: include/xen/compile.h.in .banner
>  	    -e 's/@@subversion@@/$(XEN_SUBVERSION)/g' \
>  	    -e 's/@@extraversion@@/$(XEN_EXTRAVERSION)/g' \
>  	    -e 's!@@changeset@@!$(shell tools/scmversion $(XEN_ROOT) || echo "unavailable")!g' \
> -	    < include/xen/compile.h.in > $@.new
> +	    < $< > $(dot-target).tmp; \
> +	sed -rf tools/process-banner.sed < .banner >> $(dot-target).tmp; \
> +	mv -f $(dot-target).tmp $@; \
> +    fi
> +endef
> +
> +include/xen/compile.h: include/xen/compile.h.in .banner FORCE
>  	@cat .banner
> -	@sed -rf tools/process-banner.sed < .banner >> $@.new
> -	@mv -f $@.new $@
> +	$(call if_changed,compile.h)
> +targets += include/xen/compile.h

... this? I would have hoped that $(targets) is included in the
generic cleaning logic ...

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 17/51] build: set XEN_BUILD_EFI earlier
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-07 16:14 UTC (permalink / raw)
  To: Anthony PERARD; +Cc: Andrew Cooper, Roger Pau Monné, Wei Liu, xen-devel

A general remark first: If I understand things correctly, a side effect
of this change is to also address the issue that I'm trying to take
care of in "x86/build: suppress EFI-related tool chain checks upon local
$(MAKE) recursion". However, while that one's a reasonable backporting
candidate, I don't think the one here is. Therefore I'd prefer my patch
to go in ahead of this change of yours. Hence I wonder whether in return
I couldn't ask you to review that one.

On 24.08.2021 12:50, Anthony PERARD wrote:
> We are going to need the variable XEN_BUILD_EFI earlier.
> 
> But a side effect of calculating the value of $(XEN_BUILD_EFI) is to
> also to generate "efi/check.o" which is used for further checks.
> Thus the whole chain that check for EFI support is moved to
> "arch.mk".
> 
> Some other changes are made to avoid too much duplication:
>     - $(efi-check-o): Used to avoid repeating "efi/check.*". We don't
>       set it to the path to the source as it would be wrong as soon
>       as we support out-of-tree build.
>     - $(LD_PE_check_cmd): As it is called twice, with an updated
>       $(EFI_LDFLAGS).
> 
> $(nr-fixups) is renamed to $(efi-check-relocs) as the former might be
> a bit too generic.

While I don't mind the prefix addition, may I please ask that the rest
of the name remain as is, i.e. $(efi-nr-fixups)? "nr" because that's
what the variable holds, and "fixups" to distinguish from full-fledged
relocations as well as to match commentary there.

> --- a/xen/arch/x86/Makefile
> +++ b/xen/arch/x86/Makefile
> @@ -123,41 +123,7 @@ $(TARGET): $(TARGET)-syms $(efi-y) boot/mkelf32
>  	mv $(TMP) $(TARGET)
>  
>  ifneq ($(efi-y),)
> -
> -# Check if the compiler supports the MS ABI.
> -export XEN_BUILD_EFI := $(shell $(CC) $(XEN_CFLAGS) -c efi/check.c -o efi/check.o 2>/dev/null && echo y)
>  CFLAGS-$(XEN_BUILD_EFI) += -DXEN_BUILD_EFI
> -
> -# Check if the linker supports PE.
> -EFI_LDFLAGS = $(patsubst -m%,-mi386pep,$(XEN_LDFLAGS)) --subsystem=10
> -XEN_BUILD_PE := $(if $(XEN_BUILD_EFI),$(call ld-option,$(EFI_LDFLAGS) --image-base=0x100000000 -o efi/check.efi efi/check.o))
> -# If the above failed, it may be merely because of the linker not dealing well
> -# with debug info. Try again with stripping it.
> -ifeq ($(CONFIG_DEBUG_INFO)-$(XEN_BUILD_PE),y-n)
> -EFI_LDFLAGS += --strip-debug
> -XEN_BUILD_PE := $(call ld-option,$(EFI_LDFLAGS) --image-base=0x100000000 -o efi/check.efi efi/check.o)
> -endif
> -
> -ifeq ($(XEN_BUILD_PE),y)
> -
> -# Check if the linker produces fixups in PE by default
> -nr-fixups := $(shell $(OBJDUMP) -p efi/check.efi | grep '^[[:blank:]]*reloc[[:blank:]]*[0-9][[:blank:]].*DIR64$$' | wc -l)
> -ifeq ($(nr-fixups),2)
> -MKRELOC := :
> -relocs-dummy :=
> -else
> -MKRELOC := efi/mkreloc
> -relocs-dummy := efi/relocs-dummy.o
> -# If the linker produced fixups but not precisely two of them, we need to
> -# disable it doing so.  But if it didn't produce any fixups, it also wouldn't
> -# recognize the option.
> -ifneq ($(nr-fixups),0)
> -EFI_LDFLAGS += --disable-reloc-section
> -endif
> -endif
> -
> -endif # $(XEN_BUILD_PE)
> -
>  endif # $(efi-y)

Is the remaining if(,) block still warranted? I.e. can't the single line

CFLAGS-$(XEN_BUILD_EFI) += -DXEN_BUILD_EFI

live without the surrounding conditional?

> --- a/xen/arch/x86/arch.mk
> +++ b/xen/arch/x86/arch.mk
> @@ -60,5 +60,47 @@ ifeq ($(CONFIG_UBSAN),y)
>  $(call cc-option-add,CFLAGS_UBSAN,CC,-fno-sanitize=alignment)
>  endif
>  
> +ifneq ($(CONFIG_PV_SHIM_EXCLUSIVE),y)
> +
> +efi-check-o = arch/x86/efi/check.o

Nit: Unless there's a reason not to, please prefer := here (and in
general).

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 18/51] build: fix $(TARGET).efi creation in arch/arm
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 10:37 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Stefano Stabellini, Julien Grall, Volodymyr Babchuk, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> There is no need to try to guess a relative path to the "xen.efi" file,
> we can simply use $@. Also, there's no need to use `notdir`, make
> already do that work via $(@F).
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>

As to the subject, I don't think "fix" is appropriate. How about "adjust"
or "simplify" or some such?

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 20/51] build: avoid re-executing the main Makefile by introducing build.mk
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 10:56 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> Currently, the xen/Makefile is re-parsed several times: once to start
> the build process, and several more time with Rules.mk including it.
> This makes it difficult to reason with a Makefile used for several
> purpose, and it actually slow down the build process.

I'm struggling some with what you want to express here. What does
"to reason" refer to?

> So this patch introduce "build.mk" which Rules.mk will use when
> present instead of the "Makefile" of a directory. (Linux's Kbuild
> named that file "Kbuild".)
> 
> We have a few targets to move to "build.mk" identified by them been
> build via "make -f Rules.mk" without changing directory.
> 
> As for the main targets like "build", we can have them depends on
> there underscore-prefix targets like "_build" without having to use
> "Rules.mk" while still retaining the check for unsupported
> architecture. (Those main rules are changed to be single-colon as
> there should only be a single recipe for them.)
> 
> With nearly everything needed to move to "build.mk" moved, there is a
> single dependency left from "Rules.mk": $(TARGET), which is moved to
> the main Makefile.

I'm having trouble identifying what this describes. Searching for
$(TARGET) in the patch doesn't yield any obvious match. Thinking
about it, do you perhaps mean the setting of that variable? Is
moving that guaranteed to not leave the variable undefined? Or in
other words is there no scenario at all where xen/Makefile might
get bypassed? (Aiui building an individual .o, .i, or .s would
continue to be fine, but it feels like something along these lines
might get broken.)

> @@ -279,11 +281,13 @@ export CFLAGS_UBSAN
>  
>  endif # need-config
>  
> -.PHONY: build install uninstall clean distclean MAP
> -build install uninstall debug clean distclean MAP::
> +main-targets := build install uninstall clean distclean MAP
> +.PHONY: $(main-targets)
>  ifneq ($(XEN_TARGET_ARCH),x86_32)
> -	$(MAKE) -f Rules.mk _$@
> +$(main-targets): %: _%
> +	@:

Isn't the conventional way to express "no commands" via

$(main-targets): %: _% ;

?

> --- a/xen/Rules.mk
> +++ b/xen/Rules.mk
> @@ -9,8 +9,6 @@ include $(XEN_ROOT)/Config.mk
>  include $(BASEDIR)/scripts/Kbuild.include
>  
>  
> -TARGET := $(BASEDIR)/xen
> -
>  # Note that link order matters!

Could I talk you into removing yet another blank line at this occasion?

> @@ -36,7 +34,9 @@ SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
>                                              rodata.cst$(a)) \
>                           $(foreach r,rel rel.ro,data.$(r).local)
>  
> -include Makefile
> +# The filename build.mk has precedence over Makefile
> +mk-dir := .

What's the goal of this variable? All I can spot for now it that ...

> +include $(if $(wildcard $(mk-dir)/build.mk),$(mk-dir)/build.mk,$(mk-dir)/Makefile)

... this is harder to read than

include $(if $(wildcard ./build.mk),./build.mk,./Makefile)

which could be further simplified to

include $(if $(wildcard build.mk),build.mk,Makefile)

and then maybe altered to

include $(firstword $(wildcard build.mk) Makefile)

> --- /dev/null
> +++ b/xen/build.mk
> @@ -0,0 +1,58 @@
> +quiet_cmd_banner = BANNER  $@
> +define cmd_banner
> +    if which figlet >/dev/null 2>&1 ; then \
> +	echo " Xen $(XEN_FULLVERSION)" | figlet -f $< > $@.tmp; \
> +    else \
> +	echo " Xen $(XEN_FULLVERSION)" > $@.tmp; \
> +    fi; \
> +    mv -f $@.tmp $@
> +endef
> +
> +.banner: tools/xen.flf FORCE
> +	$(call if_changed,banner)
> +targets += .banner

To make the end of the rule more easily recognizable, may I ask that
you either insert a blank line after the rule or that you move the +=
up immediately ahead of the construct?

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 21/51] build: set ALL_OBJS to main Makefile; move prelink.o to main Makefile
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 11:31 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> --- a/xen/Makefile
> +++ b/xen/Makefile
> @@ -271,8 +271,21 @@ CFLAGS += -flto
>  LDFLAGS-$(CONFIG_CC_IS_CLANG) += -plugin LLVMgold.so
>  endif
>  
> +# Note that link order matters!
> +ALL_OBJS-y                := common/built_in.o
> +ALL_OBJS-y                += drivers/built_in.o
> +ALL_OBJS-y                += lib/built_in.o
> +ALL_OBJS-y                += xsm/built_in.o
> +ALL_OBJS-y                += arch/$(TARGET_ARCH)/built_in.o
> +ALL_OBJS-$(CONFIG_CRYPTO) += crypto/built_in.o
> +
> +ALL_LIBS-y                := lib/lib.a
> +
>  include $(BASEDIR)/arch/$(TARGET_ARCH)/arch.mk
>  
> +export ALL_OBJS := $(ALL_OBJS-y)
> +export ALL_LIBS := $(ALL_LIBS-y)
> +
>  # define new variables to avoid the ones defined in Config.mk
>  export XEN_CFLAGS := $(CFLAGS)
>  export XEN_AFLAGS := $(AFLAGS)
> @@ -393,7 +406,7 @@ $(TARGET): FORCE
>  	$(MAKE) -f $(BASEDIR)/Rules.mk -C include
>  	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) include
>  	$(MAKE) -f $(BASEDIR)/Rules.mk arch/$(TARGET_ARCH)/include/asm/asm-offsets.h
> -	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) $@
> +	$(MAKE) -f $(BASEDIR)/Rules.mk $@

This merely results in what was previously invoked from here now getting
invoked from the very bottom of build.mk. I'm afraid I don't see why this
is a useful change to make.

> --- a/xen/build.mk
> +++ b/xen/build.mk
> @@ -56,3 +56,27 @@ arch/$(TARGET_ARCH)/include/asm/asm-offsets.h: asm-offsets.s
>  	  sed -rne "/^[^#].*==>/{s:.*==>(.*)<==.*:\1:; s: [\$$#]: :; p;}"; \
>  	  echo ""; \
>  	  echo "#endif") <$< >$@
> +
> +# head.o is built by descending into arch/arm/$(TARGET_SUBARCH), depends on the
> +# part of $(ALL_OBJS) that will eventually recurse into $(TARGET_SUBARCH)/ and
> +# build head.o
> +arch/arm/$(TARGET_SUBARCH)/head.o: arch/arm/built_in.o
> +arch/arm/$(TARGET_SUBARCH)/head.o: ;

This previously lived in an Arm-specific file. Moving this here in the
given, still Arm-specific form is imo a no-go when done alongside all
the other good changes you're making. Is there a reason this can't go
into xen/arch/arm/arch.mk?

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 22/51] build: clean common temporary files from root makefile
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 11:41 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Trying to synthesize a description:

> --- a/xen/Makefile
> +++ b/xen/Makefile
> @@ -382,6 +382,7 @@ _clean:
>  	$(MAKE) $(clean) test
>  	$(MAKE) $(kconfig) clean
>  	find . \( -name "*.o" -o -name ".*.d" -o -name ".*.d2" \

This was effectively redundant with ...

> +		-o -name ".*.o.tmp" -o -name "*~" -o -name "core" \
>  		-o -name "*.gcno" -o -name ".*.cmd" -o -name "lib.a" \) -exec rm -f {} \;
>  	rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map *~ core
>  	rm -f asm-offsets.s arch/*/include/asm/asm-offsets.h
> diff --git a/xen/scripts/Makefile.clean b/xen/scripts/Makefile.clean
> index 027c200c0efc..b6df9e861e6e 100644
> --- a/xen/scripts/Makefile.clean
> +++ b/xen/scripts/Makefile.clean
> @@ -14,10 +14,8 @@ include Makefile
>  subdir-all := $(subdir-y) $(subdir-n) $(subdir-) \
>                $(patsubst %/,%, $(filter %/, $(obj-y) $(obj-n) $(obj-)))
>  
> -DEPS_RM = $(DEPS) $(DEPS_INCLUDE)

... this and its use below.

>  .PHONY: clean
>  clean:: $(subdir-all)
> -	rm -f *.o .*.o.tmp *~ core $(DEPS_RM)

With the command gone, I think the :: should also be converted (back) to
just : then. Then
Reviewed-by: Jan Beulich <jbeulich@suse.com>

Assuming the patch is independent of the earlier still uncommitted ones
(please confirm), I'd be happy to make the adjustment while committing
- as long as you agree, of course.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 23/51] build,include: remove arch-*/*.h public header listing from headers*.chk
  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
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 11:49 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> $(public-y) contains "public/arch-%" but when used by
> $(PUBLIC_HEADERS) $(public-y) is filtered-out by the pattern
> "public/arch-%". So $(public-y) content is never used.

It has been this way from its very introduction, and iirc $(public-y) was
meant to be an abstract construct to which other pieces could get added
in principle. I'm having a slight preference to keeping things as they
are, unless you tell me that this is getting in the way of anything. And
to be clear there as well - if there are no other reasons than pure
cleanup, and if somebody else approved of the removal, I wouldn't object.

Jan

> --- a/xen/include/Makefile
> +++ b/xen/include/Makefile
> @@ -39,9 +39,6 @@ cppflags-$(CONFIG_X86)    += -m32
>  
>  endif
>  
> -public-$(CONFIG_X86) := $(wildcard public/arch-x86/*.h public/arch-x86/*/*.h)
> -public-$(CONFIG_ARM) := $(wildcard public/arch-arm/*.h public/arch-arm/*/*.h)
> -
>  .PHONY: all
>  all: $(headers-y)
>  
> @@ -81,7 +78,7 @@ ifeq ($(XEN_TARGET_ARCH),$(XEN_COMPILE_ARCH))
>  
>  all: headers.chk headers99.chk headers++.chk
>  
> -PUBLIC_HEADERS := $(filter-out public/arch-% public/dom0_ops.h, $(wildcard public/*.h public/*/*.h) $(public-y))
> +PUBLIC_HEADERS := $(filter-out public/arch-% public/dom0_ops.h, $(wildcard public/*.h public/*/*.h))
>  
>  PUBLIC_C99_HEADERS := public/io/9pfs.h public/io/pvcalls.h
>  PUBLIC_ANSI_HEADERS := $(filter-out public/%ctl.h public/xsm/% public/%hvm/save.h $(PUBLIC_C99_HEADERS), $(PUBLIC_HEADERS))
> 



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 24/51] build: prepare to always invoke $(MAKE) from xen/, use $(obj)
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 12:39 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	Daniel De Graaf, Daniel P. Smith, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> In a future patch, when building a subdirectory, we will set
> "obj=$subdir" rather than change directory.
> 
> Before that, we add "$(obj)" and "$(src)" in as many places as
> possible where we will need to know which subdirectory is been built.
> "$(obj)" is for files been generated during the build, and "$(src)" is
> for files present in the source tree.
> 
> For now, we set both to "." in Rules.mk and Makefile.clean.
> 
> A few places don't tolerate the addition of "./", this is because make
> remove the leading "./" in targets and dependencies in rules, so these
> will be change later.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>

Nevertheless a couple of remarks:

> --- a/xen/arch/x86/Makefile
> +++ b/xen/arch/x86/Makefile
>[...]
> @@ -192,25 +192,25 @@ note_file_option ?= $(note_file)
>  
>  ifeq ($(XEN_BUILD_PE),y)
>  extra-y += efi.lds

What about this? Does this for some reason also fall into the "cannot
be converted yet" group?

> @@ -222,14 +222,14 @@ $(TARGET).efi: FORCE
>  endif
>  
>  # These should already have been rebuilt when building the prerequisite of "prelink.o"
> -efi/buildid.o efi/relocs-dummy.o: ;
> +$(obj)/efi/buildid.o $(obj)/efi/relocs-dummy.o: ;
>  
>  .PHONY: include
>  include: $(BASEDIR)/arch/x86/include/asm/asm-macros.h
>  
> -asm-macros.i: CFLAGS-y += -D__ASSEMBLY__ -P
> +$(obj)/asm-macros.i: CFLAGS-y += -D__ASSEMBLY__ -P
>  
> -$(BASEDIR)/arch/x86/include/asm/asm-macros.h: asm-macros.i Makefile
> +$(BASEDIR)/arch/x86/include/asm/asm-macros.h: $(obj)/asm-macros.i $(src)/Makefile

Isn't this $(obj)/include/asm/asm-macros.h ? And in general doesn't
use of $(BASEDIR) need to go away then, e.g. ...

> --- a/xen/arch/x86/boot/Makefile
> +++ b/xen/arch/x86/boot/Makefile
> @@ -1,8 +1,8 @@
>  obj-bin-y += head.o
>  
> -DEFS_H_DEPS = defs.h $(BASEDIR)/include/xen/stdbool.h
> +DEFS_H_DEPS = $(src)/defs.h $(BASEDIR)/include/xen/stdbool.h

... here needing to become $(src)/../../../include/xen/stdbool.h ?

> --- a/xen/scripts/Makefile.clean
> +++ b/xen/scripts/Makefile.clean
> @@ -3,11 +3,14 @@
>  # Cleaning up
>  # ==========================================================================
>  
> +obj := .
> +src := $(obj)

This repeats what is also getting added to Rules.mk. To prevent
the two going out of sync, wouldn't they better live in a central
place (e.g. scripts/defs.mk)?

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 25/51] build: rework test/livepatch/Makefile
  2021-08-24 10:50 ` [XEN PATCH v7 25/51] build: rework test/livepatch/Makefile Anthony PERARD
@ 2021-10-11 13:28   ` Jan Beulich
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 13:28 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Konrad Rzeszutek Wilk,
	Ross Lagerwall, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> This rework the livepatch/Makefile to make it less repetitive and make
> use of the facilities. All the targets to be built are now listed in
> $(extra-y) which will allow Rules.mk to build them without the need of
> a local target in a future patch.
> 
> There are some changes/fixes in this patch:
> - when "xen-syms" is used for a target, it is added to the dependency
>   list of the target, which allow to rebuild the target when xen-syms
>   changes. But if "xen-syms" is missing, make simply fails.
> - modinfo.o wasn't removing it's $@.bin file like the other targets,
>   this is now done.
> - The command to build *.livepatch targets as been fixed to use
>   $(XEN_LDFLAGS) rather than just $(LDFLAGS) which is a fallout from
>   2740d96efdd3 ("xen/build: have the root Makefile generates the
>   CFLAGS")
> 
> make will findout the dependencies of the *.livepatch files and thus
> what to built by "looking" at the objects listed in the *-objs
> variables. The actual dependencies is generated by the new
> "multi_depend" macro.
> 
> "$(targets)" needs to be updated with the objects listed in the
> different *-objs variables to allow make to load the .*.cmd dependency
> files.
> 
> This patch copies the macro "multi_depend" from Linux 5.12.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Just two and a half remarks; I'd really like the livepatch maintainers
to properly review this change.

> --- a/xen/scripts/Kbuild.include
> +++ b/xen/scripts/Kbuild.include
> @@ -151,3 +151,12 @@ why =                                                                        \
>  
>  echo-why = $(call escsq, $(strip $(why)))

Not the least seeing this in context, ...

>  endif
> +
> +# Useful for describing the dependency of composite objects
> +# Usage:
> +#   $(call multi_depend, multi_used_targets, suffix_to_remove, suffix_to_add)
> +define multi_depend

... I would wish we wouldn't introduce further names with underscores
in them when dashes are valid to be used.

> +$(foreach m, $(notdir $1), \
> +	$(eval $(obj)/$m: \
> +	$(addprefix $(obj)/, $(foreach s, $3, $($(m:%$(strip $2)=%$(s)))))))

I'd like to suggest to be consistent here: Either $(s) and then also
$(m) in both places, or $m and then also $s.

> --- a/xen/test/livepatch/Makefile
> +++ b/xen/test/livepatch/Makefile
>[...]
> +$(obj)/%.livepatch: FORCE
> +	$(call if_changed,livepatch)
> +
> +$(call multi_depend, $(filter %.livepatch,$(extra-y)), .livepatch, -objs)
> +targets += $(sort $(foreach m,$(basename $(notdir $(filter %.livepatch,$(extra-y)))), \
> +    $($(m)-objs)))

I think it would help readability if the 2nd line was properly indented to
reflect the pending open parentheses:

targets += $(sort $(foreach m,$(basename $(notdir $(filter %.livepatch,$(extra-y)))), \
                    $($(m)-objs)))

or (less desirable imo)

targets += $(sort \
             $(foreach m,$(basename $(notdir $(filter %.livepatch,$(extra-y)))), \
               $($(m)-objs)))

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 14/51] xen: move include/asm-* to arch/*/include/asm
  2021-10-07 14:17   ` Jan Beulich
@ 2021-10-11 13:57     ` Anthony PERARD
  0 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-10-11 13:57 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Paul Durrant, Andrew Cooper, George Dunlap, Ian Jackson,
	Julien Grall, Stefano Stabellini, Wei Liu, Tamas K Lengyel,
	Alexandru Isaila, Petre Pircalabu, Volodymyr Babchuk,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Bob Eshleman,
	Alistair Francis, Connor Davis, Roger Pau Monné,
	Jun Nakajima, Kevin Tian, Lukasz Hawrylko, xen-devel

On Thu, Oct 07, 2021 at 04:17:28PM +0200, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
> > --- a/tools/include/Makefile
> > +++ b/tools/include/Makefile
> > @@ -30,7 +30,7 @@ xen-dir:
> >  	ln -s $(XEN_ROOT)/xen/include/acpi/platform acpi/
> >  	ln -s $(XEN_ROOT)/xen/include/acpi/ac*.h acpi/
> >  ifeq ($(CONFIG_X86),y)
> > -	ln -s $(XEN_ROOT)/xen/include/asm-x86 xen/asm
> > +	ln -s $(XEN_ROOT)/xen/arch/x86/include/asm xen/asm
> 
> I think this would now better be
> 
> 	ln -s $(XEN_ROOT)/xen/arch/x86/include/asm xen/
> 
> matching what is visible in context.

I'll change it.

> > --- a/xen/arch/riscv/arch.mk
> > +++ b/xen/arch/riscv/arch.mk
> > @@ -12,3 +12,4 @@ riscv-march-$(CONFIG_RISCV_ISA_C)       := $(riscv-march-y)c
> >  
> >  CFLAGS += -march=$(riscv-march-y) -mstrict-align -mcmodel=medany
> >  CFLAGS += -I$(BASEDIR)/include
> > +CFLAGS += -I$(BASEDIR)/arch/$(TARGET_ARCH)/include
> 
> I find it odd that this needed repeating in every arch.mk. Can't
> this be done once for all arches?

I actually do that much later in the series with patch "build: Add
headers path to CFLAGS once for all archs".

> > --- a/xen/common/page_alloc.c
> > +++ b/xen/common/page_alloc.c
> > @@ -241,7 +241,7 @@ PAGE_LIST_HEAD(page_broken_list);
> >  
> >  /*
> >   * first_valid_mfn is exported because it is use in ARM specific NUMA
> > - * helpers. See comment in asm-arm/numa.h.
> > + * helpers. See comment in asm/numa.h.
> >   */
> >  mfn_t first_valid_mfn = INVALID_MFN_INITIALIZER;
> 
> I'm afraid that in this case it is relevant that it's Arm's header,
> like ...

Will fix.

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 26/51] build: build everything from the root dir, use obj=$subdir
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 14:02 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Bob Eshleman, Andrew Cooper, George Dunlap, Ian Jackson,
	Julien Grall, Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Alistair Francis, Connor Davis, Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> A subdirectory is now built by setting "$(obj)" instead of changing
> directory. "$(obj)" should always be set when using "Rules.mk" and
> thus a shortcut "$(build)" is introduced and should be used.
> 
> A new variable "$(need-builtin)" is introduce. It is to be used
> whenever a "built_in.o" is wanted from a subdirectory. "built_in.o"
> isn't the main target anymore, and thus only needs to depends on the
> objects that should be part of "built_in.o".

How "good" are our chances that we hit a need-builtin variable from
the environment? Its uses are simply using "ifdef".

> --- a/xen/Rules.mk
> +++ b/xen/Rules.mk
> @@ -3,19 +3,29 @@
>  # Makefile and are consumed by Rules.mk
>  #
>  
> -obj := .
>  src := $(obj)
>  
> +PHONY := __build
> +__build:
> +
>  -include $(BASEDIR)/include/config/auto.conf
>  
>  include $(XEN_ROOT)/Config.mk
>  include $(BASEDIR)/scripts/Kbuild.include
>  
> +ifndef obj
> +$(warning kbuild: Rules.mk is included improperly)
> +endif

Is there a particular reason for this to come only here, rather than
before the include-s (e.g. right at where the assignment to the
variable lived)?

> @@ -51,27 +61,54 @@ cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $< $@
>  quiet_cmd_binfile = BINFILE $@
>  cmd_binfile = $(SHELL) $(BASEDIR)/tools/binfile $(BINFILE_FLAGS) $@ $(2)
>  
> -define gendep
> -    ifneq ($(1),$(subst /,:,$(1)))
> -        DEPS += $(dir $(1)).$(notdir $(1)).d
> -    endif
> -endef
> -$(foreach o,$(filter-out %/,$(obj-y) $(obj-bin-y) $(extra-y)),$(eval $(call gendep,$(o))))
> +# Figure out what we need to build from the various variables
> +# ===========================================================================
> +
> +# Libraries are always collected in one lib file.
> +# Filter out objects already built-in
> +lib-y := $(filter-out $(obj-y), $(sort $(lib-y)))
> +
> +# Subdirectories we need to descend into
> +subdir-y := $(subdir-y) $(patsubst %/,%,$(filter %/, $(obj-y)))

Deliberately or accidentally not += ?

> @@ -156,21 +192,13 @@ endif
>  PHONY += FORCE
>  FORCE:
>  
> -%/built_in.o %/lib.a: FORCE
> -	$(MAKE) -f $(BASEDIR)/Rules.mk -C $* built_in.o
> -
> -%/built_in_bin.o: FORCE
> -	$(MAKE) -f $(BASEDIR)/Rules.mk -C $* built_in_bin.o
> -
> -SRCPATH := $(patsubst $(BASEDIR)/%,%,$(CURDIR))
> -
>  quiet_cmd_cc_o_c = CC      $@
>  ifeq ($(CONFIG_ENFORCE_UNIQUE_SYMBOLS),y)
>      cmd_cc_o_c = $(CC) $(c_flags) -c $< -o $(dot-target).tmp -MQ $@
>      ifeq ($(CONFIG_CC_IS_CLANG),y)
> -        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $<=$(SRCPATH)/$< $(dot-target).tmp $@
> +        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $(<F)=$< $(dot-target).tmp $@

Are you sure about the $< => $(<F) transformation here? Previoiusly it
was present only ...

>      else
> -        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $(<F)=$(SRCPATH)/$< $(dot-target).tmp $@
> +        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $(<F)=$< $(dot-target).tmp $@

... here.

> @@ -251,6 +292,9 @@ 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)

Nit: Preferably blanks on both sides of := or none at all, please.

> --- a/xen/arch/x86/Makefile
> +++ b/xen/arch/x86/Makefile
> @@ -81,6 +81,9 @@ endif
>  extra-y += asm-macros.i
>  extra-y += xen.lds
>  
> +# Allows usercopy.c to includes itself

Nit: include

> +$(obj)/usercopy.o: CFLAGS-y += -I.

This is ugly, but presumably unavoidable. Preferably I would see us
the more specific -iquote though, assuming clang also supports it.

> --- a/xen/arch/x86/boot/Makefile
> +++ b/xen/arch/x86/boot/Makefile
> @@ -1,8 +1,8 @@
>  obj-bin-y += head.o
>  
> -DEFS_H_DEPS = $(src)/defs.h $(BASEDIR)/include/xen/stdbool.h
> +DEFS_H_DEPS = $(BASEDIR)/$(src)/defs.h $(BASEDIR)/include/xen/stdbool.h
>  
> -CMDLINE_DEPS = $(DEFS_H_DEPS) $(src)/video.h
> +CMDLINE_DEPS = $(DEFS_H_DEPS) $(BASEDIR)/$(src)/video.h

Hmm, new uses of $(BASEDIR) (a few more further down). Why not
$(srctree)?

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 16/51] build: generate "include/xen/compile.h" with if_changed
  2021-10-07 14:55   ` Jan Beulich
@ 2021-10-11 14:11     ` Anthony PERARD
  0 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-10-11 14:11 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On Thu, Oct 07, 2021 at 04:55:01PM +0200, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
> > --- a/.gitignore
> > +++ b/.gitignore
> > @@ -332,7 +332,6 @@ xen/include/compat/*
> >  xen/include/config/
> >  xen/include/generated/
> >  xen/include/public/public
> > -xen/include/xen/*.new
> 
> While this indeed looks to only have been here for compile.h, I'm
> not convinced it is a good idea to delete the entry here. Does it
> cause any harm if left in place?

That's a complicated question. I would prefer to have in this file only
artefacts of the build system but other developer and maintainer
disagree. So it's fine I guess to leave the entry, it just hide any
*.new file from `git status` and make it harder to commit them.

> > --- a/xen/Makefile
> > +++ b/xen/Makefile
> > @@ -368,7 +368,7 @@ _clean: delete-unfresh-files
> >  		-o -name "*.gcno" -o -name ".*.cmd" -o -name "lib.a" \) -exec rm -f {} \;
> >  	rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map *~ core
> >  	rm -f asm-offsets.s arch/*/include/asm/asm-offsets.h
> > -	rm -f .banner
> > +	rm -f .banner include/xen/compile.h
> 
> Isn't this redundant with ...
> 
> > @@ -425,10 +419,16 @@ include/xen/compile.h: include/xen/compile.h.in .banner
> > +
> > +include/xen/compile.h: include/xen/compile.h.in .banner FORCE
> >  	@cat .banner
> > -	@sed -rf tools/process-banner.sed < .banner >> $@.new
> > -	@mv -f $@.new $@
> > +	$(call if_changed,compile.h)
> > +targets += include/xen/compile.h
> 
> ... this? I would have hoped that $(targets) is included in the
> generic cleaning logic ...

Not yet. It's probably a good idea, I'll work on a patch.

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 05/51] x86/mm: avoid building multiple .o from a single .c file
  2021-09-08 11:44       ` Ian Jackson
@ 2021-10-11 14:13         ` Andrew Cooper
  0 siblings, 0 replies; 161+ messages in thread
From: Andrew Cooper @ 2021-10-11 14:13 UTC (permalink / raw)
  To: Ian Jackson, Anthony PERARD
  Cc: Jan Beulich, George Dunlap, Julien Grall, Stefano Stabellini,
	Wei Liu, Roger Pau Monné,
	Tim Deegan, xen-devel

On 08/09/2021 12:44, Ian Jackson wrote:
> Anthony PERARD writes ("Re: [XEN PATCH v7 05/51] x86/mm: avoid building multiple .o from a single .c file"):
>> On Tue, Sep 07, 2021 at 08:14:14AM +0200, Jan Beulich wrote:
>>> Hmm, when replying to 00/51 I didn't recall I gave an R-b for this one
>>> already. I'd like to restrict it some: It should be taken to stand for
>>> the technical correctness of the change. Nevertheless I'm not really
>>> happy with the introduction of the various tiny source files. I've
>>> meanwhile been wondering: Can't these be generated (in the build tree,
>>> as soon as that's possible to be separate) rather than getting put in
>>> the repo?
>> Do we really need to generated those never to be change tiny source
>> file? Do we really need to make the build system a lot more complicated?
> I'm not an x86 maintainer, but my 2p anyway:
>
> I think the handful of tiny source files is probably better than some
> contraption in the build system.  Much less risk of something funny
> and confusing going on.

I agree.  This patch is definitely an improvement on the status quo.

> We could reduce the number of copies of the same text by making the
> copies of guest_walk*.c in hap/ be symlinks to ../guest_walk*.c.

The two guest_walk's are totally different logic.  Adding a symlink
would be reintroducing "something funny and confusing".

>
>> Can't we commit this patch as is? What kind of issue is there with those
>> tiny source files? Should we add a warning in those tiny source files,
>> something like "No modification of this file allowed, it's part of the
>> build system." ?
> I don't think we need any such warning.  No-one is going to take that
> tiny file and try to edit it to put functionality in it, and if they
> do it will be spotted on review.

Agreed.

FTR, this patch is Reviewed-by: Andrew Cooper
<andrew.cooper3@citrix.com> and fit to be committed.



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 27/51] build: introduce if_changed_deps
  2021-08-24 10:50 ` [XEN PATCH v7 27/51] build: introduce if_changed_deps Anthony PERARD
@ 2021-10-11 14:20   ` Jan Beulich
  2021-10-14 13:56     ` Anthony PERARD
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 14:20 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Roger Pau Monné,
	xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> 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>

Reviewed-by: Jan Beulich <jbeulich@suse.com>
with a question:

> --- 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

Shouldn't this include building fixdep, in which case the extra dependency
here is unnecessary? I can see that it's needed ...

> @@ -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)

... in cases like this one.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 17/51] build: set XEN_BUILD_EFI earlier
  2021-10-07 16:14   ` Jan Beulich
@ 2021-10-11 14:21     ` Anthony PERARD
  0 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-10-11 14:21 UTC (permalink / raw)
  To: Jan Beulich; +Cc: Andrew Cooper, Roger Pau Monné, Wei Liu, xen-devel

On Thu, Oct 07, 2021 at 06:14:33PM +0200, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
> > $(nr-fixups) is renamed to $(efi-check-relocs) as the former might be
> > a bit too generic.
> 
> While I don't mind the prefix addition, may I please ask that the rest
> of the name remain as is, i.e. $(efi-nr-fixups)? "nr" because that's
> what the variable holds, and "fixups" to distinguish from full-fledged
> relocations as well as to match commentary there.

Will change.

> > --- a/xen/arch/x86/Makefile
> > +++ b/xen/arch/x86/Makefile
> > @@ -123,41 +123,7 @@ $(TARGET): $(TARGET)-syms $(efi-y) boot/mkelf32
> >  	mv $(TMP) $(TARGET)
> >  
> >  ifneq ($(efi-y),)
> > -
> > -# Check if the compiler supports the MS ABI.
> > -export XEN_BUILD_EFI := $(shell $(CC) $(XEN_CFLAGS) -c efi/check.c -o efi/check.o 2>/dev/null && echo y)
> >  CFLAGS-$(XEN_BUILD_EFI) += -DXEN_BUILD_EFI
> > -
> > -# Check if the linker supports PE.
> > -EFI_LDFLAGS = $(patsubst -m%,-mi386pep,$(XEN_LDFLAGS)) --subsystem=10
> > -XEN_BUILD_PE := $(if $(XEN_BUILD_EFI),$(call ld-option,$(EFI_LDFLAGS) --image-base=0x100000000 -o efi/check.efi efi/check.o))
> > -# If the above failed, it may be merely because of the linker not dealing well
> > -# with debug info. Try again with stripping it.
> > -ifeq ($(CONFIG_DEBUG_INFO)-$(XEN_BUILD_PE),y-n)
> > -EFI_LDFLAGS += --strip-debug
> > -XEN_BUILD_PE := $(call ld-option,$(EFI_LDFLAGS) --image-base=0x100000000 -o efi/check.efi efi/check.o)
> > -endif
> > -
> > -ifeq ($(XEN_BUILD_PE),y)
> > -
> > -# Check if the linker produces fixups in PE by default
> > -nr-fixups := $(shell $(OBJDUMP) -p efi/check.efi | grep '^[[:blank:]]*reloc[[:blank:]]*[0-9][[:blank:]].*DIR64$$' | wc -l)
> > -ifeq ($(nr-fixups),2)
> > -MKRELOC := :
> > -relocs-dummy :=
> > -else
> > -MKRELOC := efi/mkreloc
> > -relocs-dummy := efi/relocs-dummy.o
> > -# If the linker produced fixups but not precisely two of them, we need to
> > -# disable it doing so.  But if it didn't produce any fixups, it also wouldn't
> > -# recognize the option.
> > -ifneq ($(nr-fixups),0)
> > -EFI_LDFLAGS += --disable-reloc-section
> > -endif
> > -endif
> > -
> > -endif # $(XEN_BUILD_PE)
> > -
> >  endif # $(efi-y)
> 
> Is the remaining if(,) block still warranted? I.e. can't the single line
> 
> CFLAGS-$(XEN_BUILD_EFI) += -DXEN_BUILD_EFI
> 
> live without the surrounding conditional?

Let's see, $(efi-y) depends on CONFIG_PV_SHIM_EXCLUSIVE and `sudo make
install`, but XEN_BUILD_EFI also depends on CONFIG_PV_SHIM_EXCLUSIVE and
we don't want to build in `sudo make install` so CFLAGS shouldn't be
used. So the single line without the if() block seems enough. I remove
the surrounding conditional.

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 18/51] build: fix $(TARGET).efi creation in arch/arm
  2021-10-11 10:37   ` Jan Beulich
@ 2021-10-11 14:22     ` Anthony PERARD
  0 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-10-11 14:22 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Stefano Stabellini, Julien Grall, Volodymyr Babchuk, xen-devel

On Mon, Oct 11, 2021 at 12:37:55PM +0200, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
> > There is no need to try to guess a relative path to the "xen.efi" file,
> > we can simply use $@. Also, there's no need to use `notdir`, make
> > already do that work via $(@F).
> > 
> > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> 
> Reviewed-by: Jan Beulich <jbeulich@suse.com>
> 
> As to the subject, I don't think "fix" is appropriate. How about "adjust"
> or "simplify" or some such?

"adjust" sound good, thanks.

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 28/51] build: rename __LINKER__ to LINKER_SCRIPT
  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
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 14:23 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> For two reasons: this macro is used to generate a "linker script" and
> is not by the linker, and name starting with an underscore '_' are
> supposed to be reserved, so better avoid them when not needed.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 29/51] build: add an other explicite rules to not build $(XEN_ROOT)/.config
  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
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 14:29 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> GNU Make will try to rebuild every Makefile included with the
> "include" directive, so everytime Config.mk is used, make will try to
> build ".config". This would normally not be an issue, unless we happen
> to have a rules which match. This is the case with Kconfig in xen/.
> 
> While we had a workaround in "xen/Makefile", this ".config" files
> becomes an issue again in "xen/tools/kconfig/Makefile". It has a
> target "%.config".

"we had" sounds like we don't have such anymore, but I don't think I've
seen it go away. I'm also not convinced working around an isolated issue
in xen/tools/kconfig/Makefile is appropriate to be done by adding stuff
to Rules.mk.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 20/51] build: avoid re-executing the main Makefile by introducing build.mk
  2021-10-11 10:56   ` Jan Beulich
@ 2021-10-11 14:58     ` Anthony PERARD
  2021-10-11 15:31       ` Jan Beulich
  0 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-10-11 14:58 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On Mon, Oct 11, 2021 at 12:56:54PM +0200, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
> > Currently, the xen/Makefile is re-parsed several times: once to start
> > the build process, and several more time with Rules.mk including it.
> > This makes it difficult to reason with a Makefile used for several
> > purpose, and it actually slow down the build process.
> 
> I'm struggling some with what you want to express here. What does
> "to reason" refer to?

I guess "to reason with something" isn't an expression. I mean that the
main Makefile is difficult to work with as it setup the build process
for the rest of the build. And it is difficult to understand what is
happening when it recursed into itself, and thus possibly re-executing
part of the build process setup.

> > So this patch introduce "build.mk" which Rules.mk will use when
> > present instead of the "Makefile" of a directory. (Linux's Kbuild
> > named that file "Kbuild".)
> > 
> > We have a few targets to move to "build.mk" identified by them been
> > build via "make -f Rules.mk" without changing directory.
> > 
> > As for the main targets like "build", we can have them depends on
> > there underscore-prefix targets like "_build" without having to use
> > "Rules.mk" while still retaining the check for unsupported
> > architecture. (Those main rules are changed to be single-colon as
> > there should only be a single recipe for them.)
> > 
> > With nearly everything needed to move to "build.mk" moved, there is a
> > single dependency left from "Rules.mk": $(TARGET), which is moved to
> > the main Makefile.
> 
> I'm having trouble identifying what this describes. Searching for
> $(TARGET) in the patch doesn't yield any obvious match. Thinking
> about it, do you perhaps mean the setting of that variable? Is
> moving that guaranteed to not leave the variable undefined? Or in
> other words is there no scenario at all where xen/Makefile might
> get bypassed? (Aiui building an individual .o, .i, or .s would
> continue to be fine, but it feels like something along these lines
> might get broken.)

I mean that "xen/Rules.mk" will never "include" "xen/Makefile" after
this patch, but the variable "TARGET" is only set in "xen/Rules.mk". But
"xen/Makefile" still needs "TARGET" to be set so I moved the assignment
of the variable from "xen/Rules.mk" into "xen/Makefile".

> > @@ -279,11 +281,13 @@ export CFLAGS_UBSAN
> >  
> >  endif # need-config
> >  
> > -.PHONY: build install uninstall clean distclean MAP
> > -build install uninstall debug clean distclean MAP::
> > +main-targets := build install uninstall clean distclean MAP
> > +.PHONY: $(main-targets)
> >  ifneq ($(XEN_TARGET_ARCH),x86_32)
> > -	$(MAKE) -f Rules.mk _$@
> > +$(main-targets): %: _%
> > +	@:
> 
> Isn't the conventional way to express "no commands" via
> 
> $(main-targets): %: _% ;
> 
> ?

I guess, I'll change it.

> > --- a/xen/Rules.mk
> > +++ b/xen/Rules.mk
> > @@ -9,8 +9,6 @@ include $(XEN_ROOT)/Config.mk
> >  include $(BASEDIR)/scripts/Kbuild.include
> >  
> >  
> > -TARGET := $(BASEDIR)/xen
> > -
> >  # Note that link order matters!
> 
> Could I talk you into removing yet another blank line at this occasion?

Will do.

> > @@ -36,7 +34,9 @@ SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
> >                                              rodata.cst$(a)) \
> >                           $(foreach r,rel rel.ro,data.$(r).local)
> >  
> > -include Makefile
> > +# The filename build.mk has precedence over Makefile
> > +mk-dir := .
> 
> What's the goal of this variable? All I can spot for now it that ...

It's just me thinking ahead where a folling patch will just have to
write "$mk-dir := $(src)", instead of editing the following line.

> > +include $(if $(wildcard $(mk-dir)/build.mk),$(mk-dir)/build.mk,$(mk-dir)/Makefile)
> 
> ... this is harder to read than
> 
> include $(if $(wildcard ./build.mk),./build.mk,./Makefile)
> 
> which could be further simplified to
> 
> include $(if $(wildcard build.mk),build.mk,Makefile)
> 
> and then maybe altered to
> 
> include $(firstword $(wildcard build.mk) Makefile)

I can try with this last one, there is less repeating of "build.mk" so
that sound like a good thing to do.

> > --- /dev/null
> > +++ b/xen/build.mk
> > @@ -0,0 +1,58 @@
> > +quiet_cmd_banner = BANNER  $@
> > +define cmd_banner
> > +    if which figlet >/dev/null 2>&1 ; then \
> > +	echo " Xen $(XEN_FULLVERSION)" | figlet -f $< > $@.tmp; \
> > +    else \
> > +	echo " Xen $(XEN_FULLVERSION)" > $@.tmp; \
> > +    fi; \
> > +    mv -f $@.tmp $@
> > +endef
> > +
> > +.banner: tools/xen.flf FORCE
> > +	$(call if_changed,banner)
> > +targets += .banner
> 
> To make the end of the rule more easily recognizable, may I ask that
> you either insert a blank line after the rule or that you move the +=
> up immediately ahead of the construct?

Will do.

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 20/51] build: avoid re-executing the main Makefile by introducing build.mk
  2021-10-11 14:58     ` Anthony PERARD
@ 2021-10-11 15:31       ` Jan Beulich
  2021-10-11 17:07         ` Anthony PERARD
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 15:31 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On 11.10.2021 16:58, Anthony PERARD wrote:
> On Mon, Oct 11, 2021 at 12:56:54PM +0200, Jan Beulich wrote:
>> On 24.08.2021 12:50, Anthony PERARD wrote:
>>> Currently, the xen/Makefile is re-parsed several times: once to start
>>> the build process, and several more time with Rules.mk including it.
>>> This makes it difficult to reason with a Makefile used for several
>>> purpose, and it actually slow down the build process.
>>
>> I'm struggling some with what you want to express here. What does
>> "to reason" refer to?
> 
> I guess "to reason with something" isn't an expression. I mean that the
> main Makefile is difficult to work with as it setup the build process
> for the rest of the build. And it is difficult to understand what is
> happening when it recursed into itself, and thus possibly re-executing
> part of the build process setup.
> 
>>> So this patch introduce "build.mk" which Rules.mk will use when
>>> present instead of the "Makefile" of a directory. (Linux's Kbuild
>>> named that file "Kbuild".)
>>>
>>> We have a few targets to move to "build.mk" identified by them been
>>> build via "make -f Rules.mk" without changing directory.
>>>
>>> As for the main targets like "build", we can have them depends on
>>> there underscore-prefix targets like "_build" without having to use
>>> "Rules.mk" while still retaining the check for unsupported
>>> architecture. (Those main rules are changed to be single-colon as
>>> there should only be a single recipe for them.)
>>>
>>> With nearly everything needed to move to "build.mk" moved, there is a
>>> single dependency left from "Rules.mk": $(TARGET), which is moved to
>>> the main Makefile.
>>
>> I'm having trouble identifying what this describes. Searching for
>> $(TARGET) in the patch doesn't yield any obvious match. Thinking
>> about it, do you perhaps mean the setting of that variable? Is
>> moving that guaranteed to not leave the variable undefined? Or in
>> other words is there no scenario at all where xen/Makefile might
>> get bypassed? (Aiui building an individual .o, .i, or .s would
>> continue to be fine, but it feels like something along these lines
>> might get broken.)
> 
> I mean that "xen/Rules.mk" will never "include" "xen/Makefile" after
> this patch, but the variable "TARGET" is only set in "xen/Rules.mk". But
> "xen/Makefile" still needs "TARGET" to be set so I moved the assignment
> of the variable from "xen/Rules.mk" into "xen/Makefile".

Okay, thanks, this confirms the understanding I had developed; maybe
you try to reword this some. What your reply doesn't address is my
question, though.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 30/51] build: hook kconfig into xen build system
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 15:38 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Doug Goldstein, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> Now that xen's build system is very close to Linux's ones, we can hook
> "Makefile.host" into Xen's build system, and we can build Kconfig with
> that.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 32/51] build: Remove KBUILD_ specific from Makefile.host
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 15:47 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> This will allow $(HOSTCFLAGS) to actually be used when building
> programmes for the build-host.
> 
> The other variable don't exist in our build system.
> 
> Also remove $(KBUILD_EXTMOD) since it should always be empty.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>

I wonder though whether their use of KBUILD_ prefixes doesn't match
our XEN_ ones (e.g. KBUILD_CFLAGS vs XEN_CFLAGS), in which case
replacing rather than stripping might be the way to go.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 33/51] build: handle always-y and hostprogs-always-y
  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
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 15:48 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> This will be used for xen/tools/.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 34/51] build: start building the tools with the main makefiles
  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
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 15:49 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> This will make out-of-tree build easier.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 35/51] build: Add headers path to CFLAGS once for all archs
  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
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 15:51 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk, Bob Eshleman,
	Alistair Francis, Connor Davis, Roger Pau Monné,
	xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> This just remove duplication.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Ah, here we go.

Reviewed-by: Jan Beulich <jbeulich@suse.com>



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 36/51] build: generate x86's asm-macros.h with filechk
  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
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 15:52 UTC (permalink / raw)
  To: Anthony PERARD; +Cc: Andrew Cooper, Roger Pau Monné, Wei Liu, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> When we will build out-of-tree, make is going to try to generate
> "asm-macros.h" before the directories "arch/x86/include/asm" exist,
> thus we would need to call `mkdir` explicitly. We will use "filechk"
> for that as it does everything that the current recipe does and does
> call `mkdir`.
> 
> Also, they are no more "*.new" files generated in this directory.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 37/51] build: clean-up "clean" rules of duplication
  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
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 15:53 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> All those files to be removed are already done in the main Makefile,
> either by the "find" command or directly (for $(TARGET).efi).
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 38/51] build: use main rune to build host binary x86's mkelf32 and mkreloc
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 15:56 UTC (permalink / raw)
  To: Anthony PERARD; +Cc: Andrew Cooper, Roger Pau Monné, Wei Liu, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>

> --- a/xen/arch/x86/Makefile
> +++ b/xen/arch/x86/Makefile
> @@ -81,6 +81,10 @@ endif
>  extra-y += asm-macros.i
>  extra-y += xen.lds
>  
> +hostprogs-y += boot/mkelf32
> +HOSTCFLAGS_efi/mkreloc.o := -g

To be honest I don't think this extra option would have been necessary
to retain.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 39/51] build: rework coverage and ubsan CFLAGS handling
  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
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-11 16:04 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> When assigning a value a target-specific variable, that also affect
> prerequisite of the target. This is mostly fine, but there is one case
> where we will not want the COV_FLAGS added to the CFLAGS.
> 
> In arch/x86/boot, we have "head.o" with "cmdline.S" as prerequisite
> and ultimately "cmdline.o", we don't want COV_FLAGS to that last one.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

I think I understand what's going on, so
Reviewed-by: Jan Beulich <jbeulich@suse.com>

It would seem to me though that ...

> --- a/xen/Rules.mk
> +++ b/xen/Rules.mk
> @@ -131,19 +131,31 @@ targets += $(targets-for-builtin)
>  
>  $(filter %.init.o,$(obj-y) $(obj-bin-y) $(extra-y)): CFLAGS-y += -DINIT_SECTIONS_ONLY
>  
> +non-init-objects = $(filter-out %.init.o, $(obj-y) $(obj-bin-y) $(extra-y))
> +
>  ifeq ($(CONFIG_COVERAGE),y)
>  ifeq ($(CONFIG_CC_IS_CLANG),y)
>      COV_FLAGS := -fprofile-instr-generate -fcoverage-mapping
>  else
>      COV_FLAGS := -fprofile-arcs -ftest-coverage
>  endif
> -$(filter-out %.init.o $(nocov-y),$(obj-y) $(obj-bin-y) $(extra-y)): CFLAGS-y += $(COV_FLAGS)
> +
> +$(non-init-objects): _c_flags += $(COV_FLAGS)
> +
> +# Reset COV_FLAGS in cases where an objects as another one as prerequisite
> +$(nocov-y) $(filter %.init.o, $(obj-y) $(obj-bin-y) $(extra-y)): \
> +    COV_FLAGS :=

... pulling this and ...

>  endif
>  
>  ifeq ($(CONFIG_UBSAN),y)
>  # Any -fno-sanitize= options need to come after any -fsanitize= options
> -$(filter-out %.init.o $(noubsan-y),$(obj-y) $(obj-bin-y) $(extra-y)): \
> -CFLAGS-y += $(filter-out -fno-%,$(CFLAGS_UBSAN)) $(filter -fno-%,$(CFLAGS_UBSAN))
> +UBSAN_FLAGS := $(filter-out -fno-%,$(CFLAGS_UBSAN)) $(filter -fno-%,$(CFLAGS_UBSAN))
> +
> +$(non-init-objects): _c_flags += $(UBSAN_FLAGS)
> +
> +# Reset UBSAN_FLAGS in cases where an objects as another one as prerequisite
> +$(noubsan-y) $(filter %.init.o, $(obj-y) $(obj-bin-y) $(extra-y)): \
> +    UBSAN_FLAGS :=

... this up ahead of their respective _c_flags assignments would be
easier to follow, for being more logical (produce, then consume).

Also, as a nit: In the comments do you mean "... where an object has ..."?

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 20/51] build: avoid re-executing the main Makefile by introducing build.mk
  2021-10-11 15:31       ` Jan Beulich
@ 2021-10-11 17:07         ` Anthony PERARD
  2021-10-12  8:06           ` Jan Beulich
  0 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-10-11 17:07 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On Mon, Oct 11, 2021 at 05:31:08PM +0200, Jan Beulich wrote:
> On 11.10.2021 16:58, Anthony PERARD wrote:
> > On Mon, Oct 11, 2021 at 12:56:54PM +0200, Jan Beulich wrote:
> >> On 24.08.2021 12:50, Anthony PERARD wrote:
> >>> With nearly everything needed to move to "build.mk" moved, there is a
> >>> single dependency left from "Rules.mk": $(TARGET), which is moved to
> >>> the main Makefile.
> >>
> >> I'm having trouble identifying what this describes. Searching for
> >> $(TARGET) in the patch doesn't yield any obvious match. Thinking
> >> about it, do you perhaps mean the setting of that variable? Is
> >> moving that guaranteed to not leave the variable undefined? Or in
> >> other words is there no scenario at all where xen/Makefile might
> >> get bypassed? (Aiui building an individual .o, .i, or .s would
> >> continue to be fine, but it feels like something along these lines
> >> might get broken.)
> > 
> > I mean that "xen/Rules.mk" will never "include" "xen/Makefile" after
> > this patch, but the variable "TARGET" is only set in "xen/Rules.mk". But
> > "xen/Makefile" still needs "TARGET" to be set so I moved the assignment
> > of the variable from "xen/Rules.mk" into "xen/Makefile".
> 
> Okay, thanks, this confirms the understanding I had developed; maybe
> you try to reword this some. What your reply doesn't address is my
> question, though.

Which question, there seems to be 3 of them :-). Is it about
xen/Makefile been bypassed?

Building anything in xen/ requires to first execute xen/Makefile as this
is where variables like CFLAGS or XEN_ROOT are defined, and this
includes single builds or building an individual .o.

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 20/51] build: avoid re-executing the main Makefile by introducing build.mk
  2021-10-11 17:07         ` Anthony PERARD
@ 2021-10-12  8:06           ` Jan Beulich
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-12  8:06 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On 11.10.2021 19:07, Anthony PERARD wrote:
> On Mon, Oct 11, 2021 at 05:31:08PM +0200, Jan Beulich wrote:
>> On 11.10.2021 16:58, Anthony PERARD wrote:
>>> On Mon, Oct 11, 2021 at 12:56:54PM +0200, Jan Beulich wrote:
>>>> On 24.08.2021 12:50, Anthony PERARD wrote:
>>>>> With nearly everything needed to move to "build.mk" moved, there is a
>>>>> single dependency left from "Rules.mk": $(TARGET), which is moved to
>>>>> the main Makefile.
>>>>
>>>> I'm having trouble identifying what this describes. Searching for
>>>> $(TARGET) in the patch doesn't yield any obvious match. Thinking
>>>> about it, do you perhaps mean the setting of that variable? Is
>>>> moving that guaranteed to not leave the variable undefined? Or in
>>>> other words is there no scenario at all where xen/Makefile might
>>>> get bypassed? (Aiui building an individual .o, .i, or .s would
>>>> continue to be fine, but it feels like something along these lines
>>>> might get broken.)
>>>
>>> I mean that "xen/Rules.mk" will never "include" "xen/Makefile" after
>>> this patch, but the variable "TARGET" is only set in "xen/Rules.mk". But
>>> "xen/Makefile" still needs "TARGET" to be set so I moved the assignment
>>> of the variable from "xen/Rules.mk" into "xen/Makefile".
>>
>> Okay, thanks, this confirms the understanding I had developed; maybe
>> you try to reword this some. What your reply doesn't address is my
>> question, though.
> 
> Which question, there seems to be 3 of them :-). Is it about
> xen/Makefile been bypassed?

Yes, sorry for being imprecise.

> Building anything in xen/ requires to first execute xen/Makefile as this
> is where variables like CFLAGS or XEN_ROOT are defined, and this
> includes single builds or building an individual .o.

Okay, thanks for confirming.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 22/51] build: clean common temporary files from root makefile
  2021-10-11 11:41   ` Jan Beulich
@ 2021-10-13 10:36     ` Anthony PERARD
  2021-10-13 12:32       ` Jan Beulich
  0 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-10-13 10:36 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On Mon, Oct 11, 2021 at 01:41:16PM +0200, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
> > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> 
> Trying to synthesize a description:
> 
> > --- a/xen/Makefile
> > +++ b/xen/Makefile
> > @@ -382,6 +382,7 @@ _clean:
> >  	$(MAKE) $(clean) test
> >  	$(MAKE) $(kconfig) clean
> >  	find . \( -name "*.o" -o -name ".*.d" -o -name ".*.d2" \
> 
> This was effectively redundant with ...
> 
> > +		-o -name ".*.o.tmp" -o -name "*~" -o -name "core" \
> >  		-o -name "*.gcno" -o -name ".*.cmd" -o -name "lib.a" \) -exec rm -f {} \;
> >  	rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map *~ core
> >  	rm -f asm-offsets.s arch/*/include/asm/asm-offsets.h
> > diff --git a/xen/scripts/Makefile.clean b/xen/scripts/Makefile.clean
> > index 027c200c0efc..b6df9e861e6e 100644
> > --- a/xen/scripts/Makefile.clean
> > +++ b/xen/scripts/Makefile.clean
> > @@ -14,10 +14,8 @@ include Makefile
> >  subdir-all := $(subdir-y) $(subdir-n) $(subdir-) \
> >                $(patsubst %/,%, $(filter %/, $(obj-y) $(obj-n) $(obj-)))
> >  
> > -DEPS_RM = $(DEPS) $(DEPS_INCLUDE)
> 
> ... this and its use below.
> 
> >  .PHONY: clean
> >  clean:: $(subdir-all)
> > -	rm -f *.o .*.o.tmp *~ core $(DEPS_RM)
> 
> With the command gone, I think the :: should also be converted (back) to
> just : then. Then

"clean" has been a double-column rule for a long time. If we convert
this rule to a single-column we need to convert all "clean" target to
use single-column which would make this patch more complicated. So I
don't think we should make this change.

> Reviewed-by: Jan Beulich <jbeulich@suse.com>
> 
> Assuming the patch is independent of the earlier still uncommitted ones
> (please confirm), I'd be happy to make the adjustment while committing
> - as long as you agree, of course.

The patch is independent of earlier one, although the context is changed
in one patch so wouldn't apply cleaning without git helps.
(context is changed in "xen: move include/asm-* to arch/*/include/asm")

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 24/51] build: prepare to always invoke $(MAKE) from xen/, use $(obj)
  2021-10-11 12:39   ` Jan Beulich
@ 2021-10-13 10:57     ` Anthony PERARD
  2021-10-13 12:35       ` Jan Beulich
  0 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-10-13 10:57 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	Daniel De Graaf, Daniel P. Smith, xen-devel

On Mon, Oct 11, 2021 at 02:39:26PM +0200, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
> > In a future patch, when building a subdirectory, we will set
> > "obj=$subdir" rather than change directory.
> > 
> > Before that, we add "$(obj)" and "$(src)" in as many places as
> > possible where we will need to know which subdirectory is been built.
> > "$(obj)" is for files been generated during the build, and "$(src)" is
> > for files present in the source tree.
> > 
> > For now, we set both to "." in Rules.mk and Makefile.clean.
> > 
> > A few places don't tolerate the addition of "./", this is because make
> > remove the leading "./" in targets and dependencies in rules, so these
> > will be change later.
> > 
> > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> 
> Acked-by: Jan Beulich <jbeulich@suse.com>
> 
> Nevertheless a couple of remarks:
> 
> > --- a/xen/arch/x86/Makefile
> > +++ b/xen/arch/x86/Makefile
> >[...]
> > @@ -192,25 +192,25 @@ note_file_option ?= $(note_file)
> >  
> >  ifeq ($(XEN_BUILD_PE),y)
> >  extra-y += efi.lds
> 
> What about this? Does this for some reason also fall into the "cannot
> be converted yet" group?

$(extra-y) is treated the same way as $(obj-y), it is used to list item
to build in the current subdirectory. So there is no need to add $(obj)/

> > @@ -222,14 +222,14 @@ $(TARGET).efi: FORCE
> >  endif
> >  
> >  # These should already have been rebuilt when building the prerequisite of "prelink.o"
> > -efi/buildid.o efi/relocs-dummy.o: ;
> > +$(obj)/efi/buildid.o $(obj)/efi/relocs-dummy.o: ;
> >  
> >  .PHONY: include
> >  include: $(BASEDIR)/arch/x86/include/asm/asm-macros.h
> >  
> > -asm-macros.i: CFLAGS-y += -D__ASSEMBLY__ -P
> > +$(obj)/asm-macros.i: CFLAGS-y += -D__ASSEMBLY__ -P
> >  
> > -$(BASEDIR)/arch/x86/include/asm/asm-macros.h: asm-macros.i Makefile
> > +$(BASEDIR)/arch/x86/include/asm/asm-macros.h: $(obj)/asm-macros.i $(src)/Makefile
> 
> Isn't this $(obj)/include/asm/asm-macros.h ? And in general doesn't
> use of $(BASEDIR) need to go away then, e.g. ...

I've limited this patch to add $(obj)/ and $(src)/ were needed, I think.

And yes, BASEDIR will need to go away.

> > --- a/xen/arch/x86/boot/Makefile
> > +++ b/xen/arch/x86/boot/Makefile
> > @@ -1,8 +1,8 @@
> >  obj-bin-y += head.o
> >  
> > -DEFS_H_DEPS = defs.h $(BASEDIR)/include/xen/stdbool.h
> > +DEFS_H_DEPS = $(src)/defs.h $(BASEDIR)/include/xen/stdbool.h
> 
> ... here needing to become $(src)/../../../include/xen/stdbool.h ?

BASEDIR will be dealt with later.

> > --- a/xen/scripts/Makefile.clean
> > +++ b/xen/scripts/Makefile.clean
> > @@ -3,11 +3,14 @@
> >  # Cleaning up
> >  # ==========================================================================
> >  
> > +obj := .
> > +src := $(obj)
> 
> This repeats what is also getting added to Rules.mk. To prevent
> the two going out of sync, wouldn't they better live in a central
> place (e.g. scripts/defs.mk)?

It looks like they are the same but they are not, it doesn't matter if
they go out of sync, and they actually do in my patch series.

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 21/51] build: set ALL_OBJS to main Makefile; move prelink.o to main Makefile
  2021-10-11 11:31   ` Jan Beulich
@ 2021-10-13 12:30     ` Anthony PERARD
  2021-10-13 12:41       ` Jan Beulich
  0 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-10-13 12:30 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	xen-devel

On Mon, Oct 11, 2021 at 01:31:59PM +0200, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
> > --- a/xen/Makefile
> > +++ b/xen/Makefile
> > @@ -271,8 +271,21 @@ CFLAGS += -flto
> >  LDFLAGS-$(CONFIG_CC_IS_CLANG) += -plugin LLVMgold.so
> >  endif
> >  
> > +# Note that link order matters!
> > +ALL_OBJS-y                := common/built_in.o
> > +ALL_OBJS-y                += drivers/built_in.o
> > +ALL_OBJS-y                += lib/built_in.o
> > +ALL_OBJS-y                += xsm/built_in.o
> > +ALL_OBJS-y                += arch/$(TARGET_ARCH)/built_in.o
> > +ALL_OBJS-$(CONFIG_CRYPTO) += crypto/built_in.o
> > +
> > +ALL_LIBS-y                := lib/lib.a
> > +
> >  include $(BASEDIR)/arch/$(TARGET_ARCH)/arch.mk
> >  
> > +export ALL_OBJS := $(ALL_OBJS-y)
> > +export ALL_LIBS := $(ALL_LIBS-y)
> > +
> >  # define new variables to avoid the ones defined in Config.mk
> >  export XEN_CFLAGS := $(CFLAGS)
> >  export XEN_AFLAGS := $(AFLAGS)
> > @@ -393,7 +406,7 @@ $(TARGET): FORCE
> >  	$(MAKE) -f $(BASEDIR)/Rules.mk -C include
> >  	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) include
> >  	$(MAKE) -f $(BASEDIR)/Rules.mk arch/$(TARGET_ARCH)/include/asm/asm-offsets.h
> > -	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) $@
> > +	$(MAKE) -f $(BASEDIR)/Rules.mk $@
> 
> This merely results in what was previously invoked from here now getting
> invoked from the very bottom of build.mk. I'm afraid I don't see why this
> is a useful change to make.

Would you rather have this following change?

    @@ -393,7 +406,8 @@ $(TARGET): FORCE
     	$(MAKE) -f $(BASEDIR)/Rules.mk -C include
     	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) include
     	$(MAKE) -f $(BASEDIR)/Rules.mk arch/$(TARGET_ARCH)/include/asm/asm-offsets.h
    +	$(MAKE) -f $(BASEDIR)/Rules.mk prelink.o
     	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) $@

That would probably be fine.

> > --- a/xen/build.mk
> > +++ b/xen/build.mk
> > @@ -56,3 +56,27 @@ arch/$(TARGET_ARCH)/include/asm/asm-offsets.h: asm-offsets.s
> >  	  sed -rne "/^[^#].*==>/{s:.*==>(.*)<==.*:\1:; s: [\$$#]: :; p;}"; \
> >  	  echo ""; \
> >  	  echo "#endif") <$< >$@
> > +
> > +# head.o is built by descending into arch/arm/$(TARGET_SUBARCH), depends on the
> > +# part of $(ALL_OBJS) that will eventually recurse into $(TARGET_SUBARCH)/ and
> > +# build head.o
> > +arch/arm/$(TARGET_SUBARCH)/head.o: arch/arm/built_in.o
> > +arch/arm/$(TARGET_SUBARCH)/head.o: ;
> 
> This previously lived in an Arm-specific file. Moving this here in the
> given, still Arm-specific form is imo a no-go when done alongside all
> the other good changes you're making. Is there a reason this can't go
> into xen/arch/arm/arch.mk?

This is temporary and it is removed in patch
    "build: build everything from the root dir, use obj=$subdir"
but I could move it to "arch/arm/Rules.mk" I think.

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 22/51] build: clean common temporary files from root makefile
  2021-10-13 10:36     ` Anthony PERARD
@ 2021-10-13 12:32       ` Jan Beulich
  2021-10-13 14:26         ` Anthony PERARD
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-13 12:32 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On 13.10.2021 12:36, Anthony PERARD wrote:
> On Mon, Oct 11, 2021 at 01:41:16PM +0200, Jan Beulich wrote:
>> On 24.08.2021 12:50, Anthony PERARD wrote:
>>> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
>>
>> Trying to synthesize a description:
>>
>>> --- a/xen/Makefile
>>> +++ b/xen/Makefile
>>> @@ -382,6 +382,7 @@ _clean:
>>>  	$(MAKE) $(clean) test
>>>  	$(MAKE) $(kconfig) clean
>>>  	find . \( -name "*.o" -o -name ".*.d" -o -name ".*.d2" \
>>
>> This was effectively redundant with ...
>>
>>> +		-o -name ".*.o.tmp" -o -name "*~" -o -name "core" \
>>>  		-o -name "*.gcno" -o -name ".*.cmd" -o -name "lib.a" \) -exec rm -f {} \;
>>>  	rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map *~ core
>>>  	rm -f asm-offsets.s arch/*/include/asm/asm-offsets.h
>>> diff --git a/xen/scripts/Makefile.clean b/xen/scripts/Makefile.clean
>>> index 027c200c0efc..b6df9e861e6e 100644
>>> --- a/xen/scripts/Makefile.clean
>>> +++ b/xen/scripts/Makefile.clean
>>> @@ -14,10 +14,8 @@ include Makefile
>>>  subdir-all := $(subdir-y) $(subdir-n) $(subdir-) \
>>>                $(patsubst %/,%, $(filter %/, $(obj-y) $(obj-n) $(obj-)))
>>>  
>>> -DEPS_RM = $(DEPS) $(DEPS_INCLUDE)
>>
>> ... this and its use below.
>>
>>>  .PHONY: clean
>>>  clean:: $(subdir-all)
>>> -	rm -f *.o .*.o.tmp *~ core $(DEPS_RM)
>>
>> With the command gone, I think the :: should also be converted (back) to
>> just : then. Then
> 
> "clean" has been a double-column rule for a long time. If we convert
> this rule to a single-column we need to convert all "clean" target to
> use single-column which would make this patch more complicated. So I
> don't think we should make this change.

Hmm, indeed make would complain in that case (I didn't mean to suggest
to convert all clean-s to single-colon rules, but I was instead under
the wrong impression that spelling out merely dependencies would be
okay with single-colon rule). But then make's doc also says "Each
double-colon rule should specify a recipe; if it does not, an implicit
rule will be used if one applies." So perhaps, to avoid depending on
the latter, an empty recipe should be added here (by adding a
semicolon)?

>> Reviewed-by: Jan Beulich <jbeulich@suse.com>
>>
>> Assuming the patch is independent of the earlier still uncommitted ones
>> (please confirm), I'd be happy to make the adjustment while committing
>> - as long as you agree, of course.
> 
> The patch is independent of earlier one, although the context is changed
> in one patch so wouldn't apply cleaning without git helps.
> (context is changed in "xen: move include/asm-* to arch/*/include/asm")

That would be easy enough to adjust, I guess. But first we need to settle
on the above.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 24/51] build: prepare to always invoke $(MAKE) from xen/, use $(obj)
  2021-10-13 10:57     ` Anthony PERARD
@ 2021-10-13 12:35       ` Jan Beulich
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-13 12:35 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	Daniel De Graaf, Daniel P. Smith, xen-devel

On 13.10.2021 12:57, Anthony PERARD wrote:
> On Mon, Oct 11, 2021 at 02:39:26PM +0200, Jan Beulich wrote:
>> On 24.08.2021 12:50, Anthony PERARD wrote:
>>> @@ -222,14 +222,14 @@ $(TARGET).efi: FORCE
>>>  endif
>>>  
>>>  # These should already have been rebuilt when building the prerequisite of "prelink.o"
>>> -efi/buildid.o efi/relocs-dummy.o: ;
>>> +$(obj)/efi/buildid.o $(obj)/efi/relocs-dummy.o: ;
>>>  
>>>  .PHONY: include
>>>  include: $(BASEDIR)/arch/x86/include/asm/asm-macros.h
>>>  
>>> -asm-macros.i: CFLAGS-y += -D__ASSEMBLY__ -P
>>> +$(obj)/asm-macros.i: CFLAGS-y += -D__ASSEMBLY__ -P
>>>  
>>> -$(BASEDIR)/arch/x86/include/asm/asm-macros.h: asm-macros.i Makefile
>>> +$(BASEDIR)/arch/x86/include/asm/asm-macros.h: $(obj)/asm-macros.i $(src)/Makefile
>>
>> Isn't this $(obj)/include/asm/asm-macros.h ? And in general doesn't
>> use of $(BASEDIR) need to go away then, e.g. ...
> 
> I've limited this patch to add $(obj)/ and $(src)/ were needed, I think.
> 
> And yes, BASEDIR will need to go away.

And replacing it here while you're touching the line anyway is not an
option?

>>> --- a/xen/scripts/Makefile.clean
>>> +++ b/xen/scripts/Makefile.clean
>>> @@ -3,11 +3,14 @@
>>>  # Cleaning up
>>>  # ==========================================================================
>>>  
>>> +obj := .
>>> +src := $(obj)
>>
>> This repeats what is also getting added to Rules.mk. To prevent
>> the two going out of sync, wouldn't they better live in a central
>> place (e.g. scripts/defs.mk)?
> 
> It looks like they are the same but they are not, it doesn't matter if
> they go out of sync, and they actually do in my patch series.

How can them going out of sync be correct?

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 21/51] build: set ALL_OBJS to main Makefile; move prelink.o to main Makefile
  2021-10-13 12:30     ` Anthony PERARD
@ 2021-10-13 12:41       ` Jan Beulich
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-13 12:41 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	xen-devel

On 13.10.2021 14:30, Anthony PERARD wrote:
> On Mon, Oct 11, 2021 at 01:31:59PM +0200, Jan Beulich wrote:
>> On 24.08.2021 12:50, Anthony PERARD wrote:
>>> @@ -393,7 +406,7 @@ $(TARGET): FORCE
>>>  	$(MAKE) -f $(BASEDIR)/Rules.mk -C include
>>>  	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) include
>>>  	$(MAKE) -f $(BASEDIR)/Rules.mk arch/$(TARGET_ARCH)/include/asm/asm-offsets.h
>>> -	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) $@
>>> +	$(MAKE) -f $(BASEDIR)/Rules.mk $@
>>
>> This merely results in what was previously invoked from here now getting
>> invoked from the very bottom of build.mk. I'm afraid I don't see why this
>> is a useful change to make.
> 
> Would you rather have this following change?
> 
>     @@ -393,7 +406,8 @@ $(TARGET): FORCE
>      	$(MAKE) -f $(BASEDIR)/Rules.mk -C include
>      	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) include
>      	$(MAKE) -f $(BASEDIR)/Rules.mk arch/$(TARGET_ARCH)/include/asm/asm-offsets.h
>     +	$(MAKE) -f $(BASEDIR)/Rules.mk prelink.o
>      	$(MAKE) -f $(BASEDIR)/Rules.mk -C arch/$(TARGET_ARCH) $@
> 
> That would probably be fine.

Hmm, perhaps I'd prefer to avoid yet another $(MAKE) invocation. But
your reply made me understand why you make the change: You need to add
the prelink.o dependency to $(TARGET). That wasn't obvious to me when
first reviewing the change.

>>> --- a/xen/build.mk
>>> +++ b/xen/build.mk
>>> @@ -56,3 +56,27 @@ arch/$(TARGET_ARCH)/include/asm/asm-offsets.h: asm-offsets.s
>>>  	  sed -rne "/^[^#].*==>/{s:.*==>(.*)<==.*:\1:; s: [\$$#]: :; p;}"; \
>>>  	  echo ""; \
>>>  	  echo "#endif") <$< >$@
>>> +
>>> +# head.o is built by descending into arch/arm/$(TARGET_SUBARCH), depends on the
>>> +# part of $(ALL_OBJS) that will eventually recurse into $(TARGET_SUBARCH)/ and
>>> +# build head.o
>>> +arch/arm/$(TARGET_SUBARCH)/head.o: arch/arm/built_in.o
>>> +arch/arm/$(TARGET_SUBARCH)/head.o: ;
>>
>> This previously lived in an Arm-specific file. Moving this here in the
>> given, still Arm-specific form is imo a no-go when done alongside all
>> the other good changes you're making. Is there a reason this can't go
>> into xen/arch/arm/arch.mk?
> 
> This is temporary and it is removed in patch
>     "build: build everything from the root dir, use obj=$subdir"
> but I could move it to "arch/arm/Rules.mk" I think.

Moving there would be preferred; if that somehow doesn't work out, please
mention the temporary nature in the description, or else I (or perhaps
others) would ask the same question again on a future version of the
series.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 26/51] build: build everything from the root dir, use obj=$subdir
  2021-10-11 14:02   ` Jan Beulich
@ 2021-10-13 14:24     ` Anthony PERARD
  2021-10-14 13:33       ` Anthony PERARD
  0 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-10-13 14:24 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Bob Eshleman, Andrew Cooper, George Dunlap, Ian Jackson,
	Julien Grall, Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Alistair Francis, Connor Davis, Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel

On Mon, Oct 11, 2021 at 04:02:22PM +0200, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
> > A subdirectory is now built by setting "$(obj)" instead of changing
> > directory. "$(obj)" should always be set when using "Rules.mk" and
> > thus a shortcut "$(build)" is introduced and should be used.
> > 
> > A new variable "$(need-builtin)" is introduce. It is to be used
> > whenever a "built_in.o" is wanted from a subdirectory. "built_in.o"
> > isn't the main target anymore, and thus only needs to depends on the
> > objects that should be part of "built_in.o".
> 
> How "good" are our chances that we hit a need-builtin variable from
> the environment? Its uses are simply using "ifdef".

I think it would be low as Linux is using the same one. If it were
define, I think that would mean building a few more object than
expected which would not be used.

> > --- a/xen/Rules.mk
> > +++ b/xen/Rules.mk
> > @@ -3,19 +3,29 @@
> >  # Makefile and are consumed by Rules.mk
> >  #
> >  
> > -obj := .
> >  src := $(obj)
> >  
> > +PHONY := __build
> > +__build:
> > +
> >  -include $(BASEDIR)/include/config/auto.conf
> >  
> >  include $(XEN_ROOT)/Config.mk
> >  include $(BASEDIR)/scripts/Kbuild.include
> >  
> > +ifndef obj
> > +$(warning kbuild: Rules.mk is included improperly)
> > +endif
> 
> Is there a particular reason for this to come only here, rather than
> before the include-s (e.g. right at where the assignment to the
> variable lived)?

Probably not, Linux's Kbuild does check it quite late but I don't know the
reason. I can move the check earlier.

> > @@ -51,27 +61,54 @@ cmd_objcopy = $(OBJCOPY) $(OBJCOPYFLAGS) $< $@
> >  quiet_cmd_binfile = BINFILE $@
> >  cmd_binfile = $(SHELL) $(BASEDIR)/tools/binfile $(BINFILE_FLAGS) $@ $(2)
> >  
> > -define gendep
> > -    ifneq ($(1),$(subst /,:,$(1)))
> > -        DEPS += $(dir $(1)).$(notdir $(1)).d
> > -    endif
> > -endef
> > -$(foreach o,$(filter-out %/,$(obj-y) $(obj-bin-y) $(extra-y)),$(eval $(call gendep,$(o))))
> > +# Figure out what we need to build from the various variables
> > +# ===========================================================================
> > +
> > +# Libraries are always collected in one lib file.
> > +# Filter out objects already built-in
> > +lib-y := $(filter-out $(obj-y), $(sort $(lib-y)))
> > +
> > +# Subdirectories we need to descend into
> > +subdir-y := $(subdir-y) $(patsubst %/,%,$(filter %/, $(obj-y)))
> 
> Deliberately or accidentally not += ?

Seems to be accidentally. Kbuild does a $(sort ) here, I should probably
do the same, just to get rid of duplicates if they are any.

> > @@ -156,21 +192,13 @@ endif
> >  PHONY += FORCE
> >  FORCE:
> >  
> > -%/built_in.o %/lib.a: FORCE
> > -	$(MAKE) -f $(BASEDIR)/Rules.mk -C $* built_in.o
> > -
> > -%/built_in_bin.o: FORCE
> > -	$(MAKE) -f $(BASEDIR)/Rules.mk -C $* built_in_bin.o
> > -
> > -SRCPATH := $(patsubst $(BASEDIR)/%,%,$(CURDIR))
> > -
> >  quiet_cmd_cc_o_c = CC      $@
> >  ifeq ($(CONFIG_ENFORCE_UNIQUE_SYMBOLS),y)
> >      cmd_cc_o_c = $(CC) $(c_flags) -c $< -o $(dot-target).tmp -MQ $@
> >      ifeq ($(CONFIG_CC_IS_CLANG),y)
> > -        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $<=$(SRCPATH)/$< $(dot-target).tmp $@
> > +        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $(<F)=$< $(dot-target).tmp $@
> 
> Are you sure about the $< => $(<F) transformation here? Previoiusly it
> was present only ...

I have to check again. Maybe $< didn't work and it's more obvious with
this patch. Or maybe that depends on the version of clang.

> >      else
> > -        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $(<F)=$(SRCPATH)/$< $(dot-target).tmp $@
> > +        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $(<F)=$< $(dot-target).tmp $@
> 
> ... here.
> 
> > @@ -251,6 +292,9 @@ 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)
> 
> Nit: Preferably blanks on both sides of := or none at all, please.

Will fix.

> > --- a/xen/arch/x86/Makefile
> > +++ b/xen/arch/x86/Makefile
> > @@ -81,6 +81,9 @@ endif
> >  extra-y += asm-macros.i
> >  extra-y += xen.lds
> >  
> > +# Allows usercopy.c to includes itself
> 
> Nit: include

Indeed.

> > +$(obj)/usercopy.o: CFLAGS-y += -I.
> 
> This is ugly, but presumably unavoidable. Preferably I would see us
> the more specific -iquote though, assuming clang also supports it.

clang does have -iquote, so I guess it could be used. That would be the
first use of -iquote so I hope nothing would break with it.

> > --- a/xen/arch/x86/boot/Makefile
> > +++ b/xen/arch/x86/boot/Makefile
> > @@ -1,8 +1,8 @@
> >  obj-bin-y += head.o
> >  
> > -DEFS_H_DEPS = $(src)/defs.h $(BASEDIR)/include/xen/stdbool.h
> > +DEFS_H_DEPS = $(BASEDIR)/$(src)/defs.h $(BASEDIR)/include/xen/stdbool.h
> >  
> > -CMDLINE_DEPS = $(DEFS_H_DEPS) $(src)/video.h
> > +CMDLINE_DEPS = $(DEFS_H_DEPS) $(BASEDIR)/$(src)/video.h
> 
> Hmm, new uses of $(BASEDIR) (a few more further down). Why not
> $(srctree)?

I think I haven't introduce $(abs_srctree) yet, and this needs to be an
absolute path (the path is also used by a make which run from a
different current directory).

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 22/51] build: clean common temporary files from root makefile
  2021-10-13 12:32       ` Jan Beulich
@ 2021-10-13 14:26         ` Anthony PERARD
  0 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-10-13 14:26 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On Wed, Oct 13, 2021 at 02:32:55PM +0200, Jan Beulich wrote:
> On 13.10.2021 12:36, Anthony PERARD wrote:
> > On Mon, Oct 11, 2021 at 01:41:16PM +0200, Jan Beulich wrote:
> >> On 24.08.2021 12:50, Anthony PERARD wrote:
> >>> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> >>
> >> Trying to synthesize a description:
> >>
> >>> --- a/xen/Makefile
> >>> +++ b/xen/Makefile
> >>> @@ -382,6 +382,7 @@ _clean:
> >>>  	$(MAKE) $(clean) test
> >>>  	$(MAKE) $(kconfig) clean
> >>>  	find . \( -name "*.o" -o -name ".*.d" -o -name ".*.d2" \
> >>
> >> This was effectively redundant with ...
> >>
> >>> +		-o -name ".*.o.tmp" -o -name "*~" -o -name "core" \
> >>>  		-o -name "*.gcno" -o -name ".*.cmd" -o -name "lib.a" \) -exec rm -f {} \;
> >>>  	rm -f include/asm $(TARGET) $(TARGET).gz $(TARGET).efi $(TARGET).efi.map $(TARGET)-syms $(TARGET)-syms.map *~ core
> >>>  	rm -f asm-offsets.s arch/*/include/asm/asm-offsets.h
> >>> diff --git a/xen/scripts/Makefile.clean b/xen/scripts/Makefile.clean
> >>> index 027c200c0efc..b6df9e861e6e 100644
> >>> --- a/xen/scripts/Makefile.clean
> >>> +++ b/xen/scripts/Makefile.clean
> >>> @@ -14,10 +14,8 @@ include Makefile
> >>>  subdir-all := $(subdir-y) $(subdir-n) $(subdir-) \
> >>>                $(patsubst %/,%, $(filter %/, $(obj-y) $(obj-n) $(obj-)))
> >>>  
> >>> -DEPS_RM = $(DEPS) $(DEPS_INCLUDE)
> >>
> >> ... this and its use below.
> >>
> >>>  .PHONY: clean
> >>>  clean:: $(subdir-all)
> >>> -	rm -f *.o .*.o.tmp *~ core $(DEPS_RM)
> >>
> >> With the command gone, I think the :: should also be converted (back) to
> >> just : then. Then
> > 
> > "clean" has been a double-column rule for a long time. If we convert
> > this rule to a single-column we need to convert all "clean" target to
> > use single-column which would make this patch more complicated. So I
> > don't think we should make this change.
> 
> Hmm, indeed make would complain in that case (I didn't mean to suggest
> to convert all clean-s to single-colon rules, but I was instead under
> the wrong impression that spelling out merely dependencies would be
> okay with single-colon rule). But then make's doc also says "Each
> double-colon rule should specify a recipe; if it does not, an implicit
> rule will be used if one applies." So perhaps, to avoid depending on
> the latter, an empty recipe should be added here (by adding a
> semicolon)?

That sounds fine.

> >> Reviewed-by: Jan Beulich <jbeulich@suse.com>
> >>
> >> Assuming the patch is independent of the earlier still uncommitted ones
> >> (please confirm), I'd be happy to make the adjustment while committing
> >> - as long as you agree, of course.
> > 
> > The patch is independent of earlier one, although the context is changed
> > in one patch so wouldn't apply cleaning without git helps.
> > (context is changed in "xen: move include/asm-* to arch/*/include/asm")
> 
> That would be easy enough to adjust, I guess. But first we need to settle
> on the above.

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 51/51] build: add %.E targets
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-13 15:48 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> I guess it's easier to remember that %.E does "$(CC) -E" or "$(CPP)".

I've never seen any *.E. I'm puzzled (and hence have reservations, but
then again don't care enough to object).

> --- a/xen/Rules.mk
> +++ b/xen/Rules.mk
> @@ -289,6 +289,11 @@ $(obj)/%.s: $(src)/%.c FORCE
>  $(obj)/%.s: $(src)/%.S FORCE
>  	$(call if_changed_dep,cpp_s_S)
>  
> +$(obj)/%.E: $(src)/%.c FORCE
> +	$(call if_changed_dep,cpp_i_c)
> +$(obj)/%.E: $(src)/%.S FORCE
> +	$(call if_changed_dep,cpp_s_S)

It's kind of sad in this case that you can't fold these with the %.i
rules.

Besides the changes you make, don't you also need to adjust some
"clean" rule?

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 51/51] build: add %.E targets
  2021-10-13 15:48   ` Jan Beulich
@ 2021-10-14  6:52     ` Jan Beulich
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-14  6:52 UTC (permalink / raw)
  To: Anthony PERARD, Andrew Cooper
  Cc: George Dunlap, Ian Jackson, Julien Grall, Stefano Stabellini,
	Wei Liu, xen-devel

On 13.10.2021 17:48, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
>> I guess it's easier to remember that %.E does "$(CC) -E" or "$(CPP)".
> 
> I've never seen any *.E. I'm puzzled (and hence have reservations, but
> then again don't care enough to object).

Actually I've checked gcc, and it wouldn't know what to do with a *.E
file. Hence I'd like to ask that you add a reasonable reference to a
pre-existing use of this naming. Without such reference I'd feel the
addition would have more risk of confusion than possible value.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 40/51] build: fix dependencies in arch/x86/boot
  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
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-14  8:08 UTC (permalink / raw)
  To: Anthony PERARD; +Cc: Andrew Cooper, Roger Pau Monné, Wei Liu, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> Temporary fix the list of headers that cmdline.c and reloc.c depends
> on, until the next time the list is out of sync again.
> 
> Also, add the linker script to the list.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>

Afaict this is independent of all earlier patches, so I'll make an
attempt at committing this soon.

> --- a/xen/arch/x86/boot/Makefile
> +++ b/xen/arch/x86/boot/Makefile
> @@ -2,19 +2,22 @@ obj-bin-y += head.o
>  
>  DEFS_H_DEPS = $(BASEDIR)/$(src)/defs.h $(BASEDIR)/include/xen/stdbool.h
>  
> -CMDLINE_DEPS = $(DEFS_H_DEPS) $(BASEDIR)/$(src)/video.h
> +CMDLINE_DEPS = $(DEFS_H_DEPS) $(BASEDIR)/$(src)/video.h \
> +	       $(BASEDIR)/include/xen/kconfig.h \
> +	       $(BASEDIR)/include/generated/autoconf.h

Especially with this now needed in two places, I think down the road
(unless we'll get dependency tracking automated here, which a part of
your description suggests is not going to happen soon) we want

kconfig.h := $(BASEDIR)/include/xen/kconfig.h \
             $(BASEDIR)/include/generated/autoconf.h

and then similarly ...

>  RELOC_DEPS = $(DEFS_H_DEPS) \
>  	     $(BASEDIR)/include/generated/autoconf.h \
>  	     $(BASEDIR)/include/xen/kconfig.h \
>  	     $(BASEDIR)/include/xen/multiboot.h \
>  	     $(BASEDIR)/include/xen/multiboot2.h \
> +	     $(BASEDIR)/include/xen/const.h \

multiboot.h := $(BASEDIR)/include/xen/multiboot.h \
               $(BASEDIR)/include/xen/const.h \

(and by implication I think DEFS_H_DEPS would better be renamed to
deps.h as well).

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 41/51] build,x86: remove the need for build32.mk
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-14  8:32 UTC (permalink / raw)
  To: Anthony PERARD; +Cc: Andrew Cooper, Roger Pau Monné, Wei Liu, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> --- a/xen/arch/x86/boot/Makefile
> +++ b/xen/arch/x86/boot/Makefile
> @@ -1,23 +1,51 @@
>  obj-bin-y += head.o
> +head-objs := cmdline.S reloc.S
>  
> -DEFS_H_DEPS = $(BASEDIR)/$(src)/defs.h $(BASEDIR)/include/xen/stdbool.h
> +nocov-y += $(head-objs:.S=.o)
> +noubsan-y += $(head-objs:.S=.o)
> +targets += $(head-objs:.S=.o)

This working right depends on targets initially getting set with := ,
because of ...

> -CMDLINE_DEPS = $(DEFS_H_DEPS) $(BASEDIR)/$(src)/video.h \
> -	       $(BASEDIR)/include/xen/kconfig.h \
> -	       $(BASEDIR)/include/generated/autoconf.h
> +head-objs := $(addprefix $(obj)/, $(head-objs))

... this subsequent adjustment to the variable. Might it be more future
proof for start with

head-srcs := cmdline.S reloc.S

and then derive head-objs only here?

> -RELOC_DEPS = $(DEFS_H_DEPS) \
> -	     $(BASEDIR)/include/generated/autoconf.h \
> -	     $(BASEDIR)/include/xen/kconfig.h \
> -	     $(BASEDIR)/include/xen/multiboot.h \
> -	     $(BASEDIR)/include/xen/multiboot2.h \
> -	     $(BASEDIR)/include/xen/const.h \
> -	     $(BASEDIR)/include/public/arch-x86/hvm/start_info.h
> +$(obj)/head.o: $(head-objs)
>  
> -$(obj)/head.o: $(obj)/cmdline.S $(obj)/reloc.S
> +LDFLAGS_DIRECT_OpenBSD = _obsd
> +LDFLAGS_DIRECT_FreeBSD = _fbsd

This is somewhat ugly - it means needing to change things in two places
when config/x86_32.mk would change (e.g. to add another build OS). How
about ...

> +$(head-objs:.S=.lnk): LDFLAGS_DIRECT := -melf_i386$(LDFLAGS_DIRECT_$(XEN_OS))

... instead:

$(head-objs:.S=.lnk): LDFLAGS_DIRECT := $(subst x86_64,i386,$(LDFLAGS_DIRECT))

? Or if deemed still too broad

$(head-objs:.S=.lnk): LDFLAGS_DIRECT := $(subst elf_x86_64,elf_i386,$(LDFLAGS_DIRECT))

?

> -$(obj)/cmdline.S: $(src)/cmdline.c $(CMDLINE_DEPS) $(src)/build32.lds
> -	$(MAKE) -f $(BASEDIR)/$(src)/build32.mk -C $(obj) $(@F) CMDLINE_DEPS="$(CMDLINE_DEPS)"
> +CFLAGS_x86_32 := -m32 -march=i686
> +CFLAGS_x86_32 += -fno-strict-aliasing
> +CFLAGS_x86_32 += -std=gnu99
> +CFLAGS_x86_32 += -Wall -Wstrict-prototypes
> +$(call cc-option-add,CFLAGS_x86_32,CC,-Wdeclaration-after-statement)
> +$(call cc-option-add,CFLAGS_x86_32,CC,-Wno-unused-but-set-variable)
> +$(call cc-option-add,CFLAGS_x86_32,CC,-Wno-unused-local-typedefs)
> +$(call cc-options-add,CFLAGS_x86_32,CC,$(EMBEDDED_EXTRA_CFLAGS))
> +CFLAGS_x86_32 += -Werror -fno-builtin -g0 -msoft-float
> +CFLAGS_x86_32 += -I$(srctree)/include

I'm afraid I'm not convinced that having to keep this in sync with the
original is in fair balance with the removal of build32.mk.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 42/51] build: grab common EFI source files in arch specific dir
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-14  8:51 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> Rather than preparing the efi source file, we will copy them as needed
> from the build location.
> 
> Avoid the links as they seems fragile in out-of-tree builds. Also by
> making a copy, we don't need to figure out the relative path or we
> don't need to use absolute path.

I agree that symlinks wouldn't be nice for the out-of-tree build case.
Otoh please see
https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=8c6740616cd244e5763e974cb737affbe71db385
albeit I'll admit the situation was a little different there because
it's pre-built files which get populated into the build tree.

> --- a/xen/arch/arm/efi/Makefile
> +++ b/xen/arch/arm/efi/Makefile
> @@ -1,4 +1,10 @@
>  CFLAGS-y += -fshort-wchar
> +CFLAGS-y += -I$(srctree)/common/efi

Perhaps another opportunity for -iquote?

>  obj-y += boot.init.o pe.init.o ebmalloc.o runtime.o
>  obj-$(CONFIG_ACPI) +=  efi-dom0.init.o
> +
> +$(obj)/%.c: common/efi/%.c
> +	$(Q)cp -f $< $@

In case both trees are on the same file system, trying to hardlink first
would seem desirable. When copying, I think you should also pass -p.

> --- a/xen/arch/x86/efi/Makefile
> +++ b/xen/arch/x86/efi/Makefile
> @@ -1,4 +1,5 @@
>  CFLAGS-y += -fshort-wchar
> +CFLAGS-y += -I$(srctree)/common/efi
>  
>  quiet_cmd_objcopy_o_ihex = OBJCOPY $@
>  cmd_objcopy_o_ihex = $(OBJCOPY) -I ihex -O binary $< $@
> @@ -19,3 +20,8 @@ obj-$(XEN_BUILD_EFI) := $(filter-out %.init.o,$(EFIOBJ-y))
>  obj-bin-$(XEN_BUILD_EFI) := $(filter %.init.o,$(EFIOBJ-y))
>  extra-$(XEN_BUILD_EFI) += buildid.o relocs-dummy.o
>  nocov-$(XEN_BUILD_EFI) += stub.o
> +
> +$(obj)/%.c: common/efi/%.c
> +	$(Q)cp -f $< $@
> +
> +.PRECIOUS: $(obj)/%.c

Seeing you repeat everything here, despite it not being all this much I
wonder if there wouldn't better be a makefile fragment in common/efi/
which all interested architectures' arch/<arch>/efi/Makefile would then
include. This could then also subsume -fshort-wchar.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 43/51] build: replace $(BASEDIR) by $(objtree)
  2021-08-24 10:50 ` [XEN PATCH v7 43/51] build: replace $(BASEDIR) by $(objtree) Anthony PERARD
@ 2021-10-14  9:21   ` Jan Beulich
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-14  9:21 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> We need to differentiate between source files and generated/built
> files. We will be replacing $(BASEDIR) by $(objtree) for files that
> are generated, and $(abs_objtree) in cases where an absolute path is
> necessary.
> 
> The "clean" target is still changing to the subdir been cleaned, to
> remove file in the root we need to use $(abs_objtree).

Vaguely related more general question: How useful is "clean" for an
out-of-tree build? That ought to effectively remove the entire build
tree, which may not be overly sensible to do via "make clean-xen",
but instead simply "rm -rf ...".

> @@ -117,4 +117,4 @@ $(obj)/dtb.o: $(patsubst "%",%,$(CONFIG_DTB_FILE))
>  .PHONY: clean
>  clean::
>  	rm -f $(obj)/xen.lds
> -	rm -f $(BASEDIR)/.xen-syms.[0-9]*
> +	rm -f $(abs_objtree)/.xen-syms.[0-9]*

This part is common - would it make sense to move to xen/Makefile, thus
- aiui - eliminating the need for using $(abs_objtree) here / there?

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 44/51] build: add $(srctree) in few key places
  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
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-14  9:26 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, Roger Pau Monné,
	Wei Liu, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Daniel De Graaf, Daniel P. Smith, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> This adds $(srctree) to a few path where make's VPATH=$(srctree) won't
> apply.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 45/51] build: rework cloc recipe
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-14  9:33 UTC (permalink / raw)
  To: Anthony PERARD, Stefano Stabellini
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall, Wei Liu,
	xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> After folowing patches, the recipe doesn't work anymore.
>     - build: build everything from the root dir, use obj=$subdir
>     - build: introduce if_changed_deps

That was some 20 patches ago - shouldn't all make goals continue to
work at every step?

> First patch mean that $(names) already have $(path), and the second
> one, the .*.d files are replaced by .*.cmd files which are much
> simpler to parse here.
> 
> Also replace the makefile programming by a much simpler shell command.
> 
> This doesn't check anymore if the source file exist, but that can be
> fixed by running `make clean`, and probably doesn't impact the
> calculation. `cloc` just complain that some files don't exist.

Not sure whether that's acceptable - Stefano, iirc it was you who
introduced this goal.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 46/51] build: replace $(BASEDIR) by $(srctree)
  2021-08-24 10:50 ` [XEN PATCH v7 46/51] build: replace $(BASEDIR) by $(srctree) Anthony PERARD
@ 2021-10-14  9:36   ` Jan Beulich
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-14  9:36 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Daniel De Graaf, Daniel P. Smith,
	xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> $(srctree) is a better description for the source directory than
> $(BASEDIR) that has been used for both source and build directory
> (which where the same).
> 
> "clean" is still changing directory, so we need to use absolute path
> for it.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>

I'm curious though why this was split from patch 44. It doesn't look
to me as if patch 45 would have changed anything that's related here.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 47/51] build: Rework "clean" to clean from the root dir
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-14  9:44 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> This will allow "clean" to work from an out-of-tree build when
> it will be available.
> 
> Some of the file been removed in current "clean" target aren't added
> to $(clean-files) because they are already listed in $(extra-) or
> $(extra-y).
> 
> Also clean files in "arch/x86/boot" from that directory by allowing
> "clean" to descend into the subdir by adding "boot" into $(subdir-).

"descend into" (also used in a respective comment) looks contrary to
doing everything from the root now, at least to me.

> --- a/xen/scripts/Kbuild.include
> +++ b/xen/scripts/Kbuild.include
> @@ -98,7 +98,7 @@ build := -f $(srctree)/Rules.mk obj
>  # Shorthand for $(MAKE) clean
>  # Usage:
>  # $(MAKE) $(clean) dir
> -clean := -f $(abs_srctree)/scripts/Makefile.clean clean -C
> +clean := -f $(srctree)/scripts/Makefile.clean obj

Doesn't the comment want changing as well?

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 48/51] build: Rework "headers*.chk" prerequisite in include/
  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
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-14  9:48 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> Listing public headers when out-of-tree build are involved becomes
> more annoying where every path to every headers needs to start with
> "$(srctree)/$(src)", or $(wildcard ) will not work. This means more
> repetition.
> 
> This patch attempt to reduce the amount of duplication and make better
> use of make's meta programming capability. The filters are now listed
> in a variable and don't have to repeat the path to the headers files
> as this is added later as needed.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>

Sorry, just one nit here:

> --- a/xen/include/Makefile
> +++ b/xen/include/Makefile
> @@ -78,10 +78,21 @@ ifeq ($(XEN_TARGET_ARCH),$(XEN_COMPILE_ARCH))
>  
>  all: $(obj)/headers.chk $(obj)/headers99.chk $(obj)/headers++.chk
>  
> -PUBLIC_HEADERS := $(filter-out $(src)/public/arch-% $(src)/public/dom0_ops.h, $(wildcard $(src)/public/*.h $(src)/public/*/*.h))
> +hdrs-path := $(srctree)/$(src)/public
>  
> -PUBLIC_C99_HEADERS := $(src)/public/io/9pfs.h $(src)/public/io/pvcalls.h
> -PUBLIC_ANSI_HEADERS := $(filter-out $(src)/public/%ctl.h $(src)/public/xsm/% $(src)/public/%hvm/save.h $(PUBLIC_C99_HEADERS), $(PUBLIC_HEADERS))

These all had / have "PUBLIC" in their names because the makefile doesn't
live in public/. I'd prefer if you could stick to this for all the new
variables/macros you add (lower case then of course).

Jan

> +list-headers = $(wildcard $1/*.h $1/*/*.h)
> +filter-headers = $(filter-out $(addprefix $(hdrs-path)/,$($1-filter)), $($1))
> +
> +c99-headers := io/9pfs.h io/pvcalls.h
> +public-headers := $(call list-headers,$(hdrs-path))
> +ansi-headers := $(public-headers)
> +
> +public-headers-filter := dom0_ops.h arch-%
> +ansi-headers-filter := %ctl.h xsm/% %hvm/save.h $(public-headers-filter) $(c99-headers)
> +
> +PUBLIC_HEADERS := $(call filter-headers,public-headers)
> +PUBLIC_ANSI_HEADERS := $(call filter-headers,ansi-headers)
> +PUBLIC_C99_HEADERS := $(addprefix $(hdrs-path)/, $(c99-headers))
>  
>  $(src)/public/io/9pfs.h-prereq := string
>  $(src)/public/io/pvcalls.h-prereq := string
> 



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 49/51] build: adding out-of-tree support to the xen build
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-14 10:14 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> This implement out-of-tree support, there's two ways to create an
> out-of-tree build tree (after that, `make` in that new directory
> works):
>     make O=build
>     mkdir build; cd build; make -f ../Makefile
> also works with an absolute path for both.
> 
> This implementation only works if the source tree is clean, as we use
> VPATH.
> 
> This patch copies most new code with handling out-of-tree build from
> Linux v5.12.
> 
> Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> ---
>  xen/Makefile                | 173 +++++++++++++++++++++++++++++-------
>  xen/Rules.mk                |  11 ++-
>  xen/arch/arm/efi/Makefile   |   3 +
>  xen/arch/x86/arch.mk        |   3 +
>  xen/arch/x86/boot/Makefile  |   5 +-
>  xen/arch/x86/efi/Makefile   |   3 +
>  xen/include/Makefile        |   9 +-
>  xen/scripts/mkmakefile      |  17 ++++
>  xen/test/livepatch/Makefile |   2 +
>  xen/xsm/flask/Makefile      |   3 +
>  xen/xsm/flask/ss/Makefile   |   3 +
>  11 files changed, 194 insertions(+), 38 deletions(-)
>  create mode 100755 xen/scripts/mkmakefile

Linux have done away with this script just recently; I don't think we
should introduce it.

> --- a/xen/Makefile
> +++ b/xen/Makefile
> @@ -1,3 +1,7 @@
> +# $(lastword,) for GNU Make older than 0.81

DYM 3.81?

> +lastword = $(word $(words $(1)),$(1))
> +this-makefile := $(call lastword,$(MAKEFILE_LIST))

Oh - is it documented somewhere that this would always be last?

> @@ -17,33 +21,18 @@ export XEN_BUILD_HOST	?= $(shell hostname)
>  PYTHON_INTERPRETER	:= $(word 1,$(shell which python3 python python2 2>/dev/null) python)
>  export PYTHON		?= $(PYTHON_INTERPRETER)
>  
> -export XEN_ROOT := $(CURDIR)/..
> +$(if $(filter __%, $(MAKECMDGOALS)), \
> +	$(error targets prefixed with '__' are only for internal use))
>  
> -srctree := .
> -objtree := .
> -export srctree objtree
> +# That's our default target when none is given on the command line
> +PHONY := __all
> +__all:
>  
>  # Do not use make's built-in rules and variables
>  MAKEFLAGS += -rR
>  
>  EFI_MOUNTPOINT ?= $(BOOT_DIR)/efi
>  
> -ARCH=$(XEN_TARGET_ARCH)
> -SRCARCH=$(shell echo $(ARCH) | \
> -          sed -e 's/x86.*/x86/' -e s'/arm\(32\|64\)/arm/g' \
> -              -e s'/riscv.*/riscv/g')
> -export ARCH SRCARCH
> -
> -# Don't break if the build process wasn't called from the top level
> -# we need XEN_TARGET_ARCH to generate the proper config
> -include $(XEN_ROOT)/Config.mk
> -
> -# Set ARCH/SUBARCH appropriately.
> -export TARGET_SUBARCH  := $(XEN_TARGET_ARCH)
> -export TARGET_ARCH     := $(shell echo $(XEN_TARGET_ARCH) | \
> -                            sed -e 's/x86.*/x86/' -e s'/arm\(32\|64\)/arm/g' \
> -                                -e s'/riscv.*/riscv/g')
> -
>  # Allow someone to change their config file
>  export KCONFIG_CONFIG ?= .config

Would it be possible to split off some of the pure movement of pieces,
to make it easier to see what (if anything) is actually changed at the
same time as getting moved?

> @@ -51,14 +40,9 @@ export CC CXX LD
>  
>  export TARGET := xen
>  
> -.PHONY: default
> -default: build
> -
>  .PHONY: dist
>  dist: install
>  
> -include scripts/Kbuild.include
> -
>  ifneq ($(root-make-done),y)
>  # section to run before calling Rules.mk, but only once.
>  
> @@ -130,14 +114,93 @@ endif
>  
>  ifneq ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),)
>      quiet := silent_
> +    KBUILD_VERBOSE = 0
>  endif

In how far is this related here? Doesn't this belong in an earlier patch?

>  export quiet Q KBUILD_VERBOSE
>  
> +# $(realpath,) for GNU Make older than 0.81

Again - 3.81?

> +ifeq ($(abs_srctree),$(abs_objtree))
> +        # building in the source tree
> +        srctree := .
> +	building_out_of_srctree :=
> +else
> +        ifeq ($(abs_srctree)/,$(dir $(abs_objtree)))
> +                # building in a subdirectory of the source tree
> +                srctree := ..
> +        else
> +                srctree := $(abs_srctree)
> +        endif
> +	building_out_of_srctree := 1
> +endif
> +
> +objtree		:= .
> +VPATH		:= $(srctree)

Would you mind using blank padding here, and perhaps fewer blanks than
the tabs are worth?

> --- a/xen/Rules.mk
> +++ b/xen/Rules.mk
> @@ -38,7 +38,7 @@ SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
>                           $(foreach r,rel rel.ro,data.$(r).local)
>  
>  # The filename build.mk has precedence over Makefile
> -mk-dir := $(src)
> +mk-dir := $(srctree)/$(src)
>  include $(if $(wildcard $(mk-dir)/build.mk),$(mk-dir)/build.mk,$(mk-dir)/Makefile)

Perhaps already when it was changed to $(src) the name has become
slightly misleading, at least imo: I would rather expect a variable
with this name to refer to the build dir/tree. Maybe "srcdir" or
even shorted "sd" right from the start? (Reaching here I can finally
see why having a shorthand is helpful.)

> --- a/xen/arch/x86/efi/Makefile
> +++ b/xen/arch/x86/efi/Makefile
> @@ -1,5 +1,8 @@
>  CFLAGS-y += -fshort-wchar
>  CFLAGS-y += -I$(srctree)/common/efi
> +ifdef building_out_of_srctree
> +CFLAGS-y += -I$(srctree)/$(src)
> +endif

At the example of this (where perhaps -iquote could be used again) - is
it strictly necessary to have the ifdef-s around such? I.e. would things
fail to work for an in-tree build without them?

> --- a/xen/include/Makefile
> +++ b/xen/include/Makefile
> @@ -110,7 +110,7 @@ $(obj)/headers99.chk: $(PUBLIC_C99_HEADERS) $(src)/Makefile
>  	$(foreach i, $(filter %.h,$^),                                        \
>  	    echo "#include "\"$(i)\"                                          \
>  	    | $(CC) -x c -std=c99 -Wall -Werror                               \
> -	      -include stdint.h $(foreach j, $($(i)-prereq), -include $(j).h) \
> +	      -include stdint.h $(foreach j, $($(patsubst $(srctree)/%,%,$i)-prereq), -include $(j).h) \

Please split the $(foreach ...) from the earlier -include.

> @@ -124,8 +124,8 @@ $(obj)/headers++.chk: $(PUBLIC_HEADERS) $(src)/Makefile
>  	$(foreach i, $(filter %.h,$^),                                        \
>  	    echo "#include "\"$(i)\"                                          \
>  	    | $(CXX) -x c++ -std=gnu++98 -Wall -Werror -D__XEN_TOOLS__        \
> -	      -include stdint.h -include $(src)/public/xen.h                  \
> -	      $(foreach j, $($(i)-prereq), -include c$(j)) -S -o /dev/null -  \
> +	      -include stdint.h -include $(srctree)/$(src)/public/xen.h       \
> +	      $(foreach j, $($(patsubst $(srctree)/%,%,$i)-prereq), -include c$(j)) -S -o /dev/null -  \

Similarly here please split -S ... onto the next line.

> --- a/xen/xsm/flask/ss/Makefile
> +++ b/xen/xsm/flask/ss/Makefile
> @@ -9,3 +9,6 @@ obj-y += conditional.o
>  obj-y += mls.o
>  
>  CFLAGS-y += -I$(srctree)/xsm/flask/include
> +ifdef building_out_of_srctree
> +    CFLAGS-y += -I$(objtree)/xsm/flask/include

There's no header in $(srctree)/xsm/flask/include in this case, so if you
use "ifdef" here, shouldn't that other part move into an "else"?

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 50/51] build: specify source tree in include/ for prerequisite
  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
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-14 10:19 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On 24.08.2021 12:50, Anthony PERARD wrote:
> When doing an out-of-tree build, and thus setting VPATH,
> GNU Make 0.81 on Ubuntu Trusty complains about Circular dependency of
> include/Makefile and include/xlat.lst and drop them. The build fails
> later due to headers malformed.

Doesn't this change need to come ahead of the one enabling out-of-tree
builds then? Also do you again mean 3.81?

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 26/51] build: build everything from the root dir, use obj=$subdir
  2021-10-13 14:24     ` Anthony PERARD
@ 2021-10-14 13:33       ` Anthony PERARD
  2021-10-14 13:54         ` Jan Beulich
  0 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-10-14 13:33 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Bob Eshleman, Andrew Cooper, George Dunlap, Ian Jackson,
	Julien Grall, Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Alistair Francis, Connor Davis, Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel

On Wed, Oct 13, 2021 at 03:24:31PM +0100, Anthony PERARD wrote:
> On Mon, Oct 11, 2021 at 04:02:22PM +0200, Jan Beulich wrote:
> > On 24.08.2021 12:50, Anthony PERARD wrote:
> > >  ifeq ($(CONFIG_ENFORCE_UNIQUE_SYMBOLS),y)
> > >      cmd_cc_o_c = $(CC) $(c_flags) -c $< -o $(dot-target).tmp -MQ $@
> > >      ifeq ($(CONFIG_CC_IS_CLANG),y)
> > > -        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $<=$(SRCPATH)/$< $(dot-target).tmp $@
> > > +        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $(<F)=$< $(dot-target).tmp $@
> > 
> > Are you sure about the $< => $(<F) transformation here? Previoiusly it
> > was present only ...
> 
> I have to check again. Maybe $< didn't work and it's more obvious with
> this patch. Or maybe that depends on the version of clang.

With clang 12, the original line doesn't work for the few objects that
are built from "subdir/source.c". I guess it is just by luck that they
aren't any duplicated symbols.

> > >      else
> > > -        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $(<F)=$(SRCPATH)/$< $(dot-target).tmp $@
> > > +        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $(<F)=$< $(dot-target).tmp $@
> > 
> > ... here.

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 26/51] build: build everything from the root dir, use obj=$subdir
  2021-10-14 13:33       ` Anthony PERARD
@ 2021-10-14 13:54         ` Jan Beulich
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-14 13:54 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Bob Eshleman, Andrew Cooper, George Dunlap, Ian Jackson,
	Julien Grall, Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Alistair Francis, Connor Davis, Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel

On 14.10.2021 15:33, Anthony PERARD wrote:
> On Wed, Oct 13, 2021 at 03:24:31PM +0100, Anthony PERARD wrote:
>> On Mon, Oct 11, 2021 at 04:02:22PM +0200, Jan Beulich wrote:
>>> On 24.08.2021 12:50, Anthony PERARD wrote:
>>>>  ifeq ($(CONFIG_ENFORCE_UNIQUE_SYMBOLS),y)
>>>>      cmd_cc_o_c = $(CC) $(c_flags) -c $< -o $(dot-target).tmp -MQ $@
>>>>      ifeq ($(CONFIG_CC_IS_CLANG),y)
>>>> -        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $<=$(SRCPATH)/$< $(dot-target).tmp $@
>>>> +        cmd_objcopy_fix_sym = $(OBJCOPY) --redefine-sym $(<F)=$< $(dot-target).tmp $@
>>>
>>> Are you sure about the $< => $(<F) transformation here? Previoiusly it
>>> was present only ...
>>
>> I have to check again. Maybe $< didn't work and it's more obvious with
>> this patch. Or maybe that depends on the version of clang.
> 
> With clang 12, the original line doesn't work for the few objects that
> are built from "subdir/source.c". I guess it is just by luck that they
> aren't any duplicated symbols.

Well, I recall that there was different behavior and hence different
treatment was needed. If that's no longer the case with your changes,
then that's certainly fine, but will want explaining in the description.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 27/51] build: introduce if_changed_deps
  2021-10-11 14:20   ` Jan Beulich
@ 2021-10-14 13:56     ` Anthony PERARD
  0 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-10-14 13:56 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Roger Pau Monné,
	xen-devel

On Mon, Oct 11, 2021 at 04:20:36PM +0200, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
> > @@ -400,7 +407,7 @@ $(TARGET).gz: $(TARGET)
> >  	gzip -n -f -9 < $< > $@.new
> >  	mv $@.new $@
> >  
> > -$(TARGET): FORCE
> > +$(TARGET): tools_fixdep FORCE
> >  	$(MAKE) -C tools
> 
> Shouldn't this include building fixdep, in which case the extra dependency
> here is unnecessary? I can see that it's needed ...

Indeed, we don't really needs "tools_fixdep" prerequisite because the
first command of the recipe is going to build fixdep.

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 32/51] build: Remove KBUILD_ specific from Makefile.host
  2021-10-11 15:47   ` Jan Beulich
@ 2021-10-14 14:18     ` Anthony PERARD
  0 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-10-14 14:18 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On Mon, Oct 11, 2021 at 05:47:29PM +0200, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
> > This will allow $(HOSTCFLAGS) to actually be used when building
> > programmes for the build-host.
> > 
> > The other variable don't exist in our build system.
> > 
> > Also remove $(KBUILD_EXTMOD) since it should always be empty.
> > 
> > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> 
> Acked-by: Jan Beulich <jbeulich@suse.com>
> 
> I wonder though whether their use of KBUILD_ prefixes doesn't match
> our XEN_ ones (e.g. KBUILD_CFLAGS vs XEN_CFLAGS), in which case
> replacing rather than stripping might be the way to go.

Well, at the moment, HOSTCFLAGS is defined in Config.mk, and xen/ makes
use of it. I don't think the other variable that I strip KBUILD_ from
exist, so maybe for those, changing prefix for XEN_ would be fine.
But for HOSTCFLAGS, I think we would want a new patch to set it in
xen/Makefile, and use it in xen/. But I don't think we need to spend
time on it at the moment.

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 38/51] build: use main rune to build host binary x86's mkelf32 and mkreloc
  2021-10-11 15:56   ` Jan Beulich
@ 2021-10-14 14:20     ` Anthony PERARD
  0 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-10-14 14:20 UTC (permalink / raw)
  To: Jan Beulich; +Cc: Andrew Cooper, Roger Pau Monné, Wei Liu, xen-devel

On Mon, Oct 11, 2021 at 05:56:06PM +0200, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
> > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> 
> Acked-by: Jan Beulich <jbeulich@suse.com>
> 
> > --- a/xen/arch/x86/Makefile
> > +++ b/xen/arch/x86/Makefile
> > @@ -81,6 +81,10 @@ endif
> >  extra-y += asm-macros.i
> >  extra-y += xen.lds
> >  
> > +hostprogs-y += boot/mkelf32
> > +HOSTCFLAGS_efi/mkreloc.o := -g
> 
> To be honest I don't think this extra option would have been necessary
> to retain.

Probably not, I'll remove it.

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 30/51] build: hook kconfig into xen build system
  2021-10-11 15:38   ` Jan Beulich
@ 2021-10-14 15:09     ` Anthony PERARD
  0 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-10-14 15:09 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Doug Goldstein, xen-devel

On Mon, Oct 11, 2021 at 05:38:47PM +0200, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
> > Now that xen's build system is very close to Linux's ones, we can hook
> > "Makefile.host" into Xen's build system, and we can build Kconfig with
> > that.
> > 
> > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> 
> Reviewed-by: Jan Beulich <jbeulich@suse.com>

Thanks.

I'll be squashing the previous patch into this one i.e. adding
"$(XEN_ROOT)/.config: ;" into tools/kconfig/Makefile (the previous patch
was adding it into Rules.mk).

And will be adding the following into the commit message:

    "tools/kconfig/Makefile" now needs a workaround to not rebuild
    "$(XEN_ROOT)/.config", as `make` tries the rules "%.config" which
    fails with:
        tools/kconfig/Makefile:95: *** No configuration exists for this target on this architecture.  Stop.

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 41/51] build,x86: remove the need for build32.mk
  2021-10-14  8:32   ` Jan Beulich
@ 2021-10-15 15:52     ` Anthony PERARD
  2021-10-18  8:43       ` Jan Beulich
  0 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-10-15 15:52 UTC (permalink / raw)
  To: Jan Beulich; +Cc: Andrew Cooper, Roger Pau Monné, Wei Liu, xen-devel

On Thu, Oct 14, 2021 at 10:32:05AM +0200, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
> > --- a/xen/arch/x86/boot/Makefile
> > +++ b/xen/arch/x86/boot/Makefile
> > @@ -1,23 +1,51 @@
> >  obj-bin-y += head.o
> > +head-objs := cmdline.S reloc.S
> >  
> > -DEFS_H_DEPS = $(BASEDIR)/$(src)/defs.h $(BASEDIR)/include/xen/stdbool.h
> > +nocov-y += $(head-objs:.S=.o)
> > +noubsan-y += $(head-objs:.S=.o)
> > +targets += $(head-objs:.S=.o)
> 
> This working right depends on targets initially getting set with := ,
> because of ...

They are because Rules.mk initialise those variables that way.

> > -CMDLINE_DEPS = $(DEFS_H_DEPS) $(BASEDIR)/$(src)/video.h \
> > -	       $(BASEDIR)/include/xen/kconfig.h \
> > -	       $(BASEDIR)/include/generated/autoconf.h
> > +head-objs := $(addprefix $(obj)/, $(head-objs))
> 
> ... this subsequent adjustment to the variable. Might it be more future
> proof for start with
> 
> head-srcs := cmdline.S reloc.S
> 
> and then derive head-objs only here?

I'll give it a try.

> > -RELOC_DEPS = $(DEFS_H_DEPS) \
> > -	     $(BASEDIR)/include/generated/autoconf.h \
> > -	     $(BASEDIR)/include/xen/kconfig.h \
> > -	     $(BASEDIR)/include/xen/multiboot.h \
> > -	     $(BASEDIR)/include/xen/multiboot2.h \
> > -	     $(BASEDIR)/include/xen/const.h \
> > -	     $(BASEDIR)/include/public/arch-x86/hvm/start_info.h
> > +$(obj)/head.o: $(head-objs)
> >  
> > -$(obj)/head.o: $(obj)/cmdline.S $(obj)/reloc.S
> > +LDFLAGS_DIRECT_OpenBSD = _obsd
> > +LDFLAGS_DIRECT_FreeBSD = _fbsd
> 
> This is somewhat ugly - it means needing to change things in two places
> when config/x86_32.mk would change (e.g. to add another build OS). How
> about ...
> 
> > +$(head-objs:.S=.lnk): LDFLAGS_DIRECT := -melf_i386$(LDFLAGS_DIRECT_$(XEN_OS))
> 
> ... instead:
> 
> $(head-objs:.S=.lnk): LDFLAGS_DIRECT := $(subst x86_64,i386,$(LDFLAGS_DIRECT))
> 
> ? Or if deemed still too broad
> 
> $(head-objs:.S=.lnk): LDFLAGS_DIRECT := $(subst elf_x86_64,elf_i386,$(LDFLAGS_DIRECT))
> 
> ?

Sounds good, I'll do that.

> > -$(obj)/cmdline.S: $(src)/cmdline.c $(CMDLINE_DEPS) $(src)/build32.lds
> > -	$(MAKE) -f $(BASEDIR)/$(src)/build32.mk -C $(obj) $(@F) CMDLINE_DEPS="$(CMDLINE_DEPS)"
> > +CFLAGS_x86_32 := -m32 -march=i686
> > +CFLAGS_x86_32 += -fno-strict-aliasing
> > +CFLAGS_x86_32 += -std=gnu99
> > +CFLAGS_x86_32 += -Wall -Wstrict-prototypes
> > +$(call cc-option-add,CFLAGS_x86_32,CC,-Wdeclaration-after-statement)
> > +$(call cc-option-add,CFLAGS_x86_32,CC,-Wno-unused-but-set-variable)
> > +$(call cc-option-add,CFLAGS_x86_32,CC,-Wno-unused-local-typedefs)
> > +$(call cc-options-add,CFLAGS_x86_32,CC,$(EMBEDDED_EXTRA_CFLAGS))
> > +CFLAGS_x86_32 += -Werror -fno-builtin -g0 -msoft-float
> > +CFLAGS_x86_32 += -I$(srctree)/include
> 
> I'm afraid I'm not convinced that having to keep this in sync with the
> original is in fair balance with the removal of build32.mk.

Why would this needs to be kept in sync with the original? I would
actually like to get rid of Config.mk, I don't see the point in sharing
CFLAGS between a kernel and userspace binaries. Also, I hope one day
that we can have the hypervisor in its own repo, and thus they won't be
any Config.mk to keep in sync with.

The goal of this patch is less about removing build32.mk, and more about
using the rest of the build system infrastructure to build those few
32bits objects, and been able to use the automatic dependencies
generation and other things without having to duplicate them.

It probably make the build a bit faster as there is two less invocation
of $(MAKE) (which parse Config.mk).

As for a possible change: instead of having those x86_32 flags in
arch/x86/boot/, I could have them in arch/x86/arch.mk. Linux does
something like that were it prepare REALMODE_CFLAGS.

I know it's a bit annoying to have another list x86_32 cflags, but I
don't see how we can extract them from Config.mk (in a Makefile where we
want to use both x86_32 and x86_64 flags).

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 42/51] build: grab common EFI source files in arch specific dir
  2021-10-14  8:51   ` Jan Beulich
@ 2021-10-15 16:29     ` Anthony PERARD
  2021-10-18  8:48       ` Jan Beulich
  0 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-10-15 16:29 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	xen-devel

On Thu, Oct 14, 2021 at 10:51:44AM +0200, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
> > --- a/xen/arch/arm/efi/Makefile
> > +++ b/xen/arch/arm/efi/Makefile
> > @@ -1,4 +1,10 @@
> >  CFLAGS-y += -fshort-wchar
> > +CFLAGS-y += -I$(srctree)/common/efi
> 
> Perhaps another opportunity for -iquote?

Yes.

> >  obj-y += boot.init.o pe.init.o ebmalloc.o runtime.o
> >  obj-$(CONFIG_ACPI) +=  efi-dom0.init.o
> > +
> > +$(obj)/%.c: common/efi/%.c
> > +	$(Q)cp -f $< $@
> 
> In case both trees are on the same file system, trying to hardlink first
> would seem desirable. When copying, I think you should also pass -p.

I don't know if doing an hardlink is a good thing to do, I'm not sure of
the kind of issue this could bring. As for -p, I don't think it's a good
idea to copy the mode, ownership, and timestamps of the source file, I'd
rather have the timestamps that Make expect, e.i. "now".

> > --- a/xen/arch/x86/efi/Makefile
> > +++ b/xen/arch/x86/efi/Makefile
> > @@ -1,4 +1,5 @@
> >  CFLAGS-y += -fshort-wchar
> > +CFLAGS-y += -I$(srctree)/common/efi
> >  
> >  quiet_cmd_objcopy_o_ihex = OBJCOPY $@
> >  cmd_objcopy_o_ihex = $(OBJCOPY) -I ihex -O binary $< $@
> > @@ -19,3 +20,8 @@ obj-$(XEN_BUILD_EFI) := $(filter-out %.init.o,$(EFIOBJ-y))
> >  obj-bin-$(XEN_BUILD_EFI) := $(filter %.init.o,$(EFIOBJ-y))
> >  extra-$(XEN_BUILD_EFI) += buildid.o relocs-dummy.o
> >  nocov-$(XEN_BUILD_EFI) += stub.o
> > +
> > +$(obj)/%.c: common/efi/%.c
> > +	$(Q)cp -f $< $@
> > +
> > +.PRECIOUS: $(obj)/%.c
> 
> Seeing you repeat everything here, despite it not being all this much I
> wonder if there wouldn't better be a makefile fragment in common/efi/
> which all interested architectures' arch/<arch>/efi/Makefile would then
> include. This could then also subsume -fshort-wchar.

That sounds good, I'll look into that.

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 45/51] build: rework cloc recipe
  2021-10-14  9:33   ` Jan Beulich
@ 2021-10-15 16:34     ` Anthony PERARD
  0 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-10-15 16:34 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Stefano Stabellini, Andrew Cooper, George Dunlap, Ian Jackson,
	Julien Grall, Wei Liu, xen-devel

On Thu, Oct 14, 2021 at 11:33:16AM +0200, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
> > After folowing patches, the recipe doesn't work anymore.
> >     - build: build everything from the root dir, use obj=$subdir
> >     - build: introduce if_changed_deps
> 
> That was some 20 patches ago - shouldn't all make goals continue to
> work at every step?

That would be better yes, I'll look at bringing this patch earlier,
which would probably mean making changes to the rule several more time.

> > First patch mean that $(names) already have $(path), and the second
> > one, the .*.d files are replaced by .*.cmd files which are much
> > simpler to parse here.
> > 
> > Also replace the makefile programming by a much simpler shell command.
> > 
> > This doesn't check anymore if the source file exist, but that can be
> > fixed by running `make clean`, and probably doesn't impact the
> > calculation. `cloc` just complain that some files don't exist.
> 
> Not sure whether that's acceptable - Stefano, iirc it was you who
> introduced this goal.
> 
> Jan
> 

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 47/51] build: Rework "clean" to clean from the root dir
  2021-10-14  9:44   ` Jan Beulich
@ 2021-10-15 16:40     ` Anthony PERARD
  0 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-10-15 16:40 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel

On Thu, Oct 14, 2021 at 11:44:00AM +0200, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
> > This will allow "clean" to work from an out-of-tree build when
> > it will be available.
> > 
> > Some of the file been removed in current "clean" target aren't added
> > to $(clean-files) because they are already listed in $(extra-) or
> > $(extra-y).
> > 
> > Also clean files in "arch/x86/boot" from that directory by allowing
> > "clean" to descend into the subdir by adding "boot" into $(subdir-).
> 
> "descend into" (also used in a respective comment) looks contrary to
> doing everything from the root now, at least to me.

That's the language that Kbuild uses. While it is true that we don't
change directory, we still do the build of one directory at a time, and
the build system as its own understanding of what the current directory
is, even if it is different from $(CURDIR).

> > --- a/xen/scripts/Kbuild.include
> > +++ b/xen/scripts/Kbuild.include
> > @@ -98,7 +98,7 @@ build := -f $(srctree)/Rules.mk obj
> >  # Shorthand for $(MAKE) clean
> >  # Usage:
> >  # $(MAKE) $(clean) dir
> > -clean := -f $(abs_srctree)/scripts/Makefile.clean clean -C
> > +clean := -f $(srctree)/scripts/Makefile.clean obj
> 
> Doesn't the comment want changing as well?

Indeed,

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 49/51] build: adding out-of-tree support to the xen build
  2021-10-14 10:14   ` Jan Beulich
@ 2021-10-15 16:58     ` Anthony PERARD
  2021-10-18  9:02       ` Jan Beulich
  0 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-10-15 16:58 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel

On Thu, Oct 14, 2021 at 12:14:29PM +0200, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
> > This implement out-of-tree support, there's two ways to create an
> > out-of-tree build tree (after that, `make` in that new directory
> > works):
> >     make O=build
> >     mkdir build; cd build; make -f ../Makefile
> > also works with an absolute path for both.
> > 
> > This implementation only works if the source tree is clean, as we use
> > VPATH.
> > 
> > This patch copies most new code with handling out-of-tree build from
> > Linux v5.12.
> > 
> > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
> > ---
> >  xen/Makefile                | 173 +++++++++++++++++++++++++++++-------
> >  xen/Rules.mk                |  11 ++-
> >  xen/arch/arm/efi/Makefile   |   3 +
> >  xen/arch/x86/arch.mk        |   3 +
> >  xen/arch/x86/boot/Makefile  |   5 +-
> >  xen/arch/x86/efi/Makefile   |   3 +
> >  xen/include/Makefile        |   9 +-
> >  xen/scripts/mkmakefile      |  17 ++++
> >  xen/test/livepatch/Makefile |   2 +
> >  xen/xsm/flask/Makefile      |   3 +
> >  xen/xsm/flask/ss/Makefile   |   3 +
> >  11 files changed, 194 insertions(+), 38 deletions(-)
> >  create mode 100755 xen/scripts/mkmakefile
> 
> Linux have done away with this script just recently; I don't think we
> should introduce it.

Will change.

> > --- a/xen/Makefile
> > +++ b/xen/Makefile
> > @@ -1,3 +1,7 @@
> > +# $(lastword,) for GNU Make older than 0.81
> 
> DYM 3.81?

Yes.

> > +lastword = $(word $(words $(1)),$(1))
> > +this-makefile := $(call lastword,$(MAKEFILE_LIST))
> 
> Oh - is it documented somewhere that this would always be last?

Yes, it is even in Make's documentation about the variable:
    "if the first thing a makefile does is examine the last word in this
    variable, it will be the name of the current makefile."
    (taken from Make 3.80 documentation)

> > @@ -17,33 +21,18 @@ export XEN_BUILD_HOST	?= $(shell hostname)
> >  PYTHON_INTERPRETER	:= $(word 1,$(shell which python3 python python2 2>/dev/null) python)
> >  export PYTHON		?= $(PYTHON_INTERPRETER)
> >  
> > -export XEN_ROOT := $(CURDIR)/..
> > +$(if $(filter __%, $(MAKECMDGOALS)), \
> > +	$(error targets prefixed with '__' are only for internal use))
> >  
> > -srctree := .
> > -objtree := .
> > -export srctree objtree
> > +# That's our default target when none is given on the command line
> > +PHONY := __all
> > +__all:
> >  
> >  # Do not use make's built-in rules and variables
> >  MAKEFLAGS += -rR
> >  
> >  EFI_MOUNTPOINT ?= $(BOOT_DIR)/efi
> >  
> > -ARCH=$(XEN_TARGET_ARCH)
> > -SRCARCH=$(shell echo $(ARCH) | \
> > -          sed -e 's/x86.*/x86/' -e s'/arm\(32\|64\)/arm/g' \
> > -              -e s'/riscv.*/riscv/g')
> > -export ARCH SRCARCH
> > -
> > -# Don't break if the build process wasn't called from the top level
> > -# we need XEN_TARGET_ARCH to generate the proper config
> > -include $(XEN_ROOT)/Config.mk
> > -
> > -# Set ARCH/SUBARCH appropriately.
> > -export TARGET_SUBARCH  := $(XEN_TARGET_ARCH)
> > -export TARGET_ARCH     := $(shell echo $(XEN_TARGET_ARCH) | \
> > -                            sed -e 's/x86.*/x86/' -e s'/arm\(32\|64\)/arm/g' \
> > -                                -e s'/riscv.*/riscv/g')
> > -
> >  # Allow someone to change their config file
> >  export KCONFIG_CONFIG ?= .config
> 
> Would it be possible to split off some of the pure movement of pieces,
> to make it easier to see what (if anything) is actually changed at the
> same time as getting moved?

I'll give it a try.

> > @@ -51,14 +40,9 @@ export CC CXX LD
> >  
> >  export TARGET := xen
> >  
> > -.PHONY: default
> > -default: build
> > -
> >  .PHONY: dist
> >  dist: install
> >  
> > -include scripts/Kbuild.include
> > -
> >  ifneq ($(root-make-done),y)
> >  # section to run before calling Rules.mk, but only once.
> >  
> > @@ -130,14 +114,93 @@ endif
> >  
> >  ifneq ($(findstring s,$(filter-out --%,$(MAKEFLAGS))),)
> >      quiet := silent_
> > +    KBUILD_VERBOSE = 0
> >  endif
> 
> In how far is this related here? Doesn't this belong in an earlier patch?

That probably belong to a patch that have been committed some time ago,
and I've notice it was missing when comparing our makefile to Linux's
one. (Or maybe it wasn't set as well in Linux originally). I'll look if
that can be added to another patch, or just have a patch for this single
line.

> > --- a/xen/Rules.mk
> > +++ b/xen/Rules.mk
> > @@ -38,7 +38,7 @@ SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
> >                           $(foreach r,rel rel.ro,data.$(r).local)
> >  
> >  # The filename build.mk has precedence over Makefile
> > -mk-dir := $(src)
> > +mk-dir := $(srctree)/$(src)
> >  include $(if $(wildcard $(mk-dir)/build.mk),$(mk-dir)/build.mk,$(mk-dir)/Makefile)
> 
> Perhaps already when it was changed to $(src) the name has become
> slightly misleading, at least imo: I would rather expect a variable
> with this name to refer to the build dir/tree. Maybe "srcdir" or
> even shorted "sd" right from the start? (Reaching here I can finally
> see why having a shorthand is helpful.)

I have to think about that. I've made some further progress in order to
be able to build the Xen pvhshim without a link farm and notice that
nearly every source file needs to use "$(srctree)/$(src)" and I'm not
sure "$(src)" could be use alone. So having a single variable which have
both would be useful.

"srcdir" might be to close to "srctree" and one might mistake it for the
other, so "sd" might be better.

> > --- a/xen/arch/x86/efi/Makefile
> > +++ b/xen/arch/x86/efi/Makefile
> > @@ -1,5 +1,8 @@
> >  CFLAGS-y += -fshort-wchar
> >  CFLAGS-y += -I$(srctree)/common/efi
> > +ifdef building_out_of_srctree
> > +CFLAGS-y += -I$(srctree)/$(src)
> > +endif
> 
> At the example of this (where perhaps -iquote could be used again) - is
> it strictly necessary to have the ifdef-s around such? I.e. would things
> fail to work for an in-tree build without them?

ifdef isn't really necessary, gcc always check that directory first
anyway (for quote-included headers), so it is just a duplicate of gcc's
path list, but it would work fine. So I'll remove the ifdef.

> > --- a/xen/xsm/flask/ss/Makefile
> > +++ b/xen/xsm/flask/ss/Makefile
> > @@ -9,3 +9,6 @@ obj-y += conditional.o
> >  obj-y += mls.o
> >  
> >  CFLAGS-y += -I$(srctree)/xsm/flask/include
> > +ifdef building_out_of_srctree
> > +    CFLAGS-y += -I$(objtree)/xsm/flask/include
> 
> There's no header in $(srctree)/xsm/flask/include in this case, so if you
> use "ifdef" here, shouldn't that other part move into an "else"?

Actually, there are headers in the source, like "security.h", and `git
ls-files xen/xsm/flask/include` shows plenty other headers.

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 50/51] build: specify source tree in include/ for prerequisite
  2021-10-14 10:19   ` Jan Beulich
@ 2021-10-15 17:02     ` Anthony PERARD
  0 siblings, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-10-15 17:02 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, xen-devel

On Thu, Oct 14, 2021 at 12:19:06PM +0200, Jan Beulich wrote:
> On 24.08.2021 12:50, Anthony PERARD wrote:
> > When doing an out-of-tree build, and thus setting VPATH,
> > GNU Make 0.81 on Ubuntu Trusty complains about Circular dependency of
> > include/Makefile and include/xlat.lst and drop them. The build fails
> > later due to headers malformed.
> 
> Doesn't this change need to come ahead of the one enabling out-of-tree
> builds then?

Probably yes, I've work this patch as a fix. I'll try to make the change
earlier.

> Also do you again mean 3.81?

Indeed.

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 41/51] build,x86: remove the need for build32.mk
  2021-10-15 15:52     ` Anthony PERARD
@ 2021-10-18  8:43       ` Jan Beulich
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-18  8:43 UTC (permalink / raw)
  To: Anthony PERARD; +Cc: Andrew Cooper, Roger Pau Monné, Wei Liu, xen-devel

On 15.10.2021 17:52, Anthony PERARD wrote:
> On Thu, Oct 14, 2021 at 10:32:05AM +0200, Jan Beulich wrote:
>> On 24.08.2021 12:50, Anthony PERARD wrote:
>>> -$(obj)/cmdline.S: $(src)/cmdline.c $(CMDLINE_DEPS) $(src)/build32.lds
>>> -	$(MAKE) -f $(BASEDIR)/$(src)/build32.mk -C $(obj) $(@F) CMDLINE_DEPS="$(CMDLINE_DEPS)"
>>> +CFLAGS_x86_32 := -m32 -march=i686
>>> +CFLAGS_x86_32 += -fno-strict-aliasing
>>> +CFLAGS_x86_32 += -std=gnu99
>>> +CFLAGS_x86_32 += -Wall -Wstrict-prototypes
>>> +$(call cc-option-add,CFLAGS_x86_32,CC,-Wdeclaration-after-statement)
>>> +$(call cc-option-add,CFLAGS_x86_32,CC,-Wno-unused-but-set-variable)
>>> +$(call cc-option-add,CFLAGS_x86_32,CC,-Wno-unused-local-typedefs)
>>> +$(call cc-options-add,CFLAGS_x86_32,CC,$(EMBEDDED_EXTRA_CFLAGS))
>>> +CFLAGS_x86_32 += -Werror -fno-builtin -g0 -msoft-float
>>> +CFLAGS_x86_32 += -I$(srctree)/include
>>
>> I'm afraid I'm not convinced that having to keep this in sync with the
>> original is in fair balance with the removal of build32.mk.
> 
> Why would this needs to be kept in sync with the original? I would
> actually like to get rid of Config.mk, I don't see the point in sharing
> CFLAGS between a kernel and userspace binaries. Also, I hope one day
> that we can have the hypervisor in its own repo, and thus they won't be
> any Config.mk to keep in sync with.

My point wasn't about Config.mk as the reference in particular, but ...

> The goal of this patch is less about removing build32.mk, and more about
> using the rest of the build system infrastructure to build those few
> 32bits objects, and been able to use the automatic dependencies
> generation and other things without having to duplicate them.
> 
> It probably make the build a bit faster as there is two less invocation
> of $(MAKE) (which parse Config.mk).
> 
> As for a possible change: instead of having those x86_32 flags in
> arch/x86/boot/, I could have them in arch/x86/arch.mk. Linux does
> something like that were it prepare REALMODE_CFLAGS.
> 
> I know it's a bit annoying to have another list x86_32 cflags, but I
> don't see how we can extract them from Config.mk (in a Makefile where we
> want to use both x86_32 and x86_64 flags).

... about the general (apparent) plan to have two sets of flags, which
may not strictly _need_ to remain in sync, but better would. So while
I appreciate the alternative of putting stuff in arch.mk, I'd still
like to see common things like -W... to get probed for and added to
whichever variable just once.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 42/51] build: grab common EFI source files in arch specific dir
  2021-10-15 16:29     ` Anthony PERARD
@ 2021-10-18  8:48       ` Jan Beulich
  2021-10-21 11:03         ` Anthony PERARD
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-18  8:48 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	xen-devel

On 15.10.2021 18:29, Anthony PERARD wrote:
> On Thu, Oct 14, 2021 at 10:51:44AM +0200, Jan Beulich wrote:
>> On 24.08.2021 12:50, Anthony PERARD wrote:
>>> --- a/xen/arch/arm/efi/Makefile
>>> +++ b/xen/arch/arm/efi/Makefile
>>> @@ -1,4 +1,10 @@
>>>  CFLAGS-y += -fshort-wchar
>>> +CFLAGS-y += -I$(srctree)/common/efi
>>
>> Perhaps another opportunity for -iquote?
> 
> Yes.
> 
>>>  obj-y += boot.init.o pe.init.o ebmalloc.o runtime.o
>>>  obj-$(CONFIG_ACPI) +=  efi-dom0.init.o
>>> +
>>> +$(obj)/%.c: common/efi/%.c
>>> +	$(Q)cp -f $< $@
>>
>> In case both trees are on the same file system, trying to hardlink first
>> would seem desirable. When copying, I think you should also pass -p.
> 
> I don't know if doing an hardlink is a good thing to do, I'm not sure of
> the kind of issue this could bring. As for -p, I don't think it's a good
> idea to copy the mode, ownership, and timestamps of the source file, I'd
> rather have the timestamps that Make expect, e.i. "now".

Why would "now" be correct (or expected) in any way? The cloned file is no
different from the original. Nevertheless I agree that -p is not ideal;
it's just that the more fine grained option to preserve just the timestamp
is non-standard afaik. You could try that first and fall back to -p ...
Otherwise, failing hard linking and using "cp -p", I'm afraid I'd prefer
symlinking despite the arguments against it that you name in the
description.

Might be good to have someone else's view here as well.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 49/51] build: adding out-of-tree support to the xen build
  2021-10-15 16:58     ` Anthony PERARD
@ 2021-10-18  9:02       ` Jan Beulich
  2021-10-18  9:51         ` Anthony PERARD
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-18  9:02 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel

On 15.10.2021 18:58, Anthony PERARD wrote:
> On Thu, Oct 14, 2021 at 12:14:29PM +0200, Jan Beulich wrote:
>> On 24.08.2021 12:50, Anthony PERARD wrote:
>>> --- a/xen/Rules.mk
>>> +++ b/xen/Rules.mk
>>> @@ -38,7 +38,7 @@ SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
>>>                           $(foreach r,rel rel.ro,data.$(r).local)
>>>  
>>>  # The filename build.mk has precedence over Makefile
>>> -mk-dir := $(src)
>>> +mk-dir := $(srctree)/$(src)
>>>  include $(if $(wildcard $(mk-dir)/build.mk),$(mk-dir)/build.mk,$(mk-dir)/Makefile)
>>
>> Perhaps already when it was changed to $(src) the name has become
>> slightly misleading, at least imo: I would rather expect a variable
>> with this name to refer to the build dir/tree. Maybe "srcdir" or
>> even shorted "sd" right from the start? (Reaching here I can finally
>> see why having a shorthand is helpful.)
> 
> I have to think about that. I've made some further progress in order to
> be able to build the Xen pvhshim without a link farm and notice that
> nearly every source file needs to use "$(srctree)/$(src)"

Oh, now I'm curious as to the why here. I thought use of $(srctree)
ought to be the exception.

> and I'm not
> sure "$(src)" could be use alone. So having a single variable which have
> both would be useful.
> 
> "srcdir" might be to close to "srctree" and one might mistake it for the
> other, so "sd" might be better.

While I did suggest "sd" as an option, already when writing this I
wasn't convinced this would be descriptive enough. Personally I think
"dir" and "tree" are sufficiently different names. I would suggest
"srcroot" for what is now "srctree", but that would have the
disadvantage of getting us out of sync with Linux.

>>> --- a/xen/xsm/flask/ss/Makefile
>>> +++ b/xen/xsm/flask/ss/Makefile
>>> @@ -9,3 +9,6 @@ obj-y += conditional.o
>>>  obj-y += mls.o
>>>  
>>>  CFLAGS-y += -I$(srctree)/xsm/flask/include
>>> +ifdef building_out_of_srctree
>>> +    CFLAGS-y += -I$(objtree)/xsm/flask/include
>>
>> There's no header in $(srctree)/xsm/flask/include in this case, so if you
>> use "ifdef" here, shouldn't that other part move into an "else"?
> 
> Actually, there are headers in the source, like "security.h", and `git
> ls-files xen/xsm/flask/include` shows plenty other headers.

Hmm, I'm not sure now how I came to make that comment. I must have
mentally discarded the trailing "/include", looking at
xen/xsm/flask/Makefile generating a couple of headers, and then
blindly assumed these headers would land in xen/xsm/flask/. I'm
sorry for the noise.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 49/51] build: adding out-of-tree support to the xen build
  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
  0 siblings, 2 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-10-18  9:51 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel

On Mon, Oct 18, 2021 at 11:02:20AM +0200, Jan Beulich wrote:
> On 15.10.2021 18:58, Anthony PERARD wrote:
> > On Thu, Oct 14, 2021 at 12:14:29PM +0200, Jan Beulich wrote:
> >> On 24.08.2021 12:50, Anthony PERARD wrote:
> >>> --- a/xen/Rules.mk
> >>> +++ b/xen/Rules.mk
> >>> @@ -38,7 +38,7 @@ SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
> >>>                           $(foreach r,rel rel.ro,data.$(r).local)
> >>>  
> >>>  # The filename build.mk has precedence over Makefile
> >>> -mk-dir := $(src)
> >>> +mk-dir := $(srctree)/$(src)
> >>>  include $(if $(wildcard $(mk-dir)/build.mk),$(mk-dir)/build.mk,$(mk-dir)/Makefile)
> >>
> >> Perhaps already when it was changed to $(src) the name has become
> >> slightly misleading, at least imo: I would rather expect a variable
> >> with this name to refer to the build dir/tree. Maybe "srcdir" or
> >> even shorted "sd" right from the start? (Reaching here I can finally
> >> see why having a shorthand is helpful.)
> > 
> > I have to think about that. I've made some further progress in order to
> > be able to build the Xen pvhshim without a link farm and notice that
> > nearly every source file needs to use "$(srctree)/$(src)"
> 
> Oh, now I'm curious as to the why here. I thought use of $(srctree)
> ought to be the exception.

In Linux, the use of $(srctree) is indeed the exception. This is because
we have VPATH=$(srctree), so when `make` look for a prerequisite or a
target it will look first in the current directory and then in
$(srctree). That works fine as long as the source tree only have sources
and no built files.

But if we want to be able to build the pv-shim without the linkfarm and
thus using out-of-tree build, we are going to need the ability to build
from a non-clean source tree. I don't think another way is possible.

This can be done by teaching make to only look for source file in
$(srctree), and to look for generated/built file only in $(objtree).
That's mostly done by not using VPATH and making few other adjustments.

I hope my description of where I'm going isn't too convoluted.

> > and I'm not
> > sure "$(src)" could be use alone. So having a single variable which have
> > both would be useful.
> > 
> > "srcdir" might be to close to "srctree" and one might mistake it for the
> > other, so "sd" might be better.
> 
> While I did suggest "sd" as an option, already when writing this I
> wasn't convinced this would be descriptive enough. Personally I think
> "dir" and "tree" are sufficiently different names. I would suggest
> "srcroot" for what is now "srctree", but that would have the
> disadvantage of getting us out of sync with Linux.

Ok, I guess "srcdir" is good. Thanks.

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 49/51] build: adding out-of-tree support to the xen build
  2021-10-18  9:51         ` Anthony PERARD
@ 2021-10-18 10:05           ` Jan Beulich
  2021-10-18 10:28           ` Juergen Gross
  1 sibling, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-18 10:05 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel

On 18.10.2021 11:51, Anthony PERARD wrote:
> On Mon, Oct 18, 2021 at 11:02:20AM +0200, Jan Beulich wrote:
>> On 15.10.2021 18:58, Anthony PERARD wrote:
>>> On Thu, Oct 14, 2021 at 12:14:29PM +0200, Jan Beulich wrote:
>>>> On 24.08.2021 12:50, Anthony PERARD wrote:
>>>>> --- a/xen/Rules.mk
>>>>> +++ b/xen/Rules.mk
>>>>> @@ -38,7 +38,7 @@ SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
>>>>>                           $(foreach r,rel rel.ro,data.$(r).local)
>>>>>  
>>>>>  # The filename build.mk has precedence over Makefile
>>>>> -mk-dir := $(src)
>>>>> +mk-dir := $(srctree)/$(src)
>>>>>  include $(if $(wildcard $(mk-dir)/build.mk),$(mk-dir)/build.mk,$(mk-dir)/Makefile)
>>>>
>>>> Perhaps already when it was changed to $(src) the name has become
>>>> slightly misleading, at least imo: I would rather expect a variable
>>>> with this name to refer to the build dir/tree. Maybe "srcdir" or
>>>> even shorted "sd" right from the start? (Reaching here I can finally
>>>> see why having a shorthand is helpful.)
>>>
>>> I have to think about that. I've made some further progress in order to
>>> be able to build the Xen pvhshim without a link farm and notice that
>>> nearly every source file needs to use "$(srctree)/$(src)"
>>
>> Oh, now I'm curious as to the why here. I thought use of $(srctree)
>> ought to be the exception.
> 
> In Linux, the use of $(srctree) is indeed the exception. This is because
> we have VPATH=$(srctree), so when `make` look for a prerequisite or a
> target it will look first in the current directory and then in
> $(srctree). That works fine as long as the source tree only have sources
> and no built files.
> 
> But if we want to be able to build the pv-shim without the linkfarm and
> thus using out-of-tree build, we are going to need the ability to build
> from a non-clean source tree. I don't think another way is possible.
> 
> This can be done by teaching make to only look for source file in
> $(srctree), and to look for generated/built file only in $(objtree).
> That's mostly done by not using VPATH and making few other adjustments.

Oh, I see. That's ugly. Just like in Linux I was expecting that we'd
do/support only in-tree or only out-of-tree builds, but not a mix of
both within the same tree. But I can see how this would get in the
way of a build of everything from tree root (something I personally
have never made use of).

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 49/51] build: adding out-of-tree support to the xen build
  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
  1 sibling, 1 reply; 161+ messages in thread
From: Juergen Gross @ 2021-10-18 10:28 UTC (permalink / raw)
  To: Anthony PERARD, Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel


[-- Attachment #1.1.1: Type: text/plain, Size: 2943 bytes --]

On 18.10.21 11:51, Anthony PERARD wrote:
> On Mon, Oct 18, 2021 at 11:02:20AM +0200, Jan Beulich wrote:
>> On 15.10.2021 18:58, Anthony PERARD wrote:
>>> On Thu, Oct 14, 2021 at 12:14:29PM +0200, Jan Beulich wrote:
>>>> On 24.08.2021 12:50, Anthony PERARD wrote:
>>>>> --- a/xen/Rules.mk
>>>>> +++ b/xen/Rules.mk
>>>>> @@ -38,7 +38,7 @@ SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
>>>>>                            $(foreach r,rel rel.ro,data.$(r).local)
>>>>>   
>>>>>   # The filename build.mk has precedence over Makefile
>>>>> -mk-dir := $(src)
>>>>> +mk-dir := $(srctree)/$(src)
>>>>>   include $(if $(wildcard $(mk-dir)/build.mk),$(mk-dir)/build.mk,$(mk-dir)/Makefile)
>>>>
>>>> Perhaps already when it was changed to $(src) the name has become
>>>> slightly misleading, at least imo: I would rather expect a variable
>>>> with this name to refer to the build dir/tree. Maybe "srcdir" or
>>>> even shorted "sd" right from the start? (Reaching here I can finally
>>>> see why having a shorthand is helpful.)
>>>
>>> I have to think about that. I've made some further progress in order to
>>> be able to build the Xen pvhshim without a link farm and notice that
>>> nearly every source file needs to use "$(srctree)/$(src)"
>>
>> Oh, now I'm curious as to the why here. I thought use of $(srctree)
>> ought to be the exception.
> 
> In Linux, the use of $(srctree) is indeed the exception. This is because
> we have VPATH=$(srctree), so when `make` look for a prerequisite or a
> target it will look first in the current directory and then in
> $(srctree). That works fine as long as the source tree only have sources
> and no built files.
> 
> But if we want to be able to build the pv-shim without the linkfarm and
> thus using out-of-tree build, we are going to need the ability to build
> from a non-clean source tree. I don't think another way is possible.

Is there any reason (apart from historical ones) to build the hypervisor
in $(srctree)?

I could see several advantages to build it in another directory as soon
as the build system has this capability:

- possibility to have a simple build target for building multiple archs
   (assuming the cross-tools are available), leading to probably less
   problems with breaking the build of "the other" architecture we are
   normally not working with (and in future with e.g. Risc-V being added
   this will be even more important)

- possibility to have a debug and a non-debug build in parallel (in fact
   at least at SUSE we are working around that by building those with an
   intermediate "make clean" for being able to package both variants)

- make clean for the hypervisor part would be just a "rm -r"

Yes, this would require us (the developers) to maybe change some habits,
but I think this would be better than working around the issues by
adding $(srctree) all over the build system.


Juergen

[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 3135 bytes --]

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 495 bytes --]

^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 49/51] build: adding out-of-tree support to the xen build
  2021-10-18 10:28           ` Juergen Gross
@ 2021-10-18 10:36             ` Jan Beulich
  2021-10-18 10:40               ` Juergen Gross
  2021-10-21 14:10               ` Anthony PERARD
  0 siblings, 2 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-18 10:36 UTC (permalink / raw)
  To: Juergen Gross, Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel

On 18.10.2021 12:28, Juergen Gross wrote:
> On 18.10.21 11:51, Anthony PERARD wrote:
>> On Mon, Oct 18, 2021 at 11:02:20AM +0200, Jan Beulich wrote:
>>> On 15.10.2021 18:58, Anthony PERARD wrote:
>>>> On Thu, Oct 14, 2021 at 12:14:29PM +0200, Jan Beulich wrote:
>>>>> On 24.08.2021 12:50, Anthony PERARD wrote:
>>>>>> --- a/xen/Rules.mk
>>>>>> +++ b/xen/Rules.mk
>>>>>> @@ -38,7 +38,7 @@ SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
>>>>>>                            $(foreach r,rel rel.ro,data.$(r).local)
>>>>>>   
>>>>>>   # The filename build.mk has precedence over Makefile
>>>>>> -mk-dir := $(src)
>>>>>> +mk-dir := $(srctree)/$(src)
>>>>>>   include $(if $(wildcard $(mk-dir)/build.mk),$(mk-dir)/build.mk,$(mk-dir)/Makefile)
>>>>>
>>>>> Perhaps already when it was changed to $(src) the name has become
>>>>> slightly misleading, at least imo: I would rather expect a variable
>>>>> with this name to refer to the build dir/tree. Maybe "srcdir" or
>>>>> even shorted "sd" right from the start? (Reaching here I can finally
>>>>> see why having a shorthand is helpful.)
>>>>
>>>> I have to think about that. I've made some further progress in order to
>>>> be able to build the Xen pvhshim without a link farm and notice that
>>>> nearly every source file needs to use "$(srctree)/$(src)"
>>>
>>> Oh, now I'm curious as to the why here. I thought use of $(srctree)
>>> ought to be the exception.
>>
>> In Linux, the use of $(srctree) is indeed the exception. This is because
>> we have VPATH=$(srctree), so when `make` look for a prerequisite or a
>> target it will look first in the current directory and then in
>> $(srctree). That works fine as long as the source tree only have sources
>> and no built files.
>>
>> But if we want to be able to build the pv-shim without the linkfarm and
>> thus using out-of-tree build, we are going to need the ability to build
>> from a non-clean source tree. I don't think another way is possible.
> 
> Is there any reason (apart from historical ones) to build the hypervisor
> in $(srctree)?
> 
> I could see several advantages to build it in another directory as soon
> as the build system has this capability:
> 
> - possibility to have a simple build target for building multiple archs
>    (assuming the cross-tools are available), leading to probably less
>    problems with breaking the build of "the other" architecture we are
>    normally not working with (and in future with e.g. Risc-V being added
>    this will be even more important)
> 
> - possibility to have a debug and a non-debug build in parallel (in fact
>    at least at SUSE we are working around that by building those with an
>    intermediate "make clean" for being able to package both variants)
> 
> - make clean for the hypervisor part would be just a "rm -r"

I fully agree, yet ...

> Yes, this would require us (the developers) to maybe change some habits,
> but I think this would be better than working around the issues by
> adding $(srctree) all over the build system.

... developers' habits would only be my second concern here (and if that
had been the only one, then I would not see this as a reason speaking
against the change, but as said I've never been building from the root,
and I've also been building sort of out-of-tree all the time). Yet while
writing this reply I came to realize that my primary concern was wrong:
People would not need to adjust their spec files (or alike), at least
not as long as they consume only files living under dist/.

So, Anthony - thoughts about making the default in-tree Xen build
actually build into, say, build/xen/?

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 49/51] build: adding out-of-tree support to the xen build
  2021-10-18 10:36             ` Jan Beulich
@ 2021-10-18 10:40               ` Juergen Gross
  2021-10-18 11:07                 ` Jan Beulich
  2021-10-21 14:10               ` Anthony PERARD
  1 sibling, 1 reply; 161+ messages in thread
From: Juergen Gross @ 2021-10-18 10:40 UTC (permalink / raw)
  To: Jan Beulich, Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel


[-- Attachment #1.1.1: Type: text/plain, Size: 3872 bytes --]

On 18.10.21 12:36, Jan Beulich wrote:
> On 18.10.2021 12:28, Juergen Gross wrote:
>> On 18.10.21 11:51, Anthony PERARD wrote:
>>> On Mon, Oct 18, 2021 at 11:02:20AM +0200, Jan Beulich wrote:
>>>> On 15.10.2021 18:58, Anthony PERARD wrote:
>>>>> On Thu, Oct 14, 2021 at 12:14:29PM +0200, Jan Beulich wrote:
>>>>>> On 24.08.2021 12:50, Anthony PERARD wrote:
>>>>>>> --- a/xen/Rules.mk
>>>>>>> +++ b/xen/Rules.mk
>>>>>>> @@ -38,7 +38,7 @@ SPECIAL_DATA_SECTIONS := rodata $(foreach a,1 2 4 8 16, \
>>>>>>>                             $(foreach r,rel rel.ro,data.$(r).local)
>>>>>>>    
>>>>>>>    # The filename build.mk has precedence over Makefile
>>>>>>> -mk-dir := $(src)
>>>>>>> +mk-dir := $(srctree)/$(src)
>>>>>>>    include $(if $(wildcard $(mk-dir)/build.mk),$(mk-dir)/build.mk,$(mk-dir)/Makefile)
>>>>>>
>>>>>> Perhaps already when it was changed to $(src) the name has become
>>>>>> slightly misleading, at least imo: I would rather expect a variable
>>>>>> with this name to refer to the build dir/tree. Maybe "srcdir" or
>>>>>> even shorted "sd" right from the start? (Reaching here I can finally
>>>>>> see why having a shorthand is helpful.)
>>>>>
>>>>> I have to think about that. I've made some further progress in order to
>>>>> be able to build the Xen pvhshim without a link farm and notice that
>>>>> nearly every source file needs to use "$(srctree)/$(src)"
>>>>
>>>> Oh, now I'm curious as to the why here. I thought use of $(srctree)
>>>> ought to be the exception.
>>>
>>> In Linux, the use of $(srctree) is indeed the exception. This is because
>>> we have VPATH=$(srctree), so when `make` look for a prerequisite or a
>>> target it will look first in the current directory and then in
>>> $(srctree). That works fine as long as the source tree only have sources
>>> and no built files.
>>>
>>> But if we want to be able to build the pv-shim without the linkfarm and
>>> thus using out-of-tree build, we are going to need the ability to build
>>> from a non-clean source tree. I don't think another way is possible.
>>
>> Is there any reason (apart from historical ones) to build the hypervisor
>> in $(srctree)?
>>
>> I could see several advantages to build it in another directory as soon
>> as the build system has this capability:
>>
>> - possibility to have a simple build target for building multiple archs
>>     (assuming the cross-tools are available), leading to probably less
>>     problems with breaking the build of "the other" architecture we are
>>     normally not working with (and in future with e.g. Risc-V being added
>>     this will be even more important)
>>
>> - possibility to have a debug and a non-debug build in parallel (in fact
>>     at least at SUSE we are working around that by building those with an
>>     intermediate "make clean" for being able to package both variants)
>>
>> - make clean for the hypervisor part would be just a "rm -r"
> 
> I fully agree, yet ...
> 
>> Yes, this would require us (the developers) to maybe change some habits,
>> but I think this would be better than working around the issues by
>> adding $(srctree) all over the build system.
> 
> ... developers' habits would only be my second concern here (and if that
> had been the only one, then I would not see this as a reason speaking
> against the change, but as said I've never been building from the root,
> and I've also been building sort of out-of-tree all the time). Yet while
> writing this reply I came to realize that my primary concern was wrong:
> People would not need to adjust their spec files (or alike), at least
> not as long as they consume only files living under dist/.
> 
> So, Anthony - thoughts about making the default in-tree Xen build
> actually build into, say, build/xen/?

Or maybe even build-<arch>[-debug]/xen/?


Juergen

[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 3135 bytes --]

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 495 bytes --]

^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 49/51] build: adding out-of-tree support to the xen build
  2021-10-18 10:40               ` Juergen Gross
@ 2021-10-18 11:07                 ` Jan Beulich
  2021-10-18 11:20                   ` Juergen Gross
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-18 11:07 UTC (permalink / raw)
  To: Juergen Gross
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel, Anthony PERARD

On 18.10.2021 12:40, Juergen Gross wrote:
> On 18.10.21 12:36, Jan Beulich wrote:
>> On 18.10.2021 12:28, Juergen Gross wrote:
>>> On 18.10.21 11:51, Anthony PERARD wrote:
>>>> On Mon, Oct 18, 2021 at 11:02:20AM +0200, Jan Beulich wrote:
>>>>> On 15.10.2021 18:58, Anthony PERARD wrote:
>>>>>> I have to think about that. I've made some further progress in order to
>>>>>> be able to build the Xen pvhshim without a link farm and notice that
>>>>>> nearly every source file needs to use "$(srctree)/$(src)"
>>>>>
>>>>> Oh, now I'm curious as to the why here. I thought use of $(srctree)
>>>>> ought to be the exception.
>>>>
>>>> In Linux, the use of $(srctree) is indeed the exception. This is because
>>>> we have VPATH=$(srctree), so when `make` look for a prerequisite or a
>>>> target it will look first in the current directory and then in
>>>> $(srctree). That works fine as long as the source tree only have sources
>>>> and no built files.
>>>>
>>>> But if we want to be able to build the pv-shim without the linkfarm and
>>>> thus using out-of-tree build, we are going to need the ability to build
>>>> from a non-clean source tree. I don't think another way is possible.
>>>
>>> Is there any reason (apart from historical ones) to build the hypervisor
>>> in $(srctree)?
>>>
>>> I could see several advantages to build it in another directory as soon
>>> as the build system has this capability:
>>>
>>> - possibility to have a simple build target for building multiple archs
>>>     (assuming the cross-tools are available), leading to probably less
>>>     problems with breaking the build of "the other" architecture we are
>>>     normally not working with (and in future with e.g. Risc-V being added
>>>     this will be even more important)
>>>
>>> - possibility to have a debug and a non-debug build in parallel (in fact
>>>     at least at SUSE we are working around that by building those with an
>>>     intermediate "make clean" for being able to package both variants)
>>>
>>> - make clean for the hypervisor part would be just a "rm -r"
>>
>> I fully agree, yet ...
>>
>>> Yes, this would require us (the developers) to maybe change some habits,
>>> but I think this would be better than working around the issues by
>>> adding $(srctree) all over the build system.
>>
>> ... developers' habits would only be my second concern here (and if that
>> had been the only one, then I would not see this as a reason speaking
>> against the change, but as said I've never been building from the root,
>> and I've also been building sort of out-of-tree all the time). Yet while
>> writing this reply I came to realize that my primary concern was wrong:
>> People would not need to adjust their spec files (or alike), at least
>> not as long as they consume only files living under dist/.
>>
>> So, Anthony - thoughts about making the default in-tree Xen build
>> actually build into, say, build/xen/?
> 
> Or maybe even build-<arch>[-debug]/xen/?

I'd be okay with build-<arch>, but things would become questionable imo
when considering further elements recorded in .config: Where would you
draw the line?

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 49/51] build: adding out-of-tree support to the xen build
  2021-10-18 11:07                 ` Jan Beulich
@ 2021-10-18 11:20                   ` Juergen Gross
  2021-10-18 12:03                     ` Jan Beulich
  0 siblings, 1 reply; 161+ messages in thread
From: Juergen Gross @ 2021-10-18 11:20 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel, Anthony PERARD


[-- Attachment #1.1.1: Type: text/plain, Size: 3523 bytes --]

On 18.10.21 13:07, Jan Beulich wrote:
> On 18.10.2021 12:40, Juergen Gross wrote:
>> On 18.10.21 12:36, Jan Beulich wrote:
>>> On 18.10.2021 12:28, Juergen Gross wrote:
>>>> On 18.10.21 11:51, Anthony PERARD wrote:
>>>>> On Mon, Oct 18, 2021 at 11:02:20AM +0200, Jan Beulich wrote:
>>>>>> On 15.10.2021 18:58, Anthony PERARD wrote:
>>>>>>> I have to think about that. I've made some further progress in order to
>>>>>>> be able to build the Xen pvhshim without a link farm and notice that
>>>>>>> nearly every source file needs to use "$(srctree)/$(src)"
>>>>>>
>>>>>> Oh, now I'm curious as to the why here. I thought use of $(srctree)
>>>>>> ought to be the exception.
>>>>>
>>>>> In Linux, the use of $(srctree) is indeed the exception. This is because
>>>>> we have VPATH=$(srctree), so when `make` look for a prerequisite or a
>>>>> target it will look first in the current directory and then in
>>>>> $(srctree). That works fine as long as the source tree only have sources
>>>>> and no built files.
>>>>>
>>>>> But if we want to be able to build the pv-shim without the linkfarm and
>>>>> thus using out-of-tree build, we are going to need the ability to build
>>>>> from a non-clean source tree. I don't think another way is possible.
>>>>
>>>> Is there any reason (apart from historical ones) to build the hypervisor
>>>> in $(srctree)?
>>>>
>>>> I could see several advantages to build it in another directory as soon
>>>> as the build system has this capability:
>>>>
>>>> - possibility to have a simple build target for building multiple archs
>>>>      (assuming the cross-tools are available), leading to probably less
>>>>      problems with breaking the build of "the other" architecture we are
>>>>      normally not working with (and in future with e.g. Risc-V being added
>>>>      this will be even more important)
>>>>
>>>> - possibility to have a debug and a non-debug build in parallel (in fact
>>>>      at least at SUSE we are working around that by building those with an
>>>>      intermediate "make clean" for being able to package both variants)
>>>>
>>>> - make clean for the hypervisor part would be just a "rm -r"
>>>
>>> I fully agree, yet ...
>>>
>>>> Yes, this would require us (the developers) to maybe change some habits,
>>>> but I think this would be better than working around the issues by
>>>> adding $(srctree) all over the build system.
>>>
>>> ... developers' habits would only be my second concern here (and if that
>>> had been the only one, then I would not see this as a reason speaking
>>> against the change, but as said I've never been building from the root,
>>> and I've also been building sort of out-of-tree all the time). Yet while
>>> writing this reply I came to realize that my primary concern was wrong:
>>> People would not need to adjust their spec files (or alike), at least
>>> not as long as they consume only files living under dist/.
>>>
>>> So, Anthony - thoughts about making the default in-tree Xen build
>>> actually build into, say, build/xen/?
>>
>> Or maybe even build-<arch>[-debug]/xen/?
> 
> I'd be okay with build-<arch>, but things would become questionable imo
> when considering further elements recorded in .config: Where would you
> draw the line?

Okay, this is a valid question. What about an environment variable which
can be used to determine the build directory (or a suffix of the build
directory)?

This could be used to cover other use cases, too.


Juergen

[-- Attachment #1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 3135 bytes --]

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 495 bytes --]

^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 49/51] build: adding out-of-tree support to the xen build
  2021-10-18 11:20                   ` Juergen Gross
@ 2021-10-18 12:03                     ` Jan Beulich
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-18 12:03 UTC (permalink / raw)
  To: Juergen Gross
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel, Anthony PERARD

On 18.10.2021 13:20, Juergen Gross wrote:
> On 18.10.21 13:07, Jan Beulich wrote:
>> On 18.10.2021 12:40, Juergen Gross wrote:
>>> On 18.10.21 12:36, Jan Beulich wrote:
>>>> On 18.10.2021 12:28, Juergen Gross wrote:
>>>>> On 18.10.21 11:51, Anthony PERARD wrote:
>>>>>> On Mon, Oct 18, 2021 at 11:02:20AM +0200, Jan Beulich wrote:
>>>>>>> On 15.10.2021 18:58, Anthony PERARD wrote:
>>>>>>>> I have to think about that. I've made some further progress in order to
>>>>>>>> be able to build the Xen pvhshim without a link farm and notice that
>>>>>>>> nearly every source file needs to use "$(srctree)/$(src)"
>>>>>>>
>>>>>>> Oh, now I'm curious as to the why here. I thought use of $(srctree)
>>>>>>> ought to be the exception.
>>>>>>
>>>>>> In Linux, the use of $(srctree) is indeed the exception. This is because
>>>>>> we have VPATH=$(srctree), so when `make` look for a prerequisite or a
>>>>>> target it will look first in the current directory and then in
>>>>>> $(srctree). That works fine as long as the source tree only have sources
>>>>>> and no built files.
>>>>>>
>>>>>> But if we want to be able to build the pv-shim without the linkfarm and
>>>>>> thus using out-of-tree build, we are going to need the ability to build
>>>>>> from a non-clean source tree. I don't think another way is possible.
>>>>>
>>>>> Is there any reason (apart from historical ones) to build the hypervisor
>>>>> in $(srctree)?
>>>>>
>>>>> I could see several advantages to build it in another directory as soon
>>>>> as the build system has this capability:
>>>>>
>>>>> - possibility to have a simple build target for building multiple archs
>>>>>      (assuming the cross-tools are available), leading to probably less
>>>>>      problems with breaking the build of "the other" architecture we are
>>>>>      normally not working with (and in future with e.g. Risc-V being added
>>>>>      this will be even more important)
>>>>>
>>>>> - possibility to have a debug and a non-debug build in parallel (in fact
>>>>>      at least at SUSE we are working around that by building those with an
>>>>>      intermediate "make clean" for being able to package both variants)
>>>>>
>>>>> - make clean for the hypervisor part would be just a "rm -r"
>>>>
>>>> I fully agree, yet ...
>>>>
>>>>> Yes, this would require us (the developers) to maybe change some habits,
>>>>> but I think this would be better than working around the issues by
>>>>> adding $(srctree) all over the build system.
>>>>
>>>> ... developers' habits would only be my second concern here (and if that
>>>> had been the only one, then I would not see this as a reason speaking
>>>> against the change, but as said I've never been building from the root,
>>>> and I've also been building sort of out-of-tree all the time). Yet while
>>>> writing this reply I came to realize that my primary concern was wrong:
>>>> People would not need to adjust their spec files (or alike), at least
>>>> not as long as they consume only files living under dist/.
>>>>
>>>> So, Anthony - thoughts about making the default in-tree Xen build
>>>> actually build into, say, build/xen/?
>>>
>>> Or maybe even build-<arch>[-debug]/xen/?
>>
>> I'd be okay with build-<arch>, but things would become questionable imo
>> when considering further elements recorded in .config: Where would you
>> draw the line?
> 
> Okay, this is a valid question. What about an environment variable which
> can be used to determine the build directory (or a suffix of the build
> directory)?

That would be fine with me, but as said I'm not building from the root
dir anyway, so people affected by a possible change here may be more
qualified to give input. Otoh if people need to adjust their stuff
anyway, they can as well switch to an out-of-tree Xen build right away.
And anyone building in-tree won't expect to be able to build multiple
flavors in parallel.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 42/51] build: grab common EFI source files in arch specific dir
  2021-10-18  8:48       ` Jan Beulich
@ 2021-10-21 11:03         ` Anthony PERARD
  2021-10-21 11:24           ` Jan Beulich
  0 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-10-21 11:03 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	xen-devel

On Mon, Oct 18, 2021 at 10:48:26AM +0200, Jan Beulich wrote:
> On 15.10.2021 18:29, Anthony PERARD wrote:
> > On Thu, Oct 14, 2021 at 10:51:44AM +0200, Jan Beulich wrote:
> >> On 24.08.2021 12:50, Anthony PERARD wrote:
> >>> --- a/xen/arch/arm/efi/Makefile
> >>> +++ b/xen/arch/arm/efi/Makefile
> >>> @@ -1,4 +1,10 @@
> >>>  CFLAGS-y += -fshort-wchar
> >>> +CFLAGS-y += -I$(srctree)/common/efi
> >>
> >> Perhaps another opportunity for -iquote?
> > 
> > Yes.
> > 
> >>>  obj-y += boot.init.o pe.init.o ebmalloc.o runtime.o
> >>>  obj-$(CONFIG_ACPI) +=  efi-dom0.init.o
> >>> +
> >>> +$(obj)/%.c: common/efi/%.c
> >>> +	$(Q)cp -f $< $@
> >>
> >> In case both trees are on the same file system, trying to hardlink first
> >> would seem desirable. When copying, I think you should also pass -p.
> > 
> > I don't know if doing an hardlink is a good thing to do, I'm not sure of
> > the kind of issue this could bring. As for -p, I don't think it's a good
> > idea to copy the mode, ownership, and timestamps of the source file, I'd
> > rather have the timestamps that Make expect, e.i. "now".
> 
> Why would "now" be correct (or expected) in any way? The cloned file is no
> different from the original. Nevertheless I agree that -p is not ideal;
> it's just that the more fine grained option to preserve just the timestamp
> is non-standard afaik. You could try that first and fall back to -p ...
> Otherwise, failing hard linking and using "cp -p", I'm afraid I'd prefer
> symlinking despite the arguments against it that you name in the
> description.

I guess I'm missing something, is there a reason to keep/copy the
timestamps of the original files?

> Might be good to have someone else's view here as well.

Indeed.

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 42/51] build: grab common EFI source files in arch specific dir
  2021-10-21 11:03         ` Anthony PERARD
@ 2021-10-21 11:24           ` Jan Beulich
  2021-10-21 13:54             ` Anthony PERARD
  0 siblings, 1 reply; 161+ messages in thread
From: Jan Beulich @ 2021-10-21 11:24 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	xen-devel

On 21.10.2021 13:03, Anthony PERARD wrote:
> On Mon, Oct 18, 2021 at 10:48:26AM +0200, Jan Beulich wrote:
>> On 15.10.2021 18:29, Anthony PERARD wrote:
>>> On Thu, Oct 14, 2021 at 10:51:44AM +0200, Jan Beulich wrote:
>>>> On 24.08.2021 12:50, Anthony PERARD wrote:
>>>>> --- a/xen/arch/arm/efi/Makefile
>>>>> +++ b/xen/arch/arm/efi/Makefile
>>>>> @@ -1,4 +1,10 @@
>>>>>  CFLAGS-y += -fshort-wchar
>>>>> +CFLAGS-y += -I$(srctree)/common/efi
>>>>
>>>> Perhaps another opportunity for -iquote?
>>>
>>> Yes.
>>>
>>>>>  obj-y += boot.init.o pe.init.o ebmalloc.o runtime.o
>>>>>  obj-$(CONFIG_ACPI) +=  efi-dom0.init.o
>>>>> +
>>>>> +$(obj)/%.c: common/efi/%.c
>>>>> +	$(Q)cp -f $< $@
>>>>
>>>> In case both trees are on the same file system, trying to hardlink first
>>>> would seem desirable. When copying, I think you should also pass -p.
>>>
>>> I don't know if doing an hardlink is a good thing to do, I'm not sure of
>>> the kind of issue this could bring. As for -p, I don't think it's a good
>>> idea to copy the mode, ownership, and timestamps of the source file, I'd
>>> rather have the timestamps that Make expect, e.i. "now".
>>
>> Why would "now" be correct (or expected) in any way? The cloned file is no
>> different from the original. Nevertheless I agree that -p is not ideal;
>> it's just that the more fine grained option to preserve just the timestamp
>> is non-standard afaik. You could try that first and fall back to -p ...
>> Otherwise, failing hard linking and using "cp -p", I'm afraid I'd prefer
>> symlinking despite the arguments against it that you name in the
>> description.
> 
> I guess I'm missing something, is there a reason to keep/copy the
> timestamps of the original files?

Avoidance of confusion is my main aim here. I certainly would be puzzled
to see what looks like a source file to have a time stamp much newer than
expected.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 42/51] build: grab common EFI source files in arch specific dir
  2021-10-21 11:24           ` Jan Beulich
@ 2021-10-21 13:54             ` Anthony PERARD
  2021-10-21 14:16               ` Jan Beulich
  0 siblings, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-10-21 13:54 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	xen-devel

On Thu, Oct 21, 2021 at 01:24:27PM +0200, Jan Beulich wrote:
> On 21.10.2021 13:03, Anthony PERARD wrote:
> > On Mon, Oct 18, 2021 at 10:48:26AM +0200, Jan Beulich wrote:
> >> On 15.10.2021 18:29, Anthony PERARD wrote:
> >>> On Thu, Oct 14, 2021 at 10:51:44AM +0200, Jan Beulich wrote:
> >>>> On 24.08.2021 12:50, Anthony PERARD wrote:
> >>>>>  obj-y += boot.init.o pe.init.o ebmalloc.o runtime.o
> >>>>>  obj-$(CONFIG_ACPI) +=  efi-dom0.init.o
> >>>>> +
> >>>>> +$(obj)/%.c: common/efi/%.c
> >>>>> +	$(Q)cp -f $< $@
> >>>>
> >>>> In case both trees are on the same file system, trying to hardlink first
> >>>> would seem desirable. When copying, I think you should also pass -p.
> >>>
> >>> I don't know if doing an hardlink is a good thing to do, I'm not sure of
> >>> the kind of issue this could bring. As for -p, I don't think it's a good
> >>> idea to copy the mode, ownership, and timestamps of the source file, I'd
> >>> rather have the timestamps that Make expect, e.i. "now".
> >>
> >> Why would "now" be correct (or expected) in any way? The cloned file is no
> >> different from the original. Nevertheless I agree that -p is not ideal;
> >> it's just that the more fine grained option to preserve just the timestamp
> >> is non-standard afaik. You could try that first and fall back to -p ...
> >> Otherwise, failing hard linking and using "cp -p", I'm afraid I'd prefer
> >> symlinking despite the arguments against it that you name in the
> >> description.
> > 
> > I guess I'm missing something, is there a reason to keep/copy the
> > timestamps of the original files?
> 
> Avoidance of confusion is my main aim here. I certainly would be puzzled
> to see what looks like a source file to have a time stamp much newer than
> expected.

So, there isn't really anything to do with the timestamps :-). I guess
we could keep using symbolic links, but force update the link at every
build.

I've tried that:
    $(obj)/%.c: $(abs_srctree)/common/efi/%.c FORCE
        $(Q)ln -nsf $< $@

and make seems happy. The link command run every time (due to adding
FORCE), but the `CC` command isn't, so that seems good. The recipe that
would run the `CC` command check if the prerequisite are newer than the
target using $? so it doesn't matter if the rule that update the source
file as run or not.

Thanks,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 49/51] build: adding out-of-tree support to the xen build
  2021-10-18 10:36             ` Jan Beulich
  2021-10-18 10:40               ` Juergen Gross
@ 2021-10-21 14:10               ` Anthony PERARD
  1 sibling, 0 replies; 161+ messages in thread
From: Anthony PERARD @ 2021-10-21 14:10 UTC (permalink / raw)
  To: Jan Beulich
  Cc: Juergen Gross, Andrew Cooper, George Dunlap, Ian Jackson,
	Julien Grall, Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	Konrad Rzeszutek Wilk, Ross Lagerwall, Daniel De Graaf,
	Daniel P. Smith, xen-devel

On Mon, Oct 18, 2021 at 12:36:45PM +0200, Jan Beulich wrote:
> On 18.10.2021 12:28, Juergen Gross wrote:
> > On 18.10.21 11:51, Anthony PERARD wrote:
> >> On Mon, Oct 18, 2021 at 11:02:20AM +0200, Jan Beulich wrote:
> >>> Oh, now I'm curious as to the why here. I thought use of $(srctree)
> >>> ought to be the exception.
> >>
> >> In Linux, the use of $(srctree) is indeed the exception. This is because
> >> we have VPATH=$(srctree), so when `make` look for a prerequisite or a
> >> target it will look first in the current directory and then in
> >> $(srctree). That works fine as long as the source tree only have sources
> >> and no built files.
> >>
> >> But if we want to be able to build the pv-shim without the linkfarm and
> >> thus using out-of-tree build, we are going to need the ability to build
> >> from a non-clean source tree. I don't think another way is possible.
> > 
> > Is there any reason (apart from historical ones) to build the hypervisor
> > in $(srctree)?
> > 
> > I could see several advantages to build it in another directory as soon
> > as the build system has this capability:
> > 
> > - possibility to have a simple build target for building multiple archs
> >    (assuming the cross-tools are available), leading to probably less
> >    problems with breaking the build of "the other" architecture we are
> >    normally not working with (and in future with e.g. Risc-V being added
> >    this will be even more important)
> > 
> > - possibility to have a debug and a non-debug build in parallel (in fact
> >    at least at SUSE we are working around that by building those with an
> >    intermediate "make clean" for being able to package both variants)
> > 
> > - make clean for the hypervisor part would be just a "rm -r"
> 
> I fully agree, yet ...
> 
> > Yes, this would require us (the developers) to maybe change some habits,
> > but I think this would be better than working around the issues by
> > adding $(srctree) all over the build system.
> 
> ... developers' habits would only be my second concern here (and if that
> had been the only one, then I would not see this as a reason speaking
> against the change, but as said I've never been building from the root,
> and I've also been building sort of out-of-tree all the time). Yet while
> writing this reply I came to realize that my primary concern was wrong:
> People would not need to adjust their spec files (or alike), at least
> not as long as they consume only files living under dist/.
> 
> So, Anthony - thoughts about making the default in-tree Xen build
> actually build into, say, build/xen/?

I don't think I should be the one answering this question. It would
probably be fairly easy to do.

But, I've already got some unfinished patches which add the ability to
do in-tree and out-of-tree at the same time, so I'll propose them and we
can decide whether they are worth it or if they are too much. That is,
after we have at least the ability to do out-of-tree build.

Cheers,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 42/51] build: grab common EFI source files in arch specific dir
  2021-10-21 13:54             ` Anthony PERARD
@ 2021-10-21 14:16               ` Jan Beulich
  0 siblings, 0 replies; 161+ messages in thread
From: Jan Beulich @ 2021-10-21 14:16 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Andrew Cooper, George Dunlap, Ian Jackson, Julien Grall,
	Stefano Stabellini, Wei Liu, Volodymyr Babchuk,
	Roger Pau Monné,
	xen-devel

On 21.10.2021 15:54, Anthony PERARD wrote:
> On Thu, Oct 21, 2021 at 01:24:27PM +0200, Jan Beulich wrote:
>> On 21.10.2021 13:03, Anthony PERARD wrote:
>>> On Mon, Oct 18, 2021 at 10:48:26AM +0200, Jan Beulich wrote:
>>>> On 15.10.2021 18:29, Anthony PERARD wrote:
>>>>> On Thu, Oct 14, 2021 at 10:51:44AM +0200, Jan Beulich wrote:
>>>>>> On 24.08.2021 12:50, Anthony PERARD wrote:
>>>>>>>  obj-y += boot.init.o pe.init.o ebmalloc.o runtime.o
>>>>>>>  obj-$(CONFIG_ACPI) +=  efi-dom0.init.o
>>>>>>> +
>>>>>>> +$(obj)/%.c: common/efi/%.c
>>>>>>> +	$(Q)cp -f $< $@
>>>>>>
>>>>>> In case both trees are on the same file system, trying to hardlink first
>>>>>> would seem desirable. When copying, I think you should also pass -p.
>>>>>
>>>>> I don't know if doing an hardlink is a good thing to do, I'm not sure of
>>>>> the kind of issue this could bring. As for -p, I don't think it's a good
>>>>> idea to copy the mode, ownership, and timestamps of the source file, I'd
>>>>> rather have the timestamps that Make expect, e.i. "now".
>>>>
>>>> Why would "now" be correct (or expected) in any way? The cloned file is no
>>>> different from the original. Nevertheless I agree that -p is not ideal;
>>>> it's just that the more fine grained option to preserve just the timestamp
>>>> is non-standard afaik. You could try that first and fall back to -p ...
>>>> Otherwise, failing hard linking and using "cp -p", I'm afraid I'd prefer
>>>> symlinking despite the arguments against it that you name in the
>>>> description.
>>>
>>> I guess I'm missing something, is there a reason to keep/copy the
>>> timestamps of the original files?
>>
>> Avoidance of confusion is my main aim here. I certainly would be puzzled
>> to see what looks like a source file to have a time stamp much newer than
>> expected.
> 
> So, there isn't really anything to do with the timestamps :-). I guess
> we could keep using symbolic links, but force update the link at every
> build.
> 
> I've tried that:
>     $(obj)/%.c: $(abs_srctree)/common/efi/%.c FORCE
>         $(Q)ln -nsf $< $@
> 
> and make seems happy. The link command run every time (due to adding
> FORCE), but the `CC` command isn't, so that seems good. The recipe that
> would run the `CC` command check if the prerequisite are newer than the
> target using $? so it doesn't matter if the rule that update the source
> file as run or not.

Looks okay to me.

One additional consideration, though: Linux puts a "source" link in the
build tree. If we did so as well, then that could be the only absolute
symlink that's needed. Links like the one you suggest could be relative
ones into source/. But I guess this could as well be left as a future
exercise, in case anyone cares to limit the number of absolute symlinks.

Jan



^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build!
  2021-08-24 10:49 [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build! Anthony PERARD
                   ` (53 preceding siblings ...)
  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
  54 siblings, 2 replies; 161+ messages in thread
From: Alex Bennée @ 2021-11-04 15:49 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Roger Pau Monné,
	Kevin Tian, George Dunlap, Ian Jackson, Connor Davis,
	Bob Eshleman, Alistair Francis, Tim Deegan, Jun Nakajima,
	Tamas K Lengyel, Doug Goldstein, Jan Beulich,
	Konrad Rzeszutek Wilk, Julien Grall, Alexandru Isaila,
	Stefano Stabellini, Ross Lagerwall, Petre Pircalabu,
	Paul Durrant, Daniel De Graaf, Daniel P. Smith,
	Volodymyr Babchuk, Wei Liu, Andrew Cooper, Lukasz Hawrylko,
	xen-devel


Anthony PERARD <anthony.perard@citrix.com> writes:

> Patch series available in this git branch:
> https://xenbits.xen.org/git-http/people/aperard/xen-unstable.git br.build-system-xen-v7
>
> v7:
>     Out-of-tree build!
>
>     This mean many more patches. Everything after patch 27 is new.
>
>     There's a few new patch before that, but otherwise are rework of
>     v6.

This is something I've been looking forward to but obviously my QEMU
focused mind meant I did it wrong. Generally I create a builds subdir in
my tree with subdirs for each build flavour. So with:

  /home/alex/lsrc/xen/xen.git/builds/native

And executing:

  ➜  ../../configure
  checking build system type... x86_64-pc-linux-gnu
  checking host system type... x86_64-pc-linux-gnu
  Will build the following subsystems:
    xen
    tools
    stubdom
    docs
  configure: creating ./config.status
  config.status: creating config/Toplevel.mk
  config.status: creating config/Paths.mk

but this leaves a sparse tree:

  🕙15:51:22 alex@zen:xen.git/builds/native  on  review/build-system-v7 (AM) [$?] 
  ➜  find .
  .
  ./config.log
  ./config.status
  ./config
  ./config/Paths.mk
  ./config/Toplevel.mk

and no top level Makefile to do the build.

In the QEMU world we symlink the Makefile into the build directory and
then add a little bit of logic to the Makefile to detect incongruent
configurations, for example:

  # 0. ensure the build tree is okay

  # Check that we're not trying to do an out-of-tree build from
  # a tree that's been used for an in-tree build.
  ifneq ($(realpath $(SRC_PATH)),$(realpath .))
  ifneq ($(wildcard $(SRC_PATH)/config-host.mak),)
  $(error This is an out of tree build but your source tree ($(SRC_PATH)) \
  seems to have been used for an in-tree build. You can fix this by running \
  "$(MAKE) distclean && rm -rf *-linux-user *-softmmu" in your source tree)
  endif
  endif

Of course you need some additional definitions to ensure the Makefile is
clear on where it gets the files from.

In "build: adding out-of-tree support to the xen build" you describe the
Linux kernel style which works well where the config can be done after
the fact but I wonder if the configure approach is better suited to
something that needs a bunch of checks running. Is the configure script
pure autoconf? This should work out of the box IIRC.

-- 
Alex Bennée


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build!
  2021-11-04 15:49 ` Alex Bennée
@ 2021-11-04 16:12   ` Alex Bennée
  2021-11-04 16:34   ` Anthony PERARD
  1 sibling, 0 replies; 161+ messages in thread
From: Alex Bennée @ 2021-11-04 16:12 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Roger Pau Monné,
	Kevin Tian, George Dunlap, Ian Jackson, Connor Davis,
	Bob Eshleman, Alistair Francis, Tim Deegan, Jun Nakajima,
	Tamas K Lengyel, Doug Goldstein, Jan Beulich,
	Konrad Rzeszutek Wilk, Julien Grall, Alexandru Isaila,
	Stefano Stabellini, Ross Lagerwall, Petre Pircalabu,
	Paul Durrant, Daniel De Graaf, Daniel P. Smith,
	Volodymyr Babchuk, Wei Liu, Andrew Cooper, Lukasz Hawrylko,
	xen-devel


Alex Bennée <alex.bennee@linaro.org> writes:

> Anthony PERARD <anthony.perard@citrix.com> writes:
>
>> Patch series available in this git branch:
>> https://xenbits.xen.org/git-http/people/aperard/xen-unstable.git br.build-system-xen-v7
>>
>> v7:
>>     Out-of-tree build!
>>
>>     This mean many more patches. Everything after patch 27 is new.
>>
>>     There's a few new patch before that, but otherwise are rework of
>>     v6.
>
> This is something I've been looking forward to but obviously my QEMU
> focused mind meant I did it wrong. Generally I create a builds subdir in
> my tree with subdirs for each build flavour. So with:
>
<snip>
>
> In "build: adding out-of-tree support to the xen build" you describe the
> Linux kernel style which works well where the config can be done after
> the fact but I wonder if the configure approach is better suited to
> something that needs a bunch of checks running. Is the configure script
> pure autoconf? This should work out of the box IIRC.

FWIW doing it the make O way:

  ➜  pwd
  /home/alex/lsrc/xen/xen.git
  🕙16:12:54 alex@zen:xen.git  on  review/build-system-v7 (AM) [$?] 
  ➜  make O=builds/native/
  make -C xen install
  make[1]: Entering directory '/home/alex/lsrc/xen/xen.git/xen'
  make[2]: Entering directory '/home/alex/lsrc/xen/xen.git/xen/builds/native'
  make -f /home/alex/lsrc/xen/xen.git/xen/Rules.mk obj=tools tools/fixdep
  make[3]: Entering directory '/home/alex/lsrc/xen/xen.git/xen/builds/native'
  make[3]: Leaving directory '/home/alex/lsrc/xen/xen.git/xen/builds/native'
    GEN     Makefile
  make -f /home/alex/lsrc/xen/xen.git/xen/Rules.mk obj=tools
  make[3]: Entering directory '/home/alex/lsrc/xen/xen.git/xen/builds/native'
  make[3]: Leaving directory '/home/alex/lsrc/xen/xen.git/xen/builds/native'
  make -f /home/alex/lsrc/xen/xen.git/xen/Rules.mk obj=. include/xen/compile.h
  make[3]: Entering directory '/home/alex/lsrc/xen/xen.git/xen/builds/native'
    BANNER  .banner
  error: could not load font /home/alex/lsrc/xen/xen.git/xen/tools/xen.flf
  make[3]: *** [/home/alex/lsrc/xen/xen.git/xen/./build.mk:12: .banner] Error 255
  make[3]: Leaving directory '/home/alex/lsrc/xen/xen.git/xen/builds/native'
  make[2]: *** [/home/alex/lsrc/xen/xen.git/xen/Makefile:539: xen] Error 2
  make[2]: Leaving directory '/home/alex/lsrc/xen/xen.git/xen/builds/native'
  make[1]: *** [Makefile:176: __sub-make] Error 2
  make[1]: Leaving directory '/home/alex/lsrc/xen/xen.git/xen'
  make: *** [Makefile:136: install-xen] Error 2

which is odd because I have a "apt build-dep xen" and figlet installed
on this system.

-- 
Alex Bennée


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build!
  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
  1 sibling, 1 reply; 161+ messages in thread
From: Anthony PERARD @ 2021-11-04 16:34 UTC (permalink / raw)
  To: Alex Bennée
  Cc: Roger Pau Monné,
	Kevin Tian, George Dunlap, Ian Jackson, Connor Davis,
	Bob Eshleman, Alistair Francis, Tim Deegan, Jun Nakajima,
	Tamas K Lengyel, Doug Goldstein, Jan Beulich,
	Konrad Rzeszutek Wilk, Julien Grall, Alexandru Isaila,
	Stefano Stabellini, Ross Lagerwall, Petre Pircalabu,
	Paul Durrant, Daniel De Graaf, Daniel P. Smith,
	Volodymyr Babchuk, Wei Liu, Andrew Cooper, Lukasz Hawrylko,
	xen-devel

On Thu, Nov 04, 2021 at 03:49:36PM +0000, Alex Bennée wrote:
> 
> Anthony PERARD <anthony.perard@citrix.com> writes:
> 
> > Patch series available in this git branch:
> > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fxenbits.xen.org%2Fgit-http%2Fpeople%2Faperard%2Fxen-unstable.git&amp;data=04%7C01%7Canthony.perard%40citrix.com%7C85bb0d32a72542aa9f6108d99fad9607%7C335836de42ef43a2b145348c2ee9ca5b%7C0%7C0%7C637716390172120458%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=WWS4yPu9%2BJxBkBiM5SBrH7kDtHkUzMGuKSSdPcgEYII%3D&amp;reserved=0 br.build-system-xen-v7
> >
> > v7:
> >     Out-of-tree build!
> >
> >     This mean many more patches. Everything after patch 27 is new.
> >
> >     There's a few new patch before that, but otherwise are rework of
> >     v6.
> 
> This is something I've been looking forward to but obviously my QEMU
> focused mind meant I did it wrong. Generally I create a builds subdir in
> my tree with subdirs for each build flavour. So with:
> 
>   /home/alex/lsrc/xen/xen.git/builds/native
> 
> And executing:
> 
>   ➜  ../../configure

Thanks for testing, but the patch series only focus on a subset of the
repository, that is the hypervisor "xen.git/xen/". The rest of xen.git
isn't ready for out-of-tree build unfortunately. A lot more work is
needed.

> In "build: adding out-of-tree support to the xen build" you describe the
> Linux kernel style which works well where the config can be done after
> the fact but I wonder if the configure approach is better suited to
> something that needs a bunch of checks running. Is the configure script
> pure autoconf? This should work out of the box IIRC.

"xen.git/xen/" does use a build system similar to Linux's, we use
Linux's Kconfig for example.

For the rest of the repository, it is indeed autoconf for the
configuration phase. So yes running ./configure would be mostly ok, but
it doesn't take care of Makefiles at the moment and I found one bug in
our autoconf macros. Beyond that, our Makefiles aren't ready.

xen.git isn't a single build system, they are several (at least one
foreach of xen/ stubdom/ tools/)

Cheers,

-- 
Anthony PERARD


^ permalink raw reply	[flat|nested] 161+ messages in thread

* Re: [XEN PATCH v7 00/51] xen: Build system improvements, now with out-of-tree build!
  2021-11-04 16:34   ` Anthony PERARD
@ 2021-11-04 16:59     ` Alex Bennée
  0 siblings, 0 replies; 161+ messages in thread
From: Alex Bennée @ 2021-11-04 16:59 UTC (permalink / raw)
  To: Anthony PERARD
  Cc: Roger Pau Monné,
	Kevin Tian, George Dunlap, Ian Jackson, Connor Davis,
	Bob Eshleman, Alistair Francis, Tim Deegan, Jun Nakajima,
	Tamas K Lengyel, Doug Goldstein, Jan Beulich,
	Konrad Rzeszutek Wilk, Julien Grall, Alexandru Isaila,
	Stefano Stabellini, Ross Lagerwall, Petre Pircalabu,
	Paul Durrant, Daniel De Graaf, Daniel P. Smith,
	Volodymyr Babchuk, Wei Liu, Andrew Cooper, Lukasz Hawrylko,
	xen-devel


Anthony PERARD <anthony.perard@citrix.com> writes:

> On Thu, Nov 04, 2021 at 03:49:36PM +0000, Alex Bennée wrote:
>> 
>> Anthony PERARD <anthony.perard@citrix.com> writes:
>> 
>> > Patch series available in this git branch:
>> > https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fxenbits.xen.org%2Fgit-http%2Fpeople%2Faperard%2Fxen-unstable.git&amp;data=04%7C01%7Canthony.perard%40citrix.com%7C85bb0d32a72542aa9f6108d99fad9607%7C335836de42ef43a2b145348c2ee9ca5b%7C0%7C0%7C637716390172120458%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=WWS4yPu9%2BJxBkBiM5SBrH7kDtHkUzMGuKSSdPcgEYII%3D&amp;reserved=0
>> > br.build-system-xen-v7
>> >
>> > v7:
>> >     Out-of-tree build!
>> >
>> >     This mean many more patches. Everything after patch 27 is new.
>> >
>> >     There's a few new patch before that, but otherwise are rework of
>> >     v6.
>> 
>> This is something I've been looking forward to but obviously my QEMU
>> focused mind meant I did it wrong. Generally I create a builds subdir in
>> my tree with subdirs for each build flavour. So with:
>> 
>>   /home/alex/lsrc/xen/xen.git/builds/native
>> 
>> And executing:
>> 
>>   ➜  ../../configure
>
> Thanks for testing, but the patch series only focus on a subset of the
> repository, that is the hypervisor "xen.git/xen/". The rest of xen.git
> isn't ready for out-of-tree build unfortunately. A lot more work is
> needed.
>
>> In "build: adding out-of-tree support to the xen build" you describe the
>> Linux kernel style which works well where the config can be done after
>> the fact but I wonder if the configure approach is better suited to
>> something that needs a bunch of checks running. Is the configure script
>> pure autoconf? This should work out of the box IIRC.
>
> "xen.git/xen/" does use a build system similar to Linux's, we use
> Linux's Kconfig for example.

Ahh makes more sense in that context ;-)

> For the rest of the repository, it is indeed autoconf for the
> configuration phase. So yes running ./configure would be mostly ok, but
> it doesn't take care of Makefiles at the moment and I found one bug in
> our autoconf macros. Beyond that, our Makefiles aren't ready.
>
> xen.git isn't a single build system, they are several (at least one
> foreach of xen/ stubdom/ tools/)

I wonder if there is any millage in thinking about splitting
repositories and having them as subrepos of the main xen.git?

I can imagine building the core hypervisor as a standalone project is
something that is done a lot at least by developers. In a hypothetical
rust-vmm enabled world for example would you only need the hypervisor
itself if you had an alternate userspace to launch things?

>
> Cheers,


-- 
Alex Bennée


^ permalink raw reply	[flat|nested] 161+ messages in thread

end of thread, other threads:[~2021-11-04 17:06 UTC | newest]

Thread overview: 161+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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 ` [XEN PATCH v7 27/51] build: introduce if_changed_deps Anthony PERARD
2021-10-11 14:20   ` 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

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.