diff options
author | Kyle Edwards <kyle.edwards@kitware.com> | 2023-08-14 17:24:31 (GMT) |
---|---|---|
committer | Kyle Edwards <kyle.edwards@kitware.com> | 2023-08-15 13:45:17 (GMT) |
commit | b4565c8c91bd43d9b8ef315d47bb17c6dd929af0 (patch) | |
tree | 712cfb41b2b94bde698726547bab7d31eff3ee57 /Source | |
parent | d688a213d5583098f04bedc4f5c9eafe62c854bd (diff) | |
download | CMake-b4565c8c91bd43d9b8ef315d47bb17c6dd929af0.zip CMake-b4565c8c91bd43d9b8ef315d47bb17c6dd929af0.tar.gz CMake-b4565c8c91bd43d9b8ef315d47bb17c6dd929af0.tar.bz2 |
.xcframework: Check SupportedPlatformVariant
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmMakefile.cxx | 11 | ||||
-rw-r--r-- | Source/cmMakefile.h | 3 | ||||
-rw-r--r-- | Source/cmXcFramework.cxx | 39 | ||||
-rw-r--r-- | Source/cmXcFramework.h | 8 |
4 files changed, 59 insertions, 2 deletions
diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index a96a36d..80f8a77 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -2586,6 +2586,17 @@ bool cmMakefile::PlatformIsAppleEmbedded() const return this->GetAppleSDKType() != AppleSDK::MacOS; } +bool cmMakefile::PlatformIsAppleSimulator() const +{ + return std::set<AppleSDK>{ + AppleSDK::AppleTVSimulator, + AppleSDK::IPhoneSimulator, + AppleSDK::WatchSimulator, + AppleSDK::XRSimulator, + } + .count(this->GetAppleSDKType()); +} + bool cmMakefile::PlatformSupportsAppleTextStubs() const { return this->IsOn("APPLE") && this->IsSet("CMAKE_TAPI"); diff --git a/Source/cmMakefile.h b/Source/cmMakefile.h index b81af2f..24daa72 100644 --- a/Source/cmMakefile.h +++ b/Source/cmMakefile.h @@ -573,6 +573,9 @@ public: /** Return whether the target platform is Apple iOS. */ bool PlatformIsAppleEmbedded() const; + /** Return whether the target platform is an Apple simulator. */ + bool PlatformIsAppleSimulator() const; + /** Return whether the target platform supports generation of text base stubs (.tbd file) describing exports (Apple specific). */ bool PlatformSupportsAppleTextStubs() const; diff --git a/Source/cmXcFramework.cxx b/Source/cmXcFramework.cxx index 3c447e3..29d939d 100644 --- a/Source/cmXcFramework.cxx +++ b/Source/cmXcFramework.cxx @@ -68,6 +68,30 @@ bool PlistSupportedPlatformHelper( return false; } +bool PlistSupportedPlatformVariantHelper( + cmXcFrameworkPlistSupportedPlatformVariant& variant, + const Json::Value* value, cmJSONState* /*state*/) +{ + if (!value) { + return false; + } + + if (!value->isString()) { + return false; + } + + if (value->asString() == "catalyst"_s) { + variant = cmXcFrameworkPlistSupportedPlatformVariant::catalyst; + return true; + } + if (value->asString() == "simulator"_s) { + variant = cmXcFrameworkPlistSupportedPlatformVariant::simulator; + return true; + } + + return false; +} + auto const PlistLibraryHelper = cmJSONHelperBuilder::Object<cmXcFrameworkPlistLibrary>{} .Bind("LibraryIdentifier"_s, &cmXcFrameworkPlistLibrary::LibraryIdentifier, @@ -81,7 +105,13 @@ auto const PlistLibraryHelper = cmJSONHelperBuilder::Vector<std::string>( JsonErrors::EXPECTED_TYPE("array"), cmJSONHelperBuilder::String())) .Bind("SupportedPlatform"_s, &cmXcFrameworkPlistLibrary::SupportedPlatform, - PlistSupportedPlatformHelper); + PlistSupportedPlatformHelper) + .Bind("SupportedPlatformVariant"_s, + &cmXcFrameworkPlistLibrary::SupportedPlatformVariant, + cmJSONHelperBuilder::Optional< + cmXcFrameworkPlistSupportedPlatformVariant>( + PlistSupportedPlatformVariantHelper), + false); auto const PlistHelper = cmJSONHelperBuilder::Object<cmXcFrameworkPlist>{}.Bind( @@ -139,6 +169,10 @@ const cmXcFrameworkPlistLibrary* cmXcFrameworkPlist::SelectSuitableLibrary( const cmMakefile& mf, const cmListFileBacktrace& bt) const { auto systemName = mf.GetSafeDefinition("CMAKE_SYSTEM_NAME"); + cm::optional<cmXcFrameworkPlistSupportedPlatformVariant> systemVariant; + if (mf.PlatformIsAppleSimulator()) { + systemVariant = cmXcFrameworkPlistSupportedPlatformVariant::simulator; + } for (auto const& lib : this->AvailableLibraries) { std::string supportedSystemName; @@ -160,7 +194,8 @@ const cmXcFrameworkPlistLibrary* cmXcFrameworkPlist::SelectSuitableLibrary( break; } - if (systemName == supportedSystemName) { + if (systemName == supportedSystemName && + systemVariant == lib.SupportedPlatformVariant) { return &lib; } } diff --git a/Source/cmXcFramework.h b/Source/cmXcFramework.h index c35df11..ef9cb84 100644 --- a/Source/cmXcFramework.h +++ b/Source/cmXcFramework.h @@ -20,6 +20,12 @@ enum class cmXcFrameworkPlistSupportedPlatform visionOS, }; +enum class cmXcFrameworkPlistSupportedPlatformVariant +{ + catalyst, + simulator, +}; + struct cmXcFrameworkPlistLibrary { std::string LibraryIdentifier; @@ -27,6 +33,8 @@ struct cmXcFrameworkPlistLibrary std::string HeadersPath; std::vector<std::string> SupportedArchitectures; cmXcFrameworkPlistSupportedPlatform SupportedPlatform; + cm::optional<cmXcFrameworkPlistSupportedPlatformVariant> + SupportedPlatformVariant; }; struct cmXcFrameworkPlist |