190 Commits

Author SHA1 Message Date
Michael Cho
4077e8e38d
Improve superenv mixing newer LLVM headers with Apple libc++
To avoid missing symbols when mixing newer LLVM headers with older Apple
libc++, inject a __config_site that sets vendor availability annotations
to match system library.
2025-09-14 22:10:02 -04:00
Michael Cho
5fb96d9d8a
shims/super/cc: rpath-link glibc if indirect dep
This helps ld.bfd find the correct `glibc` dependency. Needed when using
host toolchain which will only search for /etc/ld.so.conf.

Also can help unsupported systems that force poured non-relocatable
`binutils` bottle.
2025-09-03 22:08:10 -04:00
Douglas Eichelberger
240fd71e6f
Avoid repeated calls to affix checks 2025-08-31 11:11:41 -07:00
Eric Knibbe
827480f06b
messages/comments: wording fixes 2025-08-16 00:57:59 -04:00
Ruoyu Zhong
40da6c1e16
formula: improve variable naming
`log_filename` sounds better than `logfn`.
2025-08-13 14:27:04 +08:00
Ruoyu Zhong
6f3f2d7317
formula: improve log filename handling
Fixes 718b82560a (commitcomment-163850325).
2025-08-12 22:46:41 +08:00
Carlo Cabrera
b89d4ef633
shims/super/rustc_wrapper: fix comment
In #20424, we moved `HOMEBREW_RUSTFLAGS` to the end of the compiler
invocation, but didn't update the comment. Let's fix that.

While we're here, let's fix these `shellcheck disable`s.
2025-08-12 14:15:14 +08:00
Carlo Cabrera
63a8fd7a4a
rustc_wrapper: pass HOMEBREW_RUSTFLAGS last
If we pass it first, it can be overridden by other arguments passed on
the command line. We don't want that.

See discussion at Homebrew/homebrew-core#232566.
2025-08-12 00:46:05 +08:00
Carlo Cabrera
718b82560a
formula: append .log to formula build log filenames
Having log files with extensions like `.cc` and `.cmake` is really
unfriendly to editor syntax highlighters and language servers. Let's try
to make sure these are opened as log files by adding a `.log` extension
to them.
2025-08-11 13:10:14 +08:00
Mike McQuaid
e6ba71c5b1
Add rustc wrapper shim to fix RUSTFLAGS conflicts
Fixes #18556 by using RUSTC_WRAPPER instead of setting RUSTFLAGS directly.
This allows Homebrew's optimization flags to coexist with .cargo/config.toml
settings, preventing build failures when projects have their own Rust
configuration.

- Add rustc_wrapper shim that clears RUSTFLAGS and prepends HOMEBREW_RUSTFLAGS
- Update both std and super environments to use RUSTC_WRAPPER
- Store Homebrew's rustflags in HOMEBREW_RUSTFLAGS instead of RUSTFLAGS

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-authored-by: Carlo Cabrera <github@carlo.cab>
2025-08-06 17:06:25 +01:00
Eric Knibbe
626b6aca2d
RubyDoc output fixes 2025-08-05 17:13:42 -04:00
Francois-Xavier Coudert
10095f5cac compilers: add gcc-15 2025-04-23 10:09:45 +02:00
Carlo Cabrera
ec8f3033e0
shims/super/cc: add comment for optimisation flag handling
Follow up to #19551
2025-03-20 23:19:31 +08:00
Carlo Cabrera
351f7f82f3
shims/super/cc: tweak optimisation flag handling for runtime CPU detection builds
Let's reinstate adding our own optimisation flags if the compiler
was not invoked with a conflicting optimisation flag.
2025-03-20 15:42:50 +08:00
Bo Anderson
6fed6c10e2
Use PAC+BTI where possible on arm64 Linux 2025-03-18 06:14:16 +00:00
Ruoyu Zhong
a818b25a8b
Add support for bottling Portable Ruby for ARM64 Linux 2025-01-19 17:06:32 +08:00
Caleb Xu
1ec8a0488f
shims/super/cc: handle double dash in args 2025-01-12 14:49:10 -05:00
Michael Cho
f50c32e6a6
shims/mac/super: add pkgconf symlink
Since we switched to `pkgconf`, it is possible that a build tool may use
it before `pkg-config` so make sure both shims are available.
2024-11-25 17:03:28 -05:00
Mike McQuaid
c31b232be9
Homebrew/shims: remove *llvm-g* shims.
They are no longer ever used.
2024-09-30 08:43:57 +01:00
Michael Cho
6020744699
shims/super/cc: remove leftover usage of llvm-g++-4.2 2024-09-29 11:41:50 -04:00
Carlo Cabrera
25afdcc2b8
shims/super/cc: add modeline for vim-like editors
This will prevent my editor from trying to read this file as shell
script and getting the syntax highlighting all wrong.
2024-09-29 05:47:05 +08:00
Michael Cho
7dac30a105
compilers: drop support for GCC 4.9, 5 and 6 2024-09-24 18:56:12 -04:00
Bo Anderson
0820c19417
shims/super/cc: don't strip prefixes with --debug-symbols 2024-09-15 19:07:12 +01:00
Carlo Cabrera
d2c443afce
Merge pull request #18310 from cho-m/m4-env 2024-09-12 02:10:04 +08:00
Michael Cho
99d81b4717
ENV/super: replace m4 shim with M4 variable
The problem is the shim can end up getting baked into formula binaries
(e.g. `flex`) or cause odd issues when mixed up with brew `m4`, e.g.
https://github.com/Homebrew/homebrew-core/issues/180040
2024-09-11 11:33:44 -04:00
Carlo Cabrera
f3d1dd165d
shims/super/cc: fix linker flag parsing
Our parsing of linker flags can be easily confused by, e.g.,

    -Wl,-undefined -Wl,dynamic_lookup,-dead_strip_dylibs

The current code that tries to detect these flags will erroneously
conclude that they were not passed.

This change fixes that.
2024-09-11 22:53:04 +08:00
Carlo Cabrera
66ba1f10c7
shims/super/ninja: respect Homebrew parallelism
`ninja` currently doesn't respect `HOMEBREW_MAKE_JOBS` or
`ENV.deparallelize`. This change fixes that.
2024-09-09 10:50:52 +08:00
Francois-Xavier Coudert
e0b4ec4eed shims/super/cc: do not pass -pipe 2024-09-02 23:17:21 +02:00
Ruoyu Zhong
0b3b7d9bc3
shims/super/cc: only set HOMEBREW_LD_LIBRARY_PATH when needed
Co-authored-by: Bo Anderson <mail@boanderson.me>
2024-08-26 00:39:27 +08:00
Ruoyu Zhong
fb57604fe2
shims/super/cc: preserve LD_LIBRARY_PATH
This could be used by the linker [^1] so let's preserve it before
invoking the compiler/linker.

[^1]: https://sourceware.org/binutils/docs/ld/Options.html
2024-08-26 00:18:15 +08:00
Ruoyu Zhong
86de678086
shims/super/cc: unset LD_LIBRARY_PATH
A local `ruby` build failed while building extensions, with:

    *** Following extensions are not compiled:
    -test-/file:
      Could not be configured. It will not be installed.
      /tmp/ruby-20240824-893184-ehcnsa/ruby-3.3.4/lib/mkmf.rb:480: The compiler failed to generate an executable file.
      You have to install development tools first.
      Check ext/-test-/file/mkmf.log for more details.
    -test-/symbol:
      Could not be configured. It will not be installed.
      /tmp/ruby-20240824-893184-ehcnsa/ruby-3.3.4/lib/mkmf.rb:480: The compiler failed to generate an executable file.
      You have to install development tools first.
      Check ext/-test-/symbol/mkmf.log for more details.
    [...]

`mkmf.log` indicated that the compiler shim failed to load `pathname`:

    LD_LIBRARY_PATH=.:../../.. "gcc-13 -o conftest -I../../../.ext/include/aarch64-linux -I../../.././include -I../../.././ext/-test-/file -I/home/linuxbrew/.linuxbrew/opt/libyaml/include -I/home/linuxbrew/.linuxbrew/opt/openssl@3/include    -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wdeprecated-declarations -Wdiv-by-zero -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wpointer-arith -Wwrite-strings -Wold-style-definition -Wimplicit-fallthrough=0 -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-packed-bitfield-compat -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wsuggest-attribute=format -Wsuggest-attribute=noreturn -Wunused-variable -Wmisleading-indentation -Wundef  -fPIC conftest.c  -L. -L../../.. -L/home/linuxbrew/.linuxbrew/opt/libyaml/lib -Wl,-rpath,/home/linuxbrew/.linuxbrew/opt/libyaml/lib -L/home/linuxbrew/.linuxbrew/opt/openssl@3/lib -Wl,-rpath,/home/linuxbrew/.linuxbrew/opt/openssl@3/lib -L. -fstack-protector-strong -L/home/linuxbrew/.linuxbrew/opt/libyaml/lib  -Wl,-rpath,/home/linuxbrew/.linuxbrew/opt/libyaml/lib -L/home/linuxbrew/.linuxbrew/opt/openssl@3/lib  -Wl,-rpath,/home/linuxbrew/.linuxbrew/opt/openssl@3/lib -rdynamic -Wl,-export-dynamic -Wl,--no-as-needed     -Wl,-rpath,/home/linuxbrew/.linuxbrew/Cellar/ruby/3.3.4/lib -L/home/linuxbrew/.linuxbrew/Cellar/ruby/3.3.4/lib -lruby-static -lz -lrt -lrt -ldl -lcrypt -lm -lpthread   -lm -lpthread  -lc"
    /home/linuxbrew/.linuxbrew/Homebrew/Library/Homebrew/shims/linux/super/gcc-13:12:in `require': cannot load such file -- pathname (LoadError)
      from /home/linuxbrew/.linuxbrew/Homebrew/Library/Homebrew/shims/linux/super/gcc-13:12:in `<main>'

I believe this was due to `../../..` in `LD_LIBRARY_PATH` containing
`libruby.so`, causing the Ruby script to load the being-built Ruby
library instead of the system/portable one.
2024-08-25 23:50:13 +08:00
Rylan Polster
842b4ac3d3
Improve VS Code debugger support 2024-08-15 11:47:31 -04:00
Michael Cho
0477944e71
shims/super/cc: pass -ld_classic if needed for -dead_strip_dylibs 2024-08-03 14:46:18 -04:00
Francois-Xavier Coudert
fbf7e5f069 compilers: add gcc-14 2024-05-02 09:40:09 +02:00
Carlo Cabrera
c3c61767c7
shims/super/cc: avoid passing -oso_prefix during configure
Fixes `configure` failures in Homebrew/homebrew-core#169893.
2024-04-28 12:42:04 +08:00
Michael Cho
c4695307e4
shims/mac/super/m4: use gm4 if missing m4 (e.g. Xcode 15.3 CLT)
Signed-off-by: Michael Cho <michael@michaelcho.dev>
2024-03-31 19:29:56 -04:00
Bo Anderson
636d883008
Support bash in privileged mode 2024-03-27 04:40:44 +00:00
Bo Anderson
5582849ae7
Reproducible builds for native compiled binaries 2024-03-11 16:06:55 +00:00
Bo Anderson
dbcc449b14
shims/mac/super/make: use standard exec routines 2023-07-12 23:21:00 +01:00
Carlo Cabrera
9ece93ea49
shims/mac: handle usage of Homebrew make
We have a handful of formulae that use Homebrew `make` to build. Doing
this evades our compiler shims. Let's try to avoid this by allowing our
shims to support usage of Homebrew `make` by calling it as `gmake` in
the formula.
2023-07-12 02:16:32 +08:00
Carlo Cabrera
729c2b331b
shims/linux: add gnumake and gmake symlinks
The `opencv@3` build calls `gmake`, which ends up evading our compiler
shim and results in a build failure because of a `-Werror` flag.

Closes Homebrew/homebrew-core#132966.
2023-06-06 23:49:52 +08:00
Francois-Xavier Coudert
6067acfd7c compilers: add gcc-13 2023-04-19 11:18:18 +02:00
Carlo Cabrera
999582f412
Fix typo 2023-03-07 23:34:57 +08:00
Carlo Cabrera
c4fe6e7617
Incoroporate feedback from code review
- check the version of `/usr/bin/ld` for support of `-no_fixup_chains`
- check for usage of the `-fuse-ld` flag, since this flag is only
  supported by Apple ld64

Also, call `no_fixup_chains` when setting up the build environment.
2023-03-05 16:55:00 +08:00
Carlo Cabrera
1b12d74945
Pass -no_fixup_chains to linker when required
Invoking `ld` with `-undefined dynamic_lookup` emits a warning starting
Xcode 14:

    ld: warning: -undefined dynamic_lookup may not work with chained fixups

Chained fixups is a linker optimisation that results in faster binary
load times, and is enabled by default starting Xcode 13 when the target
is macOS 12 or newer.

However, this interacts poorly with `-undefined dynamic_lookup`, and
Xcode will disable chained fixups when it is invoked with this flag
starting Xcode 14.3. Until then, we may be shipping binaries that are
broken in subtle ways, so let's disable chained fixups when necessary
instead.

I patterned the changes here after the handling of `-no_weak_imports`.
The only difference is that we need to check the flags that were passed
to the linker first to see if we do need to disable chained fixups.

For additional context, see:

https://developer.apple.com/documentation/xcode-release-notes/xcode-13-release-notes
https://www.wwdcnotes.com/notes/wwdc22/110362/
https://www.emergetools.com/blog/posts/iOS15LaunchTime
https://github.com/python/cpython/issues/97524
https://github.com/pybind/pybind11/pull/4301
2023-03-04 00:19:13 +08:00
Bo Anderson
5445bf8f39
shims/super/cc: unset RUBYLIB 2022-11-30 03:50:38 +00:00
Bo Anderson
e21c926f9b
Update Bundler to 2.3.26 2022-11-17 16:35:08 +00:00
Bo Anderson
a776d5f02b
Workaround macOS system Ruby issue picking incorrect native gem archs 2022-10-14 01:30:38 +01:00
Mike McQuaid
5b8bc14afd
shims/gems/rubocop: handle when brew isn't in PATH.
Instead, figure out where `$HOMEBREW_PREFIX/bin` should be and use that.
2022-08-30 12:53:42 +00:00
Lukas Oberhuber
3d60d610dd Merge branch 'master' into debug-symbols 2022-08-10 18:44:09 -10:00