@@ -266,7 +266,11 @@ function jll_source_selection(vendor::Symbol, platform::CrossPlatform,
266
266
target= sysroot_path,
267
267
)]
268
268
elseif os (platform. target) == " macos"
269
- @warn (" Take in `macos_version(platform.target)` and feed that to `macOSSDK_jll.jl` here" , maxlog= 1 )
269
+ if macos_version (platform. target) != = nothing
270
+ if macos_version (platform. target) > v " 11.1"
271
+ throw (ArgumentError (" We need to upgrade our macOSSDK_jll to support such a new version: $(triplet (platform. target)) " ))
272
+ end
273
+ end
270
274
libc_jlls = [JLLSource (
271
275
" macOSSDK_jll" ,
272
276
platform. target;
@@ -689,11 +693,23 @@ function toolchain_env(toolchain::CToolchain, deployed_prefix::String)
689
693
690
694
sdk_jll = get_jll (toolchain, " macOSSDK_jll" )
691
695
if sdk_jll != = nothing
692
- env[" MACOSX_DEPLOYMENT_TARGET" ] = string (
693
- sdk_jll. package. version. major,
694
- " ." ,
695
- sdk_jll. package. version. minor,
696
+ # If toolchain platform already has an `os_version`, we need to obey that, otherwise we
697
+ # use the default deployment targets for the architecture being built:
698
+ function default_kernel_version (arch)
699
+ if arch == " x86_64"
700
+ return 14
701
+ elseif arch == " aarch64"
702
+ return 20
703
+ else
704
+ throw (ArgumentError (" Unknown macOS architecture '$(arch) '!" ))
705
+ end
706
+ end
707
+
708
+ kernel_version = something (
709
+ os_version (toolchain. platform. target),
710
+ default_kernel_version (arch (toolchain. platform. target))
696
711
)
712
+ env[" MACOSX_DEPLOYMENT_TARGET" ] = macos_version (kernel_version)
697
713
end
698
714
699
715
return env
@@ -842,7 +858,7 @@ function add_macos_flags(io, toolchain)
842
858
append_flags (io, :PRE , " -D_DARWIN_FEATURE_CLOCK_GETTIME=0" )
843
859
end
844
860
end
845
-
861
+
846
862
# Always compile for a particular minimum macOS version
847
863
if macos_ver != = nothing
848
864
append_flags (io, :PRE , " -mmacosx-version-min=$(macos_version (toolchain. platform. target)) " )
@@ -1058,6 +1074,24 @@ function clang_wrappers(toolchain::CToolchain, dir::String)
1058
1074
add_ccache_preamble (io, toolchain)
1059
1075
end
1060
1076
1077
+ if Sys. isapple (p)
1078
+ function _xcrun_wrapper (io)
1079
+ flagmatch (io, [flag " --show-sdk-path" ]) do io
1080
+ println (io, raw """
1081
+ "${CC}" -print-sysroot
1082
+ exit 0
1083
+ """ )
1084
+ end
1085
+ flagmatch (io, [flag " --show-sdk-version" ]) do io
1086
+ println (io, raw """
1087
+ echo "${MACOSX_DEPLOYMENT_TARGET}"
1088
+ exit 0
1089
+ """ )
1090
+ end
1091
+ end
1092
+ make_tool_wrappers (toolchain, dir, " xcrun" , " exec" ; wrapper= _xcrun_wrapper, toolchain_prefix)
1093
+ end
1094
+
1061
1095
make_tool_wrappers (toolchain, dir, " clang" , " clang" ; wrapper= _clang_wrapper, toolchain_prefix)
1062
1096
make_tool_wrappers (toolchain, dir, " clang++" , " clang++" ; wrapper= io -> _clang_wrapper (io; is_clangxx = true ), toolchain_prefix)
1063
1097
make_tool_wrappers (toolchain, dir, " clang-scan-deps" , " clang-scan-deps" ; toolchain_prefix)
@@ -1075,10 +1109,7 @@ function binutils_wrappers(toolchain::CToolchain, dir::String)
1075
1109
gcc_version = get_gcc_version (toolchain)
1076
1110
1077
1111
# These tools don't need anything fancy; just `compiler_wrapper()`
1078
- simple_tools = [
1079
- " objcopy" ,
1080
- " objdump" ,
1081
- ]
1112
+ simple_tools = String[]
1082
1113
@warn (" TODO: Verify that `as` does not need adjusted MACOSX_DEPLOYMENT_TARGET" , maxlog= 1 )
1083
1114
@warn (" TODO: Add in `ld.64` and `ld.target-triplet` again" , maxlog= 1 )
1084
1115
# Apple has some extra simple tools
@@ -1356,6 +1387,12 @@ function binutils_wrappers(toolchain::CToolchain, dir::String)
1356
1387
ranlib_name = Sys. isapple (p) ? " llvm-ranlib" : " $(gcc_triplet) -ranlib"
1357
1388
make_tool_wrappers (toolchain, dir, " ranlib" , ranlib_name; wrapper= _ranlib_wrapper, toolchain_prefix= llvm_toolchain_prefix)
1358
1389
1390
+ objcopy_name = Sys. isapple (p) ? " llvm-objcopy" : " $(gcc_triplet) -objcopy"
1391
+ make_tool_wrappers (toolchain, dir, " objcopy" , objcopy_name; toolchain_prefix= llvm_toolchain_prefix)
1392
+
1393
+ objdump_name = Sys. isapple (p) ? " llvm-objdump" : " $(gcc_triplet) -objdump"
1394
+ make_tool_wrappers (toolchain, dir, " objdump" , objdump_name; toolchain_prefix= llvm_toolchain_prefix)
1395
+
1359
1396
if Sys. isapple (p)
1360
1397
# dsymutil is just called `dsymutil`
1361
1398
make_tool_wrappers (toolchain, dir, " dsymutil" , " dsymutil" ; toolchain_prefix= llvm_toolchain_prefix)
0 commit comments