@@ -155,6 +155,13 @@ let compatibilityTestCondition = envBoolValue("COMPATIBILITY_TEST", default: fal
155155let useLocalDeps = envBoolValue ( " USE_LOCAL_DEPS " )
156156let renderBoxCondtion = envBoolValue ( " RENDERBOX " , default: buildForDarwinPlatform && !isSPIBuild)
157157
158+ /// CGFloat and CGRect def in CFCGTypes.h will conflict with Foundation's CGSize/CGRect def on Linux.
159+ /// macOS: true -> no issue
160+ /// macOS: false -> use Swift implementation with OpenCoreGraphics Swift CGPath
161+ /// Linux: true + No CGPathRef support in ORBPath -> confilict with Foundation def
162+ /// Linux: false -> use Swift implementation with OpenCoreGraphics Swift CGPath
163+ let cfCGTypes = envBoolValue ( " CF_CGTYPES " , default: buildForDarwinPlatform)
164+
158165// MARK: - Shared Settings
159166
160167var sharedCSettings : [ CSetting ] = [
@@ -176,6 +183,12 @@ if libraryEvolutionCondition {
176183 sharedSwiftSettings. append ( . unsafeFlags( [ " -enable-library-evolution " , " -no-verify-emitted-module-interface " ] ) )
177184}
178185
186+ if cfCGTypes {
187+ sharedCSettings. append ( . define( " OPENRENDERBOX_CF_CGTYPES " ) )
188+ sharedCxxSettings. append ( . define( " OPENRENDERBOX_CF_CGTYPES " ) )
189+ sharedSwiftSettings. append ( . define( " OPENRENDERBOX_CF_CGTYPES " ) )
190+ }
191+
179192// MARK: - Extension
180193
181194extension Target {
@@ -199,20 +212,34 @@ extension [Platform] {
199212
200213let openRenderBoxTarget = Target . target (
201214 name: " OpenRenderBox " ,
215+ dependencies: [
216+ " OpenRenderBoxCxx " ,
217+ . product( name: " OpenCoreGraphicsShims " , package : " OpenCoreGraphics " ) ,
218+ ] ,
219+ cSettings: sharedCSettings,
220+ cxxSettings: sharedCxxSettings,
221+ swiftSettings: sharedSwiftSettings
222+ )
223+ // FIXME: Merge into one target
224+ // OpenRenderBox is a C++ & Swift mix target.
225+ // The SwiftPM support for such usage is still in progress.
226+ let openRenderBoxCxxTarget = Target . target (
227+ name: " OpenRenderBoxCxx " ,
202228 cSettings: sharedCSettings,
203229 cxxSettings: sharedCxxSettings
204230)
205231let openRenderBoxShimsTarget = Target . target (
206232 name: " OpenRenderBoxShims " ,
207233 swiftSettings: sharedSwiftSettings
208234)
209- let openRenderBoxCxxTestTarget = Target . testTarget (
210- name: " OpenRenderBoxCxxTests " ,
235+ let openRenderBoxTestsTarget = Target . testTarget (
236+ name: " OpenRenderBoxTests " ,
211237 dependencies: [
212238 " OpenRenderBox " ,
213239 ] ,
214240 exclude: [ " README.md " ] ,
215241 cSettings: sharedCSettings + [ . define( " SWIFT_TESTING " ) ] ,
242+ cxxSettings: sharedCxxSettings + [ . define( " SWIFT_TESTING " ) ] ,
216243 swiftSettings: sharedSwiftSettings + [ . interoperabilityMode( . Cxx) ]
217244)
218245let openRenderBoxCompatibilityTestTarget = Target . testTarget (
@@ -221,6 +248,8 @@ let openRenderBoxCompatibilityTestTarget = Target.testTarget(
221248 . product( name: " RealModule " , package : " swift-numerics " ) ,
222249 ] ,
223250 exclude: [ " README.md " ] ,
251+ cSettings: sharedCSettings + [ . define( " SWIFT_TESTING " ) ] ,
252+ cxxSettings: sharedCxxSettings + [ . define( " SWIFT_TESTING " ) ] ,
224253 swiftSettings: sharedSwiftSettings
225254)
226255
@@ -239,35 +268,31 @@ default:
239268let package = Package (
240269 name: " OpenRenderBox " ,
241270 products: [
242- . library( name: " OpenRenderBox " , type: libraryType, targets: [ " OpenRenderBox " ] ) ,
271+ . library( name: " OpenRenderBox " , type: libraryType, targets: [ " OpenRenderBox " , " OpenRenderBoxCxx " ] ) ,
243272 . library( name: " OpenRenderBoxShims " , type: libraryType, targets: [ " OpenRenderBoxShims " ] ) ,
244273 ] ,
245274 dependencies: [
246- . package ( url: " https://github.com/apple/swift-numerics " , from: " 1.0.2 " ) ,
275+ . package ( url: " https://github.com/apple/swift-numerics " , from: " 1.1.1 " ) ,
247276 ] ,
248277 targets: [
249278 openRenderBoxTarget,
279+ openRenderBoxCxxTarget,
250280 openRenderBoxShimsTarget,
251- openRenderBoxCxxTestTarget ,
281+ openRenderBoxTestsTarget ,
252282 openRenderBoxCompatibilityTestTarget,
253283 ] ,
254284 cxxLanguageStandard: . cxx20
255285)
256286
257287if renderBoxCondtion {
258- let privateFrameworkRepo : Package . Dependency
259- if useLocalDeps {
260- privateFrameworkRepo = Package . Dependency. package ( path: " ../DarwinPrivateFrameworks " )
261- } else {
262- privateFrameworkRepo = Package . Dependency. package ( url: " https://github.com/OpenSwiftUIProject/DarwinPrivateFrameworks.git " , branch: " main " )
263- }
264- package . dependencies. append ( privateFrameworkRepo)
265288 openRenderBoxShimsTarget. addRBSettings ( )
289+ }
266290
267- let rbVersion = EnvManager . shared. withDomain ( " DarwinPrivateFrameworks " ) {
291+ if renderBoxCondtion {
292+ let release = EnvManager . shared. withDomain ( " DarwinPrivateFrameworks " ) {
268293 envIntValue ( " TARGET_RELEASE " , default: 2024 )
269294 }
270- package . platforms = switch rbVersion {
295+ package . platforms = switch release {
271296 case 2024 : [ . iOS( . v18) , . macOS( . v15) , . macCatalyst( . v18) , . tvOS( . v18) , . watchOS( . v10) , . visionOS( . v2) ]
272297 case 2021 : [ . iOS( . v15) , . macOS( . v12) , . macCatalyst( . v15) , . tvOS( . v15) , . watchOS( . v7) ]
273298 default : nil
@@ -276,6 +301,24 @@ if renderBoxCondtion {
276301 openRenderBoxShimsTarget. dependencies. append ( " OpenRenderBox " )
277302}
278303
304+ if useLocalDeps {
305+ var dependencies : [ Package . Dependency ] = [
306+ . package ( path: " ../OpenCoreGraphics " ) ,
307+ ]
308+ if renderBoxCondtion {
309+ dependencies. append ( . package ( path: " ../DarwinPrivateFrameworks " ) )
310+ }
311+ package . dependencies += dependencies
312+ } else {
313+ var dependencies : [ Package . Dependency ] = [
314+ . package ( url: " https://github.com/OpenSwiftUIProject/OpenCoreGraphics " , branch: " main " ) ,
315+ ]
316+ if renderBoxCondtion {
317+ dependencies. append ( . package ( url: " https://github.com/OpenSwiftUIProject/DarwinPrivateFrameworks.git " , branch: " main " ) )
318+ }
319+ package . dependencies += dependencies
320+ }
321+
279322if compatibilityTestCondition && renderBoxCondtion {
280323 openRenderBoxCompatibilityTestTarget. addRBSettings ( )
281324 var swiftSettings : [ SwiftSetting ] = ( openRenderBoxCompatibilityTestTarget. swiftSettings ?? [ ] )
0 commit comments