Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
ZhongRuoyu committed Dec 31, 2024
1 parent eac5720 commit 2b8b778
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 8 deletions.
1 change: 1 addition & 0 deletions Library/Homebrew/extend/ENV/super.rb
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,7 @@ def determine_optflags
odebug "Building a bottle for custom architecture (#{effective_arch})..."
Hardware::CPU.arch_flag(effective_arch)
end
alias generic_determine_optflags determine_optflags

sig { returns(String) }
def determine_cccfg
Expand Down
18 changes: 16 additions & 2 deletions Library/Homebrew/extend/os/linux/extend/ENV/super.rb
Original file line number Diff line number Diff line change
Expand Up @@ -45,15 +45,29 @@ def homebrew_extra_paths

def homebrew_extra_isystem_paths
paths = []
# Add paths for GCC headers when building against [email protected] because we have to use -nostdinc.
if deps.any? { |d| d.name == "[email protected]" }
# Add paths for GCC headers when building against [email protected] or [email protected]
# because we have to use -nostdinc.
if deps.any? { |d| d.name == "[email protected]" || d.name == "[email protected]" }
gcc_include_dir = Utils.safe_popen_read(cc, "--print-file-name=include").chomp
gcc_include_fixed_dir = Utils.safe_popen_read(cc, "--print-file-name=include-fixed").chomp
paths << gcc_include_dir << gcc_include_fixed_dir
end
paths
end

sig { returns(String) }
def determine_optflags
if effective_arch == :armv8 &&
compiler.match?(GNU_GCC_REGEXP) &&
DevelopmentTools.gcc_version(compiler.to_s) >= "9.3.1"
# Out-of-line atomics are not supported out-of-the-box on all systems.
# https://learn.arm.com/learning-paths/servers-and-cloud-computing/lse/intro/
"#{generic_determine_optflags} -mno-outline-atomics"
else
generic_determine_optflags
end
end

def determine_rpath_paths(formula)
PATH.new(
*formula&.lib,
Expand Down
14 changes: 8 additions & 6 deletions Library/Homebrew/shims/super/cc
Original file line number Diff line number Diff line change
Expand Up @@ -313,8 +313,9 @@ class Cmd
def cppflags
args = []
args += path_flags("-isystem", isystem_paths) + path_flags("-I", include_paths)
# Add -nostdinc when building against [email protected] to avoid mixing system and brewed glibc headers.
args << "-nostdinc" if @deps.include?("[email protected]")
# Add -nostdinc when building against [email protected] or [email protected] to avoid
# mixing system and brewed glibc headers.
args << "-nostdinc" if (@deps & ["[email protected]", "[email protected]"]).any?
# Ideally this would be -ffile-prefix-map, but that requires a minimum of GCC 8, LLVM Clang 10 or Apple Clang 12
# and detecting the version dynamically based on what `HOMEBREW_CC` may have been rewritten to point to is awkward
args << "-fdebug-prefix-map=#{formula_buildpath}=." if formula_buildpath && !debug_symbols?
Expand All @@ -340,19 +341,20 @@ class Cmd
end

def ldflags_linux(args)
versioned_glibc_dep = (@deps & ["[email protected]", "[email protected]"]).first
unless mode == :ld
wl = "-Wl,"
if @deps.include?("[email protected]")
args << "-B#{@opt}/[email protected]/lib"
if versioned_glibc_dep
args << "-B#{@opt}/#{versioned_glibc_dep}/lib"
else
args << "-B#{@opt}/glibc/lib"
end
end
args += rpath_flags("#{wl}-rpath=", rpath_paths)
args += ["#{wl}--dynamic-linker=#{dynamic_linker_path}"] if dynamic_linker_path
# Use -rpath-link to make sure linker uses [email protected] rather than the system glibc for indirect
# Use -rpath-link to make sure linker uses [email protected] or [email protected] rather than the system glibc for indirect
# dependencies because -L will only handle direct dependencies.
args << "#{wl}-rpath-link=#{@opt}/[email protected]/lib" if @deps.include?("[email protected]")
args << "#{wl}-rpath-link=#{@opt}/#{versioned_glibc_dep}/lib" if versioned_glibc_dep
args
end

Expand Down

0 comments on commit 2b8b778

Please sign in to comment.