Skip to content

Commit c827474

Browse files
cipolleschimeta-codesync[bot]
authored andcommitted
Configure Package.swift file to be able to build from source (#53667)
Summary: Pull Request resolved: #53667 This change updates the Package.swift file to enable building RNTester and HelloWorld from source. The set of changes is the following: - add a BUILD_FROM_SOURCE flag to toggle between building for creating prebuilds and building an app from source - configure the proper header search path based on whether we want to build an app from source or not - split the ReactFabricComponents target in multiple subtargets. This is required because when building from source we can't have targets whose Source folder is overlapping. ## Changelog: [Internal] - Reviewed By: cortinico Differential Revision: D81778452 fbshipit-source-id: 00553a9966e7d96177e70d45179e712536c23124
1 parent f4e93df commit c827474

1 file changed

Lines changed: 98 additions & 31 deletions

File tree

packages/react-native/Package.swift

Lines changed: 98 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,11 @@
66
* LICENSE file in the root directory of this source tree.
77
*/
88

9+
import Foundation
910
import PackageDescription
1011

12+
let BUILD_FROM_SOURCE = false
13+
1114
/**
1215
This is the `Package.swift` file that allows to build React Native core using Swift PM.
1316
To build React Native, you need to follow these steps:
@@ -33,6 +36,8 @@ let RuntimeExecutorPath = "ReactCommon/runtimeexecutor" // header only target
3336
let CallInvokerPath = "ReactCommon/callinvoker" // header only target
3437
let ReactFBReactNativeSpecPath = "React/FBReactNativeSpec" // generated
3538
let FBLazyVectorPath = "Libraries/FBLazyVector" // header only
39+
let virtualViewPath = "ReactCommon/react/renderer/components/virtualview" // header only
40+
let virtualViewExperimentalPath = "ReactCommon/react/renderer/components/virtualviewexperimental" // header only
3641

3742
// MARK: Prebuilt Dependencies declaration
3843
let reactNativeDependencies = BinaryTarget(
@@ -391,6 +396,8 @@ let reactRuntimeApple = RNTarget(
391396
dependencies: [.reactNativeDependencies, .jsi, .reactPerfLogger, .reactCxxReact, .rctDeprecation, .yoga, .reactRuntime, .reactRCTFabric, .reactCoreModules, .reactTurboModuleCore, .hermesPrebuilt, .reactUtils]
392397
)
393398

399+
let publicHeadersPathForReactCore: String = BUILD_FROM_SOURCE ? "includes" : "."
400+
394401
/// React-Core.podspec
395402
let reactCore = RNTarget(
396403
name: .reactCore,
@@ -403,7 +410,8 @@ let reactCore = RNTarget(
403410
linkedFrameworks: ["CoreServices"],
404411
excludedPaths: ["Fabric", "Tests", "Resources", "Runtime/RCTJscInstanceFactory.mm", "I18n/strings", "CxxBridge/JSCExecutorFactory.mm", "CoreModules"],
405412
dependencies: [.reactNativeDependencies, .reactCxxReact, .reactPerfLogger, .jsi, .reactJsiExecutor, .reactUtils, .reactFeatureFlags, .reactRuntimeScheduler, .yoga, .reactJsInspector, .reactJsiTooling, .rctDeprecation, .reactCoreRCTWebsocket, .reactRCTImage, .reactTurboModuleCore, .reactRCTText, .reactRCTBlob, .reactRCTAnimation, .reactRCTNetwork, .reactFabric, .hermesPrebuilt],
406-
sources: [".", "Runtime/RCTHermesInstanceFactory.mm"]
413+
sources: [".", "Runtime/RCTHermesInstanceFactory.mm"],
414+
publicHeadersPath: publicHeadersPathForReactCore
407415
)
408416

409417
/// React-Fabric.podspec
@@ -434,6 +442,7 @@ let reactFabric = RNTarget(
434442
"components/modal",
435443
"components/rncore",
436444
"components/safeareaview",
445+
"components/switch",
437446
"components/text",
438447
"components/textinput",
439448
"components/textinput/platform/ios/",
@@ -446,37 +455,66 @@ let reactFabric = RNTarget(
446455
sources: ["animations", "attributedstring", "core", "componentregistry", "componentregistry/native", "components/root", "components/view", "components/view/platform/cxx", "components/scrollview", "components/scrollview/platform/cxx", "components/legacyviewmanagerinterop", "dom", "scheduler", "mounting", "observers/events", "telemetry", "consistency", "leakchecker", "uimanager", "uimanager/consistency"]
447456
)
448457

449-
/// React-RCTFabric.podspec
450-
let reactRCTFabric = RNTarget(
451-
name: .reactRCTFabric,
452-
path: "React/Fabric",
453-
dependencies: [.reactNativeDependencies, .reactCore, .reactRCTImage, .yoga, .reactRCTText, .jsi, .reactFabricComponents, .reactGraphics, .reactImageManager, .reactDebug, .reactUtils, .reactPerformanceTimeline, .reactRendererDebug, .reactRendererConsistency, .reactRuntimeScheduler, .reactRCTAnimation, .reactJsInspector, .reactJsInspectorNetwork, .reactJsInspectorTracing, .reactFabric, .reactFabricImage, .rctSwiftUIWrapper]
458+
let reactFabricInputAccessory = RNTarget(
459+
name: .reactFabricInputAccessory,
460+
path: "ReactCommon/react/renderer/components/inputaccessory",
461+
dependencies: [.reactNativeDependencies, .reactCore, .reactJsiExecutor, .reactTurboModuleCore, .jsi, .logger, .reactDebug, .reactFeatureFlags, .reactUtils, .reactRuntimeScheduler, .reactCxxReact, .yoga, .reactRendererDebug, .reactGraphics, .reactFabric, .reactTurboModuleBridging]
454462
)
455463

456-
/// React-FabricComponents.podspec
457-
let reactFabricComponents = RNTarget(
458-
name: .reactFabricComponents,
459-
path: "ReactCommon/react/renderer",
464+
let reactFabricModal = RNTarget(
465+
name: .reactFabricModal,
466+
path: "ReactCommon/react/renderer/components/modal",
460467
excludedPaths: [
461-
"components/modal/platform/android",
462-
"components/modal/platform/cxx",
463-
"components/view/platform/android",
464-
"components/view/platform/windows",
465-
"components/view/platform/macos",
466-
"components/switch/iosswitch/react/renderer/components/switch/MacOSSwitchShadowNode.mm",
467-
"components/textinput/platform/android",
468-
"components/text/platform/android",
469-
"components/textinput/platform/macos",
470-
"components/text/tests",
471-
"textlayoutmanager/tests",
472-
"textlayoutmanager/platform/android",
473-
"textlayoutmanager/platform/cxx",
474-
"textlayoutmanager/platform/windows",
475-
"textlayoutmanager/platform/macos",
476-
"conponents/rncore", // this was the old folder where RN Core Components were generated. If you ran codegen in the past, you might have some files in it that might make the build fail.
468+
"platform/android",
469+
"platform/cxx",
470+
],
471+
dependencies: [.reactNativeDependencies, .reactCore, .reactJsiExecutor, .reactTurboModuleCore, .jsi, .logger, .reactDebug, .reactFeatureFlags, .reactUtils, .reactRuntimeScheduler, .reactCxxReact, .yoga, .reactRendererDebug, .reactGraphics, .reactFabric, .reactTurboModuleBridging]
472+
)
473+
474+
let reactFabricSwitch = RNTarget(
475+
name: .reactFabricSwitch,
476+
path: "ReactCommon/react/renderer/components/switch/iosswitch",
477+
excludedPaths: ["react/renderer/components/switch/MacOSSwitchShadowNode.mm"],
478+
dependencies: [.reactNativeDependencies, .reactCore, .reactJsiExecutor, .reactTurboModuleCore, .jsi, .logger, .reactDebug, .reactFeatureFlags, .reactUtils, .reactRuntimeScheduler, .reactCxxReact, .yoga, .reactRendererDebug, .reactGraphics, .reactFabric, .reactTurboModuleBridging]
479+
)
480+
481+
let reactFabricSafeAreaView = RNTarget(
482+
name: .reactFabricSafeAreaView,
483+
path: "ReactCommon/react/renderer/components/safeareaview",
484+
dependencies: [.reactNativeDependencies, .reactCore, .reactJsiExecutor, .reactTurboModuleCore, .jsi, .logger, .reactDebug, .reactFeatureFlags, .reactUtils, .reactRuntimeScheduler, .reactCxxReact, .yoga, .reactRendererDebug, .reactGraphics, .reactFabric, .reactTurboModuleBridging]
485+
)
486+
487+
let reactFabricTextLayoutManager = RNTarget(
488+
name: .reactFabricTextLayoutManager,
489+
path: "ReactCommon/react/renderer/textlayoutmanager",
490+
excludedPaths: [
491+
"platform/android",
492+
"platform/cxx",
493+
"platform/windows",
494+
"platform/macos",
495+
"tests",
477496
],
478497
dependencies: [.reactNativeDependencies, .reactCore, .reactJsiExecutor, .reactTurboModuleCore, .jsi, .logger, .reactDebug, .reactFeatureFlags, .reactUtils, .reactRuntimeScheduler, .reactCxxReact, .yoga, .reactRendererDebug, .reactGraphics, .reactFabric, .reactTurboModuleBridging],
479-
sources: ["components/inputaccessory", "components/modal", "components/safeareaview", "components/text", "components/text/platform/cxx", "components/textinput", "components/textinput/platform/ios/", "components/unimplementedview", "components/virtualview", "components/virtualviewexperimental", "textlayoutmanager", "textlayoutmanager/platform/ios", "components/switch/iosswitch"]
498+
sources: [".", "platform/ios"]
499+
)
500+
501+
let reactFabricText = RNTarget(
502+
name: .reactFabricText,
503+
path: "ReactCommon/react/renderer/components/text",
504+
excludedPaths: [
505+
"platform/android",
506+
"tests",
507+
],
508+
dependencies: [.reactNativeDependencies, .reactCore, .reactJsiExecutor, .reactTurboModuleCore, .jsi, .logger, .reactDebug, .reactFeatureFlags, .reactUtils, .reactRuntimeScheduler, .reactCxxReact, .yoga, .reactRendererDebug, .reactGraphics, .reactFabric, .reactTurboModuleBridging, .reactFabricTextLayoutManager],
509+
sources: [".", "platform/cxx"]
510+
)
511+
512+
let reactFabricTextInput = RNTarget(
513+
name: .reactFabricTextInput,
514+
path: "ReactCommon/react/renderer/components/textinput",
515+
excludedPaths: ["platform/android", "platform/macos"],
516+
dependencies: [.reactNativeDependencies, .reactCore, .reactJsiExecutor, .reactTurboModuleCore, .jsi, .logger, .reactDebug, .reactFeatureFlags, .reactUtils, .reactRuntimeScheduler, .reactCxxReact, .yoga, .reactRendererDebug, .reactGraphics, .reactFabric, .reactTurboModuleBridging, .reactFabricTextLayoutManager],
517+
sources: [".", "platform/ios"]
480518
)
481519

482520
/// React-FabricImage.podspec
@@ -487,6 +525,20 @@ let reactFabricImage = RNTarget(
487525
dependencies: [.reactNativeDependencies, .reactFabric, .reactCore, .reactJsiExecutor, .reactTurboModuleCore, .jsi, .logger, .reactDebug, .reactFeatureFlags, .reactUtils, .reactRuntimeScheduler, .reactCxxReact, .yoga, .reactRendererDebug, .reactGraphics, .reactTurboModuleBridging, .reactImageManagerApple]
488526
)
489527

528+
let reactFabricUnimplementedView = RNTarget(
529+
name: .reactFabricUnimplementedView,
530+
path: "ReactCommon/react/renderer/components/unimplementedview",
531+
dependencies: [.reactNativeDependencies, .reactCore, .reactJsiExecutor, .reactTurboModuleCore, .jsi, .logger, .reactDebug, .reactFeatureFlags, .reactUtils, .reactRuntimeScheduler, .reactCxxReact, .yoga, .reactRendererDebug, .reactGraphics, .reactFabric, .reactTurboModuleBridging]
532+
)
533+
534+
/// React-RCTFabric.podspec
535+
let reactRCTFabric = RNTarget(
536+
name: .reactRCTFabric,
537+
path: "React/Fabric",
538+
searchPaths: [virtualViewPath, virtualViewExperimentalPath],
539+
dependencies: [.reactNativeDependencies, .reactCore, .reactRCTImage, .yoga, .reactRCTText, .jsi, .reactFabricInputAccessory, .reactFabricModal, .reactFabricSafeAreaView, .reactFabricSwitch, .reactFabricText, .reactFabricTextInput, .reactFabricUnimplementedView, .reactFabricTextLayoutManager, .reactGraphics, .reactImageManager, .reactDebug, .reactUtils, .reactPerformanceTimeline, .reactRendererDebug, .reactRendererConsistency, .reactRuntimeScheduler, .reactRCTAnimation, .reactJsInspector, .reactJsInspectorNetwork, .reactJsInspectorTracing, .reactFabric, .reactFabricImage, .rctSwiftUIWrapper]
540+
)
541+
490542
/// React-ImageManagerApple.podspec
491543
let reactImageManagerApple = RNTarget(
492544
name: .reactImageManagerApple,
@@ -593,8 +645,15 @@ let targets = [
593645
rctSwiftUI,
594646
rctSwiftUIWrapper,
595647
reactRCTFabric,
596-
reactFabricComponents,
597648
reactFabricImage,
649+
reactFabricInputAccessory,
650+
reactFabricModal,
651+
reactFabricSafeAreaView,
652+
reactFabricSwitch,
653+
reactFabricTextLayoutManager,
654+
reactFabricText,
655+
reactFabricTextInput,
656+
reactFabricUnimplementedView,
598657
reactNativeDependencies,
599658
hermesPrebuilt,
600659
reactJsiTooling,
@@ -762,12 +821,20 @@ extension String {
762821
static let reactJsInspector = "React-jsinspector"
763822
static let reactJsInspectorTracing = "React-jsinspectortracing"
764823
static let reactCxxReact = "React-cxxreact"
765-
static let reactCore = "React-Core"
766-
static let reactCoreRCTWebsocket = "React-Core/RCTWebSocket"
824+
static let reactCore = "React"
825+
static let reactCoreRCTWebsocket = "React/RCTWebSocket"
767826
static let reactFabric = "React-Fabric"
768827
static let reactRCTFabric = "React-RCTFabric"
769-
static let reactFabricComponents = "React-FabricComponents"
828+
770829
static let reactFabricImage = "React-FabricImage"
830+
static let reactFabricInputAccessory = "React-FabricInputAccessory"
831+
static let reactFabricModal = "React-FabricModal"
832+
static let reactFabricSafeAreaView = "React-FabricSafeAreaView"
833+
static let reactFabricSwitch = "React-FabricSwitch"
834+
static let reactFabricTextLayoutManager = "React-FabricTextLayoutManager"
835+
static let reactFabricText = "React-FabricText"
836+
static let reactFabricTextInput = "React-FabricTextInput"
837+
static let reactFabricUnimplementedView = "React-FabricUnimplementedView"
771838

772839
static let reactNativeDependencies = "ReactNativeDependencies"
773840

0 commit comments

Comments
 (0)