Skip to content

Commit

Permalink
Merge pull request #15544 from Tokarak/cargo_cpu
Browse files Browse the repository at this point in the history
Apply cpu-optimisation to Rust projects
  • Loading branch information
MikeMcQuaid authored Jul 4, 2023
2 parents 9cd4475 + 521fdcb commit fd4f488
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 0 deletions.
1 change: 1 addition & 0 deletions Library/Homebrew/extend/ENV/shared.rb
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ module SharedEnvExtension
CMAKE_PREFIX_PATH CMAKE_INCLUDE_PATH CMAKE_FRAMEWORK_PATH
GOBIN GOPATH GOROOT PERL_MB_OPT PERL_MM_OPT
LIBRARY_PATH LD_LIBRARY_PATH LD_PRELOAD LD_RUN_PATH
RUSTFLAGS
].freeze
private_constant :SANITIZED_VARS

Expand Down
1 change: 1 addition & 0 deletions Library/Homebrew/extend/ENV/std.rb
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ def setup_build_environment(formula: nil, cc: nil, build_bottle: false, bottle_a
self["PKG_CONFIG_LIBDIR"] = determine_pkg_config_libdir

self["MAKEFLAGS"] = "-j#{make_jobs}"
self["RUSTFLAGS"] = Hardware.rustflags_target_cpu

if HOMEBREW_PREFIX.to_s != "/usr/local"
# /usr/local is already an -isystem and -L directory so we skip it
Expand Down
1 change: 1 addition & 0 deletions Library/Homebrew/extend/ENV/super.rb
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ def setup_build_environment(formula: nil, cc: nil, build_bottle: false, bottle_a

self["HOMEBREW_ENV"] = "super"
self["MAKEFLAGS"] ||= "-j#{determine_make_jobs}"
self["RUSTFLAGS"] = Hardware.rustflags_target_cpu
self["PATH"] = determine_path
self["PKG_CONFIG_PATH"] = determine_pkg_config_path
self["PKG_CONFIG_LIBDIR"] = determine_pkg_config_libdir
Expand Down
18 changes: 18 additions & 0 deletions Library/Homebrew/hardware.rb
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,24 @@ def oldest_cpu(_version = nil)
end
end
alias generic_oldest_cpu oldest_cpu

# Returns a Rust flag to set the target CPU if necessary.
# Defaults to nil.
sig { returns(T.nilable(String)) }
def rustflags_target_cpu
# Rust already defaults to the oldest supported cpu for each target-triplet
# so it's safe to ignore generic archs such as :armv6 here.
# Rust defaults to apple-m1 since Rust 1.71 for aarch64-apple-darwin.
@target_cpu ||= case (cpu = oldest_cpu)
when :core
:prescott
when :native, :ivybridge, :sandybridge, :nehalem, :core2
cpu
end
return if @target_cpu.blank?

"--codegen target-cpu=#{@target_cpu}"
end
end
end

Expand Down

0 comments on commit fd4f488

Please sign in to comment.