[PATCH] configure/optionrom: Fix MSYS2 multiboot.bin issue

Helge Konetzka posted 1 patch 1 week, 2 days ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/2b5ab039-8495-b55f-03f1-ecfd996907a9@zapateado.de
configure                  | 4 ++++
pc-bios/optionrom/Makefile | 5 ++---
2 files changed, 6 insertions(+), 3 deletions(-)

[PATCH] configure/optionrom: Fix MSYS2 multiboot.bin issue

Posted by Helge Konetzka 1 week, 2 days ago
This patch enables native builds on MSYS2 with symlinks disabled.


Signed-off-by: Helge Konetzka <hk@zapateado.de>
---

Without this patch these builds fail with:

make[1]: *** No rule to make target 'multiboot.bin', needed by 'all'. Stop.
make: *** [Makefile:189: pc-bios/optionrom/all] Error 2
make: *** Waiting for unfinished jobs....
...
==> ERROR: A failure occurred in build().
      Aborting...

Builds fail because make cannot determine correct TOPSRC_DIR/SRC_DIR 
based on copied instead of linked Makefile

After applying this patch to current master I succeeded in building 
natively on Linux and Windows/MSYS2 with symlinks disabled and enabled 
(winsymlinks:nativestrict, bash executed as Administrator).

  configure                  | 4 ++++
  pc-bios/optionrom/Makefile | 5 ++---
  2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/configure b/configure
index da2501489f..a12bc8edbf 100755
--- a/configure
+++ b/configure
@@ -5090,6 +5090,10 @@ for rom in seabios; do
      echo "RANLIB=$ranlib" >> $config_mak
  done

+config_mak=pc-bios/optionrom/config.mak
+echo "# Automatically generated by configure - do not modify" > $config_mak
+echo "TOPSRC_DIR=$source_path" >> $config_mak
+
  if test "$skip_meson" = no; then
    cross="config-meson.cross.new"
    meson_quote() {
diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile
index 30771f8d17..3482508a86 100644
--- a/pc-bios/optionrom/Makefile
+++ b/pc-bios/optionrom/Makefile
@@ -1,6 +1,5 @@
-CURRENT_MAKEFILE := $(realpath $(word $(words 
$(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
-SRC_DIR := $(dir $(CURRENT_MAKEFILE))
-TOPSRC_DIR := $(SRC_DIR)/../..
+include config.mak
+SRC_DIR := $(TOPSRC_DIR)/pc-bios/optionrom
  VPATH = $(SRC_DIR)

  all: multiboot.bin linuxboot.bin linuxboot_dma.bin kvmvapic.bin pvh.bin
-- 
2.30.2

Re: [PATCH] configure/optionrom: Fix MSYS2 multiboot.bin issue

Posted by Mark Cave-Ayland 1 week, 1 day ago
On 15/09/2021 11:56, Helge Konetzka wrote:

> This patch enables native builds on MSYS2 with symlinks disabled.
> 
> 
> Signed-off-by: Helge Konetzka <hk@zapateado.de>
> ---
> 
> Without this patch these builds fail with:
> 
> make[1]: *** No rule to make target 'multiboot.bin', needed by 'all'. Stop.
> make: *** [Makefile:189: pc-bios/optionrom/all] Error 2
> make: *** Waiting for unfinished jobs....
> ...
> ==> ERROR: A failure occurred in build().
>       Aborting...
> 
> Builds fail because make cannot determine correct TOPSRC_DIR/SRC_DIR based on copied 
> instead of linked Makefile
> 
> After applying this patch to current master I succeeded in building natively on Linux 
> and Windows/MSYS2 with symlinks disabled and enabled (winsymlinks:nativestrict, bash 
> executed as Administrator).
> 
>   configure                  | 4 ++++
>   pc-bios/optionrom/Makefile | 5 ++---
>   2 files changed, 6 insertions(+), 3 deletions(-)
> 
> diff --git a/configure b/configure
> index da2501489f..a12bc8edbf 100755
> --- a/configure
> +++ b/configure
> @@ -5090,6 +5090,10 @@ for rom in seabios; do
>       echo "RANLIB=$ranlib" >> $config_mak
>   done
> 
> +config_mak=pc-bios/optionrom/config.mak
> +echo "# Automatically generated by configure - do not modify" > $config_mak
> +echo "TOPSRC_DIR=$source_path" >> $config_mak
> +
>   if test "$skip_meson" = no; then
>     cross="config-meson.cross.new"
>     meson_quote() {
> diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile
> index 30771f8d17..3482508a86 100644
> --- a/pc-bios/optionrom/Makefile
> +++ b/pc-bios/optionrom/Makefile
> @@ -1,6 +1,5 @@
> -CURRENT_MAKEFILE := $(realpath $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)))
> -SRC_DIR := $(dir $(CURRENT_MAKEFILE))
> -TOPSRC_DIR := $(SRC_DIR)/../..
> +include config.mak
> +SRC_DIR := $(TOPSRC_DIR)/pc-bios/optionrom
>   VPATH = $(SRC_DIR)
> 
>   all: multiboot.bin linuxboot.bin linuxboot_dma.bin kvmvapic.bin pvh.bin

(Added Marc-André on CC)

Thanks for the patch! IMO this is a better solution since then there are no special 
requirements for Windows compared with POSIX-type builds.

Marc-André, could you have a look at this? In short, commit bf708f3c4a ("optionrom: 
simplify Makefile") in its current form requires either a) copying and renaming 
compiler binaries and passing --cross-prefix into configure (see 
https://wiki.qemu.org/Hosts/W32#Native_builds_with_MSYS2) or b) enabling symlinks in 
Windows developer mode as per 
https://www.mail-archive.com/qemu-devel@nongnu.org/msg750968.html for native Windows 
builds.


ATB,

Mark.