[PATCH] gitlab-ci: Fix macOS build by using bison from homebrew

Philippe Mathieu-Daudé posted 1 patch 2 weeks, 5 days ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20260706211336.11131-1-philmd@oss.qualcomm.com
Maintainers: "Philippe Mathieu-Daudé" <philmd@mailo.com>, "Alex Bennée" <alex.bennee@linaro.org>, Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
.gitlab-ci.d/macos.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[PATCH] gitlab-ci: Fix macOS build by using bison from homebrew
Posted by Philippe Mathieu-Daudé 2 weeks, 5 days ago
Since commit 6beec3bcdaa ("target/hexagon: add build config for
softmmu") we build the Hexagon target by default when system
emulation is selected. This commit introduced a hard dependency
on the 'bison' program for the idef parser. The binary provided
by Darwin is too old, and the build now fails:

  $ ../configure
  python determined to be '/opt/homebrew/bin/python3'
  C compiler for the host machine: clang (clang 17.0.0 "Apple clang version 17.0.0 (clang-1700.6.4.2)")
  Program bison found: NO found 2.3 but need: '>=3.0' (/usr/bin/bison)

  ../target/hexagon/meson.build:300:8: ERROR: Program 'bison' not found or not executable

  ERROR: meson setup failed

Since we use a lcitool generated vars file, we already install
'bison' from homebrew, but we don't have its path in our $PATH
variable. Add it to the macos.yml PATH_EXTRA variable which will
amend it to the global $PATH.

Fixes: 6beec3bcdaa ("target/hexagon: add build config for softmmu")
Signed-off-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
---
This however doesn't help macOS users ... They need to manually
register the homebrew bison path.
---
 .gitlab-ci.d/macos.yml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.gitlab-ci.d/macos.yml b/.gitlab-ci.d/macos.yml
index 53b6e6c4d8f..3a9e5f46702 100644
--- a/.gitlab-ci.d/macos.yml
+++ b/.gitlab-ci.d/macos.yml
@@ -37,7 +37,7 @@ aarch64-macos-15-build:
   variables:
     QEMU_JOB_MACOS: 1
     NAME: macos-15
-    PATH_EXTRA: /opt/homebrew/gettext/bin
+    PATH_EXTRA: /opt/homebrew/gettext/bin:/opt/homebrew/opt/bison/bin
     PKG_CONFIG_PATH: /opt/homebrew/curl/lib/pkgconfig:/opt/homebrew/ncurses/lib/pkgconfig:/opt/homebrew/readline/lib/pkgconfig
     CONFIGURE_ARGS:
         --target-list=aarch64-softmmu,i386-softmmu,x86_64-softmmu
@@ -54,7 +54,7 @@ aarch64-macos-26-build:
     QEMU_JOB_MACOS: 1
     NAME: macos-26
     DYLD_LIBRARY_PATH: /opt/homebrew/opt/expat/lib/
-    PATH_EXTRA: /opt/homebrew/gettext/bin
+    PATH_EXTRA: /opt/homebrew/gettext/bin:/opt/homebrew/opt/bison/bin
     PKG_CONFIG_PATH: /opt/homebrew/curl/lib/pkgconfig:/opt/homebrew/ncurses/lib/pkgconfig:/opt/homebrew/readline/lib/pkgconfig
     CONFIGURE_ARGS:
         --target-list=aarch64-softmmu,i386-softmmu,x86_64-softmmu
-- 
2.53.0


Re: [PATCH] gitlab-ci: Fix macOS build by using bison from homebrew
Posted by Pierrick Bouvier 2 weeks, 5 days ago
On 7/6/2026 2:13 PM, Philippe Mathieu-Daudé wrote:
> Since commit 6beec3bcdaa ("target/hexagon: add build config for
> softmmu") we build the Hexagon target by default when system
> emulation is selected. This commit introduced a hard dependency
> on the 'bison' program for the idef parser. The binary provided
> by Darwin is too old, and the build now fails:
> 
>   $ ../configure
>   python determined to be '/opt/homebrew/bin/python3'
>   C compiler for the host machine: clang (clang 17.0.0 "Apple clang version 17.0.0 (clang-1700.6.4.2)")
>   Program bison found: NO found 2.3 but need: '>=3.0' (/usr/bin/bison)
> 
>   ../target/hexagon/meson.build:300:8: ERROR: Program 'bison' not found or not executable
> 
>   ERROR: meson setup failed
> 
> Since we use a lcitool generated vars file, we already install
> 'bison' from homebrew, but we don't have its path in our $PATH
> variable. Add it to the macos.yml PATH_EXTRA variable which will
> amend it to the global $PATH.
> 
> Fixes: 6beec3bcdaa ("target/hexagon: add build config for softmmu")
> Signed-off-by: Philippe Mathieu-Daudé <philmd@oss.qualcomm.com>
> ---
> This however doesn't help macOS users ... They need to manually
> register the homebrew bison path.
> ---
>  .gitlab-ci.d/macos.yml | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/.gitlab-ci.d/macos.yml b/.gitlab-ci.d/macos.yml
> index 53b6e6c4d8f..3a9e5f46702 100644
> --- a/.gitlab-ci.d/macos.yml
> +++ b/.gitlab-ci.d/macos.yml
> @@ -37,7 +37,7 @@ aarch64-macos-15-build:
>    variables:
>      QEMU_JOB_MACOS: 1
>      NAME: macos-15
> -    PATH_EXTRA: /opt/homebrew/gettext/bin
> +    PATH_EXTRA: /opt/homebrew/gettext/bin:/opt/homebrew/opt/bison/bin
>      PKG_CONFIG_PATH: /opt/homebrew/curl/lib/pkgconfig:/opt/homebrew/ncurses/lib/pkgconfig:/opt/homebrew/readline/lib/pkgconfig
>      CONFIGURE_ARGS:
>          --target-list=aarch64-softmmu,i386-softmmu,x86_64-softmmu
> @@ -54,7 +54,7 @@ aarch64-macos-26-build:
>      QEMU_JOB_MACOS: 1
>      NAME: macos-26
>      DYLD_LIBRARY_PATH: /opt/homebrew/opt/expat/lib/
> -    PATH_EXTRA: /opt/homebrew/gettext/bin
> +    PATH_EXTRA: /opt/homebrew/gettext/bin:/opt/homebrew/opt/bison/bin
>      PKG_CONFIG_PATH: /opt/homebrew/curl/lib/pkgconfig:/opt/homebrew/ncurses/lib/pkgconfig:/opt/homebrew/readline/lib/pkgconfig
>      CONFIGURE_ARGS:
>          --target-list=aarch64-softmmu,i386-softmmu,x86_64-softmmu

It seems like to be a classic issue on MacOS, given that the base system
comes with an outdated bison version. The only idea I have to help users
would be to explicitly search for homebrew version in meson.

It should push user to do something intuitive:
- configure returns an error about bison version
- user check which bison is taken, and which version it has
- eventually googles this and finds it needs homebrew version
- user install homebrew version
- configure is now happy

It does not impact other OS since homebrew file won't be present.
It leaves out users with custom path for homebrew, but I'm not sure a
lot of people try to change it.

What do you think?

--- a/target/hexagon/meson.build
+++ b/target/hexagon/meson.build
@@ -297,7 +297,7 @@ if idef_parser_enabled and ('hexagon-linux-user' in
target_dirs or
     )

     bison = generator(
-        find_program('bison', version: '>=3.0'),
+        find_program(['bison', '/opt/homebrew/opt/bison/bin'], version:
'>=3.0'),
         output: ['@BASENAME@.tab.c', '@BASENAME@.tab.h'],
         arguments: ['@INPUT@', '--defines=@OUTPUT1@', '--output=@OUTPUT0@']
     )