1 | use super::TargetInfo; |
2 | |
3 | impl TargetInfo<'_> { |
4 | pub(crate) fn apple_sdk_name(&self) -> &'static str { |
5 | match (self.os, self.abi) { |
6 | ("macos" , "" ) => "macosx" , |
7 | ("ios" , "" ) => "iphoneos" , |
8 | ("ios" , "sim" ) => "iphonesimulator" , |
9 | ("ios" , "macabi" ) => "macosx" , |
10 | ("tvos" , "" ) => "appletvos" , |
11 | ("tvos" , "sim" ) => "appletvsimulator" , |
12 | ("watchos" , "" ) => "watchos" , |
13 | ("watchos" , "sim" ) => "watchsimulator" , |
14 | ("visionos" , "" ) => "xros" , |
15 | ("visionos" , "sim" ) => "xrsimulator" , |
16 | (os, _) => panic!("invalid Apple target OS {}" , os), |
17 | } |
18 | } |
19 | |
20 | pub(crate) fn apple_version_flag(&self, min_version: &str) -> String { |
21 | // There are many aliases for these, and `-mtargetos=` is preferred on Clang nowadays, but |
22 | // for compatibility with older Clang, we use the earliest supported name here. |
23 | // |
24 | // NOTE: GCC does not support `-miphoneos-version-min=` etc. (because it does not support |
25 | // iOS in general), but we specify them anyhow in case we actually have a Clang-like |
26 | // compiler disguised as a GNU-like compiler, or in case GCC adds support for these in the |
27 | // future. |
28 | // |
29 | // See also: |
30 | // https://clang.llvm.org/docs/ClangCommandLineReference.html#cmdoption-clang-mmacos-version-min |
31 | // https://clang.llvm.org/docs/AttributeReference.html#availability |
32 | // https://gcc.gnu.org/onlinedocs/gcc/Darwin-Options.html#index-mmacosx-version-min |
33 | match (self.os, self.abi) { |
34 | ("macos" , "" ) => format!("-mmacosx-version-min= {min_version}" ), |
35 | ("ios" , "" ) => format!("-miphoneos-version-min= {min_version}" ), |
36 | ("ios" , "sim" ) => format!("-mios-simulator-version-min= {min_version}" ), |
37 | ("ios" , "macabi" ) => format!("-mtargetos=ios {min_version}-macabi" ), |
38 | ("tvos" , "" ) => format!("-mappletvos-version-min= {min_version}" ), |
39 | ("tvos" , "sim" ) => format!("-mappletvsimulator-version-min= {min_version}" ), |
40 | ("watchos" , "" ) => format!("-mwatchos-version-min= {min_version}" ), |
41 | ("watchos" , "sim" ) => format!("-mwatchsimulator-version-min= {min_version}" ), |
42 | // `-mxros-version-min` does not exist |
43 | // https://github.com/llvm/llvm-project/issues/88271 |
44 | ("visionos" , "" ) => format!("-mtargetos=xros {min_version}" ), |
45 | ("visionos" , "sim" ) => format!("-mtargetos=xros {min_version}-simulator" ), |
46 | (os, _) => panic!("invalid Apple target OS {}" , os), |
47 | } |
48 | } |
49 | } |
50 | |