Merge pull request #15544 from Tokarak/cargo_cpu

Apply cpu-optimisation to Rust projects
This commit is contained in:
Mike McQuaid 2023-07-04 12:04:24 +01:00 committed by GitHub
commit fd4f488072
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 21 additions and 0 deletions

View File

@ -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

View File

@ -36,6 +36,7 @@ module Stdenv
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

View File

@ -63,6 +63,7 @@ module Superenv
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

View File

@ -214,6 +214,24 @@ module Hardware
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