Merge pull request #77632 from LnL7/darwin-macos-version-min

stdenv: make darwin builds reproducable
This commit is contained in:
Daiderd Jordan 2020-01-31 22:34:20 +01:00 committed by GitHub
commit 6f38c93e3c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 26 additions and 21 deletions

View File

@ -50,13 +50,12 @@ cmakeConfigurePhase() {
# because we usually do not package the framework # because we usually do not package the framework
cmakeFlags="-DCMAKE_FIND_FRAMEWORK=last $cmakeFlags" cmakeFlags="-DCMAKE_FIND_FRAMEWORK=last $cmakeFlags"
# on macOS i686 was only relevant for 10.5 or earlier.
cmakeFlags="-DCMAKE_OSX_ARCHITECTURES=x86_64 $cmakeFlags"
# we never want to use the global macOS SDK # we never want to use the global macOS SDK
cmakeFlags="-DCMAKE_OSX_SYSROOT= $cmakeFlags" cmakeFlags="-DCMAKE_OSX_SYSROOT= $cmakeFlags"
# disable OSX deployment target
# we don't want our binaries to have a "minimum" OSX version
cmakeFlags="-DCMAKE_OSX_DEPLOYMENT_TARGET= $cmakeFlags"
# correctly detect our clang compiler # correctly detect our clang compiler
cmakeFlags="-DCMAKE_POLICY_DEFAULT_CMP0025=NEW $cmakeFlags" cmakeFlags="-DCMAKE_POLICY_DEFAULT_CMP0025=NEW $cmakeFlags"

View File

@ -15,10 +15,7 @@ stdenv.mkDerivation rec {
nativeBuildInputs = [ cmake ]; nativeBuildInputs = [ cmake ];
buildInputs = with llvmPackages; [ clang-unwrapped llvm rapidjson ]; buildInputs = with llvmPackages; [ clang-unwrapped llvm rapidjson ];
cmakeFlags = [ cmakeFlags = [ "-DCCLS_VERSION=${version}" ];
"-DCCLS_VERSION=${version}"
"-DCMAKE_OSX_DEPLOYMENT_TARGET=10.12"
];
preConfigure = '' preConfigure = ''
cmakeFlagsArray+=(-DCMAKE_CXX_FLAGS="-fvisibility=hidden -fno-rtti") cmakeFlagsArray+=(-DCMAKE_CXX_FLAGS="-fvisibility=hidden -fno-rtti")

View File

@ -26,7 +26,6 @@ stdenv.mkDerivation {
cmakeFlags = [ cmakeFlags = [
"-DSYSTEM_CLANG=ON" "-DSYSTEM_CLANG=ON"
"-DCLANG_CXX=ON" "-DCLANG_CXX=ON"
"-DCMAKE_OSX_DEPLOYMENT_TARGET=10.12"
]; ];
shell = runtimeShell; shell = runtimeShell;

View File

@ -1,10 +1,15 @@
{ stdenv, fetchurl, xar, cpio, pkgs, python3, pbzx, lib }: { stdenv, fetchurl, xar, cpio, pkgs, python3, pbzx, lib }:
let version = "10.12"; in
# Ensure appleSdkVersion is up to date.
assert stdenv.isDarwin -> stdenv.appleSdkVersion == version;
let let
# sadly needs to be exported because security_tool needs it # sadly needs to be exported because security_tool needs it
sdk = stdenv.mkDerivation rec { sdk = stdenv.mkDerivation rec {
version = "10.12";
pname = "MacOS_SDK"; pname = "MacOS_SDK";
inherit version;
# This URL comes from https://swscan.apple.com/content/catalogs/others/index-10.12.merged-1.sucatalog, which we found by: # This URL comes from https://swscan.apple.com/content/catalogs/others/index-10.12.merged-1.sucatalog, which we found by:
# 1. Google: site:swscan.apple.com and look for a name that seems appropriate for your version # 1. Google: site:swscan.apple.com and look for a name that seems appropriate for your version

View File

@ -31,7 +31,6 @@ self = stdenv.mkDerivation rec {
outputs = [ "out" "static" ]; outputs = [ "out" "static" ];
cmakeFlags = [ cmakeFlags = [
"-DCMAKE_OSX_DEPLOYMENT_TARGET=10.12" # For std::shared_timed_mutex.
"-DCMAKE_SKIP_BUILD_RPATH=OFF" # To run libmysql/libmysql_api_test during build. "-DCMAKE_SKIP_BUILD_RPATH=OFF" # To run libmysql/libmysql_api_test during build.
"-DFORCE_UNSUPPORTED_COMPILER=1" # To configure on Darwin. "-DFORCE_UNSUPPORTED_COMPILER=1" # To configure on Darwin.
"-DWITH_ROUTER=OFF" # It may be packaged separately. "-DWITH_ROUTER=OFF" # It may be packaged separately.

View File

@ -1,6 +1,9 @@
{ lib { lib
, localSystem, crossSystem, config, overlays, crossOverlays ? [] , localSystem, crossSystem, config, overlays, crossOverlays ? []
# The version of darwin.apple_sdk used for sources provided by apple.
, appleSdkVersion ? "10.12"
# Minimum required macOS version, used both for compatibility as well as reproducability.
, macosVersionMin ? "10.12"
# Allow passing in bootstrap files directly so we can test the stdenv bootstrap process when changing the bootstrap tools # Allow passing in bootstrap files directly so we can test the stdenv bootstrap process when changing the bootstrap tools
, bootstrapFiles ? let , bootstrapFiles ? let
fetch = { file, sha256, executable ? true }: import <nix/fetchurl.nix> { fetch = { file, sha256, executable ? true }: import <nix/fetchurl.nix> {
@ -28,15 +31,19 @@ let
]; ];
in rec { in rec {
commonPreHook = '' commonPreHook = ''
export NIX_ENFORCE_PURITY="''${NIX_ENFORCE_PURITY-1}" export NIX_ENFORCE_NO_NATIVE=''${NIX_ENFORCE_NO_NATIVE-1}
export NIX_ENFORCE_NO_NATIVE="''${NIX_ENFORCE_NO_NATIVE-1}" export NIX_ENFORCE_PURITY=''${NIX_ENFORCE_PURITY-1}
export NIX_IGNORE_LD_THROUGH_GCC=1 export NIX_IGNORE_LD_THROUGH_GCC=1
stripAllFlags=" " # the Darwin "strip" command doesn't know "-s"
export MACOSX_DEPLOYMENT_TARGET=10.12
export SDKROOT= export SDKROOT=
export CMAKE_OSX_ARCHITECTURES=x86_64
# Ensure consistent LC_VERSION_MIN_MACOSX and remove LC_UUID.
export MACOSX_DEPLOYMENT_TARGET=${macosVersionMin}
export NIX_LDFLAGS+=" -macosx_version_min ${macosVersionMin} -sdk_version ${appleSdkVersion} -no_uuid"
# Workaround for https://openradar.appspot.com/22671534 on 10.11. # Workaround for https://openradar.appspot.com/22671534 on 10.11.
export gl_cv_func_getcwd_abort_bug=no export gl_cv_func_getcwd_abort_bug=no
stripAllFlags=" " # the Darwin "strip" command doesn't know "-s"
''; '';
bootstrapTools = derivation { bootstrapTools = derivation {
@ -130,8 +137,7 @@ in rec {
__extraImpureHostDeps = commonImpureHostDeps; __extraImpureHostDeps = commonImpureHostDeps;
extraAttrs = { extraAttrs = {
inherit platform; inherit macosVersionMin appleSdkVersion platform;
parent = last;
}; };
overrides = self: super: (overrides self super) // { fetchurl = thisStdenv.fetchurlBoot; }; overrides = self: super: (overrides self super) // { fetchurl = thisStdenv.fetchurlBoot; };
}; };
@ -400,9 +406,9 @@ in rec {
extraBuildInputs = [ pkgs.darwin.CF ]; extraBuildInputs = [ pkgs.darwin.CF ];
extraAttrs = { extraAttrs = {
inherit platform bootstrapTools; libc = pkgs.darwin.Libsystem;
libc = pkgs.darwin.Libsystem;
shellPackage = pkgs.bash; shellPackage = pkgs.bash;
inherit macosVersionMin appleSdkVersion platform bootstrapTools;
}; };
allowedRequisites = (with pkgs; [ allowedRequisites = (with pkgs; [