Add SwiftPM support (#1339)
Summary:
Using yoga in Swift
```swift
import UIKit
import yoga
let YGUndefined = Float.nan
UIGraphicsBeginImageContextWithOptions(CGSize(width: 1, height: 1), true, 0)
let scale = UIGraphicsGetCurrentContext()?.ctm.a ?? 1
UIGraphicsEndImageContext()
let config = YGConfigNew()
YGConfigSetUseWebDefaults(config, true)
YGConfigSetPointScaleFactor(config, Float(scale))
let root = YGNodeNewWithConfig(config)
YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow)
YGNodeStyleSetFlexWrap(root, YGWrapWrap)
YGNodeStyleSetWidth(root, 200)
for i in 0..<4 {
let leaf = YGNodeNewWithConfig(config)
YGNodeStyleSetAspectRatio(leaf, 1)
YGNodeStyleSetWidthPercent(leaf, 50)
YGNodeInsertChild(root, leaf, UInt32(i))
}
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGNodeStyleGetDirection(root))
for i in 0..<4 {
let leaf = YGNodeGetChild(root, UInt32(i))
let left = YGNodeLayoutGetLeft(leaf)
let top = YGNodeLayoutGetTop(leaf)
let width = YGNodeLayoutGetWidth(leaf)
let height = YGNodeLayoutGetHeight(leaf)
print("leaf \(i): origin: \(left), \(top), size: \(width), \(height)")
}
let width = YGNodeLayoutGetWidth(root)
let height = YGNodeLayoutGetHeight(root)
print("root size: \(width), \(height)")
YGNodeFreeRecursive(root)
YGConfigFree(config)
```
Pull Request resolved: https://github.com/facebook/yoga/pull/1339
Reviewed By: cipolleschi
Differential Revision: D48166958
Pulled By: NickGerleman
fbshipit-source-id: 72fef99729d01c7ba291b11f047cf75fd39f7630
2023-08-10 17:40:10 -07:00
|
|
|
// swift-tools-version:5.0
|
|
|
|
// The swift-tools-version declares the minimum version of Swift required to build this package.
|
|
|
|
/*
|
|
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
|
|
*
|
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree.
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
import PackageDescription
|
|
|
|
|
|
|
|
let package = Package(
|
|
|
|
name: "yoga",
|
|
|
|
products: [
|
|
|
|
.library(name: "yoga", targets: [ "core" ])
|
|
|
|
],
|
|
|
|
targets: [
|
|
|
|
.target(
|
|
|
|
name: "core",
|
|
|
|
path: ".",
|
|
|
|
sources: [
|
|
|
|
"yoga"
|
|
|
|
],
|
|
|
|
publicHeadersPath: ".",
|
|
|
|
cxxSettings: [
|
|
|
|
.headerSearchPath(".")
|
|
|
|
]
|
|
|
|
)
|
|
|
|
],
|
Breaking: Use C++ 20 (#1382)
Summary:
Pull Request resolved: https://github.com/facebook/yoga/pull/1382
X-link: https://github.com/facebook/react-native/pull/39437
Have been running into places where C++ 20 makes life easier for use like `std::bit_cast` (that one is easy to polyfill), in-class member initializer support for bitfields, designated initializers, defaulted comparison operator, concepts instead of SFINAE, and probably more.
Our other infra is in the process of making this jump, or already has. This tests it out everywhere, across the various reference builds, to see if we have any issues.
This is a bit more aggressive than I had previously communicated, but n - 1 is going to be a better long term place than n - 2.
If we wanted to use `std::bit_cast` we would need one of:
1. GCC 11+ (~2.5 years old)
1. Clang 14 (~2.5 years old)
1. VS 16.11 (~2 years old)
For mobile this means:
1. NDK 26 (still in Beta 😭)
1. XCode 14.3.0 (~6 months old)
https://en.cppreference.com/w/cpp/compiler_support/20
That isn't quite doable yet, but we can start taking advantage of language features in the meantime. More of these will be supported in older toolchains.
Anyone needing support for older C++ versions can lag behind on more recent changes. E.g. Yoga 2.0 supports C++ 14.
bypass-github-export-checks
Changelog: [Internal]
Reviewed By: cortinico
Differential Revision: D49261607
fbshipit-source-id: 38301204d56b7bc8410c2dda9c291da1b8d61ec1
2023-09-19 00:29:50 -07:00
|
|
|
cxxLanguageStandard: CXXLanguageStandard(rawValue: "c++20")
|
Add SwiftPM support (#1339)
Summary:
Using yoga in Swift
```swift
import UIKit
import yoga
let YGUndefined = Float.nan
UIGraphicsBeginImageContextWithOptions(CGSize(width: 1, height: 1), true, 0)
let scale = UIGraphicsGetCurrentContext()?.ctm.a ?? 1
UIGraphicsEndImageContext()
let config = YGConfigNew()
YGConfigSetUseWebDefaults(config, true)
YGConfigSetPointScaleFactor(config, Float(scale))
let root = YGNodeNewWithConfig(config)
YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow)
YGNodeStyleSetFlexWrap(root, YGWrapWrap)
YGNodeStyleSetWidth(root, 200)
for i in 0..<4 {
let leaf = YGNodeNewWithConfig(config)
YGNodeStyleSetAspectRatio(leaf, 1)
YGNodeStyleSetWidthPercent(leaf, 50)
YGNodeInsertChild(root, leaf, UInt32(i))
}
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGNodeStyleGetDirection(root))
for i in 0..<4 {
let leaf = YGNodeGetChild(root, UInt32(i))
let left = YGNodeLayoutGetLeft(leaf)
let top = YGNodeLayoutGetTop(leaf)
let width = YGNodeLayoutGetWidth(leaf)
let height = YGNodeLayoutGetHeight(leaf)
print("leaf \(i): origin: \(left), \(top), size: \(width), \(height)")
}
let width = YGNodeLayoutGetWidth(root)
let height = YGNodeLayoutGetHeight(root)
print("root size: \(width), \(height)")
YGNodeFreeRecursive(root)
YGConfigFree(config)
```
Pull Request resolved: https://github.com/facebook/yoga/pull/1339
Reviewed By: cipolleschi
Differential Revision: D48166958
Pulled By: NickGerleman
fbshipit-source-id: 72fef99729d01c7ba291b11f047cf75fd39f7630
2023-08-10 17:40:10 -07:00
|
|
|
)
|